Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include "mk.h"
- #include <stdio.h>
- #include <stdlib.h>
- static GLFWwindow *Window;
- static Shader_t Shader;
- static GLuint Vao, Vbo;
- static Vertex_t Vertices[3];
- static const GLchar WORLD_SHADER_VS[] = {
- "#version 330\n"
- // per vertex:
- "in vec3 vPosition;"
- "void main() {"
- " gl_Position = vec4(vPosition + vOffset, 1.0f);"
- "}"
- };
- static const GLchar WORLD_SHADER_FS[] = {
- "#version 330\n"
- "out vec3 oColor;"
- "void main() {"
- " oColor = vec3(1.0f, 1.0f, 1.0f);"
- "}"
- };
- static GLuint CompileShader(const GLchar *source, GLenum type)
- {
- GLuint shader = glCreateShader(type);
- if (!shader) return 0;
- glShaderSource(shader, 1, &source, NULL);
- glCompileShader(shader);
- GLint success;
- glGetShaderiv(shader, GL_COMPILE_STATUS, &success);
- if (!success) {
- GLchar log[1024];
- glGetShaderInfoLog(shader, sizeof(log), NULL, log);
- fprintf(stderr, "[ERROR] CompileShader:\n%s\n", log);
- glDeleteShader(shader);
- return 0;
- }
- return shader;
- }
- void InitializeWindow(GLFWwindow *w)
- {
- Window = w;
- }
- bool InitializeShaders()
- {
- Shader.VS = CompileShader(WORLD_SHADER_VS, GL_VERTEX_SHADER);
- if (!Shader.VS) return false;
- Shader.FS = CompileShader(WORLD_SHADER_FS, GL_FRAGMENT_SHADER);
- if (!Shader.FS) return false;
- Shader.Program = glCreateProgram();
- if (!Shader.Program) return false;
- glAttachShader(Shader.Program, Shader.VS);
- glAttachShader(Shader.Program, Shader.FS);
- glLinkProgram(Shader.Program);
- glDetachShader(Shader.Program, Shader.VS);
- glDetachShader(Shader.Program, Shader.FS);
- GLint success;
- glGetProgramiv(Shader.Program, GL_LINK_STATUS, &success);
- if (!success) {
- GLchar log[1024];
- glGetProgramInfoLog(Shader.Program, sizeof(log), NULL, log);
- fprintf(stderr, "[ERROR] InitializeShaders:\n%s\n", log);
- return false;
- }
- return true;
- }
- bool InitializeMeshes()
- {
- Vertices[0].Position.x = -0.5f;
- Vertices[0].Position.y = -0.5f;
- Vertices[0].Position.z = 0.0f;
- Vertices[1].Position.x = 0.0f;
- Vertices[1].Position.y = 0.5f;
- Vertices[1].Position.z = 0.0f;
- Vertices[1].Position.x = 0.5f;
- Vertices[1].Position.y = -0.5f;
- Vertices[1].Position.z = 0.0f;
- glGenBuffers(1, &Vao);
- glBindVertexArray(Vao);
- glGenBuffers(1, &Vbo);
- glBindBuffer(GL_ARRAY_BUFFER, Vbo);
- glBufferData(Vbo, sizeof(Vertices), Vertices, GL_STATIC_DRAW);
- glEnableVertexAttribArray(0);
- glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 0, 0);
- glBindBuffer(GL_ARRAY_BUFFER, 0);
- glBindVertexArray(0);
- return true;
- }
- void RenderMeshes()
- {
- glUseProgram(Shader.Program);
- glBindVertexArray(Vao);
- glBindBuffer(GL_ARRAY_BUFFER, Vbo);
- glDrawArrays(GL_TRIANGLES, 0, 3);
- glBindBuffer(GL_ARRAY_BUFFER, 0);
- glBindVertexArray(0);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement