DI-Guy SDK Documentation  13.8
diguyDx11UniformBuffer.h
Go to the documentation of this file.
1 /****************************************************************************
2  * Copyright (c) 2024 MAK Technologies, Inc.
3  * All rights reserved.
4  ****************************************************************************/
5 
6 /*********************************************************************
7  **
8  *2 diguyDx9Util
9  **
10  ** Utilities for accessing the Direct3D device and a matrix stack.
11  **
12  ** s_d3dDevice9 must be assigned the Direct3D device.
13  ** s_d3dMatStack must be created using D3DXCreateMatrixStack
14  */
15 
16 #pragma once
17 
18 #include <d3d11.h>
19 #include <DirectXMath.h>
21 
22 DirectX::XMMATRIX float_to_mat(const float * matrix);
23 
24 /*
25  * Convenience function to create an orientation matrix using a Euler
26  * rotation triplet. Angles are in degrees.
27  */
28 //extern void fillOrientationMatrix(D3DXMATRIX* orientMat, const float rotDeg[]);
29 /*
32 enum diguyOglBufferIndexes
33 {
34 DIGUY_UBO_TRANSFORM_INDEX,
35 DIGUY_UBO_MATERIAL_INDEX,
36 DIGUY_UBO_PER_FRAME_INDEX,
37 };
38 
39 
43 struct diguyOglUboMaterial
44 {
45 glm::vec4 ambient;
46 glm::vec4 diffuse;
47 glm::vec4 emissivity;
48 glm::vec4 specular;
49 float shininess;
50 };
51 
55 struct diguyOglUboFog
56 {
57 diguyOglUboFog() {
58 mode = 0.0f;
59 start = 0.0f;
60 end = 100.0f;
61 density = .0001f;
62 }
63 // note 4 floats which is fine for alignment
64 float mode;
65 float start;
66 float end;
67 float density;
68 glm::vec4 color;
69 };
70 
74 struct diguyOglUboLight
75 {
76 diguyOglUboLight() : diffuse(1.0f, 1.0f, 1.0f, 1.0f){
77 falloff_r = 0.0f;
78 falloff_rsq = 0.0f;
79 spot_angle = 0.0f;
80 spot_exponent = 0.0f;
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 
93 const int DIGUY_OGL_MAX_NUM_LIGHTS = 8;
94 
98 struct diguyOglPerFrameUniformBuffer
99 {
100 diguyOglPerFrameUniformBuffer() :
101 global_ambient(.2, .2, .2, 0),
102 num_active_lights(1)
103 {
104 lights[0].direction[0] = .7f;
105 lights[0].direction[1] = .7f;
106 lights[0].direction[2] = .7f;
107 }
108 
109 glm::vec4 global_ambient;
111 diguyOglUboLight lights[DIGUY_OGL_MAX_NUM_LIGHTS];
112 
113 diguyOglUboFog fog;
114 
115 diguyShadowMapParams shadow_params;
116 
117 int num_active_lights;
118 
119 };
120 
124 struct diguyOglMaterialUniformBuffer
125 {
126 diguyOglUboMaterial material;
127 };
128 
132 struct diguyOglTransformUniformBuffer
133 {
134 glm::mat4 ufrm_ProjectionMatrix; // needed by instancing
135 glm::mat4 ufrm_ViewMatrix;
136 glm::mat4 ufrm_ModelMatrix;
137 glm::mat4 ufrm_ModelViewMatrix;
138 glm::mat4 ufrm_ModelViewProjectionMatrix;
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 };*/
147 struct DiguyRenderingData
148 {
150  ID3D11Device* pd3dDevice;
151  ID3D11DeviceContext * pImmediateContext;
152  DirectX::XMMATRIX mWorldViewProjection;
153  DirectX::XMMATRIX mBaseMatrix;
154  DirectX::XMMATRIX mLinkMatrix;
155  const float * m_skinned_matrix_data;
158 };
159 
161 #pragma pack(push,1)
163 {
166  int padding[2];
168  DirectX::XMFLOAT4X4 m_mWorldViewProjection;
169  DirectX::XMFLOAT4X4 ufrm_link_matrix;
170  DirectX::XMFLOAT4X3 ufrm_link_matrices[50];
171 
172  // float shininess;
173  // DirectX::XMFLOAT4X4 m_mWorld;
174 };
175 
177 {
178  DirectX::XMFLOAT4 m_MaterialAmbientColor;
179  DirectX::XMFLOAT4 m_MaterialDiffuseColor;
180  DirectX::XMFLOAT4 m_MaterialSpecularColor;
181  DirectX::XMFLOAT4 m_MaterialEmissionColor;
182 };
183 
188 {
189 public:
192  /*
194  diguyOglPerFrameUniformBuffer m_per_frame_ubo;
195 
197  diguyOglTransformUniformBuffer m_transform_stack_ubo;
198 
200  diguyOglMaterialUniformBuffer m_material_ubo;
201 
203  GLhandleARB m_uniform_transform_buffer_object;
204  GLhandleARB m_uniform_material_buffer_object;
205  GLhandleARB m_uniform_per_frame_buffer_object;
206  */
207  virtual void initialize();
210  virtual void update(){ ; }
211 
212  virtual void set_model_matrix(const float * matrix){
214  }
215  virtual void set_view_matrix(const float * matrix){
217  }
218  virtual void get_view_matrix(float * matrix, int transpose){ ; }
219 
220  virtual void set_projection_matrix(const float * matrix){
222  }
223  virtual void get_projection_matrix(float * matrix, int transpose) { ; }
224 
225  virtual void set_texture_matrix(const float * matrix){ ; }
226  virtual void set_material(const diguyGraphicsMaterial * material);
227  virtual void set_material_color(float r, float g, float b, float a){ ; }
228  virtual void set_material_spec(float r, float g, float b, float shine){ ; }
229 
230  virtual void set_fog(const diguyViewFog * fog){ ; }
231 
232  virtual void set_global_ambient_light(float r, float g, float b){ ; }
234  virtual void set_use_global_ambient_material(int val){ m_use_global_ambient_material = val; }
237  virtual void set_global_ambient_material(float r, float g, float b){ ; }
238  virtual void get_global_ambient_material(float *r, float *g, float *b){ ; }
240  virtual void set_light(int index, const diguyLightRenderDesc * light){ ; }
241  virtual void set_num_active_lights(int num_lights){ ; }
242  virtual void set_shadow_map_params(const diguyShadowMapParams * shadow_params){ ; }
243  virtual void set_eye_position(float x, float y, float z){ ; }
245  DirectX::XMMATRIX m_model_matrix;
246  DirectX::XMMATRIX m_view_matrix;
247  DirectX::XMMATRIX m_projection_matrix;
249  ID3D11Buffer* m_pcbVSPerObject11;
250  ID3D11Buffer* m_pcbVSMaterial;
252 private:
258  //glm::vec4 m_global_ambient_material;
259 
260 };
262 
263 
264 //extern ID3DXConstantTable* s_constantTable;
265 
DirectX::XMMATRIX m_projection_matrix
Definition: diguyDx11UniformBuffer.h:245
DirectX::XMMATRIX mWorldViewProjection
Definition: diguyDx11UniformBuffer.h:151
</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:238
This class is an abstract wrapper around shader constants for use with DI-Guy rendering.
Definition: diguyUniformBufferUpdater.h:60
ID3D11DeviceContext * pImmediateContext
Definition: diguyDx11UniformBuffer.h:150
int ufrm_apply_matrices_flag
Definition: diguyDx11UniformBuffer.h:162
int ufrm_spec_map_enabled
Definition: diguyDx11UniformBuffer.h:163
DiguyRenderingData s_diguy_dx11
ID3D11Device * pd3dDevice
Definition: diguyDx11UniformBuffer.h:149
ID3D11Buffer * m_pcbVSMaterial
Definition: diguyDx11UniformBuffer.h:248
DirectX::XMFLOAT4 m_MaterialDiffuseColor
Definition: diguyDx11UniformBuffer.h:177
virtual void set_eye_position(float x, float y, float z)
Definition: diguyDx11UniformBuffer.h:241
virtual void update()
called before any drawing calls.
Definition: diguyDx11UniformBuffer.h:208
Definition: diguyDx11UniformBuffer.h:146
const diguyGraphicsMaterial * m_last_material
Definition: diguyDx11UniformBuffer.h:254
int m_transform_stack_needs_update
Definition: diguyDx11UniformBuffer.h:252
virtual void set_material(const diguyGraphicsMaterial *material)
This uniform material updater effectively replaces a subclassed graphics material in immediate mode...
virtual void set_projection_matrix(const float *matrix)
Called as part of diguy camera apply function.
Definition: diguyDx11UniformBuffer.h:218
DirectX::XMFLOAT4 m_MaterialAmbientColor
Definition: diguyDx11UniformBuffer.h:176
virtual void set_global_ambient_material(float r, float g, float b)
Definition: diguyDx11UniformBuffer.h:235
DirectX::XMMATRIX m_model_matrix
Definition: diguyDx11UniformBuffer.h:243
Definition: diguyDx11UniformBuffer.h:174
DirectX::XMFLOAT4X3 ufrm_link_matrices[50]
Definition: diguyDx11UniformBuffer.h:168
int m_use_global_ambient_material
Definition: diguyDx11UniformBuffer.h:255
A class that represents a shared material.
Definition: diguyGraphicsMaterial.h:41
Definition: diguyDx11UniformBuffer.h:185
This class is a simple structure for transmitting diguy lights down to the uniform buffer system this...
Definition: diguyViewLight.h:34
virtual int get_use_global_ambient_material()
Definition: diguyDx11UniformBuffer.h:233
virtual void set_view_matrix(const float *matrix)
Called as part of diguy camera apply function.
Definition: diguyDx11UniformBuffer.h:213
int m_per_frame_uniforms_needs_update
Definition: diguyDx11UniformBuffer.h:251
virtual void set_material_color(float r, float g, float b, float a)
needed for drawing helper objects
Definition: diguyDx11UniformBuffer.h:225
int m_num_mats
Definition: diguyDx11UniformBuffer.h:155
DirectX::XMMATRIX mBaseMatrix
Definition: diguyDx11UniformBuffer.h:152
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:232
ID3D11Buffer * m_pcbVSPerObject11
Definition: diguyDx11UniformBuffer.h:247
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:240
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:228
int m_skinned_data_needs_update
Definition: diguyDx11UniformBuffer.h:156
virtual void get_projection_matrix(float *matrix, int transpose)
helper function if neede
Definition: diguyDx11UniformBuffer.h:221
virtual void set_global_ambient_light(float r, float g, float b)
Replacement for gl light model.
Definition: diguyDx11UniformBuffer.h:230
int padding[2]
Definition: diguyDx11UniformBuffer.h:164
Describes basic fog model that is used by DI-Guy Scenario and our default ogl renderer Most users wil...
Definition: diguyViewFog.h:42
virtual void set_texture_matrix(const float *matrix)
Needed for shadow casting.
Definition: diguyDx11UniformBuffer.h:223
Lightweight structure for sending shadow parameters to shaders from DI-Guy Scenario note this maps di...
Definition: diguyUniformBufferUpdater.h:32
DirectX::XMFLOAT4X4 ufrm_link_matrix
Definition: diguyDx11UniformBuffer.h:167
DirectX::XMFLOAT4 m_MaterialEmissionColor
Definition: diguyDx11UniformBuffer.h:179
virtual void set_num_active_lights(int num_lights)
Called so shaders know how many lights to iterate through.
Definition: diguyDx11UniformBuffer.h:239
virtual void set_model_matrix(const float *matrix)
Called as part of diguy scene traversing code.
Definition: diguyDx11UniformBuffer.h:210
DirectX::XMFLOAT4 m_MaterialSpecularColor
Definition: diguyDx11UniformBuffer.h:178
DirectX::XMMATRIX float_to_mat(const float *matrix)
virtual void get_global_ambient_material(float **\return, float *g, float **< b >)
Definition: diguyDx11UniformBuffer.h:236
virtual void get_view_matrix(float *matrix, int transpose)
Needed by particle systems.
Definition: diguyDx11UniformBuffer.h:216
DirectX::XMMATRIX mLinkMatrix
Definition: diguyDx11UniformBuffer.h:153
DirectX::XMFLOAT4X4 m_mWorldViewProjection
Definition: diguyDx11UniformBuffer.h:166
DirectX::XMMATRIX m_view_matrix
Definition: diguyDx11UniformBuffer.h:244
const float * m_skinned_matrix_data
Definition: diguyDx11UniformBuffer.h:154
virtual void set_material_spec(float r, float g, float b, float shine)
Definition: diguyDx11UniformBuffer.h:226
Definition: diguyDx11UniformBuffer.h:160