X-Git-Url: http://git.lukelau.me/?p=wasm.git;a=blobdiff_plain;f=test.cpp;fp=test.cpp;h=065ed80de76182eded8aab8c084ba78751d82050;hp=d59323af877cb9a5b084d770b824e96d3a05d51a;hb=54f82247de6f51a7e30a935d3a533745691bcbb6;hpb=aed1f5271c857c3afa085c593d2ca6159770395c diff --git a/test.cpp b/test.cpp index d59323a..065ed80 100644 --- a/test.cpp +++ b/test.cpp @@ -1,5 +1,6 @@ -#include +#include #include +#include const char* vertShaderSrc = R"( attribute vec4 vertPos; @@ -8,11 +9,42 @@ const char* vertShaderSrc = R"( } )"; -extern "C" int foo() { +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); - return 0; + + 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 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); }