PCG-FPS  v2 m0.22.4
Simple First Person Shooter with Procedurally Generated Level
RendererOpenGL.h
Go to the documentation of this file.
1 #ifndef SKR_FPS2_RENDERER_OPENGL_RENDERER_H
2 #define SKR_FPS2_RENDERER_OPENGL_RENDERER_H
3 
4 #include "..\..\pch.h"
5 
6 #include <vector>
7 
8 #include "Definitions.h"
9 
10 #include "Settings.h"
11 #include "Logger.h"
12 #include "Texture.h"
13 #include "Cubemap.h"
14 #include "Model.h"
15 #include "MaterialParameters.h"
16 
17 #include "Camera.h"
18 #include "PointLight.h"
19 
20 #include "RoomGeometry.h"
21 #include "GeometryBoundingBox.h"
22 #include "..\..\Collision\CollisionManager.h"
23 
24 #include "pcg/rng.h"
25 
26 // callback function
27 static void APIENTRY GLDebugMessageCallback(GLenum src, GLenum type, GLuint id, GLenum severity, GLsizei length, const GLchar* msg, const void* userParam);
28 
31 static void GetGLError();
32 
33 namespace skr
34 {
35 namespace fps2
36 {
37 namespace Renderer
38 {
39 namespace OpenGL
40 {
42  enum struct VaoType
43  {
44  Geometry,
45  Screen,
46  Skybox
47  };
49  enum struct VboType
50  {
51  Geometry,
52  Screen,
53  Skybox
54  };
55 
58  class Renderer
59  {
60  private:
61  uint32_t _framebuffer;
63 
65 
67  std::string _windowTitle;
68 
70 
71  public:
72  GLFWwindow* _window;
73  std::unordered_map<VboType, uint32_t> _vertexBufferObjects;
74  std::unordered_map<VaoType, uint32_t> _vertexArrayObjects;
75  std::unordered_map<ShaderType, Shader> _shaders;
76 
77  std::shared_ptr<Collision::CollisionManager> _collisionManager;
78 
79  std::shared_ptr<Camera> _camera;
80 
81  float _deltatime = 0.0f;
82  float _lastFrame = 0.0f;
83 
84 
85  public:
88  Renderer();
89 
93  Renderer(std::string windowTitle, std::string settingsfile = "settings.cfg");
94 
96  Renderer(const Renderer&) = delete;
97 
99  Renderer(const Renderer&&) = delete;
100 
102  ~Renderer();
103 
106  void Initialize();
107 
110  void SetWindowTitle(std::string title);
111 
114  void Render();
115 
117  void RecreateGeometry();
118 
122  std::string GetGLDetails(bool getExtensions = false);
123 
124  private:
126  void InitGLFW();
127 
129  void InitGlew();
130 
132  void InitShaders();
133 
136 
138  void CreateGeometry();
139 
141  void CreateDebugGeometry();
142 
144  void CreateScreenQuad();
145 
148 
150  void CreateSkybox();
151 
153  void InitCamera();
154 
156  void InitDebugLight();
157 
160  void ProcessInputPerFrame(glm::vec3 collisionNormal = glm::vec3(0.0f));
161  };
162 
163  }
164  }
165  }
166  }
167 
168  #endif // !SKR_FPS2_RENDERER_OPENGL_RENDERER_H
169 
skr::fps2::Renderer::OpenGL::Renderer::InitShaders
void InitShaders()
Initialize Shaders.
Definition: RendererOpenGL.cpp:145
skr::fps2::Renderer::OpenGL::Renderer::CreateDebugGeometry
void CreateDebugGeometry()
create geometry used in debug modes
Definition: RendererOpenGL.cpp:347
skr::fps2::Renderer::OpenGL::VaoType::Screen
@ Screen
screen box
skr::fps2::Renderer::OpenGL::VboType::Skybox
@ Skybox
skybox
skr::fps2::Renderer::OpenGL::VaoType
VaoType
type identifies for vertex array objects
Definition: RendererOpenGL.h:43
skr::fps2::Renderer::OpenGL::VaoType::Skybox
@ Skybox
skybox
skr::fps2::Renderer::OpenGL::Renderer::CreateGeometry
void CreateGeometry()
create geometry
Definition: RendererOpenGL.cpp:272
skr::fps2::Renderer::OpenGL::Renderer::Initialize
void Initialize()
initialization since the renderer-object in main is global, its constructed at runtime,...
Definition: RendererOpenGL.cpp:61
GLDebugMessageCallback
static void APIENTRY GLDebugMessageCallback(GLenum src, GLenum type, GLuint id, GLenum severity, GLsizei length, const GLchar *msg, const void *userParam)
Definition: RendererOpenGL.cpp:849
skr::fps2::Renderer::OpenGL::Renderer::_window
GLFWwindow * _window
GLFW window.
Definition: RendererOpenGL.h:72
skr::fps2::Renderer::OpenGL::Renderer::_framebufferTexture
uint32_t _framebufferTexture
id of main framebuffer texture
Definition: RendererOpenGL.h:62
skr::fps2::Renderer::OpenGL::Renderer::_deltatime
float _deltatime
time between current and last frame
Definition: RendererOpenGL.h:81
Definitions.h
skr::fps2::Renderer::OpenGL::Renderer::CreateFramebufferForScreen
void CreateFramebufferForScreen()
create framebuffer for screen to render everything to
Definition: RendererOpenGL.cpp:393
skr::fps2::Renderer::OpenGL::Renderer::~Renderer
~Renderer()
destructor
Definition: RendererOpenGL.cpp:40
skr::fps2::Renderer::OpenGL::Renderer::InitCamera
void InitCamera()
Initialize camera.
Definition: RendererOpenGL.cpp:455
GeometryBoundingBox.h
skr::fps2::Renderer::OpenGL::VaoType::Geometry
@ Geometry
general geometry
skr::fps2::Renderer::OpenGL::Renderer::_shaders
std::unordered_map< ShaderType, Shader > _shaders
map of shaders
Definition: RendererOpenGL.h:75
skr::fps2::Renderer::OpenGL::Renderer::Render
void Render()
main rendering function contains the render loop
Definition: RendererOpenGL.cpp:542
skr::fps2::Renderer::OpenGL::VboType::Geometry
@ Geometry
general geometry
skr::fps2::Renderer::OpenGL::Renderer::_vertexArrayObjects
std::unordered_map< VaoType, uint32_t > _vertexArrayObjects
map of vertex array objects
Definition: RendererOpenGL.h:74
skr::fps2::Renderer::OpenGL::Renderer::InitGLFW
void InitGLFW()
Initialize GLFW.
Definition: RendererOpenGL.cpp:88
skr::fps2::Renderer::OpenGL::Renderer::Renderer
Renderer()
default constructor default constructor is needed since OpenGL Renderer Object is a global object,...
Definition: RendererOpenGL.cpp:26
skr::fps2::Renderer::OpenGL::Renderer::CreateSkybox
void CreateSkybox()
create skybox
Definition: RendererOpenGL.cpp:425
skr::fps2::Renderer::OpenGL::Renderer::GetGLDetails
std::string GetGLDetails(bool getExtensions=false)
gets system details on OpenGL
Definition: RendererOpenGL.cpp:203
skr::fps2::Renderer::OpenGL::Cubemap
manages cubemap texture
Definition: Cubemap.h:20
skr::fps2::Renderer::OpenGL::Renderer::_camera
std::shared_ptr< Camera > _camera
camera
Definition: RendererOpenGL.h:79
skr::fps2::Renderer::OpenGL::Renderer::_collisionManager
std::shared_ptr< Collision::CollisionManager > _collisionManager
collision manager
Definition: RendererOpenGL.h:77
skr::fps2::Renderer::OpenGL::Renderer::_debugLightModelId
size_t _debugLightModelId
id of model to visualize lights
Definition: RendererOpenGL.h:64
skr::fps2::Renderer::OpenGL::Renderer::_vertexBufferObjects
std::unordered_map< VboType, uint32_t > _vertexBufferObjects
map of vertex buffer objects
Definition: RendererOpenGL.h:73
skr::fps2::Renderer::OpenGL::VboType::Screen
@ Screen
screen box
skr::fps2::Renderer::OpenGL::Renderer::_windowTitle
std::string _windowTitle
title of windows
Definition: RendererOpenGL.h:67
skr::fps2::Renderer::OpenGL::Renderer::_skyboxCubemap
Cubemap _skyboxCubemap
cubemap of skybox
Definition: RendererOpenGL.h:66
skr::fps2::Renderer::OpenGL::Renderer::SetWindowTitle
void SetWindowTitle(std::string title)
sets window title to given string
Definition: RendererOpenGL.cpp:78
Model.h
Settings.h
GetGLError
static void GetGLError()
get errors from OpenGL state machine encapusaltes glGetError()-call and generates readable output
Definition: RendererOpenGL.cpp:958
skr::fps2::Renderer::OpenGL::Renderer
OpenGL renderer.
Definition: RendererOpenGL.h:59
skr::fps2::Renderer::OpenGL::Renderer::ProcessInputPerFrame
void ProcessInputPerFrame(glm::vec3 collisionNormal=glm::vec3(0.0f))
process input on current frame
Definition: RendererOpenGL.cpp:528
skr::fps2::Renderer::OpenGL::Renderer::_framebuffer
uint32_t _framebuffer
id of main framebuffer
Definition: RendererOpenGL.h:61
Cubemap.h
Camera.h
skr::fps2::Renderer::OpenGL::Renderer::CreateScreenQuad
void CreateScreenQuad()
create screen quad to render everything to
Definition: RendererOpenGL.cpp:373
skr
Definition: AssetPath.h:10
skr::fps2::Renderer::OpenGL::VboType
VboType
type identifies for vertex buffer objects
Definition: RendererOpenGL.h:50
skr::fps2::Renderer::OpenGL::Renderer::Renderer
Renderer(const Renderer &)=delete
copy constructor is deleted
Texture.h
skr::fps2::Renderer::OpenGL::Renderer::InitDebugLight
void InitDebugLight()
Initialize debug light.
Definition: RendererOpenGL.cpp:517
skr::fps2::Renderer::OpenGL::Renderer::ConfigureGlobalOpenGLStates
void ConfigureGlobalOpenGLStates()
configure global OpenGL state variables
Definition: RendererOpenGL.cpp:185
MaterialParameters.h
skr::fps2::Renderer::OpenGL::Renderer::RecreateGeometry
void RecreateGeometry()
recreates geometry if game is restarted
Definition: RendererOpenGL.cpp:354
skr::fps2::Renderer::OpenGL::Renderer::_lastFrame
float _lastFrame
time of last frame
Definition: RendererOpenGL.h:82
PointLight.h
skr::fps2::Renderer::OpenGL::Renderer::Renderer
Renderer(const Renderer &&)=delete
rvalue copy constructor is deleted
skr::fps2::Renderer::OpenGL::Renderer::InitGlew
void InitGlew()
Initialze Glew.
Definition: RendererOpenGL.cpp:133
skr::fps2::Renderer::OpenGL::GeometryBoundingBox
bounding box of entire level geometry
Definition: GeometryBoundingBox.h:23
skr::fps2::Renderer::OpenGL::Renderer::_geoBB
GeometryBoundingBox _geoBB
bounding box of entire level geometry
Definition: RendererOpenGL.h:69
RoomGeometry.h