DI-Guy SDK Documentation  13.2
diguyDx11UniformBuffer.h
Go to the documentation of this file.
1 
2 /*********************************************************************
3  **
4  *2 diguyDx9Util
5  **
6  ** Utilities for accessing the Direct3D device and a matrix stack.
7  **
8  ** s_d3dDevice9 must be assigned the Direct3D device.
9  ** s_d3dMatStack must be created using D3DXCreateMatrixStack
10  */
11 
12 #pragma once
13 #include <d3d11.h>
14 #include <DirectXMath.h>
16 
17 DirectX::XMMATRIX float_to_mat(const float * matrix);
18 
19 /*
20  * Convenience function to create an orientation matrix using a Euler
21  * rotation triplet. Angles are in degrees.
22  */
23 //extern void fillOrientationMatrix(D3DXMATRIX* orientMat, const float rotDeg[]);
24 /*
27 enum diguyOglBufferIndexes
28 {
29 DIGUY_UBO_TRANSFORM_INDEX,
30 DIGUY_UBO_MATERIAL_INDEX,
31 DIGUY_UBO_PER_FRAME_INDEX,
32 };
33 
34 
38 struct diguyOglUboMaterial
39 {
40 glm::vec4 ambient;
41 glm::vec4 diffuse;
42 glm::vec4 emissivity;
43 glm::vec4 specular;
44 float shininess;
45 };
46 
50 struct diguyOglUboFog
51 {
52 diguyOglUboFog() {
53 mode = 0.0f;
54 start = 0.0f;
55 end = 100.0f;
56 density = .0001f;
57 }
58 // note 4 floats which is fine for alignment
59 float mode;
60 float start;
61 float end;
62 float density;
63 glm::vec4 color;
64 };
65 
69 struct diguyOglUboLight
70 {
71 diguyOglUboLight() : diffuse(1.0f, 1.0f, 1.0f, 1.0f){
72 falloff_r = 0.0f;
73 falloff_rsq = 0.0f;
74 spot_angle = 0.0f;
75 spot_exponent = 0.0f;
76 }
77 glm::vec4 position;
78 glm::vec4 direction;
79 glm::vec4 ambient;
80 glm::vec4 diffuse;
81 glm::vec4 specular;
82 float falloff_r;
83 float falloff_rsq;
84 float spot_angle;
85 float spot_exponent;
86 };
87 
88 const int DIGUY_OGL_MAX_NUM_LIGHTS = 8;
89 
93 struct diguyOglPerFrameUniformBuffer
94 {
95 diguyOglPerFrameUniformBuffer() :
96 global_ambient(.2, .2, .2, 0),
97 num_active_lights(1)
98 {
99 lights[0].direction[0] = .7f;
100 lights[0].direction[1] = .7f;
101 lights[0].direction[2] = .7f;
102 }
103 
104 glm::vec4 global_ambient;
106 diguyOglUboLight lights[DIGUY_OGL_MAX_NUM_LIGHTS];
107 
108 diguyOglUboFog fog;
109 
110 diguyShadowMapParams shadow_params;
111 
112 int num_active_lights;
113 
114 };
115 
119 struct diguyOglMaterialUniformBuffer
120 {
121 diguyOglUboMaterial material;
122 };
123 
127 struct diguyOglTransformUniformBuffer
128 {
129 glm::mat4 ufrm_ProjectionMatrix; // needed by instancing
130 glm::mat4 ufrm_ViewMatrix;
131 glm::mat4 ufrm_ModelMatrix;
132 glm::mat4 ufrm_ModelViewMatrix;
133 glm::mat4 ufrm_ModelViewProjectionMatrix;
134 glm::mat4 ufrm_TextureMatrix;
135 
136 // size problem? need to fix the padding
137 // this isn't actually used currently
138 glm::mat3 ufrm_NormalMatrix;
139 
140 };*/
142 struct DiguyRenderingData
143 {
145  ID3D11Device* pd3dDevice;
146  ID3D11DeviceContext * pImmediateContext;
147  DirectX::XMMATRIX mWorldViewProjection;
148  DirectX::XMMATRIX mBaseMatrix;
149  DirectX::XMMATRIX mLinkMatrix;
150  const float * m_skinned_matrix_data;
153 };
154 
156 #pragma pack(push,1)
158 {
161  int padding[2];
163  DirectX::XMFLOAT4X4 m_mWorldViewProjection;
164  DirectX::XMFLOAT4X4 ufrm_link_matrix;
165  DirectX::XMFLOAT4X3 ufrm_link_matrices[50];
166 
167  // float shininess;
168  // DirectX::XMFLOAT4X4 m_mWorld;
169 };
170 
172 {
173  DirectX::XMFLOAT4 m_MaterialAmbientColor;
174  DirectX::XMFLOAT4 m_MaterialDiffuseColor;
175  DirectX::XMFLOAT4 m_MaterialSpecularColor;
176  DirectX::XMFLOAT4 m_MaterialEmissionColor;
177 };
178 
183 {
184 public:
187  /*
189  diguyOglPerFrameUniformBuffer m_per_frame_ubo;
190 
192  diguyOglTransformUniformBuffer m_transform_stack_ubo;
193 
195  diguyOglMaterialUniformBuffer m_material_ubo;
196 
198  GLhandleARB m_uniform_transform_buffer_object;
199  GLhandleARB m_uniform_material_buffer_object;
200  GLhandleARB m_uniform_per_frame_buffer_object;
201  */
202  virtual void initialize();
205  virtual void update(){ ; }
206 
207  virtual void set_model_matrix(const float * matrix){
209  }
210  virtual void set_view_matrix(const float * matrix){
212  }
213  virtual void get_view_matrix(float * matrix, int transpose){ ; }
214 
215  virtual void set_projection_matrix(const float * matrix){
217  }
218  virtual void set_texture_matrix(const float * matrix){ ; }
219  virtual void set_material(const diguyGraphicsMaterial * material);
220  virtual void set_material_color(float r, float g, float b, float a){ ; }
221  virtual void set_material_spec(float r, float g, float b, float shine){ ; }
222 
223  virtual void set_fog(const diguyViewFog * fog){ ; }
224 
225  virtual void set_global_ambient_light(float r, float g, float b){ ; }
227  virtual void set_use_global_ambient_material(int val){ m_use_global_ambient_material = val; }
230  virtual void set_global_ambient_material(float r, float g, float b){ ; }
231  virtual void get_global_ambient_material(float *r, float *g, float *b){ ; }
233  virtual void set_light(int index, const diguyLightRenderDesc * light){ ; }
234  virtual void set_num_active_lights(int num_lights){ ; }
235  virtual void set_shadow_map_params(const diguyShadowMapParams * shadow_params){ ; }
236  virtual void set_eye_position(float x, float y, float z){ ; }
238  DirectX::XMMATRIX m_model_matrix;
239  DirectX::XMMATRIX m_view_matrix;
240  DirectX::XMMATRIX m_projection_matrix;
242  ID3D11Buffer* m_pcbVSPerObject11;
243  ID3D11Buffer* m_pcbVSMaterial;
245 private:
251  //glm::vec4 m_global_ambient_material;
252 
253 };
255 
256 
257 //extern ID3DXConstantTable* s_constantTable;
258 
DirectX::XMMATRIX m_projection_matrix
Definition: diguyDx11UniformBuffer.h:238
DirectX::XMMATRIX mWorldViewProjection
Definition: diguyDx11UniformBuffer.h:146
</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: diguyDx11UniformBuffer.h:231
This class is an abstract wrapper around shader constants for use with DI-Guy rendering.
Definition: diguyUniformBufferUpdater.h:61
ID3D11DeviceContext * pImmediateContext
Definition: diguyDx11UniformBuffer.h:145
int ufrm_apply_matrices_flag
Definition: diguyDx11UniformBuffer.h:157
int ufrm_spec_map_enabled
Definition: diguyDx11UniformBuffer.h:158
DiguyRenderingData s_diguy_dx11
Definition: diguyDx11UniformBuffer.cpp:19
ID3D11Device * pd3dDevice
Definition: diguyDx11UniformBuffer.h:144
ID3D11Buffer * m_pcbVSMaterial
Definition: diguyDx11UniformBuffer.h:241
DirectX::XMFLOAT4 m_MaterialDiffuseColor
Definition: diguyDx11UniformBuffer.h:172
virtual void set_eye_position(float x, float y, float z)
Definition: diguyDx11UniformBuffer.h:234
virtual void update()
called before any drawing calls.
Definition: diguyDx11UniformBuffer.h:203
Definition: diguyDx11UniformBuffer.h:141
const diguyGraphicsMaterial * m_last_material
Definition: diguyDx11UniformBuffer.h:247
int m_transform_stack_needs_update
Definition: diguyDx11UniformBuffer.h:245
virtual void initialize()
Definition: diguyDx11UniformBuffer.cpp:66
virtual void set_material(const diguyGraphicsMaterial *material)
This uniform material updater effectively replaces a subclassed graphics material in immediate mode...
Definition: diguyDx11UniformBuffer.cpp:90
virtual void set_projection_matrix(const float *matrix)
Called as part of diguy camera apply function.
Definition: diguyDx11UniformBuffer.h:213
DirectX::XMFLOAT4 m_MaterialAmbientColor
Definition: diguyDx11UniformBuffer.h:171
virtual void set_global_ambient_material(float r, float g, float b)
Definition: diguyDx11UniformBuffer.h:228
DirectX::XMMATRIX m_model_matrix
Definition: diguyDx11UniformBuffer.h:236
Definition: diguyDx11UniformBuffer.h:169
DirectX::XMFLOAT4X3 ufrm_link_matrices[50]
Definition: diguyDx11UniformBuffer.h:163
int m_use_global_ambient_material
Definition: diguyDx11UniformBuffer.h:248
A class that represents a shared material.
Definition: diguyGraphicsMaterial.h:42
Definition: diguyDx11UniformBuffer.h:180
This class is a simple structure for transmitting diguy lights down to the uniform buffer system this...
Definition: diguyViewLight.h:36
virtual int get_use_global_ambient_material()
Definition: diguyDx11UniformBuffer.h:226
virtual void set_view_matrix(const float *matrix)
Called as part of diguy camera apply function.
Definition: diguyDx11UniformBuffer.h:208
DiguyRenderingData()
Definition: diguyDx11UniformBuffer.cpp:21
int m_per_frame_uniforms_needs_update
Definition: diguyDx11UniformBuffer.h:244
virtual void set_material_color(float r, float g, float b, float a)
needed for drawing helper objects
Definition: diguyDx11UniformBuffer.h:218
int m_num_mats
Definition: diguyDx11UniformBuffer.h:150
DirectX::XMMATRIX mBaseMatrix
Definition: diguyDx11UniformBuffer.h:147
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: diguyDx11UniformBuffer.h:225
ID3D11Buffer * m_pcbVSPerObject11
Definition: diguyDx11UniformBuffer.h:240
virtual void set_shadow_map_params(const diguyShadowMapParams *shadow_params)
Used by DI-Guy Scenario to communicate shadow params to video card.
Definition: diguyDx11UniformBuffer.h:233
virtual void set_fog(const diguyViewFog *fog)
indicates the current diguy fog to use for rendering. Probably only relevant to DI-Guy Scenario ...
Definition: diguyDx11UniformBuffer.h:221
int m_skinned_data_needs_update
Definition: diguyDx11UniformBuffer.h:151
virtual void set_global_ambient_light(float r, float g, float b)
Replacement for gl light model.
Definition: diguyDx11UniformBuffer.h:223
int padding[2]
Definition: diguyDx11UniformBuffer.h:159
Definition: diguyViewFog.h:35
virtual void set_texture_matrix(const float *matrix)
Needed for shadow casting.
Definition: diguyDx11UniformBuffer.h:216
Lightweight structure for sending shadow parameters to shaders from DI-Guy Scenario note this maps di...
Definition: diguyUniformBufferUpdater.h:33
DirectX::XMFLOAT4X4 ufrm_link_matrix
Definition: diguyDx11UniformBuffer.h:162
virtual ~diguyDx11UniformBufferUpdater()
Definition: diguyDx11UniformBuffer.cpp:52
DirectX::XMFLOAT4 m_MaterialEmissionColor
Definition: diguyDx11UniformBuffer.h:174
virtual void set_num_active_lights(int num_lights)
Called so shaders know how many lights to iterate through.
Definition: diguyDx11UniformBuffer.h:232
virtual void set_model_matrix(const float *matrix)
Called as part of diguy scene traversing code.
Definition: diguyDx11UniformBuffer.h:205
DirectX::XMFLOAT4 m_MaterialSpecularColor
Definition: diguyDx11UniformBuffer.h:173
DirectX::XMMATRIX float_to_mat(const float *matrix)
Definition: diguyDx11UniformBuffer.cpp:32
virtual void get_global_ambient_material(float **\return, float *g, float **< b >)
Definition: diguyDx11UniformBuffer.h:229
diguyDx11UniformBufferUpdater()
Definition: diguyDx11UniformBuffer.cpp:41
virtual void get_view_matrix(float *matrix, int transpose)
Needed by particle systems.
Definition: diguyDx11UniformBuffer.h:211
DirectX::XMMATRIX mLinkMatrix
Definition: diguyDx11UniformBuffer.h:148
DirectX::XMFLOAT4X4 m_mWorldViewProjection
Definition: diguyDx11UniformBuffer.h:161
DirectX::XMMATRIX m_view_matrix
Definition: diguyDx11UniformBuffer.h:237
const float * m_skinned_matrix_data
Definition: diguyDx11UniformBuffer.h:149
virtual void set_material_spec(float r, float g, float b, float shine)
Definition: diguyDx11UniformBuffer.h:219
Definition: diguyDx11UniformBuffer.h:155