From 34c5a0d140dec8e0ba6d78dae1a73f289548d9f5 Mon Sep 17 00:00:00 2001 From: Samuel Walker Date: Mon, 2 Sep 2024 10:04:57 -0600 Subject: [PATCH] Moved Renderer code to new file --- src/Renderer.cpp | 81 ++++++++++++++++++++++++++++++++++++++++++++++++ src/Renderer.h | 7 +++++ src/main.cpp | 79 ++++------------------------------------------ 3 files changed, 94 insertions(+), 73 deletions(-) create mode 100644 src/Renderer.cpp create mode 100644 src/Renderer.h diff --git a/src/Renderer.cpp b/src/Renderer.cpp new file mode 100644 index 0000000..a0ae4ba --- /dev/null +++ b/src/Renderer.cpp @@ -0,0 +1,81 @@ +#include "Renderer.h" +#include +#include +#include + +void Renderer::InitRenderer(){ + float vertices[] = { + -0.5f, -0.5f, 0.0f, + 0.5f, -0.5f, 0.0f, + 0.0f, 0.5f, 0.0f + }; + glGenVertexArrays(1, &VAO); + glBindVertexArray(VAO); + glGenBuffers(1, &VBO); + glBindBuffer(GL_ARRAY_BUFFER, VBO); + glBufferData(GL_ARRAY_BUFFER, sizeof(vertices), vertices, GL_STATIC_DRAW); + std::ifstream vertexShaderFile ("res/shaders/vertex.glsl"); + std::string vertexShaderSource((std::istreambuf_iterator(vertexShaderFile)), std::istreambuf_iterator()); + unsigned int vertexShader; + vertexShader = glCreateShader(GL_VERTEX_SHADER); + const char *vertexShaderSourcePtr = vertexShaderSource.c_str(); + glShaderSource(vertexShader, 1, &vertexShaderSourcePtr, NULL); + glCompileShader(vertexShader); + int success; + char infoLog[512]; + glGetShaderiv(vertexShader, GL_COMPILE_STATUS, &success); + + if(!success) + { + glGetShaderInfoLog(vertexShader, 512, NULL, infoLog); + std::cout << "ERROR::SHADER::VERTEX::COMPILATION_FAILED\n" << infoLog << std::endl; + } + + + std::ifstream fragmentShaderFile ("res/shaders/fragment.glsl"); + std::string fragmentShaderSource((std::istreambuf_iterator(fragmentShaderFile)), std::istreambuf_iterator()); + unsigned int fragmentShader; + fragmentShader = glCreateShader(GL_FRAGMENT_SHADER); + const char *fragmentShaderSourcePtr = fragmentShaderSource.c_str(); + glShaderSource(fragmentShader, 1, &fragmentShaderSourcePtr, NULL); + glCompileShader(fragmentShader); + glGetShaderiv(fragmentShader, GL_COMPILE_STATUS, &success); + + if(!success) + { + glGetShaderInfoLog(fragmentShader, 512, NULL, infoLog); + std::cout << "ERROR::SHADER::FRAGMENT::COMPILATION_FAILED\n" << infoLog << std::endl; + } + shaderProgram = glCreateProgram(); + + glAttachShader(shaderProgram, vertexShader); + glAttachShader(shaderProgram, fragmentShader); + glLinkProgram(shaderProgram); + glGetProgramiv(shaderProgram, GL_LINK_STATUS, &success); + if(!success) { + glGetProgramInfoLog(shaderProgram, 512, NULL, infoLog); + std::cout << "ERROR::SHADER::PROGRAM::LINK_FAILED\n" << infoLog << std::endl; + } + glUseProgram(shaderProgram); + glDeleteShader(vertexShader); + glDeleteShader(fragmentShader); + glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 3 * sizeof(float), (void*)0); + glEnableVertexAttribArray(0); +} + +void Renderer::StartFrame(){ + glClear(GL_COLOR_BUFFER_BIT); +} + +void Renderer::DrawTriangle(){ + glBindVertexArray(VAO); + glBindBuffer(GL_ARRAY_BUFFER, VBO); + glUseProgram(shaderProgram); + glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 3 * sizeof(float), (void*)0); + glEnableVertexAttribArray(0); + glDrawArrays(GL_TRIANGLES, 0, 3); +} + +void Renderer::EndFrame(){ + +} \ No newline at end of file diff --git a/src/Renderer.h b/src/Renderer.h new file mode 100644 index 0000000..8fdd2c0 --- /dev/null +++ b/src/Renderer.h @@ -0,0 +1,7 @@ +namespace Renderer { + static unsigned int VAO, VBO, shaderProgram; + void InitRenderer(); + void StartFrame(); + void DrawTriangle(); + void EndFrame(); +} \ No newline at end of file diff --git a/src/main.cpp b/src/main.cpp index d0e3605..2024702 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -1,9 +1,11 @@ #include +#include #include "RaycasterConfig.h" #define GLAD_GL_IMPLEMENTATION #include #define GLFW_INCLUDE_NONE #include +#include "Renderer.h" int main(int argc, char *argv[]){ std::cout << Raycaster_VERSION_MAJOR << "." << Raycaster_VERSION_MINOR << std::endl; @@ -19,80 +21,11 @@ int main(int argc, char *argv[]){ glfwMakeContextCurrent(window); gladLoadGL(); glViewport(0, 0, 640, 480); + Renderer::InitRenderer(); while(!glfwWindowShouldClose(window)){ - glClear(GL_COLOR_BUFFER_BIT); - float vertices[] = { - -0.5f, -0.5f, 0.0f, - 0.5f, -0.5f, 0.0f, - 0.0f, 0.5f, 0.0f - }; - unsigned int VBO; - unsigned int VAO; - glGenVertexArrays(1, &VAO); - glBindVertexArray(VAO); - glGenBuffers(1, &VBO); - glBindBuffer(GL_ARRAY_BUFFER, VBO); - glBufferData(GL_ARRAY_BUFFER, sizeof(vertices), vertices, GL_STATIC_DRAW); - - const char *vertexShaderSource = "#version 330 core\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"; - unsigned int vertexShader; - vertexShader = glCreateShader(GL_VERTEX_SHADER); - glShaderSource(vertexShader, 1, &vertexShaderSource, NULL); - glCompileShader(vertexShader); - int success; - char infoLog[512]; - glGetShaderiv(vertexShader, GL_COMPILE_STATUS, &success); - - if(!success) - { - glGetShaderInfoLog(vertexShader, 512, NULL, infoLog); - std::cout << "ERROR::SHADER::VERTEX::COMPILATION_FAILED\n" << infoLog << std::endl; - } - - - const char *fragmentShaderSource = "#version 330 core\n" - "out vec4 FragColor;\n" - "void main()\n" - "{\n" - " FragColor = vec4(1.0f, 0.5f, 0.2f, 1.0f);\n" - "} \0"; - - unsigned int fragmentShader; - fragmentShader = glCreateShader(GL_FRAGMENT_SHADER); - glShaderSource(fragmentShader, 1, &fragmentShaderSource, NULL); - glCompileShader(fragmentShader); - glGetShaderiv(fragmentShader, GL_COMPILE_STATUS, &success); - - if(!success) - { - glGetShaderInfoLog(fragmentShader, 512, NULL, infoLog); - std::cout << "ERROR::SHADER::FRAGMENT::COMPILATION_FAILED\n" << infoLog << std::endl; - } - - unsigned int shaderProgram; - shaderProgram = glCreateProgram(); - - glAttachShader(shaderProgram, vertexShader); - glAttachShader(shaderProgram, fragmentShader); - glLinkProgram(shaderProgram); - glGetProgramiv(shaderProgram, GL_LINK_STATUS, &success); - if(!success) { - glGetProgramInfoLog(shaderProgram, 512, NULL, infoLog); - std::cout << "ERROR::SHADER::PROGRAM::LINK_FAILED\n" << infoLog << std::endl; - } - glUseProgram(shaderProgram); - glDeleteShader(vertexShader); - glDeleteShader(fragmentShader); - glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 3 * sizeof(float), (void*)0); - glEnableVertexAttribArray(0); - - glDrawArrays(GL_TRIANGLES, 0, 3); - + Renderer::StartFrame(); + Renderer::DrawTriangle(); + Renderer::EndFrame(); glfwPollEvents(); glfwSwapBuffers(window); }