From 459f897ef7015621bf56bd8288e79fa3a5444dfe Mon Sep 17 00:00:00 2001 From: Ben Date: Fri, 11 Jan 2019 23:42:53 +0000 Subject: [PATCH] uniforms --- OpenGL/cube/cube.a | Bin 83568 -> 83784 bytes OpenGL/cube/shaders/simple.frag | 9 ++++--- OpenGL/cube/shaders/simple.vert | 6 ++++- OpenGL/cube/src/main.cpp | 46 +++++++++++++++++++++++++------- 4 files changed, 47 insertions(+), 14 deletions(-) diff --git a/OpenGL/cube/cube.a b/OpenGL/cube/cube.a index 7d0924430ead56d1bc111a2e41c1127182ab761d..0f82cd6220d1ddc1c9a5d6d1697c4f99f6afe020 100755 GIT binary patch literal 83784 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 literal 83568 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 diff --git a/OpenGL/cube/shaders/simple.frag b/OpenGL/cube/shaders/simple.frag index b1276f3..a2b2a00 100644 --- a/OpenGL/cube/shaders/simple.frag +++ b/OpenGL/cube/shaders/simple.frag @@ -1,7 +1,10 @@ -#version 150 core +#version 130 -out vec4 outColor; +in vec3 Colour; +out vec4 outColour; + +uniform vec3 triangleColour; void main() { - outColor = vec4(1.0, 1.0, 1.0, 1.0); + outColour = vec4(Colour, 1.0); } diff --git a/OpenGL/cube/shaders/simple.vert b/OpenGL/cube/shaders/simple.vert index ba956bb..b28dcd7 100644 --- a/OpenGL/cube/shaders/simple.vert +++ b/OpenGL/cube/shaders/simple.vert @@ -1,8 +1,12 @@ -#version 150 core +#version 130 in vec2 position; +in vec3 colour; + +out vec3 Colour; void main() { + Colour = colour; gl_Position = vec4(position, 0.0, 1.0); // Equivilent to vec4(position.x, position.y, 0.0, 1.0) } diff --git a/OpenGL/cube/src/main.cpp b/OpenGL/cube/src/main.cpp index ed6870e..176c372 100644 --- a/OpenGL/cube/src/main.cpp +++ b/OpenGL/cube/src/main.cpp @@ -3,9 +3,23 @@ #include #include #include +#include #include #include +void GLAPIENTRY MessageCallback(GLenum source, + GLenum type, + GLuint id, + GLenum severity, + GLsizei length, + const GLchar* message, + const void* userParam) { + fprintf(stderr, "GL CALLBACK: %s type = 0x%x, severity = 0x%x, message = %s\n", + (type == GL_DEBUG_TYPE_ERROR ? "** GL ERROR **" : "" ), + type, severity, message); +} + + class Game { public: SDL_Window* window = nullptr; @@ -108,13 +122,19 @@ int main(int argc, char** argv) { game->isWindowClosed = false; + // Set GL error handling callback + // glEnable(GL_DEBUG_OUTPUT); + glDebugMessageCallback(MessageCallback, 0); + + // Set GL clear colour (light blue) glClearColor(0.1f, 0.45f, 0.9f, 1.0f); - // GL Screen coordinates of a 2D triangle + // GL Screen coordinates of a 2D triangle followed by the colour + GLint numOfVerticies = 15; float vertices[] = { - 0.0f, 0.5f, // Vertex 1 (X, Y) - 0.5f, -0.5f, // Vertex 2 (X, Y) - -0.5f, -0.5f // Vertex 3 (X, Y) + 0.0f, 0.5f, 1.0f, 0.0f, 0.0f, // Vertex 1: (X, Y, R, G, B) + 0.5f, -0.5f, 0.0f, 1.0f, 0.0f, // Vertex 2: (X, Y, R, G, B) + -0.5f, -0.5f, 0.0f, 0.0f, 1.0f // Vertex 3: (X, Y, R, G, B) }; // Generate a vertex array object @@ -129,7 +149,7 @@ int main(int argc, char** argv) { // Binding buffer to GPU glBindBuffer(GL_ARRAY_BUFFER, vbo); // Copy vertex data to the vertex buffer already on the GPU - glBufferData(GL_ARRAY_BUFFER, sizeof(vertices[0]) * 6, vertices, GL_STATIC_DRAW); + glBufferData(GL_ARRAY_BUFFER, sizeof(vertices[0]) * numOfVerticies, vertices, GL_STATIC_DRAW); // Load, compile, apply and link shader programs if (!loadShader(readShader("shaders/simple.vert"), GL_VERTEX_SHADER , "simpleVert") || @@ -137,22 +157,28 @@ int main(int argc, char** argv) { return 0; } makeShaderProgram("simpleVert", "simpleFrag", "simpleProc"); - glBindFragDataLocation(ShaderPrograms["simpleProc"], 0, "outColor"); applyShader("simpleProc"); GLint posAttrib = glGetAttribLocation(ShaderPrograms["simpleProc"], "position"); - glVertexAttribPointer(posAttrib, 2, GL_FLOAT, GL_FALSE, 0, 0); glEnableVertexAttribArray(posAttrib); + glVertexAttribPointer(posAttrib, 2, GL_FLOAT, GL_FALSE, + 5*sizeof(float), 0); + + GLint colAttrib = glGetAttribLocation(ShaderPrograms["simpleProc"], "colour"); + glEnableVertexAttribArray(colAttrib); + glVertexAttribPointer(colAttrib, 3, GL_FLOAT, GL_FALSE, + 5*sizeof(float), (void*)(2*sizeof(float))); + + GLint triangleUniColour = glGetUniformLocation(ShaderPrograms["simpleProc"], "triangleColour"); + glUniform3f(triangleUniColour, 0.2f, 0.8f, 0.3f); SDL_Event event; while (!game->isWindowClosed) { // Input handling while (SDL_PollEvent(&event) != 0) - if (event.key.keysym.sym == SDLK_ESCAPE) + if (event.key.keysym.sym == SDLK_ESCAPE || event.type == SDL_QUIT) game->isWindowClosed = true; - // Render - // Clear the screen glClear(GL_COLOR_BUFFER_BIT); // Draw a triangle from the 3 vertices