DI-Guy SDK Documentation  13.5
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();
163 
165  virtual void update();
166 
167  virtual void set_model_matrix(const float * matrix);
168  virtual void set_view_matrix(const float * matrix);
169  virtual void get_view_matrix(float * matrix, int transpose);
170 
171  virtual void set_projection_matrix(const float * matrix);
172  virtual void set_texture_matrix(const float * matrix);
173  virtual void set_material(const diguyGraphicsMaterial * material);
174  virtual void set_material_color(float r, float g, float b, float a);
175  virtual void set_material_spec(float r, float g, float b, float shine);
176 
177  virtual void set_fog(const diguyViewFog * fog);
178 
179  virtual void set_global_ambient_light(float r, float g, float b);
180  virtual void set_eye_position(float x, float y, float z);
182  virtual void set_use_global_ambient_material(int val){ m_use_global_ambient_material = val; }
184 
185  virtual void set_global_ambient_material(float r, float g, float b);
186  virtual void get_global_ambient_material(float *r, float *g, float *b);
187 
188  virtual void set_light(int index, const diguyLightRenderDesc * light);
189  virtual void set_num_active_lights(int num_lights);
190  virtual void set_shadow_map_params(const diguyShadowMapParams * shadow_params);
192 private:
198  glm::vec4 m_global_ambient_material;
199 };
200 
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
virtual void get_global_ambient_material(float **\return, float *g, float **< b >)
Definition: diguyOglUniformBuffer.cpp:330
Definition: diguyOglUniformBuffer.h:16
</b > virtual void set_light(int index, const diguyLightRenderDesc *light)
See diguyOglUtils::update_lighting for an example of using this function to fill out uniform buffer...
Definition: diguyOglUniformBuffer.cpp:338
diguyOglUboFog fog
Definition: diguyOglUniformBuffer.h:96
GLhandleARB m_uniform_per_frame_buffer_object
Definition: diguyOglUniformBuffer.h:158
glm::mat4 ufrm_ProjectionMatrix
Definition: diguyOglUniformBuffer.h:117
virtual void get_view_matrix(float *matrix, int transpose)
Needed by particle systems.
Definition: diguyOglUniformBuffer.cpp:110
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
float mode
Definition: diguyOglUniformBuffer.h:45
virtual void set_projection_matrix(const float *matrix)
Called as part of diguy camera apply function.
Definition: diguyOglUniformBuffer.cpp:142
glm::vec4 color
Definition: diguyOglUniformBuffer.h:49
virtual void set_material_color(float r, float g, float b, float a)
needed for drawing helper objects
Definition: diguyOglUniformBuffer.cpp:203
Lightweight structure for communicating material parameters to gpu This must match layout in shader l...
Definition: diguyOglUniformBuffer.h:24
virtual void set_model_matrix(const float *matrix)
Called as part of diguy scene traversing code.
Definition: diguyOglUniformBuffer.cpp:86
glm::vec4 diffuse
Definition: diguyOglUniformBuffer.h:27
virtual ~diguyOglUniformBufferUpdater()
Definition: diguyOglUniformBuffer.cpp:32
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
virtual void set_global_ambient_light(float r, float g, float b)
Replacement for gl light model.
Definition: diguyOglUniformBuffer.cpp:304
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
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:195
int m_transform_stack_needs_update
Definition: diguyOglUniformBuffer.h:192
virtual int get_use_global_ambient_material()
Definition: diguyOglUniformBuffer.h:181
diguyOglBufferIndexes
Default indexes for diguy uniform buffer locations in the shader.
Definition: diguyOglUniformBuffer.h:14
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 void set_num_active_lights(int num_lights)
Called so shaders know how many lights to iterate through.
Definition: diguyOglUniformBuffer.cpp:385
virtual void set_eye_position(float x, float y, float z)
Definition: diguyOglUniformBuffer.cpp:313
virtual void set_use_global_ambient_material(int val)
Indicates that when material bind happens the ambient value of the material should be ignored and the...
Definition: diguyOglUniformBuffer.h:180
glm::vec4 specular
Definition: diguyOglUniformBuffer.h:29
const int DIGUY_OGL_MAX_NUM_LIGHTS
Definition: diguyOglUniformBuffer.h:74
virtual void initialize()
Definition: diguyOglUniformBuffer.cpp:49
virtual void set_material(const diguyGraphicsMaterial *material)
This uniform material updater effectively replaces a subclassed graphics material in immediate mode...
Definition: diguyOglUniformBuffer.cpp:235
glm::vec4 eye_position
Definition: diguyOglUniformBuffer.h:91
virtual void set_shadow_map_params(const diguyShadowMapParams *shadow_params)
Used by DI-Guy Scenario to communicate shadow params to video card.
Definition: diguyOglUniformBuffer.cpp:394
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
Definition: diguyViewFog.h:35
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: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:63
virtual void set_fog(const diguyViewFog *fog)
indicates the current diguy fog to use for rendering. Probably only relevant to DI-Guy Scenario ...
Definition: diguyOglUniformBuffer.cpp:288
glm::vec4 global_ambient
Definition: diguyOglUniformBuffer.h:90
diguyOglPerFrameUniformBuffer()
Definition: diguyOglUniformBuffer.h:81
float end
Definition: diguyOglUniformBuffer.h:47
virtual void set_texture_matrix(const float *matrix)
Needed for shadow casting.
Definition: diguyOglUniformBuffer.cpp:155
virtual void set_view_matrix(const float *matrix)
Called as part of diguy camera apply function.
Definition: diguyOglUniformBuffer.cpp:98
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
virtual void set_global_ambient_material(float r, float g, float b)
Definition: diguyOglUniformBuffer.cpp:322
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 update()
called before any drawing calls.
Definition: diguyOglUniformBuffer.cpp:168
virtual void set_material_spec(float r, float g, float b, float shine)
Definition: diguyOglUniformBuffer.cpp:220
float falloff_rsq
Definition: diguyOglUniformBuffer.h:69