1 #include <GLES3/gl32.h>
6 #include <glm/gtc/type_ptr.hpp>
8 const char* vertShaderSrc = R"(
9 attribute vec4 vertPos;
12 gl_Position = model * vertPos;
16 const char *fragShaderSrc = R"(
18 gl_FragColor = vec4(1, 0, 1, 1);
24 extern "C" void setup() {
25 GLuint vertShader = glCreateShader(GL_VERTEX_SHADER);
26 const char* sources[1] = { vertShaderSrc };
27 const GLint lengths[1] = { (GLint)strlen(vertShaderSrc) };
28 glShaderSource(vertShader, 1, sources, lengths);
29 glCompileShader(vertShader);
31 GLuint fragShader = glCreateShader(GL_FRAGMENT_SHADER);
32 glShaderSource(fragShader, 1,
33 new const char*[1] { fragShaderSrc },
34 new const GLint[1] { (GLint)strlen(fragShaderSrc) });
35 glCompileShader(fragShader);
37 program = glCreateProgram();
38 glAttachShader(program, vertShader);
39 glAttachShader(program, fragShader);
40 glLinkProgram(program);
41 glUseProgram(program);
44 glGenBuffers(1, &vertPosBuffer);
45 glBindBuffer(GL_ARRAY_BUFFER, vertPosBuffer);
46 std::vector<float> vertPositions = {
51 glBufferData(GL_ARRAY_BUFFER, vertPositions.size(), vertPositions.data(), GL_STATIC_DRAW);
53 GLuint vertPosLoc = glGetAttribLocation(program, "vertPos");
54 glEnableVertexAttribArray(vertPosLoc);
55 glVertexAttribPointer(vertPosLoc, 3, GL_FLOAT, false, 0, 0);
58 extern "C" void update(int tick) {
59 GLuint modelLoc = glGetUniformLocation(program, "model");
60 const glm::mat4 model = glm::rotate(glm::mat4(1), (float)tick * 0.001f, glm::vec3(0, 0, 1));
61 glUniformMatrix4fv(modelLoc, 1, false, glm::value_ptr(model));