From d24d5357b8d6618ebd509cf74ac08e1b60f1b413 Mon Sep 17 00:00:00 2001 From: End Date: Thu, 15 Sep 2016 17:23:02 +0200 Subject: [PATCH] * WIP change --- .gitignore | 2 ++ KKK/game/CMakeLists.txt | 2 ++ KKK/game/include/glclasses.h | 35 +++++++++++++++++++++++++++++++++ KKK/game/include/renderer.h | 12 ++++++++++++ KKK/game/include/vector.h | 38 ++++++++++++++++++++++++++++++++++++ KKK/game/src/glclasses.cpp | 38 ++++++++++++++++++++++++++++++++++++ KKK/game/src/opengl.cpp | 1 + KKK/game/src/renderer.cpp | 5 +++++ 8 files changed, 133 insertions(+) create mode 100644 KKK/game/include/glclasses.h create mode 100644 KKK/game/include/renderer.h create mode 100644 KKK/game/src/glclasses.cpp create mode 100644 KKK/game/src/renderer.cpp diff --git a/.gitignore b/.gitignore index 9e5ec64..7f8a9a8 100644 --- a/.gitignore +++ b/.gitignore @@ -6,3 +6,5 @@ build* Makefile CMakeFiles cmake_install.cmake +game/game +tests/tests diff --git a/KKK/game/CMakeLists.txt b/KKK/game/CMakeLists.txt index b6b0151..9b2801a 100644 --- a/KKK/game/CMakeLists.txt +++ b/KKK/game/CMakeLists.txt @@ -8,12 +8,14 @@ find_package(X11 REQUIRED) set(GAME_SRC src/main.cpp src/opengl.cpp + src/glclasses.cpp src/config.cpp src/simulation.cpp ) set(GAME_HEADERS include/opengl.h + include/glclasses.h include/vector.h include/config.h include/simulation.h diff --git a/KKK/game/include/glclasses.h b/KKK/game/include/glclasses.h new file mode 100644 index 0000000..c9c7483 --- /dev/null +++ b/KKK/game/include/glclasses.h @@ -0,0 +1,35 @@ +#pragma once + +#include +#include + +template class BufferObject { + private: + GLuint m_name; + GLvoid* m_mappointer; + protected: + public: + BufferObject(); + ~BufferObject(); + void bind(); + void bind(GLuint index, GLintptr offset = 0, GLsizeiptr size = 0); + void fill(GLenum usage, GLsizei size = 0, GLvoid* data = NULL); + void subfill(GLintptr offset, GLsizei size, const GLvoid* data); + void map(GLenum access); + void unmap(); +}; + +typedef BufferObject VBO; +typedef BufferObject IBO; + +class VAO { + private: + int[3] foo; + + protected: + public: + VAO(); + ~VAO(); + bind(); + fill(GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride = 0, const GLvoid* pointer = NULL); +} diff --git a/KKK/game/include/renderer.h b/KKK/game/include/renderer.h new file mode 100644 index 0000000..2606202 --- /dev/null +++ b/KKK/game/include/renderer.h @@ -0,0 +1,12 @@ +#pragma once + +#include +#include + +class Renderer { + private: + protected: + public: + Renderer(); + ~Renderer(); +}; diff --git a/KKK/game/include/vector.h b/KKK/game/include/vector.h index 8bbe558..e9fd354 100644 --- a/KKK/game/include/vector.h +++ b/KKK/game/include/vector.h @@ -1,10 +1,20 @@ #pragma once +#include + struct Vec2d { double x; double y; + double length() { + return sqrt(x*x + y*y); + } + double distance(Vec2d other) { + Vec2d tmp = (*this - other); + return tmp.length(); + } + Vec2d & operator+=(const Vec2d& rhs) { x+=rhs.x; y+=rhs.y; @@ -49,3 +59,31 @@ struct Vec2d return result; } }; + +struct Mat4d { + std::array data; + + const Mat4d operator*(const Mat4d& rhs) const { + Mat4d result; + result[0] = result[0]*rhs[0] + result[1]*result[5] + result[2]*result[9] + result[3]*result[13]; + result[1] = result[0]*rhs[1] + result[1]*result[6] + result[2]*result[10] + result[3]*result[14]; + result[2] = result[0]*rhs[2] + result[1]*result[7] + result[2]*result[11] + result[3]*result[15]; + result[3] = result[0]*rhs[3] + result[1]*result[8] + result[2]*result[12] + result[3]*result[16]; + + result[4] = result[4]*rhs[0] + result[5]*result[5] + result[6]*result[9] + result[7]*result[13]; + result[5] = result[4]*rhs[1] + result[5]*result[6] + result[6]*result[10] + result[7]*result[14]; + result[6] = result[4]*rhs[2] + result[5]*result[7] + result[6]*result[11] + result[7]*result[15]; + result[7] = result[4]*rhs[3] + result[5]*result[8] + result[6]*result[12] + result[7]*result[16]; + + result[8] = result[8]*rhs[0] + result[9]*result[5] + result[10]*result[9] + result[11]*result[13]; + result[9] = result[8]*rhs[1] + result[9]*result[6] + result[10]*result[10] + result[11]*result[14]; + result[10] = result[8]*rhs[2] + result[9]*result[7] + result[10]*result[11] + result[11]*result[15]; + result[11] = result[8]*rhs[3] + result[9]*result[8] + result[10]*result[12] + result[11]*result[16]; + + result[12] = result[12]*rhs[0] + result[13]*result[5] + result[14]*result[9] + result[15]*result[13]; + result[13] = result[12]*rhs[1] + result[13]*result[6] + result[14]*result[10] + result[15]*result[14]; + result[14] = result[12]*rhs[2] + result[13]*result[7] + result[14]*result[11] + result[15]*result[15]; + result[15] = result[12]*rhs[3] + result[13]*result[8] + result[14]*result[12] + result[15]*result[16]; + return result; + } +} diff --git a/KKK/game/src/glclasses.cpp b/KKK/game/src/glclasses.cpp new file mode 100644 index 0000000..18e2e8f --- /dev/null +++ b/KKK/game/src/glclasses.cpp @@ -0,0 +1,38 @@ +#include + +#define TBufferObject_(pre, post) template pre 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/src/opengl.cpp b/KKK/game/src/opengl.cpp index 5c8e1bd..a364e87 100644 --- a/KKK/game/src/opengl.cpp +++ b/KKK/game/src/opengl.cpp @@ -70,6 +70,7 @@ endofthejedi::GLWindow::GLWindow(unsigned int width, unsigned int height) endofthejedi::GLWindow::~GLWindow() { glXMakeCurrent(m_display, None, NULL); glXDestroyContext(m_display, m_glcontext); + XFree(m_visualinfo); XDestroyWindow(m_display, m_window); XCloseDisplay(m_display); } diff --git a/KKK/game/src/renderer.cpp b/KKK/game/src/renderer.cpp new file mode 100644 index 0000000..b9dbfc7 --- /dev/null +++ b/KKK/game/src/renderer.cpp @@ -0,0 +1,5 @@ +#include + +Renderer::Renderer() { + +}