| 2071 | } |
| 2072 | |
| 2073 | void Tr2Sprite2dScene::ReplayCapture( Tr2Sprite2dDisplayList* dl ) |
| 2074 | { |
| 2075 | CCP_STATS_ZONE( __FUNCTION__ ); |
| 2076 | |
| 2077 | USE_MAIN_THREAD_RENDER_CONTEXT(); |
| 2078 | |
| 2079 | IssueDrawCall(); |
| 2080 | |
| 2081 | if( !dl->vertexBuffer.IsValid() || !dl->indexBuffer.IsValid() || dl->entries.empty() ) |
| 2082 | { |
| 2083 | return; |
| 2084 | } |
| 2085 | |
| 2086 | CCP_STATS_INC( spriteSceneDisplayListsUsed ); |
| 2087 | |
| 2088 | renderContext.m_esm.ApplyIndexBuffer( dl->indexBuffer ); |
| 2089 | renderContext.m_esm.ApplyStreamSource( 0, dl->vertexBuffer, 0, sizeof( Tr2Sprite2dD3DVertex ) ); |
| 2090 | |
| 2091 | for( auto it = dl->entries.begin(); it != dl->entries.end(); ++it ) |
| 2092 | { |
| 2093 | auto& entry = *it; |
| 2094 | |
| 2095 | CCP_STATS_ADD( spriteSceneCount, entry.primitiveCount / 2 ); |
| 2096 | |
| 2097 | m_itemsRendered++; |
| 2098 | if( m_itemsRendered >= m_maxItemsToRender ) |
| 2099 | { |
| 2100 | continue; |
| 2101 | } |
| 2102 | |
| 2103 | if( entry.job ) |
| 2104 | { |
| 2105 | RunJobHelper( entry.job ); |
| 2106 | |
| 2107 | renderContext.m_esm.ApplyIndexBuffer( dl->indexBuffer ); |
| 2108 | renderContext.m_esm.ApplyStreamSource( 0, dl->vertexBuffer, 0, sizeof( Tr2Sprite2dD3DVertex ) ); |
| 2109 | } |
| 2110 | else |
| 2111 | { |
| 2112 | m_texelSizeVar[0] = entry.texelSize0; |
| 2113 | m_texelSizeVar[1] = entry.texelSize1; |
| 2114 | |
| 2115 | auto desc = entry.effect->GetPassDescription( 0, 0 ); |
| 2116 | auto colorSpace = m_useLinearColorSpace ? Tr2RenderContextEnum::COLOR_SPACE_SRGB : Tr2RenderContextEnum::COLOR_SPACE_LINEAR; |
| 2117 | desc->m_resourceSetDirty |= desc->m_resourceSetDesc.SetSrv( PIXEL_SHADER, m_textureRegisters[0], ( entry.texture0 && entry.texture0->GetTexture() ) ? *entry.texture0->GetTexture() : Tr2TextureAL(), colorSpace ); |
| 2118 | desc->m_resourceSetDirty |= desc->m_resourceSetDesc.SetSrv( PIXEL_SHADER, m_textureRegisters[1], ( entry.texture1 && entry.texture1->GetTexture() ) ? *entry.texture1->GetTexture() : Tr2TextureAL(), colorSpace ); |
| 2119 | |
| 2120 | CCP_STATS_INC( spriteSceneDrawCallCount ); |
| 2121 | |
| 2122 | entry.effect->Render( &entry, renderContext ); |
| 2123 | } |
| 2124 | } |
| 2125 | |
| 2126 | for( unsigned int i = 0; i < s_textureMax; ++i ) |
| 2127 | { |
| 2128 | m_texture[i] = nullptr; |
| 2129 | } |
| 2130 |
no test coverage detected