This commit is contained in:
Ben
2019-02-17 02:06:47 +00:00
parent 06019cc13e
commit d39f5a4884
14 changed files with 262 additions and 58 deletions

Binary file not shown.

After

Width:  |  Height:  |  Size: 463 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 349 KiB

After

Width:  |  Height:  |  Size: 608 KiB

View File

@@ -32,11 +32,29 @@ map
Windows.h Windows.h
- -
/home/ben/Programming/Languages/Examples/OpenGL/playground/src/object.cpp /home/ben/Programming/Languages/Examples/OpenGL/playground/src/main.cpp
chrono
-
vector
-
glad/glad.h
-
SDL.h
-
SDL2/SDL.h
-
glm/glm.hpp
-
glm/gtc/matrix_transform.hpp
-
glm/gtc/type_ptr.hpp
-
logger.h
-
timers.h
/home/ben/Programming/Languages/Examples/OpenGL/playground/src/timers.h
object.h object.h
/home/ben/Programming/Languages/Examples/OpenGL/playground/src/object.h /home/ben/Programming/Languages/Examples/OpenGL/playground/src/object.h
fstream
-
/home/ben/Programming/Languages/Examples/OpenGL/playground/src/object.h /home/ben/Programming/Languages/Examples/OpenGL/playground/src/object.h
vector vector
@@ -56,3 +74,13 @@ glm/gtc/type_ptr.hpp
logger.h logger.h
- -
/home/ben/Programming/Languages/Examples/OpenGL/playground/src/timers.h
chrono
-
SDL.h
-
SDL2/SDL.h
-
logger.h
-

View File

@@ -9,7 +9,6 @@ CMakeFiles/output.dir/src/main.cpp.o
./include/KHR/khrplatform.h ./include/KHR/khrplatform.h
./include/glad/glad.h ./include/glad/glad.h
./include/logger.h ./include/logger.h
/home/ben/Programming/Languages/Examples/OpenGL/playground/src/init.h
/home/ben/Programming/Languages/Examples/OpenGL/playground/src/main.cpp /home/ben/Programming/Languages/Examples/OpenGL/playground/src/main.cpp
/home/ben/Programming/Languages/Examples/OpenGL/playground/src/object.h /home/ben/Programming/Languages/Examples/OpenGL/playground/src/object.h
/home/ben/Programming/Languages/Examples/OpenGL/playground/src/timers.h /home/ben/Programming/Languages/Examples/OpenGL/playground/src/timers.h

View File

@@ -8,7 +8,6 @@ CMakeFiles/output.dir/src/glad.c.o: src/glad.c
CMakeFiles/output.dir/src/main.cpp.o: ./include/KHR/khrplatform.h CMakeFiles/output.dir/src/main.cpp.o: ./include/KHR/khrplatform.h
CMakeFiles/output.dir/src/main.cpp.o: ./include/glad/glad.h CMakeFiles/output.dir/src/main.cpp.o: ./include/glad/glad.h
CMakeFiles/output.dir/src/main.cpp.o: ./include/logger.h CMakeFiles/output.dir/src/main.cpp.o: ./include/logger.h
CMakeFiles/output.dir/src/main.cpp.o: src/init.h
CMakeFiles/output.dir/src/main.cpp.o: src/main.cpp CMakeFiles/output.dir/src/main.cpp.o: src/main.cpp
CMakeFiles/output.dir/src/main.cpp.o: src/object.h CMakeFiles/output.dir/src/main.cpp.o: src/object.h
CMakeFiles/output.dir/src/main.cpp.o: src/timers.h CMakeFiles/output.dir/src/main.cpp.o: src/timers.h

Binary file not shown.

View File

@@ -1 +1,13 @@
#version 330
// in vec3 Colour;
// in vec2 TexCoord;
out vec4 outColour;
uniform vec3 triangleColour;
uniform sampler2D tex;
void main() {
outColour = vec4(0.23, 0.58, 0.12, 1.0);
}

View File

@@ -1 +1,18 @@
#version 330
in vec3 position;
// in vec2 texcoord;
// in vec3 colour;
// out vec3 Colour;
// out vec2 TexCoord;
uniform mat4 model;
uniform mat4 view;
uniform mat4 proj;
void main() {
// Colour = colour;
// TexCoord = texcoord;
gl_Position = proj * view * model * vec4(position, 1.0);
}

View File

@@ -1,51 +0,0 @@
#ifndef SRC_INIT_H_
#define SRC_INIT_H_
// General includes
#include <chrono>
// GL includes
#if _WIN32
#include <SDL.h>
#else
#include <SDL2/SDL.h>
#endif
// Custom includes
#include <logger.h>
bool init(Logger& logger, SDL_Window* window, SDL_GLContext glContext) {
std::cout << "-----------------------------" << std::endl;
std::cout << "----- OpenGL Playground -----" << std::endl;
std::cout << "-------- Version 1.0 --------" << std::endl;
std::cout << "----- <20>Benjamin Kyd 2019 ----" << std::endl;
std::cout << "-----------------------------" << std::endl;
std::cout << std::endl;
SDL_Init(SDL_INIT_EVERYTHING);
SDL_GL_SetAttribute(SDL_GL_RED_SIZE, 8);
SDL_GL_SetAttribute(SDL_GL_GREEN_SIZE, 8);
SDL_GL_SetAttribute(SDL_GL_BLUE_SIZE, 8);
SDL_GL_SetAttribute(SDL_GL_ALPHA_SIZE, 8);
SDL_GL_SetAttribute(SDL_GL_BUFFER_SIZE, 32);
SDL_GL_SetAttribute(SDL_GL_DOUBLEBUFFER, 1);
SDL_GL_SetAttribute(SDL_GL_CONTEXT_MAJOR_VERSION, 4);
SDL_GL_SetAttribute(SDL_GL_CONTEXT_MINOR_VERSION, 5);
window = SDL_CreateWindow("OpenGL Playground V1.0",
SDL_WINDOWPOS_CENTERED,
SDL_WINDOWPOS_CENTERED,
1280, 720,
SDL_WINDOW_OPENGL);
glContext = SDL_GL_CreateContext(window);
SDL_GL_SetSwapInterval(0);
gladLoadGLLoader(SDL_GL_GetProcAddress);
logger << LOGGER_INFO << "OpenGL and SDL initialized" << LOGGER_ENDL;
return true;
}
#endif

View File

@@ -20,11 +20,17 @@
// Custom includes // Custom includes
#include <logger.h> #include <logger.h>
#include "init.h"
#include "timers.h" #include "timers.h"
#include "object.h" #include "object.h"
int main(int argc, char** argv) { int main(int argc, char** argv) {
std::cout << "-----------------------------" << std::endl;
std::cout << "----- OpenGL Playground -----" << std::endl;
std::cout << "-------- Version 1.0 --------" << std::endl;
std::cout << "----- <20>Benjamin Kyd 2019 ----" << std::endl;
std::cout << "-----------------------------" << std::endl;
std::cout << std::endl;
// Get global variables ready // Get global variables ready
Logger logger; Logger logger;
SDL_Window* window = nullptr; SDL_Window* window = nullptr;
@@ -32,11 +38,38 @@ int main(int argc, char** argv) {
bool isWindowOpen = false; bool isWindowOpen = false;
// Initialize SDL and OpenGL // Initialize SDL and OpenGL
isWindowOpen = init(logger, window, glContext); // isWindowOpen = init(logger, window, glContext);
SDL_Init(SDL_INIT_EVERYTHING);
SDL_GL_SetAttribute(SDL_GL_RED_SIZE, 8);
SDL_GL_SetAttribute(SDL_GL_GREEN_SIZE, 8);
SDL_GL_SetAttribute(SDL_GL_BLUE_SIZE, 8);
SDL_GL_SetAttribute(SDL_GL_ALPHA_SIZE, 8);
SDL_GL_SetAttribute(SDL_GL_BUFFER_SIZE, 32);
SDL_GL_SetAttribute(SDL_GL_DOUBLEBUFFER, 1);
SDL_GL_SetAttribute(SDL_GL_CONTEXT_MAJOR_VERSION, 4);
SDL_GL_SetAttribute(SDL_GL_CONTEXT_MINOR_VERSION, 5);
window = SDL_CreateWindow("OpenGL Playground V1.0",
SDL_WINDOWPOS_CENTERED,
SDL_WINDOWPOS_CENTERED,
1280, 720,
SDL_WINDOW_OPENGL);
glContext = SDL_GL_CreateContext(window);
SDL_GL_SetSwapInterval(0);
gladLoadGLLoader(SDL_GL_GetProcAddress);
std::vector<glm::vec4> vertices; std::vector<glm::vec4> vertices;
std::vector<glm::vec3> normals; std::vector<glm::vec3> normals;
std::vector<GLushort> elements; std::vector<GLushort> elements;
isWindowOpen = true;
logger << LOGGER_INFO << "OpenGL and SDL initialized" << LOGGER_ENDL;
LoadOBJ(logger, "./resources/dragon.obj", vertices, normals, elements); LoadOBJ(logger, "./resources/dragon.obj", vertices, normals, elements);
SDL_Event event; SDL_Event event;
@@ -53,6 +86,11 @@ int main(int argc, char** argv) {
if (event.type == SDL_QUIT) if (event.type == SDL_QUIT)
isWindowOpen = false; isWindowOpen = false;
// Clear
const float clear[] = {0.1f, 0.45f, 0.9f, 1.0f};
glClearBufferfv(GL_COLOR, 0, clear);
glClear(GL_DEPTH_BUFFER_BIT);
// Swap GL frame buffers // Swap GL frame buffers
SDL_GL_SwapWindow(window); SDL_GL_SwapWindow(window);
} }

View File

@@ -0,0 +1,124 @@
#include "shader.h"
#include <iostream>
#include <fstream>
Shader::Shader() {
m_program = glCreateProgram();
}
Shader& Shader::use() {
glUseProgram(m_program);
return *this;
}
Shader& Shader::link() {
glLinkProgram(m_program);
return *this;
}
Shader& Shader::attatch() {
glAttachShader(m_program, m_vert);
glAttachShader(m_program, m_frag);
return *this;
}
std::string readShader(std::string source) {
std::ifstream t(source);
std::string shaderCode((std::istreambuf_iterator<char>(t)),
std::istreambuf_iterator<char>());
return shaderCode;
}
Shader& Shader::load(GLenum type, std::string sourceLoc) {
const char* source = readShader(sourceLoc).c_str();
if (type == GL_VERTEX_SHADER) {
m_vertLoc = sourceLoc;
m_vertSource = (std::string)source;
m_vert = glCreateShader(GL_VERTEX_SHADER);
glShaderSource(m_vert, 1, &source, NULL);
glCompileShader(m_vert);
glGetShaderiv(m_vert, GL_COMPILE_STATUS, &m_status);
if (m_status == GL_FALSE) {
char buf[512];
glGetShaderInfoLog(m_vert, 512, NULL, buf);
std::cerr << buf << std::endl;
}
std::cout << "Vertex shader at '" << sourceLoc << "' compiled..." << std::endl;
} else if (type == GL_FRAGMENT_SHADER) {
m_fragLoc = sourceLoc;
m_fragSource = (std::string)source;
m_frag = glCreateShader(GL_FRAGMENT_SHADER);
glShaderSource(m_frag, 1, &source, NULL);
glCompileShader(m_frag);
glGetShaderiv(m_frag, GL_COMPILE_STATUS, &m_status);
if (m_status == GL_FALSE) {
char buf[512];
glGetShaderInfoLog(m_frag, 512, NULL, buf);
std::cerr << buf << std::endl;
}
std::cout << "Vertex shader at '" << sourceLoc << "' compiled..." << std::endl;
}
return *this;
}
Shader& Shader::load(std::string sourceLoc) {
m_vertLoc = sourceLoc + ".vert";
m_fragLoc = sourceLoc + ".frag";
m_vertSource = readShader(m_vertLoc);
m_fragSource = readShader(m_fragLoc);
m_vert = glCreateShader(GL_VERTEX_SHADER);
m_frag = glCreateShader(GL_FRAGMENT_SHADER);
const char* vertSource = m_vertSource.c_str();
glShaderSource(m_vert, 1, &vertSource, NULL);
glCompileShader(m_vert);
const char* fragSource = m_fragSource.c_str();
glShaderSource(m_frag, 1, &fragSource, NULL);
glCompileShader(m_frag);
glGetShaderiv(m_vert, GL_COMPILE_STATUS, &m_status);
if (m_status == GL_FALSE) {
char buf[512];
glGetShaderInfoLog(m_vert, 512, NULL, buf);
std::cerr << buf << std::endl;
}
glGetShaderiv(m_frag, GL_COMPILE_STATUS, &m_status);
if (m_status == GL_FALSE) {
char buf[512];
glGetShaderInfoLog(m_frag, 512, NULL, buf);
std::cerr << buf << std::endl;
}
std::cout << "Vertex shader at '" << m_vertLoc << "' compiled..." << std::endl;
std::cout << "Fragment shader at '" << m_fragLoc << "' compiled..." << std::endl;
return *this;
}
GLuint Shader::getProgram() {
return m_program;
}
GLuint Shader::getVertex() {
return m_vert;
}
GLuint Shader::getFragment() {
return m_frag;
}
Shader::~Shader() {
glDeleteProgram(m_program);
glDeleteShader(m_vert);
glDeleteShader(m_frag);
}

View File

@@ -0,0 +1,38 @@
#ifndef SRC_SHADER_H_
#define SRC_SHADER_H_
#include <glad/glad.h>
#include <string>
class Shader {
public:
Shader();
Shader& use();
Shader& link();
Shader& attatch();
Shader& load(GLenum type, std::string sourceLoc);
Shader& load(std::string sourceLoc);
GLuint getProgram();
GLuint getVertex();
GLuint getFragment();
virtual ~Shader();
private:
Shader(Shader const &) = delete;
Shader & operator=(Shader const &) = delete;
GLuint m_program;
GLuint m_vert;
GLuint m_frag;
std::string m_vertSource;
std::string m_fragSource;
std::string m_vertLoc;
std::string m_fragLoc;
GLint m_status;
};
#endif