First version of glsl file reader is in
This commit is contained in:
parent
ca30e9b0a7
commit
0e7bb764a6
4 changed files with 47 additions and 21 deletions
|
|
@ -3,11 +3,11 @@
|
||||||
Error::Error(std::string location) { object = location; }
|
Error::Error(std::string location) { object = location; }
|
||||||
void Error::crash(std::string msg) {
|
void Error::crash(std::string msg) {
|
||||||
log("Error: " + msg);
|
log("Error: " + msg);
|
||||||
throw object + ": \n" + msg;
|
throw std::string(object + ": \n" + msg);
|
||||||
}
|
}
|
||||||
void Error::crash(std::string reason, std::string msg) {
|
void Error::crash(std::string reason, std::string msg) {
|
||||||
log("Error: " + reason + ": \n" + 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) {
|
void Error::warn(std::string msg) {
|
||||||
log("Warining: " + msg);
|
log("Warining: " + msg);
|
||||||
|
|
|
||||||
6
src/fragment.glsl
Normal file
6
src/fragment.glsl
Normal file
|
|
@ -0,0 +1,6 @@
|
||||||
|
#version 330 core
|
||||||
|
out vec4 FragColor;
|
||||||
|
void main()
|
||||||
|
{
|
||||||
|
FragColor = vec4(1.0f, 0.5f, 0.2f, 1.0f);
|
||||||
|
}
|
||||||
52
src/main.cpp
52
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 header generated by GNU autotools
|
||||||
#include "../config.h"
|
#include "../config.h"
|
||||||
#include <GL/glew.h>
|
#include <GL/glew.h>
|
||||||
|
|
@ -21,11 +5,34 @@ const char *fragmentShaderSource =
|
||||||
#include <GL/gl.h>
|
#include <GL/gl.h>
|
||||||
#include <SDL2/SDL.h>
|
#include <SDL2/SDL.h>
|
||||||
#include <SDL2/SDL_opengl.h>
|
#include <SDL2/SDL_opengl.h>
|
||||||
|
// File reader
|
||||||
|
#include <fstream>
|
||||||
|
#include <iostream>
|
||||||
|
|
||||||
// Include error class
|
// Include error class
|
||||||
#include "Error.h"
|
#include "Error.h"
|
||||||
Error error("main");
|
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) {
|
int main(int argc, char **argv) {
|
||||||
// Initialise SDL2
|
// Initialise SDL2
|
||||||
if (SDL_Init(SDL_INIT_EVERYTHING) != 0) {
|
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,
|
glBufferData(GL_ELEMENT_ARRAY_BUFFER, sizeof(indices), indices,
|
||||||
GL_STATIC_DRAW);
|
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
|
// create vertex shader
|
||||||
unsigned int vertexShader;
|
unsigned int vertexShader;
|
||||||
vertexShader = glCreateShader(GL_VERTEX_SHADER);
|
vertexShader = glCreateShader(GL_VERTEX_SHADER);
|
||||||
// compile vertex shader
|
// compile vertex shader
|
||||||
glShaderSource(vertexShader, 1, &vertexShaderSource, NULL);
|
glShaderSource(vertexShader, 1, &vertShaderSrc, NULL);
|
||||||
glCompileShader(vertexShader);
|
glCompileShader(vertexShader);
|
||||||
// TODO: test the shader was compiled
|
// TODO: test the shader was compiled
|
||||||
// https://learnopengl.com/Getting-started/Hello-Triangle
|
// https://learnopengl.com/Getting-started/Hello-Triangle
|
||||||
|
|
@ -130,13 +144,13 @@ int main(int argc, char **argv) {
|
||||||
unsigned int fragmentShader;
|
unsigned int fragmentShader;
|
||||||
fragmentShader = glCreateShader(GL_FRAGMENT_SHADER);
|
fragmentShader = glCreateShader(GL_FRAGMENT_SHADER);
|
||||||
// compile fragment shader
|
// compile fragment shader
|
||||||
glShaderSource(fragmentShader, 1, &fragmentShaderSource, NULL);
|
glShaderSource(fragmentShader, 1, &fragShaderSrc, NULL);
|
||||||
glCompileShader(fragmentShader);
|
glCompileShader(fragmentShader);
|
||||||
// TODO: test the shader was compiled
|
// TODO: test the shader was compiled
|
||||||
// https://learnopengl.com/Getting-started/Hello-Triangle
|
// https://learnopengl.com/Getting-started/Hello-Triangle
|
||||||
glGetShaderiv(fragmentShader, GL_COMPILE_STATUS, &success);
|
glGetShaderiv(fragmentShader, GL_COMPILE_STATUS, &success);
|
||||||
if (!success) {
|
if (!success) {
|
||||||
glGetShaderInfoLog(vertexShader, 512, NULL, infoLog);
|
glGetShaderInfoLog(fragmentShader, 512, NULL, infoLog);
|
||||||
error.crash("fragment shader compilation failed", infoLog);
|
error.crash("fragment shader compilation failed", infoLog);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
6
src/vertex.glsl
Normal file
6
src/vertex.glsl
Normal 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);
|
||||||
|
};
|
||||||
Loading…
Reference in a new issue