Hello WebGL!
[wasm.git] / test.cpp
index da73b69c05fe49a1f81455ed5ba2360eb15bdf94..065ed80de76182eded8aab8c084ba78751d82050 100644 (file)
--- a/test.cpp
+++ b/test.cpp
@@ -1,6 +1,50 @@
+#include <GLES3/gl32.h>
+#include <string>
 #include <vector>
-extern "C" int foo() {
-       std::vector<int> *xs = new std::vector<int>();
-       xs->push_back(42);
-       return (*xs)[0];
+
+const char* vertShaderSrc = R"(
+attribute vec4 vertPos;
+void main() {
+       gl_Position = vertPos;
+}
+)";
+
+const char *fragShaderSrc = R"(
+void main() {
+       gl_FragColor = vec4(1, 0, 1, 1);
+}
+)";
+
+extern "C" void setup() {
+       GLuint vertShader = glCreateShader(GL_VERTEX_SHADER);
+       const char* sources[1] = { vertShaderSrc };
+       const GLint lengths[1] = { (GLint)strlen(vertShaderSrc) };
+       glShaderSource(vertShader, 1, sources, lengths);
+       glCompileShader(vertShader);
+
+       GLuint fragShader = glCreateShader(GL_FRAGMENT_SHADER);
+       glShaderSource(fragShader, 1,
+                       new const char*[1] { fragShaderSrc },
+                       new const GLint[1] { (GLint)strlen(fragShaderSrc) });
+       glCompileShader(fragShader);
+
+       GLuint program = glCreateProgram();
+       glAttachShader(program, vertShader);
+       glAttachShader(program, fragShader);
+       glLinkProgram(program);
+       glUseProgram(program);
+
+       GLuint vertPosBuffer;
+       glGenBuffers(1, &vertPosBuffer);
+       glBindBuffer(GL_ARRAY_BUFFER, vertPosBuffer);
+       std::vector<float> vertPositions = {
+               0, 1, 0,
+               1, -1, 0,
+               -1, -1, 0
+       };
+       glBufferData(GL_ARRAY_BUFFER, vertPositions.size(), vertPositions.data(), GL_STATIC_DRAW);
+
+       GLuint vertPosLoc = glGetAttribLocation(program, "vertPos");
+       glEnableVertexAttribArray(vertPosLoc);
+       glVertexAttribPointer(vertPosLoc, 3, GL_FLOAT, false, 0, 0);
 }