From 0e7bb764a6d8c20c9c2f0a40df0bf6c947c08add Mon Sep 17 00:00:00 2001 From: Warwick Date: Tue, 2 Mar 2021 17:25:37 +0000 Subject: [PATCH] First version of glsl file reader is in --- src/Error.cpp | 4 ++-- src/fragment.glsl | 6 ++++++ src/main.cpp | 52 ++++++++++++++++++++++++++++++----------------- src/vertex.glsl | 6 ++++++ 4 files changed, 47 insertions(+), 21 deletions(-) create mode 100644 src/fragment.glsl create mode 100644 src/vertex.glsl diff --git a/src/Error.cpp b/src/Error.cpp index f01df3e..789b296 100644 --- a/src/Error.cpp +++ b/src/Error.cpp @@ -3,11 +3,11 @@ Error::Error(std::string location) { object = location; } void Error::crash(std::string msg) { log("Error: " + msg); - throw object + ": \n" + msg; + throw std::string(object + ": \n" + msg); } void Error::crash(std::string reason, std::string msg) { log("Error: " + reason + ": \n" + msg); - throw object + ": \n" + reason + ": \n" + msg; + throw std::string(object + ": \n" + reason + ": \n" + msg); } void Error::warn(std::string msg) { log("Warining: " + msg); diff --git a/src/fragment.glsl b/src/fragment.glsl new file mode 100644 index 0000000..f88127f --- /dev/null +++ b/src/fragment.glsl @@ -0,0 +1,6 @@ +#version 330 core +out vec4 FragColor; +void main() +{ + FragColor = vec4(1.0f, 0.5f, 0.2f, 1.0f); +} diff --git a/src/main.cpp b/src/main.cpp index e34a33d..1cc6843 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -1,19 +1,3 @@ -// TODO: Stop this fuckery -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"; -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"; - // Include Config header generated by GNU autotools #include "../config.h" #include @@ -21,11 +5,34 @@ const char *fragmentShaderSource = #include #include #include +// File reader +#include +#include // Include error class #include "Error.h" Error error("main"); +// Create method of retrieving GLSL shaders from file +std::string readFile(const char *filepath) { + std::string content; + std::ifstream fileStream(filepath, std::ios::in); + + if (!fileStream.is_open()) { + error.log("Error could not read file: " + + std::string(filepath, sizeof(filepath))); + return nullptr; + } + std::string line = ""; + while (!fileStream.eof()) { + std::getline(fileStream, line); + content.append(line + "\n"); + } + + fileStream.close(); + return content; +} + int main(int argc, char **argv) { // Initialise SDL2 if (SDL_Init(SDL_INIT_EVERYTHING) != 0) { @@ -110,11 +117,18 @@ int main(int argc, char **argv) { glBufferData(GL_ELEMENT_ARRAY_BUFFER, sizeof(indices), indices, GL_STATIC_DRAW); + // Get Vertex shader src + // https://badvertex.com/2012/11/20/how-to-load-a-glsl-shader-in-opengl-using-c.html + std::string vertShaderStr = readFile("vertex.glsl"); + const char *vertShaderSrc = vertShaderStr.c_str(); + std::string fragShaderStr = readFile("fragment.glsl"); + const char *fragShaderSrc = fragShaderStr.c_str(); + // create vertex shader unsigned int vertexShader; vertexShader = glCreateShader(GL_VERTEX_SHADER); // compile vertex shader - glShaderSource(vertexShader, 1, &vertexShaderSource, NULL); + glShaderSource(vertexShader, 1, &vertShaderSrc, NULL); glCompileShader(vertexShader); // TODO: test the shader was compiled // https://learnopengl.com/Getting-started/Hello-Triangle @@ -130,13 +144,13 @@ int main(int argc, char **argv) { unsigned int fragmentShader; fragmentShader = glCreateShader(GL_FRAGMENT_SHADER); // compile fragment shader - glShaderSource(fragmentShader, 1, &fragmentShaderSource, NULL); + glShaderSource(fragmentShader, 1, &fragShaderSrc, NULL); glCompileShader(fragmentShader); // TODO: test the shader was compiled // https://learnopengl.com/Getting-started/Hello-Triangle glGetShaderiv(fragmentShader, GL_COMPILE_STATUS, &success); if (!success) { - glGetShaderInfoLog(vertexShader, 512, NULL, infoLog); + glGetShaderInfoLog(fragmentShader, 512, NULL, infoLog); error.crash("fragment shader compilation failed", infoLog); } diff --git a/src/vertex.glsl b/src/vertex.glsl new file mode 100644 index 0000000..9b99d7f --- /dev/null +++ b/src/vertex.glsl @@ -0,0 +1,6 @@ +#version 330 core +layout (location = 0) in vec3 aPos; +void main() +{ + gl_Position = vec4(aPos.x, aPos.y, aPos.z, 1.0); +};