From f77e1b779d7d9917b9d69d73e0568bef05e96f35 Mon Sep 17 00:00:00 2001 From: end Date: Tue, 27 Sep 2016 17:57:41 +0200 Subject: [PATCH] * fixed template magic --- KKK/game/include/glclasses.h | 37 ++++++++++++++++++ KKK/game/include/renderer.h | 5 +++ KKK/game/src/glclasses.cpp | 76 +++++++++++++++--------------------- KKK/game/src/renderer.cpp | 4 +- 4 files changed, 76 insertions(+), 46 deletions(-) diff --git a/KKK/game/include/glclasses.h b/KKK/game/include/glclasses.h index ab67645..4f546ec 100644 --- a/KKK/game/include/glclasses.h +++ b/KKK/game/include/glclasses.h @@ -3,6 +3,8 @@ #include #include +#include + namespace endofthejedi { template class BufferObject { @@ -37,10 +39,45 @@ class VAO { class Shader { private: + GLuint m_program; protected: public: Shader(); ~Shader(); + void bind(); + void unbind(); + void load(std::string data, GLenum shadertype); }; } + +#define TBufferObject_(pre, post) \ + template pre endofthejedi::BufferObject::post +#define TBufferObject(...) TBufferObject_(__VA_ARGS__) + +TBufferObject(, BufferObject)() { glGenBuffers(1, &m_name); } + +TBufferObject(, ~BufferObject)() { glDeleteBuffers(1, &m_name); } + +TBufferObject(void, bind)() { glBindBuffer(T, m_name); } + +TBufferObject(void, bind)(GLuint index, GLintptr offset, GLsizeiptr size) { + // todo +} + +TBufferObject(void, fill)(GLenum usage, GLsizei size, GLvoid *data) { + glBufferData(T, size, data, usage); +} + +TBufferObject(void, subfill)(GLintptr offset, GLsizei size, + const GLvoid *data) { + glBufferSubData(T, offset, size, data); +} + +TBufferObject(void, map)(GLenum access) { + // todo +} + +TBufferObject(void, unmap)() { + // todo +} diff --git a/KKK/game/include/renderer.h b/KKK/game/include/renderer.h index be71efe..7f56b69 100644 --- a/KKK/game/include/renderer.h +++ b/KKK/game/include/renderer.h @@ -5,10 +5,15 @@ #include #include +#include + namespace endofthejedi { class Renderer { private: + VBO m_vbo; + VAO m_vao; + Shader m_shader; protected: public: Renderer(); diff --git a/KKK/game/src/glclasses.cpp b/KKK/game/src/glclasses.cpp index 8b1b555..a2f9bd3 100644 --- a/KKK/game/src/glclasses.cpp +++ b/KKK/game/src/glclasses.cpp @@ -1,53 +1,39 @@ #include -#define TBufferObject_(pre, post) template pre endofthejedi::BufferObject::post -#define TBufferObject(...) TBufferObject_(__VA_ARGS__) +endofthejedi::VAO::VAO() { glGenVertexArrays(1, &m_name); } -TBufferObject(, BufferObject)() { - glGenBuffers(1, &m_name); -} +endofthejedi::VAO::~VAO() { glDeleteVertexArrays(1, &m_name); } -TBufferObject(, ~BufferObject)() { - glDeleteBuffers(1, m_name); -} +void endofthejedi::VAO::bind() { glBindVertexArray(m_name); } -TBufferObject(void, bind)() { - glBindBuffer(T, m_name); -} - -TBufferObject(void, bind)(GLuint index, GLintptr offset, GLsizeiptr size) { - //todo -} - -TBufferObject(void, fill)(GLenum usage, GLsizei size, GLvoid* data) { - glBufferData(T, size, data, usage); -} - -TBufferObject(void, subfill)(GLintptr offset, GLsizei size, const GLvoid* data) { - glBufferSubData(T, offset, size, data); -} - -TBufferObject(void, map)(GLenum access) { - //todo -} - -TBufferObject(void, unmap)() { - //todo -} - -endofthejedi::VAO::VAO() { - glGenVertexArrays(1, &m_name); -} - -endofthejedi::VAO::~VAO() { - glDeleteVertexArrays(1, &m_name); -} - -void endofthejedi::VAO::bind() { - glBindVertexArray(m_name); -} - -void endofthejedi::VAO::fill(GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, const GLvoid* pointer) { +void endofthejedi::VAO::fill(GLuint index, GLint size, GLenum type, + GLboolean normalized, GLsizei stride, + const GLvoid *pointer) { glEnableVertexAttribArray(index); glVertexAttribPointer(index, size, GL_FLOAT, normalized, stride, pointer); } + +endofthejedi::Shader::Shader() { + m_program = glCreateProgram(); +} + +endofthejedi::Shader::~Shader() {} + +void endofthejedi::Shader::bind() { + glUseProgram(m_program); +} + +void endofthejedi::Shader::unbind() { + glUseProgram(0); +} + +void endofthejedi::Shader::load(std::string path, GLenum shadertype) { + GLuint cheddar = glCreateShader(shadertype); + const char* cheddardata = path.c_str(); + glShaderSource(cheddar, 1, &cheddardata, NULL); + glCompileShader(cheddar); + glAttachShader(m_program, cheddar); + glLinkProgram(m_program); + glDeleteShader(cheddar); +} + diff --git a/KKK/game/src/renderer.cpp b/KKK/game/src/renderer.cpp index d0ba6cf..3114405 100644 --- a/KKK/game/src/renderer.cpp +++ b/KKK/game/src/renderer.cpp @@ -1,6 +1,8 @@ #include -endofthejedi::Renderer::Renderer() {} +endofthejedi::Renderer::Renderer() { + +} endofthejedi::Renderer::~Renderer() {}