DI-Guy SDK Documentation  13.7
diguyOglUniformBuffer.h
Go to the documentation of this file.
1 /****************************************************************************
2  * Copyright (c) 2022 MAK Technologies, Inc.
3  * All rights reserved.
4  ****************************************************************************/
5 
6 #pragma once
7 
9 
10 #include <glm/glm.hpp>
11 
12 // needed for function prototypes
13 #include <GL/glew.h>
14 #include <GL/gl.h>
15 
16 
17 const int DIGUY_OGL_MAX_NUM_LIGHTS = 8;
18 
19 
24 {
28 };
29 
30 
35 {
36  glm::vec4 ambient;
37  glm::vec4 diffuse;
38  glm::vec4 emissivity;
39  glm::vec4 specular;
40  float shininess;
41 };
42 
46 struct diguyOglUboFog
47 {
49  : mode( 0.0f )
50  , start( 0.0f )
51  , end( 100.0f )
52  , density( 0.0001f )
53  , color()
54  {
55  }
56 
57  // note 4 floats which is fine for alignment
58  float mode;
59  float start;
60  float end;
61  float density;
62  glm::vec4 color;
63 };
64 
68 struct diguyOglUboLight
69 {
71  : position()
72  , direction()
73  , ambient()
74  , diffuse( 1.0f, 1.0f, 1.0f, 1.0f )
75  , specular()
76  , falloff_r( 0.0f )
77  , falloff_rsq( 0.0f )
78  , spot_angle( 0.0f )
79  , spot_exponent( 0.0f )
80  {
81  }
82  glm::vec4 position;
83  glm::vec4 direction;
84  glm::vec4 ambient;
85  glm::vec4 diffuse;
86  glm::vec4 specular;
87  float falloff_r;
88  float falloff_rsq;
89  float spot_angle;
90  float spot_exponent;
91 };
92 
97 {
99  global_ambient(.2, .2, .2, 0),
101  {
102  lights[0].direction[0] = .7f;
103  lights[0].direction[1] = .7f;
104  lights[0].direction[2] = .7f;
105  }
106 
107  glm::vec4 global_ambient;
108  glm::vec4 eye_position;
109 
112 
114 
116 
117  int num_active_lights;
118 
119 };
120 
125 {
127 };
128 
133 {
134  glm::mat4 ufrm_ProjectionMatrix; // needed by instancing
135  glm::mat4 ufrm_ViewMatrix;
136  glm::mat4 ufrm_ModelMatrix;
137  glm::mat4 ufrm_ModelViewMatrix;
139  glm::mat4 ufrm_TextureMatrix;
140 
141  // size problem? need to fix the padding
142  // this isn't actually used currently
143  glm::mat3 ufrm_NormalMatrix;
144 
145 };
146 
147 
156 {
157 public:
158 
161 
162  virtual void initialize() override;
163 
165  virtual void update() override;
166 
167  virtual void set_model_matrix( const float* matrix ) override;
168  virtual void set_view_matrix( const float* matrix ) override;
169  virtual void get_view_matrix( float* matrix, int transpose ) override;
170  virtual void get_projection_matrix( float* matrix, int transpose ) override;
171 
172  virtual void set_projection_matrix( const float* matrix ) override;
173  virtual void set_texture_matrix( const float* matrix ) override;
174  virtual void set_material( const diguyGraphicsMaterial* material ) override;
175  virtual void set_material_color( float r, float g, float b, float a ) override;
176  virtual void set_material_spec( float r, float g, float b, float shine ) override;
177 
178  virtual void set_fog( const diguyViewFog* fog ) override;
180  virtual void set_global_ambient_light( float r, float g, float b ) override;
181  virtual void set_eye_position( float x, float y, float z ) override;
182 
183  virtual void set_use_global_ambient_material( int val ) override { m_use_global_ambient_material = val; }
184  virtual int get_use_global_ambient_material() override { return m_use_global_ambient_material; }
185 
186  virtual void set_global_ambient_material( float r, float g, float b ) override;
187  virtual void get_global_ambient_material( float* r, float* g, float* b ) override;
188 
189  virtual void set_light( int index, const diguyLightRenderDesc* light ) override;
190  virtual void set_num_active_lights( int num_lights ) override;
191  virtual void set_shadow_map_params( const diguyShadowMapParams* shadow_params ) override;
193 private:
197 
200  glm::vec4 m_global_ambient_material;
202 public:
203 
206 
209 
212 
217 
218 };
virtual void set_material(const diguyGraphicsMaterial *material) override
This uniform material updater effectively replaces a subclassed graphics material in immediate mode...
Definition: diguyOglUniformBuffer.cpp:271
GLhandleARB m_uniform_transform_buffer_object
handles to Uniform buffers.
Definition: diguyOglUniformBuffer.h:210
This class is an abstract wrapper around shader constants for use with DI-Guy rendering.
Definition: diguyUniformBufferUpdater.h:61
Definition: diguyOglUniformBuffer.h:23
diguyOglUboFog fog
Definition: diguyOglUniformBuffer.h:110
virtual void set_global_ambient_light(float r, float g, float b) override
Replacement for gl light model.
Definition: diguyOglUniformBuffer.cpp:303
GLhandleARB m_uniform_per_frame_buffer_object
Definition: diguyOglUniformBuffer.h:212
glm::mat4 ufrm_ProjectionMatrix
Definition: diguyOglUniformBuffer.h:131
virtual void set_texture_matrix(const float *matrix) override
Needed for shadow casting.
Definition: diguyOglUniformBuffer.cpp:190
Uniform Buffer for material information must match data layout in diguy_shared_library.glsl.
Definition: diguyOglUniformBuffer.h:121
diguyOglUboLight lights[DIGUY_OGL_MAX_NUM_LIGHTS]
light 0 is assumed to be directional sun light
Definition: diguyOglUniformBuffer.h:108
virtual void set_light(int index, const diguyLightRenderDesc *light) override
See diguyOglUtils::update_lighting for an example of using this function to fill out uniform buffer...
Definition: diguyOglUniformBuffer.cpp:338
virtual void set_material_color(float r, float g, float b, float a) override
needed for drawing helper objects
Definition: diguyOglUniformBuffer.cpp:234
float mode
Definition: diguyOglUniformBuffer.h:55
glm::vec4 color
Definition: diguyOglUniformBuffer.h:59
Lightweight structure for communicating material parameters to gpu This must match layout in shader l...
Definition: diguyOglUniformBuffer.h:31
glm::vec4 diffuse
Definition: diguyOglUniformBuffer.h:34
virtual ~diguyOglUniformBufferUpdater()
Definition: diguyOglUniformBuffer.cpp:38
virtual void set_num_active_lights(int num_lights) override
Called so shaders know how many lights to iterate through.
Definition: diguyOglUniformBuffer.cpp:384
Definition: diguyOglUniformBuffer.h:25
virtual void get_global_ambient_material(float *r, float *g, float *b) override
Definition: diguyOglUniformBuffer.cpp:322
glm::vec4 diffuse
Definition: diguyOglUniformBuffer.h:82
diguyOglTransformUniformBuffer m_transform_stack_ubo
the equivalent of the OpenGL matrix stack
Definition: diguyOglUniformBuffer.h:204
glm::vec4 direction
Definition: diguyOglUniformBuffer.h:80
Uniform Buffer for transform stack, will change many times a frame must match data layout in diguy_sh...
Definition: diguyOglUniformBuffer.h:129
diguyOglPerFrameUniformBuffer m_per_frame_ubo
data that will change infrequently, lights, fog, shadows, etc
Definition: diguyOglUniformBuffer.h:201
glm::vec4 ambient
Definition: diguyOglUniformBuffer.h:81
virtual void initialize() override
Definition: diguyOglUniformBuffer.cpp:57
glm::mat4 ufrm_ModelViewMatrix
Definition: diguyOglUniformBuffer.h:134
float start
Definition: diguyOglUniformBuffer.h:56
Uniform Buffer for information that typically changes just once a frame This must match layout in sha...
Definition: diguyOglUniformBuffer.h:93
glm::mat4 ufrm_TextureMatrix
Definition: diguyOglUniformBuffer.h:136
A class that represents a shared material.
Definition: diguyGraphicsMaterial.h:42
virtual void set_view_matrix(const float *matrix) override
Called as part of diguy camera apply function.
Definition: diguyOglUniformBuffer.cpp:105
bool m_use_global_ambient_material
Definition: diguyOglUniformBuffer.h:195
int m_transform_stack_needs_update
Definition: diguyOglUniformBuffer.h:192
diguyOglBufferIndexes
Default indexes for diguy uniform buffer locations in the shader.
Definition: diguyOglUniformBuffer.h:21
virtual void set_model_matrix(const float *matrix) override
Called as part of diguy scene traversing code.
Definition: diguyOglUniformBuffer.cpp:95
GLhandleARB m_uniform_material_buffer_object
Definition: diguyOglUniformBuffer.h:211
float spot_exponent
Definition: diguyOglUniformBuffer.h:87
glm::mat3 ufrm_NormalMatrix
Definition: diguyOglUniformBuffer.h:140
glm::vec4 specular
Definition: diguyOglUniformBuffer.h:83
This class is a simple structure for transmitting diguy lights down to the uniform buffer system this...
Definition: diguyViewLight.h:34
glm::mat4 ufrm_ModelViewProjectionMatrix
Definition: diguyOglUniformBuffer.h:135
diguyOglUboLight()
Definition: diguyOglUniformBuffer.h:67
diguyOglUniformBufferUpdater()
Definition: diguyOglUniformBuffer.cpp:23
glm::vec4 emissivity
Definition: diguyOglUniformBuffer.h:35
virtual int get_use_global_ambient_material() override
Definition: diguyOglUniformBuffer.h:180
virtual void set_eye_position(float x, float y, float z) override
Definition: diguyOglUniformBuffer.cpp:309
virtual void set_use_global_ambient_material(int val) override
Indicates that when material bind happens the ambient value of the material should be ignored and the...
Definition: diguyOglUniformBuffer.h:179
glm::vec4 specular
Definition: diguyOglUniformBuffer.h:36
const int DIGUY_OGL_MAX_NUM_LIGHTS
Definition: diguyOglUniformBuffer.h:16
glm::vec4 eye_position
Definition: diguyOglUniformBuffer.h:105
int num_active_lights
Definition: diguyOglUniformBuffer.h:114
float density
Definition: diguyOglUniformBuffer.h:58
Definition: diguyOglUniformBuffer.h:24
Lightweight structure for communicating light parameters to gpu This must match layout in shader libr...
Definition: diguyOglUniformBuffer.h:65
Describes basic fog model that is used by DI-Guy Scenario and our default ogl renderer Most users wil...
Definition: diguyViewFog.h:42
Lightweight structure for sending shadow parameters to shaders from DI-Guy Scenario note this maps di...
Definition: diguyUniformBufferUpdater.h:33
diguyOglUboMaterial material
Definition: diguyOglUniformBuffer.h:123
const diguyGraphicsMaterial * m_last_material
Definition: diguyOglUniformBuffer.h:194
glm::vec4 m_global_ambient_material
Definition: diguyOglUniformBuffer.h:196
int m_per_frame_uniforms_needs_update
Definition: diguyOglUniformBuffer.h:191
glm::vec4 position
Definition: diguyOglUniformBuffer.h:79
virtual void update() override
called before any drawing calls.
Definition: diguyOglUniformBuffer.cpp:200
virtual void set_shadow_map_params(const diguyShadowMapParams *shadow_params) override
Used by DI-Guy Scenario to communicate shadow params to video card.
Definition: diguyOglUniformBuffer.cpp:390
glm::vec4 global_ambient
Definition: diguyOglUniformBuffer.h:104
diguyOglPerFrameUniformBuffer()
Definition: diguyOglUniformBuffer.h:95
float end
Definition: diguyOglUniformBuffer.h:57
virtual void set_global_ambient_material(float r, float g, float b) override
Definition: diguyOglUniformBuffer.cpp:315
virtual void set_material_spec(float r, float g, float b, float shine) override
Definition: diguyOglUniformBuffer.cpp:254
virtual void set_fog(const diguyViewFog *fog) override
indicates the current diguy fog to use for rendering. Probably only relevant to DI-Guy Scenario ...
Definition: diguyOglUniformBuffer.cpp:288
virtual void set_projection_matrix(const float *matrix) override
Called as part of diguy camera apply function.
Definition: diguyOglUniformBuffer.cpp:179
glm::vec4 ambient
Definition: diguyOglUniformBuffer.h:33
float falloff_r
Definition: diguyOglUniformBuffer.h:84
glm::mat4 ufrm_ViewMatrix
Definition: diguyOglUniformBuffer.h:132
Lightweight structure for communicating fog parameters to gpu This must match layout in shader librar...
Definition: diguyOglUniformBuffer.h:43
float shininess
Definition: diguyOglUniformBuffer.h:37
float spot_angle
Definition: diguyOglUniformBuffer.h:86
diguyOglMaterialUniformBuffer m_material_ubo
the equivalent of the OpenGL material structures
Definition: diguyOglUniformBuffer.h:207
glm::mat4 ufrm_ModelMatrix
Definition: diguyOglUniformBuffer.h:133
diguyShadowMapParams shadow_params
Definition: diguyOglUniformBuffer.h:112
diguyOglUboFog()
Definition: diguyOglUniformBuffer.h:45
This is an example implementation of a diguyUniformBufferUpdater it's responsible for translating api...
Definition: diguyOglUniformBuffer.h:151
virtual void get_projection_matrix(float *matrix, int transpose) override
helper function if neede
Definition: diguyOglUniformBuffer.cpp:147
float falloff_rsq
Definition: diguyOglUniformBuffer.h:85
virtual void get_view_matrix(float *matrix, int transpose) override
Needed by particle systems.
Definition: diguyOglUniformBuffer.cpp:115