Skip to content

Commit b666cf1

Browse files
Added a neat wrapper on OpenGL to ease out dev
1 parent 583f1b7 commit b666cf1

File tree

8 files changed

+170
-27
lines changed

8 files changed

+170
-27
lines changed

CMakeLists.txt

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,13 @@ set(ARCHITECTURE_TO_USE x64)
1212
include_directories(${CMAKE_CURRENT_SOURCE_DIR}/include)
1313

1414
# Make the executable
15-
add_executable(${APP_NAME} main.cpp)
15+
add_executable(${APP_NAME} main.cpp
16+
# Helper namespace and object to make your life easier
17+
glshift/GLManager.cpp
18+
glshift/GLManager.h
19+
glshift/GLShift.h
20+
glshift/definitions.h
21+
glshift/GLRenderer.h glshift/GLRenderer.cpp)
1622

1723
if(WIN32)
1824
# Neccessary variables

glshift/GLManager.cpp

Lines changed: 68 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,68 @@
1+
//
2+
// Created by lesscomplex on 08/03/2020.
3+
//
4+
5+
#include "GLManager.h"
6+
#include "GLRenderer.h"
7+
#include <iostream>
8+
9+
GLShift::GLManager::GLManager() {
10+
if(!glfwInit()) {
11+
std::cerr << "Couldn't initialize glfw context" << std::endl;
12+
delete this;
13+
}
14+
}
15+
16+
GLShift::GLManager::GLManager(int major, int minor) {
17+
if(!glfwInit()) {
18+
std::cerr << "Couldn't initialize glfw context" << std::endl;
19+
delete this;
20+
}
21+
this->setVersion(major, minor);
22+
}
23+
24+
void GLShift::GLManager::setVersion(int major, int minor) {
25+
this->major = major; this->minor = minor;
26+
glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, major);
27+
glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, minor);
28+
}
29+
30+
void GLShift::GLManager::openWindow(int width, int height, const char* title,bool isFullScreen) {
31+
this->window = glfwCreateWindow(width, height, title, isFullScreen ? glfwGetPrimaryMonitor() : NULL, NULL);
32+
glfwMakeContextCurrent(this->window);
33+
if(GLenum err = glewInit(); err != GLEW_OK) {
34+
std::cerr << glewGetErrorString(err) << std::endl;
35+
delete this->window;
36+
return;
37+
}
38+
glfwSwapInterval(1); // Allow VSync
39+
}
40+
41+
void GLShift::GLManager::setRenderer(GLShift::GLRenderer *renderer) {
42+
this->renderer = renderer;
43+
this->renderer->init();
44+
}
45+
46+
void GLShift::GLManager::run() {
47+
if(this->renderer == nullptr) {
48+
std::cerr << "No renderer is defined!" << std::endl;
49+
return;
50+
}
51+
if(this->window == nullptr) {
52+
std::cerr << "No window is defined!" << std::endl;
53+
return;
54+
}
55+
56+
while(!glfwWindowShouldClose(this->window)) {
57+
this->renderer->render();
58+
59+
glClear(GL_COLOR_BUFFER_BIT);
60+
glfwSwapBuffers(this->window);
61+
glfwPollEvents();
62+
}
63+
}
64+
65+
GLShift::GLManager::~GLManager() {
66+
if(this->window != nullptr) glfwDestroyWindow(this->window);
67+
glfwTerminate();
68+
}

glshift/GLManager.h

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
//
2+
// Created by lesscomplex on 08/03/2020.
3+
//
4+
5+
#ifndef YOURAPPNAME_GLMANAGER_H
6+
#define YOURAPPNAME_GLMANAGER_H
7+
8+
#include "definitions.h"
9+
10+
class GLShift::GLManager {
11+
public:
12+
GLManager();
13+
~GLManager();
14+
GLManager(signed int major, signed int minor);
15+
16+
void setVersion(signed int major, signed int minor);
17+
void setRenderer(GLRenderer * renderer);
18+
void openWindow(signed int width, signed int height, const char* title, bool isFullScreen = false);
19+
void run();
20+
private:
21+
GLFWwindow *window;
22+
GLRenderer *renderer;
23+
signed int major, minor;
24+
};
25+
26+
27+
#endif //YOURAPPNAME_GLMANAGER_H

glshift/GLRenderer.cpp

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
//
2+
// Created by lesscomplex on 08/03/2020.
3+
//
4+
5+
#include "GLRenderer.h"
6+
7+
GLShift::GLRenderer::GLRenderer(GLShift::GLManager *context) {
8+
this->context = context;
9+
}

glshift/GLRenderer.h

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
//
2+
// Created by lesscomplex on 08/03/2020.
3+
//
4+
5+
#ifndef YOURAPPNAME_GLRENDERER_H
6+
#define YOURAPPNAME_GLRENDERER_H
7+
8+
#include "definitions.h"
9+
10+
class GLShift::GLRenderer {
11+
public:
12+
explicit GLRenderer(GLManager* context);
13+
virtual void render() = 0;
14+
virtual void init() = 0;
15+
private:
16+
GLManager * context;
17+
};
18+
19+
#endif //YOURAPPNAME_GLRENDERER_H

glshift/GLShift.h

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
//
2+
// Created by lesscomplex on 08/03/2020.
3+
//
4+
5+
#ifndef YOURAPPNAME_GLSHIFT_H
6+
#define YOURAPPNAME_GLSHIFT_H
7+
8+
#include "GLManager.h"
9+
#include "GLRenderer.h"
10+
11+
#endif //YOURAPPNAME_GLSHIFT_H

glshift/definitions.h

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
//
2+
// Created by lesscomplex on 08/03/2020.
3+
//
4+
5+
#ifndef YOURAPPNAME_DEFINITIONS_H
6+
#define YOURAPPNAME_DEFINITIONS_H
7+
8+
#include <GL/glew.h>
9+
#include <GLFW/glfw3.h>
10+
11+
namespace GLShift {
12+
class GLManager;
13+
class GLRenderer;
14+
}
15+
16+
#endif //YOURAPPNAME_DEFINITIONS_H

main.cpp

Lines changed: 13 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -1,32 +1,19 @@
1-
#include <GL/glew.h>
2-
#include <GLFW/glfw3.h>
3-
#include <iostream>
1+
#include "glshift/GLShift.h"
42

5-
int main() {
6-
if(!glfwInit()) {
7-
exit(EXIT_FAILURE);
3+
class MyRenderer : public GLShift::GLRenderer {
4+
using GLShift::GLRenderer::GLRenderer; // Import constructor
5+
public:
6+
void render() override {
7+
glClearColor(1, 0, 0, 1);
88
}
99

10-
glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 4);
11-
glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 5);
12-
GLFWwindow* window = glfwCreateWindow(600, 300, "Test", NULL, NULL);
13-
glfwMakeContextCurrent(window);
14-
15-
if(GLenum err = glewInit(); err != GLEW_OK) {
16-
std::cout << glewGetErrorString(err) << std::endl;
17-
exit(EXIT_FAILURE);
18-
}
19-
glfwSwapInterval(1); // Allow VSync
10+
void init() override {}
11+
};
2012

21-
while(!glfwWindowShouldClose(window)) {
22-
// Draw data on screen
23-
glClearColor(1, 0, 0, 1); // Clear screen to red as default
24-
glClear(GL_COLOR_BUFFER_BIT);
25-
glfwSwapBuffers(window); // Swap back & front buffers
26-
glfwPollEvents(); // Listen to keyword clicks
27-
}
28-
glfwDestroyWindow(window);
29-
glfwTerminate();
30-
exit(EXIT_SUCCESS);
13+
int main() {
14+
GLShift::GLManager glManager = GLShift::GLManager();
15+
glManager.openWindow(600, 300, "Yeahh!");
16+
glManager.setRenderer(new MyRenderer(&glManager));
17+
glManager.run();
3118
return 0;
3219
}

0 commit comments

Comments
 (0)