#include "core/renderer.h" #include "core/window.h" #include "internal/utils.h" #include #include #include #include #include GLuint load_shader(const char *code, uint type) { int success; char infoLog[512]; GLuint shader = glCreateShader(type); glShaderSource(shader, 1, &code, NULL); glCompileShader(shader); glGetShaderiv(shader, GL_COMPILE_STATUS, &success); if (!success) { glGetShaderInfoLog(shader, 512, NULL, infoLog); printf("Shader compilation failed: %s\n", infoLog); } return shader; } struct ruim_rendererGLES RuimSetupGLES(void) { int success; char infoLog[512]; struct ruim_rendererGLES renderer; float vertices[] = {-0.5f, -0.5f, 0.0f, 0.5f, -0.5f, 0.0f, 0.0f, 0.5f, 0.0f}; GLuint vertexShdr = load_shader("#version 300 es\n" "layout (location = 0) in vec3 aPos;\n" "void main()\n" "{\n" "gl_Position = vec4(aPos.x, aPos.y, aPos.z, 1.0);\n" "}\0", GL_VERTEX_SHADER); GLuint fragmentShdr = load_shader("#version 300 es\n" "precision mediump float;\n" "out vec4 FragColor;\n" "void main()\n" "{\n" "FragColor = vec4(1.0, 0.5, 0.2, 1.0);\n" "}\0", GL_FRAGMENT_SHADER); glGenBuffers(1, &renderer.VBO); glGenVertexArrays(1, &renderer.VAO); renderer.shaderProgram = glCreateProgram(); glAttachShader(renderer.shaderProgram, vertexShdr); glAttachShader(renderer.shaderProgram, fragmentShdr); glLinkProgram(renderer.shaderProgram); glGetProgramiv(renderer.shaderProgram, GL_LINK_STATUS, &success); if (!success) { glGetProgramInfoLog(renderer.shaderProgram, 512, NULL, infoLog); printf("Program linking failed: %s\n", infoLog); } glDeleteShader(vertexShdr); glDeleteShader(fragmentShdr); glBindVertexArray(renderer.VAO); glBindBuffer(GL_ARRAY_BUFFER, renderer.VBO); glBufferData(GL_ARRAY_BUFFER, sizeof(vertices), vertices, GL_STATIC_DRAW); glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 3 * sizeof(float), (void *)0); glEnableVertexAttribArray(0); glBindVertexArray(0); return renderer; } void RuimResizeGLES(struct ruim_rendererGLES *renderer, int width, int height) { glViewport(0, 0, width, height); } void RuimRenderGLES(struct ruim_rendererGLES *renderer) { glClearColor(0.2f, 0.3f, 0.3f, 1.0f); glClear(GL_COLOR_BUFFER_BIT); glUseProgram(renderer->shaderProgram); glBindVertexArray(renderer->VAO); glDrawArrays(GL_TRIANGLES, 0, 3); }