sculpto
Public Member Functions | Static Public Member Functions | List of all members
scl::gl Class Reference

#include <gl.h>

Inheritance diagram for scl::gl:
scl::render_context

Public Member Functions

const vec4GetClearColor () const override
 
bool GetWireframeMode () const override
 
render_cull_face_mode GetCullingMode () const override
 
bool GetVSync () const override
 
void SetClearColor (const vec4 &ClearColor) override
 
void SetWireframeMode (bool IsWireframe) override
 
void SetCullingMode (render_cull_face_mode CullingMode) override
 
void SetVSync (bool VSync)
 
void CreateContext (const HWND &hAppWnd, int W, int H, bool VSync)
 
void Init () override
 
void Close () override
 
void SwapBuffers () override
 
void DrawIndices (const shared< vertex_array > &VertexArray) override
 
void DrawIndicesInstanced (const shared< vertex_array > &VertexArray, int InstanceCount) override
 
shared< shader_programGetSingleColorMaterialShader () const override
 
shared< shader_programGetPhongGeometryShader () const override
 
shared< shader_programGetPhongLightingShader () const override
 
shared< shader_programGetShadowPassShader () const override
 
shared< shader_programGetToneMappingPassShader () const override
 
shared< shader_programGetGaussianBlurPassShader () const override
 
shared< shader_programGetTextureAddPassShader () const override
 
- Public Member Functions inherited from scl::render_context
virtual const vec4GetClearColor () const =0
 
virtual bool GetWireframeMode () const =0
 
virtual render_cull_face_mode GetCullingMode () const =0
 
virtual bool GetVSync () const =0
 
virtual void SetClearColor (const vec4 &ClearColor)=0
 
virtual void SetWireframeMode (bool IsWireframe)=0
 
virtual void SetCullingMode (render_cull_face_mode CullingMode)=0
 
virtual void SetVSync (bool VSync)=0
 
 render_context ()
 
virtual ~render_context ()
 
virtual void Init ()=0
 
virtual void Close ()=0
 
virtual void SwapBuffers ()=0
 
virtual void DrawIndices (const shared< vertex_array > &Mesh)=0
 
virtual void DrawIndicesInstanced (const shared< vertex_array > &Mesh, int InstanceCount)=0
 
virtual shared< shader_programGetSingleColorMaterialShader () const =0
 
virtual shared< shader_programGetPhongGeometryShader () const =0
 
virtual shared< shader_programGetPhongLightingShader () const =0
 
virtual shared< shader_programGetShadowPassShader () const =0
 
virtual shared< shader_programGetToneMappingPassShader () const =0
 
virtual shared< shader_programGetGaussianBlurPassShader () const =0
 
virtual shared< shader_programGetTextureAddPassShader () const =0
 

Static Public Member Functions

static GLenum GetGLPrimitiveType (mesh_type MeshType)
 
static GLenum GetGLShaderVariableType (shader_variable_type Type)
 
- Static Public Member Functions inherited from scl::render_context
static render_context_api GetApi ()
 
static u32 GetShaderVariableTypeSize (shader_variable_type Type)
 
static u32 GetShaderVariableComponentsCount (shader_variable_type Type)
 
static unique< render_contextCreate ()
 

Additional Inherited Members

- Static Public Attributes inherited from scl::render_context
static const int BINDING_POINT_SCENE_DATA = 0
 
static const int BINDING_POINT_MATERIAL_DATA = 5
 
static const int BINDING_POINT_LIGHTS_STORAGE = 10
 
static const int BINDING_POINT_SHADOW_CASTERS_STORAGE = 11
 
static const int BINDING_POINT_FREE = 20
 
static const int TEXTURE_SLOT_MATERIAL_DIFFUSE = 0
 
static const int TEXTURE_SLOT_MATERIAL_SPECULAR = 1
 
static const int TEXTURE_SLOT_MATERIAL_EMISSION_MAP = 2
 
static const int TEXTURE_SLOT_MATERIAL_NORMAL_MAP = 3
 
static const int TEXTURE_SLOT_SHADOW_MAP = 5
 
static const int TEXTURE_SLOT_HDR_BUFFER = 6
 
static const int TEXTURE_SLOT_BLUR_BUFFER = 7
 
static const int TEXTURE_SLOT_APPLY_SOURCE = 9
 
static const int TEXTURE_SLOT_APPLY_TEXTURE_ADD = 10
 
static const int TEXTURE_SLOT_GEOM_PASS_OUT_POSITION = 11
 
static const int TEXTURE_SLOT_GEOM_PASS_OUT_NORMAL = 12
 
static const int TEXTURE_SLOT_GEOM_PASS_OUT_COLOR = 13
 
static const int TEXTURE_SLOT_GEOM_PASS_OUT_PHONG_DIFFUSE = 14
 
static const int TEXTURE_SLOT_GEOM_PASS_OUT_PHONG_SPECULAR = 15
 
static const int TEXTURE_SLOT_GEOM_PASS_OUT_PHONG_SHININESS = 16
 
static const int TEXTURE_SLOT_LIGHTING_PASS_OUT_COLOR = 17
 
static const int TEXTURE_SLOT_LIGHTING_PASS_OUT_BRIGHT_COLOR = 18
 
static const int LIGHTS_MAX_POINT = 50
 
static const int LIGHTS_MAX_SPOT = 50
 
static const int COLOR_ATTACHMENT_GEOM_PASS_OUT_POSITION = 0
 
static const int COLOR_ATTACHMENT_GEOM_PASS_OUT_NORMAL = 1
 
static const int COLOR_ATTACHMENT_GEOM_PASS_OUT_COLOR = 2
 
static const int COLOR_ATTACHMENT_GEOM_PASS_OUT_PHONG_DIFFUSE = 3
 
static const int COLOR_ATTACHMENT_GEOM_PASS_OUT_PHONG_SPECULAR = 4
 
static const int COLOR_ATTACHMENT_GEOM_PASS_OUT_PHONG_SHININESS = 5
 
static const int COLOR_ATTACHMENT_LIGHTING_PASS_OUT_COLOR = 0
 
static const int COLOR_ATTACHMENT_LIGHTING_PASS_OUT_BRIGHT_COLOR = 1
 
static const int MESH_RESTART_INDEX = -1
 

Detailed Description

OpenGL context

Definition at line 22 of file gl.h.

Member Function Documentation

◆ Close()

void scl::gl::Close ( )
overridevirtual
  • Render context deinitialisation function.
Parameters
None.
Returns
None.

Implements scl::render_context.

Definition at line 219 of file gl.cpp.

220{
221 wglMakeCurrent(nullptr, nullptr);
222 wglDeleteContext(hGLRC);
223 ReleaseDC(*hWnd, hDC);
224}

◆ CreateContext()

void scl::gl::CreateContext ( const HWND &  hAppWnd,
int  W,
int  H,
bool  VSync 
)

OpenGL context methods.

  • Render system type constructor.
Parameters
hAppWnd- window handle.
W,H- window size.
VSync- vertical syncronisation enable flag.
Returns
None.

!SCL_PLATFORM_WINDOWS

Definition at line 178 of file gl.cpp.

179{
180#ifdef SCL_PLATFORM_WINDOWS
181 hWnd = &hAppWnd;
182 hDC = GetDC(hAppWnd);
183 hGLRC = glInitialiseContext(hDC);
184#endif
186 SetVSync(VSync);
187
188 // Set default OpenGL parameters
189 glClearColor(0, 0, 0, 0);
190 glEnable(GL_DEPTH_TEST);
191 glEnable(GL_BLEND);
192
193 glEnable(GL_PRIMITIVE_RESTART);
194 glPrimitiveRestartIndex(render_context::MESH_RESTART_INDEX);
195
196 // Enable debug callback
197#ifndef SCL_DIST
198 glEnable(GL_DEBUG_OUTPUT);
199 glEnable(GL_DEBUG_OUTPUT_SYNCHRONOUS);
200 glDebugMessageCallback(glDebugOutput, nullptr);
201 glDebugMessageControl(GL_DONT_CARE, GL_DONT_CARE, GL_DONT_CARE, 0, nullptr, GL_TRUE);
202#endif
203}
void SetVSync(bool VSync)
Definition: gl.cpp:127
static const int MESH_RESTART_INDEX

◆ DrawIndices()

void scl::gl::DrawIndices ( const shared< vertex_array > &  VertexArray)
overridevirtual
  • Draw vertices function.
Parameters
VertexArray- mesh, containing vertices and vertex indices to draw.
Returns
None.

Implements scl::render_context.

Definition at line 234 of file gl.cpp.

235{
236 VertexArray->Bind();
237 glDrawElements(
238 GetGLPrimitiveType(VertexArray->GetType()),
239 VertexArray->GetIndexBuffer()->GetCount(),
240 GL_UNSIGNED_INT,
241 nullptr
242 );
243 VertexArray->Unbind();
244}
static GLenum GetGLPrimitiveType(mesh_type MeshType)
Definition: gl.cpp:135

◆ DrawIndicesInstanced()

void scl::gl::DrawIndicesInstanced ( const shared< vertex_array > &  VertexArray,
int  InstanceCount 
)
overridevirtual
  • Draw vertices instanced function.
Parameters
VertexArray- mesh, containing vertices and vertex indices to draw.
Returns
None.

Implements scl::render_context.

Definition at line 246 of file gl.cpp.

247{
248 VertexArray->Bind();
249 glDrawElementsInstanced(
250 GetGLPrimitiveType(VertexArray->GetType()),
251 VertexArray->GetIndexBuffer()->GetCount(),
252 GL_UNSIGNED_INT,
253 nullptr,
254 InstanceCount
255 );
256 VertexArray->Unbind();
257}

◆ GetClearColor()

const scl::vec4 & scl::gl::GetClearColor ( ) const
overridevirtual

!SCL_PLATFORM_WINDOWS

OpenGL data getter/setter functions.

Frame clear color setter function.

!SCL_PLATFORM_WINDOWS

Implements scl::render_context.

Definition at line 82 of file gl.cpp.

83{
84 return ClearColor;
85}

◆ GetCullingMode()

scl::render_cull_face_mode scl::gl::GetCullingMode ( ) const
overridevirtual

Render culling mode setter function.

Implements scl::render_context.

Definition at line 92 of file gl.cpp.

93{
94 return CullingMode;
95}

◆ GetGaussianBlurPassShader()

scl::shared< scl::shader_program > scl::gl::GetGaussianBlurPassShader ( ) const
overridevirtual

OpenGL specific gaussian blur pass shader getter function.

Implements scl::render_context.

Definition at line 59 of file gl_built_in_objects.cpp.

60{
61 if (gaussian_blur_pass_shader == nullptr)
62 gaussian_blur_pass_shader = assets_manager::LoadShader("assets/shaders/lib/gaussian_blur_pass.glsl");
63 return gaussian_blur_pass_shader;
64}
shared< shader_program > LoadShader(const std::filesystem::path &ShaderProgamFilePath)

◆ GetGLPrimitiveType()

GLenum scl::gl::GetGLPrimitiveType ( mesh_type  MeshType)
static
  • Get OpenGL primitive type by mesh type function.
Parameters
MeshType- mesh type to get OpenGL primitive type according to.
Returns
OpenGL primitive type.

Definition at line 135 of file gl.cpp.

136{
137 switch (MeshType)
138 {
139 case scl::mesh_type::LINES: return GL_LINES;
140 case scl::mesh_type::POINTS: return GL_POINTS;
141 case scl::mesh_type::PATCHES: return GL_PATCHES;
142 case scl::mesh_type::TRIANGLES: return GL_TRIANGLES;
143 case scl::mesh_type::TRISTRIP: return GL_TRIANGLE_STRIP;
144 }
145
146 SCL_CORE_ASSERT(0, "Unknown mesh type!");
147 return GLenum();
148}
#define SCL_CORE_ASSERT(expr,...)
Definition: assert.h:69

◆ GetGLShaderVariableType()

GLenum scl::gl::GetGLShaderVariableType ( shader_variable_type  Type)
static
  • Get OpenGL shader variable type function.
Parameters
Type- top-level api shader variable.
Returns
OpenGL shader variable type.

Definition at line 150 of file gl.cpp.

◆ GetPhongGeometryShader()

scl::shared< scl::shader_program > scl::gl::GetPhongGeometryShader ( ) const
overridevirtual

OpenGL specific phong lighint model shader for geometry pass getter function.

Implements scl::render_context.

Definition at line 31 of file gl_built_in_objects.cpp.

32{
33 if (phong_geometry_shader == nullptr)
34 phong_geometry_shader = assets_manager::LoadShader("assets/shaders/lib/phong_geometry_pass.glsl");
35 return phong_geometry_shader;
36}

◆ GetPhongLightingShader()

scl::shared< scl::shader_program > scl::gl::GetPhongLightingShader ( ) const
overridevirtual

OpenGL specific phong lighint model shader for lighting pass getter function.

Implements scl::render_context.

Definition at line 38 of file gl_built_in_objects.cpp.

39{
40 if (phong_lighting_shader == nullptr)
41 phong_lighting_shader = assets_manager::LoadShader("assets/shaders/lib/phong_lighting_pass.glsl");
42 return phong_lighting_shader;
43}

◆ GetShadowPassShader()

scl::shared< scl::shader_program > scl::gl::GetShadowPassShader ( ) const
overridevirtual

OpenGL specific shadow pass shader getter function.

Implements scl::render_context.

Definition at line 45 of file gl_built_in_objects.cpp.

46{
47 if (shadow_pass_shader == nullptr)
48 shadow_pass_shader = assets_manager::LoadShader("assets/shaders/lib/shadow_pass.glsl");
49 return shadow_pass_shader;
50}

◆ GetSingleColorMaterialShader()

scl::shared< scl::shader_program > scl::gl::GetSingleColorMaterialShader ( ) const
overridevirtual

Sculpto library built-in backend API specific rendering objects getter function.

OpenGL specific single color material shader getter function.

Implements scl::render_context.

Definition at line 24 of file gl_built_in_objects.cpp.

25{
26 if (single_color_material_shader == nullptr)
27 single_color_material_shader = assets_manager::LoadShader("assets/shaders/lib/single_color_geometry.glsl");
28 return single_color_material_shader;
29}

◆ GetTextureAddPassShader()

scl::shared< scl::shader_program > scl::gl::GetTextureAddPassShader ( ) const
overridevirtual

OpenGL specific gaussian blur pass shader getter function.

Implements scl::render_context.

Definition at line 66 of file gl_built_in_objects.cpp.

67{
68 if (texture_add_pass_shader == nullptr)
69 texture_add_pass_shader = assets_manager::LoadShader("assets/shaders/lib/texture_add.glsl");
70 return texture_add_pass_shader;
71}

◆ GetToneMappingPassShader()

scl::shared< scl::shader_program > scl::gl::GetToneMappingPassShader ( ) const
overridevirtual

OpenGL specific full viewport mesh with tone mapping shader.

Implements scl::render_context.

Definition at line 52 of file gl_built_in_objects.cpp.

53{
54 if (tone_mapping_pass_shader == nullptr)
55 tone_mapping_pass_shader = assets_manager::LoadShader("assets/shaders/lib/tone_mapping_pass.glsl");
56 return tone_mapping_pass_shader;
57}

◆ GetVSync()

bool scl::gl::GetVSync ( ) const
overridevirtual

Render virtual syncronisation flag getter function.

Implements scl::render_context.

Definition at line 97 of file gl.cpp.

98{
99 return IsVSync;
100}

◆ GetWireframeMode()

bool scl::gl::GetWireframeMode ( ) const
overridevirtual

Render wire frame mode setter function.

Implements scl::render_context.

Definition at line 87 of file gl.cpp.

88{
89 return IsWireframe;
90}

◆ Init()

void scl::gl::Init ( )
overridevirtual
  • Render context initialisation function.
Parameters
None.
Returns
None.

!SCL_PLATFORM_WINDOWS

Implements scl::render_context.

Definition at line 205 of file gl.cpp.

206{
207 SCL_CORE_SUCCES("OpenGL render context initialisation started.");
208
209#ifdef SCL_PLATFORM_WINDOWS
210 application &app = application::Get();
211 const window &win = app.GetWindow();
212 const window::data win_data = win.GetWindowData();
213
214 this->CreateContext(win.GetHandle(), win_data.Width, win_data.Height, true);
215 SCL_CORE_SUCCES("Windows OpenGL render context initialised successfully.");
216#endif
217}
void CreateContext(const HWND &hAppWnd, int W, int H, bool VSync)
Definition: gl.cpp:178
#define SCL_CORE_SUCCES(...)
Definition: log.h:42

◆ SetClearColor()

void scl::gl::SetClearColor ( const vec4 ClearColor)
overridevirtual

Frame clear color setter function.

Implements scl::render_context.

Definition at line 102 of file gl.cpp.

103{
104 this->ClearColor = ClearColor;
105 glClearColor(SCL_VEC_XYZW(ClearColor));
106}
#define SCL_VEC_XYZW(v)
Definition: vec4.h:19

◆ SetCullingMode()

void scl::gl::SetCullingMode ( render_cull_face_mode  CullingMode)
overridevirtual

Render culling mode setter function.

Implements scl::render_context.

Definition at line 114 of file gl.cpp.

115{
116 this->CullingMode = CullingMode;
117 switch (CullingMode)
118 {
119 case scl::render_cull_face_mode::OFF: glDisable(GL_CULL_FACE); return;
120 case scl::render_cull_face_mode::BACK: glEnable(GL_CULL_FACE); glCullFace(GL_BACK); return;
121 case scl::render_cull_face_mode::FRONT: glEnable(GL_CULL_FACE); glCullFace(GL_FRONT); return;
122 }
123
124 SCL_CORE_ASSERT(0, "Unknown culling mode!");
125}

◆ SetVSync()

void scl::gl::SetVSync ( bool  VSync)
virtual

Render virtual syncronisation flag setter function.

SCL_PLATFORM_WINDOWS

Implements scl::render_context.

Definition at line 127 of file gl.cpp.

128{
129 this->IsVSync = IsVSync;
130#ifdef SCL_PLATFORM_WINDOWS
131 wglSwapIntervalEXT(IsVSync);
132#endif
133}

◆ SetWireframeMode()

void scl::gl::SetWireframeMode ( bool  IsWireframe)
overridevirtual

Render wire frame mode setter function.

Implements scl::render_context.

Definition at line 108 of file gl.cpp.

109{
110 this->IsWireframe = IsWireframe;
111 glPolygonMode(GL_FRONT_AND_BACK, IsWireframe ? GL_LINE : GL_FILL);
112}

◆ SwapBuffers()

void scl::gl::SwapBuffers ( )
overridevirtual
  • Swap frame buffers function.
Parameters
None.
Returns
None.

Another way (not sure): wglSwapLayerBuffers(hDC, WGL_SWAP_MAIN_PLANE);

Implements scl::render_context.

Definition at line 226 of file gl.cpp.

227{
231 ::SwapBuffers(hDC);
232}
void SwapBuffers() override
Definition: gl.cpp:226

The documentation for this class was generated from the following files: