DI-Guy SDK Documentation  13.6
diguyOglUniformBuffer.h
Go to the documentation of this file.
1 #pragma once
2 
3 
4 // needed for function prototypes
5 #include <GL/glew.h>
6 #include <GL/gl.h>
7 
8 #include <glm/glm.hpp>
9 
11 
16 {
20 };
21 
22 
27 {
28  glm::vec4 ambient;
29  glm::vec4 diffuse;
30  glm::vec4 emissivity;
31  glm::vec4 specular;
32  float shininess;
33 };
34 
39 {
40  diguyOglUboFog() {
41  mode = 0.0f;
42  start = 0.0f;
43  end = 100.0f;
44  density = .0001f;
45  }
46  // note 4 floats which is fine for alignment
47  float mode;
48  float start;
49  float end;
50  float density;
51  glm::vec4 color;
52 };
53 
58 {
59  diguyOglUboLight() : diffuse(1.0f, 1.0f, 1.0f, 1.0f){
60  falloff_r = 0.0f;
61  falloff_rsq = 0.0f;
62  spot_angle = 0.0f;
63  spot_exponent = 0.0f;
64  }
65  glm::vec4 position;
66  glm::vec4 direction;
67  glm::vec4 ambient;
68  glm::vec4 diffuse;
69  glm::vec4 specular;
70  float falloff_r;
71  float falloff_rsq;
72  float spot_angle;
73  float spot_exponent;
74 };
75 
76 const int DIGUY_OGL_MAX_NUM_LIGHTS = 8;
77 
82 {
84  global_ambient(.2, .2, .2, 0),
86  {
87  lights[0].direction[0] = .7f;
88  lights[0].direction[1] = .7f;
89  lights[0].direction[2] = .7f;
90  }
91 
92  glm::vec4 global_ambient;
93  glm::vec4 eye_position;
94 
97 
99 
101 
102  int num_active_lights;
103 
104 };
105 
110 {
112 };
113 
118 {
119  glm::mat4 ufrm_ProjectionMatrix; // needed by instancing
120  glm::mat4 ufrm_ViewMatrix;
121  glm::mat4 ufrm_ModelMatrix;
124  glm::mat4 ufrm_TextureMatrix;
125 
126  // size problem? need to fix the padding
127  // this isn't actually used currently
128  glm::mat3 ufrm_NormalMatrix;
129 
130 };
131 
143 {
144 public:
150 
156 
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;
179 
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;
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:
199  glm::vec4 m_global_ambient_material;
200 };
201 
virtual void set_material(const diguyGraphicsMaterial *material) override
This uniform material updater effectively replaces a subclassed graphics material in immediate mode...
Definition: diguyOglUniformBuffer.cpp:273
GLhandleARB m_uniform_transform_buffer_object
handles to Uniform buffers.
Definition: diguyOglUniformBuffer.h:156
This class is an abstract wrapper around shader constants for use with DI-Guy rendering.
Definition: diguyUniformBufferUpdater.h:61
Definition: diguyOglUniformBuffer.h:16
diguyOglUboFog fog
Definition: diguyOglUniformBuffer.h:96
virtual void set_global_ambient_light(float r, float g, float b) override
Replacement for gl light model.
Definition: diguyOglUniformBuffer.cpp:342
GLhandleARB m_uniform_per_frame_buffer_object
Definition: diguyOglUniformBuffer.h:158
glm::mat4 ufrm_ProjectionMatrix
Definition: diguyOglUniformBuffer.h:117
virtual void set_texture_matrix(const float *matrix) override
Needed for shadow casting.
Definition: diguyOglUniformBuffer.cpp:187
Uniform Buffer for material information must match data layout in diguy_shared_library.glsl.
Definition: diguyOglUniformBuffer.h:107
diguyOglUboLight lights[DIGUY_OGL_MAX_NUM_LIGHTS]
light 0 is assumed to be directional sun light
Definition: diguyOglUniformBuffer.h:94
</b > 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:376
virtual void set_material_color(float r, float g, float b, float a) override
needed for drawing helper objects
Definition: diguyOglUniformBuffer.cpp:235
float mode
Definition: diguyOglUniformBuffer.h:45
glm::vec4 color
Definition: diguyOglUniformBuffer.h:49
Lightweight structure for communicating material parameters to gpu This must match layout in shader l...
Definition: diguyOglUniformBuffer.h:24
glm::vec4 diffuse
Definition: diguyOglUniformBuffer.h:27
virtual ~diguyOglUniformBufferUpdater()
Definition: diguyOglUniformBuffer.cpp:32
virtual void set_num_active_lights(int num_lights) override
Called so shaders know how many lights to iterate through.
Definition: diguyOglUniformBuffer.cpp:423
Definition: diguyOglUniformBuffer.h:18
glm::vec4 diffuse
Definition: diguyOglUniformBuffer.h:66
diguyOglTransformUniformBuffer m_transform_stack_ubo
the equivalent of the OpenGL matrix stack
Definition: diguyOglUniformBuffer.h:150
glm::vec4 direction
Definition: diguyOglUniformBuffer.h:64
Uniform Buffer for transform stack, will change many times a frame must match data layout in diguy_sh...
Definition: diguyOglUniformBuffer.h:115
diguyOglPerFrameUniformBuffer m_per_frame_ubo
data that will change infrequently, lights, fog, shadows, etc
Definition: diguyOglUniformBuffer.h:147
glm::vec4 ambient
Definition: diguyOglUniformBuffer.h:65
virtual void initialize() override
Definition: diguyOglUniformBuffer.cpp:49
glm::mat4 ufrm_ModelViewMatrix
Definition: diguyOglUniformBuffer.h:120
float start
Definition: diguyOglUniformBuffer.h:46
Uniform Buffer for information that typically changes just once a frame This must match layout in sha...
Definition: diguyOglUniformBuffer.h:79
glm::mat4 ufrm_TextureMatrix
Definition: diguyOglUniformBuffer.h:122
A class that represents a shared material.
Definition: diguyGraphicsMaterial.h:42
int m_use_global_ambient_material
Definition: diguyOglUniformBuffer.h:196
virtual void set_view_matrix(const float *matrix) override
Called as part of diguy camera apply function.
Definition: diguyOglUniformBuffer.cpp:98
int m_transform_stack_needs_update
Definition: diguyOglUniformBuffer.h:193
diguyOglBufferIndexes
Default indexes for diguy uniform buffer locations in the shader.
Definition: diguyOglUniformBuffer.h:14
virtual void set_model_matrix(const float *matrix) override
Called as part of diguy scene traversing code.
Definition: diguyOglUniformBuffer.cpp:86
GLhandleARB m_uniform_material_buffer_object
Definition: diguyOglUniformBuffer.h:157
float spot_exponent
Definition: diguyOglUniformBuffer.h:71
glm::mat3 ufrm_NormalMatrix
Definition: diguyOglUniformBuffer.h:126
glm::vec4 specular
Definition: diguyOglUniformBuffer.h:67
This class is a simple structure for transmitting diguy lights down to the uniform buffer system this...
Definition: diguyViewLight.h:36
glm::mat4 ufrm_ModelViewProjectionMatrix
Definition: diguyOglUniformBuffer.h:121
diguyOglUboLight()
Definition: diguyOglUniformBuffer.h:57
diguyOglUniformBufferUpdater()
Definition: diguyOglUniformBuffer.cpp:19
glm::vec4 emissivity
Definition: diguyOglUniformBuffer.h:28
virtual int get_use_global_ambient_material() override
Definition: diguyOglUniformBuffer.h:182
virtual void set_eye_position(float x, float y, float z) override
Definition: diguyOglUniformBuffer.cpp:351
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:181
glm::vec4 specular
Definition: diguyOglUniformBuffer.h:29
const int DIGUY_OGL_MAX_NUM_LIGHTS
Definition: diguyOglUniformBuffer.h:74
glm::vec4 eye_position
Definition: diguyOglUniformBuffer.h:91
int num_active_lights
Definition: diguyOglUniformBuffer.h:100
float density
Definition: diguyOglUniformBuffer.h:48
Definition: diguyOglUniformBuffer.h:17
Lightweight structure for communicating light parameters to gpu This must match layout in shader libr...
Definition: diguyOglUniformBuffer.h:55
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:109
const diguyGraphicsMaterial * m_last_material
Definition: diguyOglUniformBuffer.h:195
glm::vec4 m_global_ambient_material
Definition: diguyOglUniformBuffer.h:197
int m_per_frame_uniforms_needs_update
Definition: diguyOglUniformBuffer.h:192
glm::vec4 position
Definition: diguyOglUniformBuffer.h:63
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:432
glm::vec4 global_ambient
Definition: diguyOglUniformBuffer.h:90
diguyOglPerFrameUniformBuffer()
Definition: diguyOglUniformBuffer.h:81
float end
Definition: diguyOglUniformBuffer.h:47
virtual void set_global_ambient_material(float r, float g, float b) override
Definition: diguyOglUniformBuffer.cpp:360
virtual void set_material_spec(float r, float g, float b, float shine) override
Definition: diguyOglUniformBuffer.cpp:255
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:326
virtual void set_projection_matrix(const float *matrix) override
Called as part of diguy camera apply function.
Definition: diguyOglUniformBuffer.cpp:174
glm::vec4 ambient
Definition: diguyOglUniformBuffer.h:26
float falloff_r
Definition: diguyOglUniformBuffer.h:68
glm::mat4 ufrm_ViewMatrix
Definition: diguyOglUniformBuffer.h:118
Lightweight structure for communicating fog parameters to gpu This must match layout in shader librar...
Definition: diguyOglUniformBuffer.h:36
float shininess
Definition: diguyOglUniformBuffer.h:30
float spot_angle
Definition: diguyOglUniformBuffer.h:70
diguyOglMaterialUniformBuffer m_material_ubo
the equivalent of the OpenGL material structures
Definition: diguyOglUniformBuffer.h:153
glm::mat4 ufrm_ModelMatrix
Definition: diguyOglUniformBuffer.h:119
diguyShadowMapParams shadow_params
Definition: diguyOglUniformBuffer.h:98
diguyOglUboFog()
Definition: diguyOglUniformBuffer.h:38
This is an example implementation of a diguyUniformBufferUpdater it's responsible for translating api...
Definition: diguyOglUniformBuffer.h:140
virtual void get_global_ambient_material(float **\return, float *g, float **< b >) override
Definition: diguyOglUniformBuffer.cpp:368
virtual void get_projection_matrix(float *matrix, int transpose) override
helper function if neede
Definition: diguyOglUniformBuffer.cpp:142
float falloff_rsq
Definition: diguyOglUniformBuffer.h:69
virtual void get_view_matrix(float *matrix, int transpose) override
Needed by particle systems.
Definition: diguyOglUniformBuffer.cpp:110