#include #include #include #include vec2 frameSize = {100, 100}; mg_surface surface; unsigned int program; const char* vshaderSource = "attribute vec4 vPosition;\n" "uniform mat4 transform;\n" "void main()\n" "{\n" " gl_Position = transform*vPosition;\n" "}\n"; const char* fshaderSource = "precision mediump float;\n" "void main()\n" "{\n" " gl_FragColor = vec4(1.0, 0.0, 0.0, 1.0);\n" "}\n"; void compile_shader(GLuint shader, const char* source) { glShaderSource(shader, 1, &source, 0); glCompileShader(shader); int err = glGetError(); if(err) { log_info("gl error"); } } ORCA_EXPORT void OnInit(void) { surface = mg_surface_gles(); mg_surface_prepare(surface); unsigned int vshader = glCreateShader(GL_VERTEX_SHADER); unsigned int fshader = glCreateShader(GL_FRAGMENT_SHADER); program = glCreateProgram(); compile_shader(vshader, vshaderSource); compile_shader(fshader, fshaderSource); glAttachShader(program, vshader); glAttachShader(program, fshader); glLinkProgram(program); glUseProgram(program); } ORCA_EXPORT void OnFrameResize(u32 width, u32 height) { log_info("frame resize %u, %u", width, height); frameSize.x = width; frameSize.y = height; } ORCA_EXPORT void OnFrameRefresh(void) { f32 aspect = frameSize.x/frameSize.y; mg_surface_prepare(surface); glClearColor(0, 1, 1, 1); glClear(GL_COLOR_BUFFER_BIT); static float alpha = 0; glViewport(0, 0, frameSize.x * 2, frameSize.y * 2); GLfloat matrix[] = {cosf(alpha)/aspect, sinf(alpha), 0, 0, -sinf(alpha)/aspect, cosf(alpha), 0, 0, 0, 0, 1, 0, 0, 0, 0, 1}; alpha += 2*M_PI/120; glUniformMatrix4fv(0, 1, false, matrix); GLfloat vertices[] = { -0.866/2, -0.5/2, 0, 0.866/2, -0.5/2, 0, 0, 0.5, 0}; glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 0, vertices); glEnableVertexAttribArray(0); glDrawArrays(GL_TRIANGLES, 0, 3); mg_surface_present(surface); }