065ed80de76182eded8aab8c084ba78751d82050
[wasm.git] / test.cpp
1 #include <GLES3/gl32.h>
2 #include <string>
3 #include <vector>
4
5 const char* vertShaderSrc = R"(
6 attribute vec4 vertPos;
7 void main() {
8         gl_Position = vertPos;
9 }
10 )";
11
12 const char *fragShaderSrc = R"(
13 void main() {
14         gl_FragColor = vec4(1, 0, 1, 1);
15 }
16 )";
17
18 extern "C" void setup() {
19         GLuint vertShader = glCreateShader(GL_VERTEX_SHADER);
20         const char* sources[1] = { vertShaderSrc };
21         const GLint lengths[1] = { (GLint)strlen(vertShaderSrc) };
22         glShaderSource(vertShader, 1, sources, lengths);
23         glCompileShader(vertShader);
24
25         GLuint fragShader = glCreateShader(GL_FRAGMENT_SHADER);
26         glShaderSource(fragShader, 1,
27                         new const char*[1] { fragShaderSrc },
28                         new const GLint[1] { (GLint)strlen(fragShaderSrc) });
29         glCompileShader(fragShader);
30
31         GLuint program = glCreateProgram();
32         glAttachShader(program, vertShader);
33         glAttachShader(program, fragShader);
34         glLinkProgram(program);
35         glUseProgram(program);
36
37         GLuint vertPosBuffer;
38         glGenBuffers(1, &vertPosBuffer);
39         glBindBuffer(GL_ARRAY_BUFFER, vertPosBuffer);
40         std::vector<float> vertPositions = {
41                 0, 1, 0,
42                 1, -1, 0,
43                 -1, -1, 0
44         };
45         glBufferData(GL_ARRAY_BUFFER, vertPositions.size(), vertPositions.data(), GL_STATIC_DRAW);
46
47         GLuint vertPosLoc = glGetAttribLocation(program, "vertPos");
48         glEnableVertexAttribArray(vertPosLoc);
49         glVertexAttribPointer(vertPosLoc, 3, GL_FLOAT, false, 0, 0);
50 }