MCPcopy Create free account
hub / github.com/defold/defold / GenerateUniformBuffer

Function GenerateUniformBuffer

engine/render/src/render/light.cpp:144–229  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

142 ////////////////////////////////
143
144 static void GenerateUniformBuffer(HRenderContext render_context, int max_lights)
145 {
146 /*
147 struct Light
148 {
149 vec4 position; // xyz: position, w: unused
150 vec4 color; // RGBA (matches LightParams order)
151 vec4 direction_range; // xyz: normalized direction; w: range
152 vec4 params; // x: type (0 dir, 1 point, 2 spot; matches dmRender::LightType)
153 // y: intensity
154 // z: innerConeAngle (radians, spot only)
155 // w: outerConeAngle (radians, spot only)
156 };
157 uniform LightBuffer
158 {
159 vec4 lights_count; // x: number of active lights
160 Light lights[MAX_LIGHTS];
161 };
162 */
163
164 dmGraphics::ShaderResourceMember light_buffer_members[2];
165 dmGraphics::ShaderResourceMember light_members[4];
166 dmGraphics::ShaderResourceTypeInfo light_types[2];
167
168 // Ensure all fields (including bitfields) are initialized
169 memset(light_buffer_members, 0, sizeof(light_buffer_members));
170 memset(light_members, 0, sizeof(light_members));
171 memset(light_types, 0, sizeof(light_types));
172
173 // lights_count (vec4)
174 light_buffer_members[0].m_Name = (char*)"lights_count";
175 light_buffer_members[0].m_NameHash = dmHashString64("lights_count");
176 light_buffer_members[0].m_Type.m_ShaderType = dmGraphics::ShaderDesc::SHADER_TYPE_VEC4;
177 light_buffer_members[0].m_Type.m_UseTypeIndex = 0;
178 light_buffer_members[0].m_ElementCount = 1;
179 // lights
180 light_buffer_members[1].m_Name = (char*)"lights";
181 light_buffer_members[1].m_NameHash = dmHashString64("lights");
182 light_buffer_members[1].m_Type.m_ShaderType = dmGraphics::ShaderDesc::SHADER_TYPE_FLOAT;
183 light_buffer_members[1].m_ElementCount = max_lights;
184 light_buffer_members[1].m_Type.m_TypeIndex = 1; // index into ShaderResourceTypeInfo[]
185 light_buffer_members[1].m_Type.m_UseTypeIndex = 1;
186
187 // vec4 position
188 light_members[0].m_Name = (char*)"position";
189 light_members[0].m_NameHash = dmHashString64("position");
190 light_members[0].m_Type.m_ShaderType = dmGraphics::ShaderDesc::SHADER_TYPE_VEC4;
191 light_members[0].m_Type.m_UseTypeIndex = 0;
192 light_members[0].m_ElementCount = 1;
193 // vec4 color
194 light_members[1].m_Name = (char*)"color";
195 light_members[1].m_NameHash = dmHashString64("color");
196 light_members[1].m_Type.m_ShaderType = dmGraphics::ShaderDesc::SHADER_TYPE_VEC4;
197 light_members[1].m_Type.m_UseTypeIndex = 0;
198 light_members[1].m_ElementCount = 1;
199 // vec4 direction (xyz: direction, w: range)
200 light_members[2].m_Name = (char*)"direction_range";
201 light_members[2].m_NameHash = dmHashString64("direction_range");

Callers 1

SetLightBufferCountFunction · 0.85

Calls 3

UpdateShaderTypesOffsetsFunction · 0.85
GetUniformBufferLayoutFunction · 0.85
NewUniformBufferFunction · 0.85

Tested by

no test coverage detected