Elaztek Developer Hub
Blamite Game Engine - blam!  00453.06.08.26.0624.blamite
The core library for the Blamite Game Engine.
passes.h
Go to the documentation of this file.
1 #pragma once
2 
6 
7 /*
8 @todo REFACTOR/REORGANIZE ALL THIS SHIT
9 */
10 
11 // Number of additional view IDs the shadow pass needs to reserve beyond the
12 // one it gets by default. Worst case is hitting every per-type cap in the
13 // same frame:
14 // directional casters * cascades + spot casters * 1 + point casters * 6
15 // With the default macros: 1*4 + 2*1 + 2*6 = 18 view IDs total, so we need
16 // to reserve 17 additional ones beyond the default.
17 //
18 // If shadow caster caps are increased, this constant updates automatically.
19 #define BLAM_SHADOW_VIEW_IDS_TOTAL ( \
20  BLAM_SHADOW_MAX_DIRECTIONAL_CASTERS * BLAM_SHADOW_CASCADE_COUNT + \
21  BLAM_SHADOW_MAX_SPOT_CASTERS + \
22  BLAM_SHADOW_MAX_POINT_CASTERS * 6)
23 
24 #define BLAM_SHADOW_VIEW_IDS_TO_RESERVE (BLAM_SHADOW_VIEW_IDS_TOTAL - 1)
25 
26 #define MAX_LIGHTS 64
27 
34 {
35 private:
36  // Group key for bucketing submeshes by (submesh, material). Two draws can
37  // be merged into one instanced draw if they share both. Material here is
38  // represented by the baked state pointer rather than the tag-path string,
39  // because the bake pointer is already resolved/cached on the submesh.
40  //
41  // Note: this means a submesh that hasn't been drawn yet (baked_state still
42  // nullptr) gets grouped separately from itself in subsequent frames after
43  // it's resolved. That's fine - the grouping works correctly either way,
44  // just at varying granularity in transition frames.
45  struct group_key
46  {
47  mesh::submesh* submesh;
48  BlamMaterialBakedState* baked_state;
49 
50  bool operator==(const group_key& other) const
51  {
52  return submesh == other.submesh && baked_state == other.baked_state;
53  }
54  };
55 
56  struct group_key_hash
57  {
58  size_t operator()(const group_key& k) const
59  {
60  // Mix submesh and baked_state pointers. Standard pointer-pair hash.
61  size_t h1 = std::hash<void*>()((void*)k.submesh);
62  size_t h2 = std::hash<void*>()((void*)k.baked_state);
63  return h1 ^ (h2 + 0x9e3779b9 + (h1 << 6) + (h1 >> 2));
64  }
65  };
66 
67  // Per-group accumulated state. Holds the row-major model matrices ready to
68  // memcpy into a bgfx instance data buffer.
69  //
70  // We pack 16 floats per instance representing the 4x4 model matrix in row-
71  // major order (4 vec4 rows). bx::mtxSRT produces column-major; we transpose
72  // at insertion time so the buffer is already row-major when we hand it to
73  // bgfx. The instanced vertex shader uses mtxFromRows to reconstruct the
74  // matrix from the four row vec4s.
75  struct group_data
76  {
77  mesh::submesh* submesh;
78  std::string material_tag_path;
79  std::vector<float> packed_transforms; // 16 floats per instance
80  };
81 
82  // Helper: append a row-major model matrix into a group's packed_transforms.
83  // `srt_matrix` is the column-major output from bx::mtxSRT (or any other
84  // bx::mtx* function).
85  void AppendTransformRowMajor(std::vector<float>& packed, const float* srt_matrix);
86 
87  // Submit a single submesh as a non-instanced draw. Used for groups of size 1
88  // (the fallback path) and as the path when instancing is globally disabled.
89  void SubmitNonInstanced(mesh::submesh* submesh, const std::string& material_tag_path, const float* srt_matrix,
90  bgfx::ProgramHandle program, bgfx::ViewId view_id, uint64_t state_flags, BlamVector4 render_params);
91 
92  // Submit a group as one or more instanced draws. Splits into multiple draws
93  // if the group exceeds the available transient instance buffer capacity.
94  void SubmitInstancedGroup(group_data& group, bgfx::ProgramHandle program,
95  bgfx::ViewId view_id, uint64_t state_flags, BlamVector4 render_params);
96 
97  // Reusable per-frame storage. Cleared each frame, but vector capacity is
98  // retained so we don't re-allocate every frame in steady state.
99  std::unordered_map<group_key, group_data, group_key_hash> g_groups;
100  bgfx::UniformHandle u_renderParams = BGFX_INVALID_HANDLE;
101 
102 protected:
103  void _Execute(float delta) override;
104 
105 public:
106  bgfx::TextureHandle albedo = BGFX_INVALID_HANDLE;
107  bgfx::TextureHandle normal = BGFX_INVALID_HANDLE;
108  bgfx::TextureHandle pbr = BGFX_INVALID_HANDLE;
109  bgfx::TextureHandle emissive = BGFX_INVALID_HANDLE;
110  bgfx::TextureHandle depth = BGFX_INVALID_HANDLE;
111  bgfx::TextureHandle worldpos = BGFX_INVALID_HANDLE;
112  bgfx::TextureHandle coverage = BGFX_INVALID_HANDLE;
113  bgfx::FrameBufferHandle gbuffer = BGFX_INVALID_HANDLE;
114 
115  uint16_t render_clear_flags = BGFX_CLEAR_COLOR | BGFX_CLEAR_DEPTH;
116 
117  BlamGBufferPass();
119 
120  void RecreateBuffers(BlamVector2 size) override;
121 };
122 
127 {
128 protected:
129  void _Execute(float delta) override;
130 
131 public:
132  BlamForwardPass();
133 };
134 
139 {
140 protected:
141  void _Execute(float delta) override;
142 
143 public:
145 };
146 
151 {
152 protected:
153  void _Execute(float delta) override;
154 
155 public:
156  BlamUIPass();
157 };
158 
163 {
164 protected:
165  void _Execute(float delta) override;
166 
167 public:
168  // HDR lighting result
169  bgfx::TextureHandle hdr_color = BGFX_INVALID_HANDLE;
170  bgfx::FrameBufferHandle hdr_buffer = BGFX_INVALID_HANDLE;
171 
173 
174  void RecreateBuffers(BlamVector2 size) override;
175 };
176 
181 {
182 private:
183  bgfx::ViewId blur_view_id = 0;
184 
185 protected:
186  void _Execute(float delta) override;
187 
188 public:
189  bgfx::TextureHandle ssao_result = BGFX_INVALID_HANDLE;
190  bgfx::TextureHandle ssao_blurred = BGFX_INVALID_HANDLE;
191  bgfx::TextureHandle noise_texture = BGFX_INVALID_HANDLE;
192 
193  bgfx::FrameBufferHandle ssao_buffer = BGFX_INVALID_HANDLE;
194  bgfx::FrameBufferHandle ssao_blur_buffer = BGFX_INVALID_HANDLE;
195 
196  BlamSSAOPass();
197 
198  void RecreateBuffers(BlamVector2 size) override;
199  void GenerateKernel();
200  void GenerateNoiseTexture();
201 };
202 
203 // Cascaded shadow map system for the directional light.
204 //
205 // Builds on the working minimal version: same R32F color attachment per
206 // cascade, same depth renderbuffer for z-test, same SubmitShadowGeometry
207 // path. The only new pieces are: 4 array layers instead of 1 plain texture,
208 // 4 framebuffers (one per layer), 4 view IDs (one per cascade), 4 light
209 // matrices fit to camera frustum slices, and cascade selection in shader.
210 
211 #define BLAM_SHADOW_CASCADE_COUNT 8
212 
213 // Maximum number of concurrent shadow-casting spot lights. More spots in the
214 // scene are allowed but only the closest BLAM_SHADOW_SPOT_COUNT to the camera
215 // will cast shadows. Must match the SHADOW_SPOT_COUNT define in
216 // fs_deferred_light_pass.sc.
217 #define BLAM_SHADOW_SPOT_COUNT 4
218 
219 #define BLAM_SHADOW_POINT_COUNT 4
220 #define BLAM_SHADOW_CUBE_FACE_COUNT 6
221 
222 // Number of view IDs the shadow pass needs to reserve beyond its default one.
223 // We need one view per shadow map target: N cascades + M spot slots - 1
224 // (the -1 is because GetViewID() provides one by default).
225 #define BLAM_SHADOW_VIEW_IDS_TO_RESERVE \
226  ((BLAM_SHADOW_CASCADE_COUNT + BLAM_SHADOW_SPOT_COUNT + \
227  (BLAM_SHADOW_POINT_COUNT * BLAM_SHADOW_CUBE_FACE_COUNT)) - 1)
228 
229 // Practical split scheme blend factor between log and uniform partitioning.
230 // Higher values bias toward log (better near-camera detail), lower values
231 // bias toward uniform (more even far-camera coverage). 0.75 is a good default.
232 #define BLAM_SHADOW_CASCADE_LAMBDA 0.75f
233 
238 {
239 private:
240  struct shadow_instance
241  {
242  float transform[16]; // row-major model matrix (as before)
243  BlamVector3 world_aabb_min;
244  BlamVector3 world_aabb_max;
245  BlamVector3 world_sphere_center;
246  float world_sphere_radius;
247  bool infinite_bounds; // skip culling for this instance
248  bool use_sphere; // sphere test rather than AABB test
249  bool bounds_valid; // if false, treat as always-visible
250  };
251 
252  struct shadow_group_data
253  {
254  mesh::submesh* submesh;
255  std::vector<shadow_instance> instances;
256  };
257 
258 
259  // ----- Directional -----
260  bgfx::FrameBufferHandle shadow_framebuffers[BLAM_SHADOW_CASCADE_COUNT];
261  bgfx::TextureHandle shadow_texture_array;
262  bgfx::TextureHandle shadow_depth_renderbuffer;
263 
264  float cascade_matrices[BLAM_SHADOW_CASCADE_COUNT * 16];
265  float cascade_splits[BLAM_SHADOW_CASCADE_COUNT];
266  float cascade_splits_packed[((BLAM_SHADOW_CASCADE_COUNT + 3) / 4) * 4];
267  int cascade_resolution;
268 
269  // ----- Spot -----
270  bgfx::FrameBufferHandle spot_framebuffers[BLAM_SHADOW_SPOT_COUNT];
271  bgfx::TextureHandle spot_texture_array;
272  bgfx::TextureHandle spot_depth_renderbuffer;
273 
274  float spot_matrices[BLAM_SHADOW_SPOT_COUNT * 16];
275  int spot_resolution;
276  int active_spot_count;
277 
278  // Mapping from spot tag object pointer to assigned shadow layer this
279  // frame. A raw array is fine since SPOT_COUNT is small.
280  class BlamWorldObject_Tag* spot_layer_to_object[BLAM_SHADOW_SPOT_COUNT];
281 
282  // ----- Point -----
283  // 6 framebuffers per point light (one per cube face). Flat index =
284  // light_index * 6 + face_index.
285  bgfx::FrameBufferHandle point_framebuffers[BLAM_SHADOW_POINT_COUNT * BLAM_SHADOW_CUBE_FACE_COUNT];
286 
287  // One cubemap per point light slot. bgfx's cross-platform shader
288  // abstraction doesn't support cubemap arrays on HLSL, so each
289  // shadow-casting point gets its own SAMPLERCUBE binding in the
290  // lighting shader.
291  bgfx::TextureHandle point_cubes[BLAM_SHADOW_POINT_COUNT];
292  bgfx::TextureHandle point_depth_renderbuffer;
293 
294  // Per-point: light world position in xyz, far plane in w. The shader
295  // uses light_pos to compute direction from light to fragment, and
296  // far_plane to normalize stored/compared distances.
297  float point_data[BLAM_SHADOW_POINT_COUNT * 4];
298 
299  int point_resolution;
300  int active_point_count;
301 
302  class BlamWorldObject_Tag* point_layer_to_object[BLAM_SHADOW_POINT_COUNT];
303 
304  std::unordered_map<mesh::submesh*, shadow_group_data> g_shadow_groups;
305 
306  // ----- Infrastructure -----
307  bgfx::ViewId base_view_id;
308  bool resources_initialized;
309 
310  void InitializeResources();
311  void DestroyResources();
312  void SubmitShadowGeometry(bgfx::ViewId view_id, bgfx::ProgramHandle program, bool flip_cull, const BlamFrustum* frustum);
313 
314  // Subsystem entry points - called from _Execute
315  void RenderDirectionalCascades(bgfx::ProgramHandle shadow_program);
316  void RenderSpotShadows(bgfx::ProgramHandle shadow_program);
317  void RenderPointShadows(bgfx::ProgramHandle point_shadow_program);
318 
319  void CollectShadowGeometry();
320  int ResolveLightPriority(BlamWorldObject_Tag* obj);
321  void ComputePointFaceMatrix(BlamVector3 light_pos, int face, float near_plane, float far_plane, float* out_matrix);
322  void ComputeSpotMatrix(BlamWorldObject_Tag* spot, float* out_matrix);
323  void ComputeCascadeMatrix(BlamVector3 light_dir, float split_near, float split_far, int cascade_resolution, float* out_matrix);
324  void ComputeCascadeSplits(float near_plane, float far_plane, float* out_splits);
325  int GatherShadowCasters(BlamWorldObject_Tag** out_points, int max_count, light::shape_enum shape);
326 
327 public:
328  BlamShadowPass();
329 
330  void _Execute(float delta) override;
331 
332  // Directional
333  bgfx::TextureHandle GetShadowTextureArray();
334  float* GetCascadeMatrices(); // mat4[CASCADE_COUNT]
335  float* GetCascadeSplits(); // float[CASCADE_COUNT]
336  float* GetCascadeSplitsPacked(); // vec4[ceil(N/4)]
337  int GetCascadeResolution();
338 
339  // Spot
340  bgfx::TextureHandle GetSpotShadowTextureArray();
341  float* GetSpotShadowMatrices(); // mat4[SPOT_COUNT]
342  int GetSpotResolution();
343  int GetSpotShadowCount(); // active this frame, 0..SPOT_COUNT
344 
345  // Returns the shadow layer assigned to the given spot light object, or
346  // -1 if the object isn't being shadow-rendered this frame. Used by the
347  // lighting pass to correlate lights to shadow maps.
348  int GetSpotShadowLayerFor(class BlamWorldObject_Tag* spot_object);
349 
350  // Point
351  // Returns one of the N individual cubemaps by index. Returns invalid
352  // handle if index is out of range.
353  bgfx::TextureHandle GetPointShadowCube(int index);
354  float* GetPointShadowData(); // vec4[POINT_COUNT], .xyz=light_pos, .w=far_plane
355  int GetPointResolution();
356  int GetPointShadowCount(); // active this frame, 0..POINT_COUNT
357  int GetPointShadowLayerFor(class BlamWorldObject_Tag* point_object);
358 
359 };
BlamSSAOPass::ssao_result
bgfx::TextureHandle ssao_result
Definition: passes.h:189
variable_type::int
@ int
Blam::Director::GetCamera
BLAM BlamDirector * GetCamera()
Retrieves the director instance.
Definition: director.cpp:36
Blam::World::GetWorldState
BLAM BlamWorldState * GetWorldState()
Retrieves the current world state.
Definition: world.cpp:56
ui.h
object
Definition: object.h:27
SHADER_DEFAULT_SSAO
#define SHADER_DEFAULT_SSAO
Definition: rendering.h:37
BlamGBufferPass::_Execute
void _Execute(float delta) override
Definition: BlamGBufferPass.cpp:140
BlamShadowPass::GetCascadeSplits
float * GetCascadeSplits()
Definition: BlamShadowPass.cpp:1223
BlamSSAOPass::GenerateNoiseTexture
void GenerateNoiseTexture()
Definition: BlamSSAOPass.cpp:57
BlamRenderPass::has_multiple_views
bool has_multiple_views
Definition: types.h:110
Blam::RenderingBGFX::Lighting::SubmitLightUniforms
BLAM void SubmitLightUniforms(BlamVector3 cameraPos, BlamVector3 ambientColor)
Definition: lights.cpp:79
BLAM_SHADOW_MAX_POINT_CASTERS
#define BLAM_SHADOW_MAX_POINT_CASTERS
Definition: types.h:15
PASS_SHADOW
#define PASS_SHADOW
Definition: rendering.h:45
if
if(WIN32) set(OGRE_MEDIA_PATH "Media") elseif(APPLE) set(OGRE_MEDIA_PATH "Media") elseif(UNIX) set(OGRE_MEDIA_PATH "share/$
Definition: CMakeLists.txt:15
Blam::Logger::LogEvent
BLAM void LogEvent(std::string message)
Logs a message to the log and/or console.
Definition: aliases.cpp:130
BlamWorldState::RenderObjects
void RenderObjects(float delta)
Definition: BlamWorldState.cpp:240
BlamSSAOPass::ssao_buffer
bgfx::FrameBufferHandle ssao_buffer
Definition: passes.h:193
BlamSSAOPass::noise_texture
bgfx::TextureHandle noise_texture
Definition: passes.h:191
BlamDirector::far_clip_plane_distance
float far_clip_plane_distance
Definition: director.h:118
BlamSSAOPass::RecreateBuffers
void RecreateBuffers(BlamVector2 size) override
Definition: BlamSSAOPass.cpp:82
PASS_POSTPROCESS
#define PASS_POSTPROCESS
Definition: rendering.h:49
mesh::submesh::vertex_buffer
bgfx::VertexBufferHandle vertex_buffer
Definition: types.h:31
color
BlamColor color
Typedef for a color field, used in tag definitions.
Definition: tags.h:447
mesh::aabb_min
BlamVector3 aabb_min
Definition: types.h:45
logger.h
BlamLightingPass::BlamLightingPass
BlamLightingPass()
Definition: BlamLightingPass.cpp:9
PASS_LIGHTING
#define PASS_LIGHTING
Definition: rendering.h:48
BlamGBufferPass::gbuffer
bgfx::FrameBufferHandle gbuffer
Definition: passes.h:113
BlamWorldObject::GetPosition
BlamVector3 GetPosition()
Definition: BlamWorldObject.cpp:222
BlamShadowPass::_Execute
void _Execute(float delta) override
Definition: BlamShadowPass.cpp:623
world_objects.h
mesh::submesh
Definition: types.h:28
BLAM_SHADOW_CUBE_FACE_COUNT
#define BLAM_SHADOW_CUBE_FACE_COUNT
Definition: passes.h:220
SHADER_DEFAULT_SHADOW_POINT_INSTANCED
#define SHADER_DEFAULT_SHADOW_POINT_INSTANCED
Definition: rendering.h:42
BlamTagData::path
char path[256]
The tag's path.
Definition: tags.h:145
BlamShadowPass::GetSpotShadowTextureArray
bgfx::TextureHandle GetSpotShadowTextureArray()
Definition: BlamShadowPass.cpp:1238
BlamRenderPass::view_id_count
int view_id_count
Definition: types.h:111
BlamSSAOPass::ssao_blurred
bgfx::TextureHandle ssao_blurred
Definition: passes.h:190
Blam::RenderingBGFX::GetRenderHeight
BLAM int GetRenderHeight()
Retrieves the current height of the viewport.
Definition: bgfx.cpp:428
world.h
BlamSSAOPass::BlamSSAOPass
BlamSSAOPass()
Definition: BlamSSAOPass.cpp:9
BlamShadowPass::GetSpotShadowLayerFor
int GetSpotShadowLayerFor(class BlamWorldObject_Tag *spot_object)
Definition: BlamShadowPass.cpp:1258
SHADER_DEFAULT_SHADOW_INSTANCED
#define SHADER_DEFAULT_SHADOW_INSTANCED
Definition: rendering.h:41
Blam::Globals::GetGlobalAsFloat
BLAM float * GetGlobalAsFloat(std::string name)
Retrieves a global's value as a float.
Definition: globals.cpp:403
uint8_t
unsigned char uint8_t
Definition: stdint.h:15
render_model::bounding_sphere_radius
real bounding_sphere_radius
Definition: render_model.h:51
BlamDirector::near_clip_plane_distance
float near_clip_plane_distance
Definition: director.h:117
Blam::RenderingBGFX::Shaders::GetProgram
BLAM bgfx::ProgramHandle GetProgram(std::string name)
Definition: shaders.cpp:100
BlamShadowPass::GetSpotShadowMatrices
float * GetSpotShadowMatrices()
Definition: BlamShadowPass.cpp:1243
SHADER_DEFAULT_SHADOW
#define SHADER_DEFAULT_SHADOW
Definition: rendering.h:39
director.h
BlamWorldState::GetObjectCount
int GetObjectCount()
Definition: BlamWorldState.cpp:157
BlamGBufferPass::BlamGBufferPass
BlamGBufferPass()
Definition: BlamGBufferPass.cpp:12
render_model.h
PASS_SSAO
#define PASS_SSAO
Definition: rendering.h:50
rendering.h
BlamMaterialBakedState
Definition: types.h:253
BlamGBufferPass::emissive
bgfx::TextureHandle emissive
Definition: passes.h:109
BlamPostprocessPass::_Execute
void _Execute(float delta) override
Definition: BlamPostprocessPass.cpp:29
BLAM_SHADOW_MAX_SPOT_CASTERS
#define BLAM_SHADOW_MAX_SPOT_CASTERS
Definition: types.h:14
BlamPostprocessPass::BlamPostprocessPass
BlamPostprocessPass()
Definition: BlamPostprocessPass.cpp:6
BlamWorldObject_Tag::tag_data
BlamTagData * tag_data
Pointer to the tag data associated with this object.
Definition: world_objects.h:304
Blam::Globals::GetGlobalAsColor
BLAM BlamColor * GetGlobalAsColor(std::string name)
Retrieves a global's value as a BlamColor.
Definition: globals.cpp:415
BlamGBufferPass::RecreateBuffers
void RecreateBuffers(BlamVector2 size) override
Definition: BlamGBufferPass.cpp:22
BlamGBufferPass::normal
bgfx::TextureHandle normal
Definition: passes.h:107
BlamShadowPass
Definition: passes.h:237
render_model::flags
bitfield16_flags flags
Bitfield data for flags. See #bitfield16_flags for details.
Definition: render_model.h:50
BlamWorldObject_Tag
Class representing a tag-based world object.
Definition: world_objects.h:278
uint64_t
unsigned long long uint64_t
Definition: stdint.h:18
BlamSSAOPass::ssao_blur_buffer
bgfx::FrameBufferHandle ssao_blur_buffer
Definition: passes.h:194
BlamShadowPass::GetPointResolution
int GetPointResolution()
Definition: BlamShadowPass.cpp:1291
mtxOrtho
void mtxOrtho(float *_result, float _left, float _right, float _bottom, float _top, float _near, float _far, float _offset, bool _homogeneousNdc)
Definition: ogre.cpp:117
BlamPostprocessPass::hdr_color
bgfx::TextureHandle hdr_color
Definition: passes.h:169
light.h
BlamShadowPass::GetPointShadowCube
bgfx::TextureHandle GetPointShadowCube(int index)
Definition: BlamShadowPass.cpp:1276
BlamShadowPass::GetCascadeMatrices
float * GetCascadeMatrices()
Definition: BlamShadowPass.cpp:1218
tag_ligh
#define tag_ligh
Definition: light.h:22
mesh::submeshes
std::vector< submesh * > submeshes
Definition: types.h:55
render_model::bitfield16_flags::use_bounding_sphere
bool use_bounding_sphere
Definition: render_model.h:32
mesh::submesh::index_buffer
bgfx::IndexBufferHandle index_buffer
Definition: types.h:32
BlamShadowPass::GetPointShadowData
float * GetPointShadowData()
Definition: BlamShadowPass.cpp:1286
mesh::submesh::material_tag_path
std::string material_tag_path
Definition: types.h:33
BlamShadowPass::GetCascadeSplitsPacked
float * GetCascadeSplitsPacked()
Definition: BlamShadowPass.cpp:1228
BlamWorldState::GetObjectAtIndex
BlamWorldObject * GetObjectAtIndex(int index)
Definition: BlamWorldState.cpp:178
light
Definition: light.h:27
y
font DisplayOffset y
Definition: README.txt:68
Blam::UI::Render
BLAM void Render()
Renders all UI to the screen.
Definition: ui.cpp:64
NULL
Add a fourth parameter to bake specific font ranges NULL
Definition: README.txt:57
BlamShadowPass::GetPointShadowLayerFor
int GetPointShadowLayerFor(class BlamWorldObject_Tag *point_object)
Definition: BlamShadowPass.cpp:1301
BlamGBufferPass
GBuffer Pass.
Definition: passes.h:33
BlamForwardPass::_Execute
void _Execute(float delta) override
Definition: BlamForwardPass.cpp:11
BlamShadowPass::GetCascadeResolution
int GetCascadeResolution()
Definition: BlamShadowPass.cpp:1233
light::flags
bitfield16_flags flags
Bitfield data for flags. See #bitfield16_flags for details.
Definition: light.h:49
mesh::tag
render_model * tag
Definition: types.h:54
types.h
Blam::RenderingBGFX::Culling::ExtractFrustum
void ExtractFrustum(BlamFrustum *out_frustum, const float *vp_matrix)
Definition: culling.cpp:36
BlamUIPass::BlamUIPass
BlamUIPass()
Definition: BlamUIPass.cpp:8
globals.h
PASS_FORWARD
#define PASS_FORWARD
Definition: rendering.h:47
Blam::RenderingBGFX::Shaders::GetUniform
BLAM bgfx::UniformHandle GetUniform(std::string id)
Definition: shader_uniforms.cpp:174
BlamGBufferPass::~BlamGBufferPass
~BlamGBufferPass()
Definition: BlamGBufferPass.cpp:17
Blam::RenderingBGFX::Culling::TransformAABB
void TransformAABB(BlamVector3 model_min, BlamVector3 model_max, const float *world_matrix, BlamVector3 *out_world_min, BlamVector3 *out_world_max)
Definition: culling.cpp:151
max_2d_z_depth
int max_2d_z_depth
Definition: ogre.cpp:89
BlamWorldObject_TagLight::override_priority
bool override_priority
Definition: world_objects.h:353
BlamWorldObject::GetRotation
BlamVector3 GetRotation()
Definition: BlamWorldObject.cpp:172
uint32_t
unsigned int uint32_t
Definition: stdint.h:17
BLAM_SHADOW_VIEW_IDS_TO_RESERVE
#define BLAM_SHADOW_VIEW_IDS_TO_RESERVE
Definition: passes.h:225
BlamWorldObject::GetAbsolutePosition
BlamVector3 GetAbsolutePosition()
Definition: BlamWorldObject.cpp:209
Blam::RenderingBGFX::PrepareScreenQuad
BLAM void PrepareScreenQuad()
Definition: bgfx.cpp:515
SHADER_DEFAULT_DEFERRED_GBUFFER_INSTANCED
#define SHADER_DEFAULT_DEFERRED_GBUFFER_INSTANCED
Definition: rendering.h:34
PASS_GBUFFER
#define PASS_GBUFFER
Definition: rendering.h:46
BlamGBufferPass::render_clear_flags
uint16_t render_clear_flags
Definition: passes.h:115
Blam::RenderingBGFX::Models::GetModelFromTagPath
BLAM mesh * GetModelFromTagPath(std::string tag_path)
Definition: models.cpp:220
BlamSSAOPass::_Execute
void _Execute(float delta) override
Definition: BlamSSAOPass.cpp:118
Blam::RenderingBGFX::Culling::TransformSphere
void TransformSphere(BlamVector3 model_center, float model_radius, const float *world_matrix, BlamVector3 *out_world_center, float *out_world_radius)
Definition: culling.cpp:206
BlamWorldObject_TagLight
Definition: world_objects.h:337
mesh::aabb_max
BlamVector3 aabb_max
Definition: types.h:46
BLAM_SHADOW_CASCADE_LAMBDA
#define BLAM_SHADOW_CASCADE_LAMBDA
Definition: passes.h:232
BLAM_SHADOW_CASCADE_COUNT
#define BLAM_SHADOW_CASCADE_COUNT
Definition: passes.h:211
PASS_UI
#define PASS_UI
Definition: rendering.h:51
BlamSSAOPass::GenerateKernel
void GenerateKernel()
Definition: BlamSSAOPass.cpp:20
BlamWorldObject
Class representing a world object.
Definition: world_objects.h:138
mesh::submesh::baked_state
BlamMaterialBakedState * baked_state
Definition: types.h:35
passes.h
Blam::RenderingBGFX::Culling::SphereInFrustum
bool SphereInFrustum(const BlamFrustum *frustum, BlamVector3 center, float radius)
Definition: culling.cpp:132
BlamWorldObject_TagLight::priority
int priority
Definition: world_objects.h:354
SHADER_DEFAULT_DEFERRED_GBUFFER
#define SHADER_DEFAULT_DEFERRED_GBUFFER
Definition: rendering.h:33
viewport_size
BlamVector2 viewport_size
Definition: bgfx.cpp:37
copy
The original diffuse textures are from the NVIDIA texture with other maps generated from them by Steve Streeting The following license applies to all textures Single Product or Project Use of NVSDK Art Imagery THIS IS A LEGAL immediately delete the NVSDK Art Imagery from your hard disk If you proceed to use any of the you thereby signify that you have agreed to all of the terms and conditions set forth below You may not copy
Definition: TextureUsageAgreement.txt:6
BlamGBufferPass::pbr
bgfx::TextureHandle pbr
Definition: passes.h:108
SHADER_DEFAULT_SHADOW_POINT
#define SHADER_DEFAULT_SHADOW_POINT
Definition: rendering.h:40
BlamShadowPass::BlamShadowPass
BlamShadowPass()
Definition: BlamShadowPass.cpp:14
Blam::RenderingBGFX::Materials::ApplyMaterialParameters
BLAM void ApplyMaterialParameters(mesh::submesh *submesh, std::string material_tag_path)
Definition: materials.cpp:772
BlamGBufferPass::worldpos
bgfx::TextureHandle worldpos
Definition: passes.h:111
Blam::RenderingBGFX::GetCameraProjectionMatrix
BLAM float * GetCameraProjectionMatrix()
Definition: bgfx.cpp:458
BlamWorldObject::GetScale
BlamVector3 GetScale()
Definition: BlamWorldObject.cpp:244
BlamPostprocessPass::RecreateBuffers
void RecreateBuffers(BlamVector2 size) override
Definition: BlamPostprocessPass.cpp:11
BlamLightingPass::_Execute
void _Execute(float delta) override
Definition: BlamLightingPass.cpp:14
BlamLightingPass
Lighting Pass.
Definition: passes.h:138
Blam::RenderingBGFX::GetCameraViewMatrix
BLAM float * GetCameraViewMatrix()
Definition: bgfx.cpp:453
BlamUIPass
UI/2D Pass.
Definition: passes.h:150
BlamGBufferPass::depth
bgfx::TextureHandle depth
Definition: passes.h:110
light::bitfield16_flags::casts_shadows
bool casts_shadows
Definition: light.h:31
SHADER_DEFAULT_SSAO_BLUR
#define SHADER_DEFAULT_SSAO_BLUR
Definition: rendering.h:38
BlamTagData::address
void * address
The address pointing to the start of the tag's data.
Definition: tags.h:132
BlamForwardPass
Forward Pass.
Definition: passes.h:126
BLAM_SHADOW_POINT_COUNT
#define BLAM_SHADOW_POINT_COUNT
Definition: passes.h:219
Blam::RenderingBGFX::Culling::AABBInFrustum
bool AABBInFrustum(const BlamFrustum *frustum, BlamVector3 aabb_min, BlamVector3 aabb_max)
Definition: culling.cpp:99
BlamForwardPass::BlamForwardPass
BlamForwardPass()
Definition: BlamForwardPass.cpp:6
BlamSSAOPass
SSAO Pass.
Definition: passes.h:180
x
config GlyphExtraSpacing x
Definition: README.txt:30
Blam::RenderingBGFX::Passes::ReserveViewID
BLAM bgfx::ViewId ReserveViewID()
Definition: bgfx.cpp:520
BlamUIPass::_Execute
void _Execute(float delta) override
Definition: BlamUIPass.cpp:13
SHADER_DEFAULT_DEFERRED_POSTPROCESS
#define SHADER_DEFAULT_DEFERRED_POSTPROCESS
Definition: rendering.h:36
Blam::RenderingBGFX::Lighting::GetLightCacheAt
BLAM BlamWorldObject_Tag * GetLightCacheAt(int index)
Definition: lights.cpp:239
BlamRenderPass
Definition: types.h:89
render_model::bitfield16_flags::infinite_bounds
bool infinite_bounds
Definition: render_model.h:35
BLAM_SHADOW_SPOT_COUNT
#define BLAM_SHADOW_SPOT_COUNT
Definition: passes.h:217
uint16_t
unsigned short uint16_t
Definition: stdint.h:16
Blam::RenderingBGFX::GetRenderWidth
BLAM int GetRenderWidth()
Retrieves the current width of the viewport.
Definition: bgfx.cpp:423
BlamPostprocessPass
Postprocess Pass.
Definition: passes.h:162
MAX_LIGHTS
#define MAX_LIGHTS
Definition: passes.h:26
light::priority
int32_t priority
Definition: light.h:50
BlamGBufferPass::coverage
bgfx::TextureHandle coverage
Definition: passes.h:112
BlamPostprocessPass::hdr_buffer
bgfx::FrameBufferHandle hdr_buffer
Definition: passes.h:170
SHADER_DEFAULT_DEFERRED_LIGHT_PASS
#define SHADER_DEFAULT_DEFERRED_LIGHT_PASS
Definition: rendering.h:35
BlamDirector::camera_pos
BlamVector3 camera_pos
The current position of the camera.
Definition: director.h:84
BlamWorldObject::disable_culling
bool disable_culling
Definition: world_objects.h:163
BlamWorldState
Class representing a world state.
Definition: world_objects.h:715
Blam::Globals::GetGlobalAsBoolean
BLAM bool * GetGlobalAsBoolean(std::string name)
Retrieves a global's value as a boolean.
Definition: globals.cpp:343
Blam::RenderingBGFX::Lighting::GetLightCacheCount
BLAM int GetLightCacheCount()
Definition: lights.cpp:234
BlamFrustum
Definition: types.h:339
BlamShadowPass::GetSpotResolution
int GetSpotResolution()
Definition: BlamShadowPass.cpp:1248
mesh
Definition: types.h:25
BlamRenderPass::GetViewID
bgfx::ViewId GetViewID()
Definition: BlamRenderPass.cpp:44
BlamGBufferPass::albedo
bgfx::TextureHandle albedo
Definition: passes.h:106
tag_mode
#define tag_mode
Definition: render_model.h:22
BlamShadowPass::GetPointShadowCount
int GetPointShadowCount()
Definition: BlamShadowPass.cpp:1296
BlamShadowPass::GetSpotShadowCount
int GetSpotShadowCount()
Definition: BlamShadowPass.cpp:1253
BlamWorldObjectType::Tag
@ Tag
Blam::RenderingBGFX::Passes::GetPass
BLAM BlamRenderPass * GetPass(std::string id)
Definition: bgfx.cpp:502
mesh::bounds_valid
bool bounds_valid
Definition: types.h:51
BlamShadowPass::GetShadowTextureArray
bgfx::TextureHandle GetShadowTextureArray()
Definition: BlamShadowPass.cpp:1213
BlamTagData::tag_class
std::string tag_class
The tag's short class name.
Definition: tags.h:146
Blam::Globals::GetGlobalAsInteger
BLAM int * GetGlobalAsInteger(std::string name)
Retrieves a global's value as an int.
Definition: globals.cpp:391