First version of glsl file reader is in

This commit is contained in:
Warwick 2021-03-02 17:25:37 +00:00
parent ca30e9b0a7
commit 0e7bb764a6
4 changed files with 47 additions and 21 deletions

View file

@ -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);

6
src/fragment.glsl Normal file
View file

@ -0,0 +1,6 @@
#version 330 core
out vec4 FragColor;
void main()
{
FragColor = vec4(1.0f, 0.5f, 0.2f, 1.0f);
}

View file

@ -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 <GL/glew.h>
@ -21,11 +5,34 @@ const char *fragmentShaderSource =
#include <GL/gl.h>
#include <SDL2/SDL.h>
#include <SDL2/SDL_opengl.h>
// File reader
#include <fstream>
#include <iostream>
// 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);
}

6
src/vertex.glsl Normal file
View file

@ -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);
};