MCPcopy Create free account
hub / github.com/carbonengine/trinity / ProcessEffect

Method ProcessEffect

trinity/Shader/Tr2Shader.cpp:218–276  ·  view source on GitHub ↗

-------------------------------------------------------------------------------------- Description: Refreshes effect-dependent variables. --------------------------------------------------------------------------------------

Source from the content-addressed store, hash-verified

216// Refreshes effect-dependent variables.
217// --------------------------------------------------------------------------------------
218void Tr2Shader::ProcessEffect()
219{
220 m_sortValue = 0;
221 if( m_effect.techniques.empty() )
222 {
223 return;
224 }
225 auto& technique = m_effect.techniques[0];
226
227 if( !technique.passes.empty() )
228 {
229 // Construct sort value so that the following parameters affect it, in the order given:
230 // 1) Number of passes
231 // 2) Pixel shader in the first pass
232 // 3) Vertex shader in the first pass
233 // 4) Render states set in the first pass
234
235 unsigned int ps = technique.passes[0].stageInputs[PIXEL_SHADER].m_shader & 0x3ff;
236 unsigned int vs = technique.passes[0].stageInputs[VERTEX_SHADER].m_shader & 0x3ff;
237 unsigned int states = technique.passes[0].renderStates & 0x3ff;
238 unsigned int numPasses = technique.passes.size() & 0x3;
239
240 m_sortValue = ( numPasses << 30 ) | ( ps << 20 ) | ( vs << 10 ) | states;
241 }
242
243#if TRINITY_PLATFORM == TRINITY_DIRECTX12 || TRINITY_PLATFORM == TRINITY_METAL
244 USE_MAIN_THREAD_RENDER_CONTEXT();
245
246 for( auto& t : m_effect.techniques )
247 {
248 for( auto& pass : t.passes )
249 {
250 if( auto program = renderContext.m_esm.GetShaderProgram( pass.shaderProgram ) )
251 {
252 pass.indirectLayout = Tr2IndirectDrawBufferLayout( *program, renderContext );
253 }
254 }
255 }
256
257 m_hasVertexBufferAccessInRtShadow = false;
258 const BlueSharedString techniqueName = BlueSharedString( "RtShadow" );
259 auto effect = GetEffect();
260 uint32_t techniqueIndex;
261 if( GetTechniqueIndex( techniqueName, techniqueIndex ) )
262 {
263 for( const auto& library : effect.techniques[techniqueIndex].libraries )
264 {
265 for( const auto& localRegister : library.localInput.signature.registers )
266 {
267 if( localRegister.registerType == Tr2ShaderRegisterAL::CONSTANT_BUFFER &&
268 localRegister.registerIndex == Tr2Renderer::GetPerObjectRTVertexBufferDataRegister() )
269 {
270 m_hasVertexBufferAccessInRtShadow = true;
271 }
272 }
273 }
274 }
275#endif

Callers 1

GetShaderMethod · 0.80

Calls 4

emptyMethod · 0.80
sizeMethod · 0.80
GetShaderProgramMethod · 0.80

Tested by

no test coverage detected