diff --git a/data/shaders/sprite.frag.glsl b/data/shaders/sprite.frag.glsl index 23d71ca..21e091c 100644 --- a/data/shaders/sprite.frag.glsl +++ b/data/shaders/sprite.frag.glsl @@ -3,9 +3,9 @@ in vec2 texCoord; out vec4 color; -uniform sampler2D texture; +uniform sampler2D tex; void main() { - color = texture(texture, texCoord); + color = texture(tex, texCoord); } diff --git a/src/Shader.cpp b/src/Shader.cpp index 21ae18f..462bfd0 100644 --- a/src/Shader.cpp +++ b/src/Shader.cpp @@ -6,7 +6,7 @@ namespace Dengine { Shader::Shader() -: mProgram(0) +: program(0) { } @@ -14,20 +14,20 @@ Shader::~Shader() {} i32 Shader::loadProgram(GLuint vertexShader, GLuint fragmentShader) { - mProgram = glCreateProgram(); - glAttachShader(mProgram, vertexShader); - glAttachShader(mProgram, fragmentShader); - glLinkProgram(mProgram); + this->program = glCreateProgram(); + glAttachShader(this->program, vertexShader); + glAttachShader(this->program, fragmentShader); + glLinkProgram(this->program); glDeleteShader(fragmentShader); glDeleteShader(vertexShader); GLint success; GLchar infoLog[512]; - glGetProgramiv(mProgram, GL_LINK_STATUS, &success); + glGetProgramiv(this->program, GL_LINK_STATUS, &success); if (!success) { - glGetProgramInfoLog(mProgram, 512, NULL, infoLog); + glGetProgramInfoLog(this->program, 512, NULL, infoLog); std::cout << "glLinkProgram failed: " << infoLog << std::endl; return -1; } @@ -36,5 +36,5 @@ i32 Shader::loadProgram(GLuint vertexShader, GLuint fragmentShader) } -void Shader::use() { glUseProgram(mProgram); } +void Shader::use() { glUseProgram(this->program); } } diff --git a/src/Sprite.cpp b/src/Sprite.cpp index 9f06b56..5d6ea6d 100644 --- a/src/Sprite.cpp +++ b/src/Sprite.cpp @@ -5,8 +5,8 @@ namespace Dengine { Sprite::Sprite() -: mPos(0, 0), -mTex(nullptr) +: pos(0, 0), +tex(nullptr) { } @@ -16,8 +16,8 @@ b32 Sprite::loadSprite(Texture *tex, glm::vec2 pos) { if (!tex) return -1; - mTex = tex; - mPos = pos; + this->tex = tex; + this->pos = pos; // NOTE(doyle): We encode in a vec4 (vec2)pos, (vec2)texCoords glm::vec4 spriteVertex[] = { @@ -28,21 +28,17 @@ b32 Sprite::loadSprite(Texture *tex, glm::vec2 pos) {-0.5f, -0.5f, 0.0f, 0.0f}, // Bottom left }; - glGenBuffers(1, &mVbo); - glBindBuffer(GL_ARRAY_BUFFER, mVbo); + /* Create and bind buffers */ + glGenBuffers(1, &this->vbo); + glGenVertexArrays(1, &this->vao); + glBindVertexArray(this->vao); + glBindBuffer(GL_ARRAY_BUFFER, this->vbo); + + /* Configure VBO */ glBufferData(GL_ARRAY_BUFFER, sizeof(spriteVertex), spriteVertex, GL_DYNAMIC_DRAW); - glBindBuffer(GL_ARRAY_BUFFER, 0); - - return 0; -} - -void Sprite::initVertexArrayObject(GLuint vao) -{ - // NOTE(doyle): Set the VAO object attributes to match a sprite's - // vertex composition - glBindVertexArray(vao); + /* Configure VAO */ i32 numElementsInVertex = 4; i32 vertexSize = sizeof(glm::vec4); glEnableVertexAttribArray(0); @@ -50,26 +46,26 @@ void Sprite::initVertexArrayObject(GLuint vao) vertexSize, (GLvoid *)(0)); /* Unbind */ + glBindBuffer(GL_ARRAY_BUFFER, 0); glBindVertexArray(0); + return 0; } -void Sprite::render(Shader *shader, GLuint spriteVAO) +void Sprite::render(Shader *shader) { // NOTE(doyle): Associate the VAO with this sprites VBO - glBindVertexArray(spriteVAO); - glBindBuffer(GL_ARRAY_BUFFER, mVbo); + glBindVertexArray(this->vao); /* Set texture */ glActiveTexture(GL_TEXTURE0); - mTex->bind(); - glUniform1i(glGetUniformLocation(shader->mProgram, "texture"), 0); + this->tex->bind(); + glUniform1i(glGetUniformLocation(shader->program, "tex"), 0); /* Render */ glDrawArrays(GL_TRIANGLE_STRIP, 0, 4); // Unbind - glBindBuffer(GL_ARRAY_BUFFER, 0); glBindVertexArray(0); } diff --git a/src/dengine.cpp b/src/dengine.cpp index 820bbc6..d183d84 100644 --- a/src/dengine.cpp +++ b/src/dengine.cpp @@ -151,23 +151,21 @@ int main() "wall"); if (result) return result; - result = assetManager.loadTextureImage("data/textures/awesomeface.png" - , "awesomeface"); + result = assetManager.loadTextureImage("data/textures/awesomeface.png", + "awesomeface"); if (result) return result; Dengine::Texture *containerTex = assetManager.getTexture("container"); - Dengine::Texture *wallTex = assetManager.getTexture("wall"); + Dengine::Texture *wallTex = assetManager.getTexture("wall"); + Dengine::Texture *awesomeTex = assetManager.getTexture("awesomeface"); + Dengine::Shader *shader = assetManager.getShader("sprite"); - Dengine::Texture *awesomeTex = assetManager.getTexture("awesomeface"); f32 deltaTime = 0.0f; // Time between current frame and last frame f32 lastFrame = 0.0f; // Time of last frame - GLuint spriteVao; - glGenVertexArrays(1, &spriteVao); Dengine::Sprite sprite = Dengine::Sprite(); - sprite.loadSprite(awesomeTex, glm::vec2(0, 0)); - sprite.initVertexArrayObject(spriteVao); + sprite.loadSprite(wallTex, glm::vec2(0, 0)); /* Main game loop */ while (!glfwWindowShouldClose(window)) @@ -189,7 +187,7 @@ int main() shader->use(); game.render(); - sprite.render(shader, spriteVao); + sprite.render(shader); /* Swap the buffers */ glfwSwapBuffers(window); diff --git a/src/include/Dengine/Shader.h b/src/include/Dengine/Shader.h index 10d30f1..0e310e3 100644 --- a/src/include/Dengine/Shader.h +++ b/src/include/Dengine/Shader.h @@ -10,7 +10,7 @@ namespace Dengine class Shader { public: - GLuint mProgram; + GLuint program; Shader(); ~Shader(); diff --git a/src/include/Dengine/Sprite.h b/src/include/Dengine/Sprite.h index d3498c9..d635571 100644 --- a/src/include/Dengine/Sprite.h +++ b/src/include/Dengine/Sprite.h @@ -15,12 +15,12 @@ public: b32 loadSprite(Texture *tex, glm::vec2 pos); - void initVertexArrayObject(GLuint vao); - void render(Shader *shader, GLuint shaderVao); + void render(Shader *shader); private: - glm::vec2 mPos; - Texture *mTex; - GLuint mVbo; + glm::vec2 pos; + Texture *tex; + GLuint vbo; + GLuint vao; }; }