sculpto
gl.h
Go to the documentation of this file.
1/*!****************************************************************//*!*
2 * \file opengl.h
3 * \brief OpenGL context class definition module.
4 *
5 * \author Sabitov Kirill
6 * \date 26 June 2022
7 *********************************************************************/
8
9#pragma once
10
11#define GLEW_STATIC
12#include <glew.h>
13
15
16namespace scl
17{
19 class shader_program;
20
22 class gl : public render_context
23 {
24
25 private:
26 vec4 ClearColor { 0 };
27 bool IsWireframe {};
28 bool IsVSync {};
30
31 static shared<shader_program> single_color_material_shader;
32 static shared<shader_program> phong_geometry_shader;
33 static shared<shader_program> phong_lighting_shader;
34 static shared<shader_program> shadow_pass_shader;
35 static shared<shader_program> tone_mapping_pass_shader;
36 static shared<shader_program> gaussian_blur_pass_shader;
37 static shared<shader_program> texture_add_pass_shader;
38
39#ifdef SCL_PLATFORM_WINDOWS
40 HGLRC hGLRC;
41 HDC hDC;
42 const HWND *hWnd;
43#else
44# error Other platforms currently dont support OpenGL
45#endif
46
47 public:
49 const vec4 &GetClearColor() const override;
51 bool GetWireframeMode() const override;
55 bool GetVSync() const override;
56
58 void SetClearColor(const vec4 &ClearColor) override;
60 void SetWireframeMode(bool IsWireframe) override;
62 void SetCullingMode(render_cull_face_mode CullingMode) override;
64 void SetVSync(bool VSync);
65
66 /*!*
67 * Get OpenGL primitive type by mesh type function.
68 *
69 * \param MeshType - mesh type to get OpenGL primitive type according to.
70 * \return OpenGL primitive type.
71 */
72 static GLenum GetGLPrimitiveType(mesh_type MeshType);
73
74 /*!*
75 * Get OpenGL shader variable type function.
76 *
77 * \param Type - top-level api shader variable.
78 * \return OpenGL shader variable type.
79 */
81
82 public:
83 /*!*
84 * Render system type constructor.
85 *
86 * \param hAppWnd - window handle.
87 * \param W, H - window size.
88 * \param VSync - vertical syncronisation enable flag.
89 * \return None.
90 */
91 void CreateContext(const HWND &hAppWnd, int W, int H, bool VSync);
92
93 /*!*
94 * Render context initialisation function.
95 *
96 * \param None.
97 * \return None.
98 */
99 void Init() override;
100
101 /*!*
102 * Render context deinitialisation function.
103 *
104 * \param None.
105 * \return None.
106 */
107 void Close() override;
108
109 /*!*
110 * Swap frame buffers function.
111 *
112 * \param None.
113 * \return None.
114 */
115 void SwapBuffers() override;
116
117 /*!*
118 * Draw vertices function.
119 *
120 * \param VertexArray - mesh, containing vertices and vertex indices to draw.
121 * \return None.
122 */
123 void DrawIndices(const shared<vertex_array> &VertexArray) override;
124
125 /*!*
126 * Draw vertices instanced function.
127 *
128 * \param VertexArray - mesh, containing vertices and vertex indices to draw.
129 * \return None.
130 */
131 void DrawIndicesInstanced(const shared<vertex_array> &VertexArray, int InstanceCount) override;
132
133 public:
148 };
149}
Definition: gl.h:23
void DrawIndices(const shared< vertex_array > &VertexArray) override
Definition: gl.cpp:234
static GLenum GetGLShaderVariableType(shader_variable_type Type)
Definition: gl.cpp:150
const vec4 & GetClearColor() const override
Definition: gl.cpp:82
shared< shader_program > GetShadowPassShader() const override
shared< shader_program > GetToneMappingPassShader() const override
void DrawIndicesInstanced(const shared< vertex_array > &VertexArray, int InstanceCount) override
Definition: gl.cpp:246
void SetClearColor(const vec4 &ClearColor) override
Definition: gl.cpp:102
shared< shader_program > GetGaussianBlurPassShader() const override
void SetCullingMode(render_cull_face_mode CullingMode) override
Definition: gl.cpp:114
void Init() override
Definition: gl.cpp:205
shared< shader_program > GetPhongGeometryShader() const override
void SetWireframeMode(bool IsWireframe) override
Definition: gl.cpp:108
render_cull_face_mode GetCullingMode() const override
Definition: gl.cpp:92
bool GetWireframeMode() const override
Definition: gl.cpp:87
shared< shader_program > GetPhongLightingShader() const override
shared< shader_program > GetTextureAddPassShader() const override
shared< shader_program > GetSingleColorMaterialShader() const override
bool GetVSync() const override
Definition: gl.cpp:97
void SwapBuffers() override
Definition: gl.cpp:226
static GLenum GetGLPrimitiveType(mesh_type MeshType)
Definition: gl.cpp:135
void CreateContext(const HWND &hAppWnd, int W, int H, bool VSync)
Definition: gl.cpp:178
void Close() override
Definition: gl.cpp:219
void SetVSync(bool VSync)
Definition: gl.cpp:127
Definition: base.h:33
std::shared_ptr< T > shared
Definition: smart_ptr.h:15
shader_variable_type
mesh_type
Definition: vertex_array.h:18
render_cull_face_mode
Base, abstract, backend render api independent render context class implementation module.