| 186 | } |
| 187 | |
| 188 | Tr2GpuResourcePool::Buffer Tr2GpuResourcePool::GetTempBuffer( const char* name, const Tr2BufferDescriptionAL& desc ) |
| 189 | { |
| 190 | if( m_outer && !m_debugMode ) |
| 191 | { |
| 192 | return m_outer->GetTempBuffer( name, desc ); |
| 193 | } |
| 194 | if( desc.count == 0 ) |
| 195 | { |
| 196 | CCP_LOGERR( "Invalid buffer description for a temporary buffer %s (elements=%u, stride=%u, format=%u)", name, desc.count, desc.stride, (uint32_t)desc.format ); |
| 197 | return {}; |
| 198 | } |
| 199 | auto found = find_if( begin( m_tempBuffers ), end( m_tempBuffers ), [&]( const auto& x ) { |
| 200 | if( m_debugMode ) |
| 201 | { |
| 202 | return x->lockCount == 0 && CompatibleDescriptions( x->resource.GetDesc(), desc ) && x->name == name; |
| 203 | } |
| 204 | return x->lockCount == 0 && CompatibleDescriptions( x->resource.GetDesc(), desc ); |
| 205 | } ); |
| 206 | USE_MAIN_THREAD_RENDER_CONTEXT(); |
| 207 | if( found == end( m_tempBuffers ) ) |
| 208 | { |
| 209 | auto buf = std::make_shared<BufferRec>(); |
| 210 | if( FAILED( buf->resource.Create( desc, nullptr, renderContext ) ) ) |
| 211 | { |
| 212 | CCP_LOGERR( "Failed to create a temporary buffer %s (elements=%u, stride=%u, format=%u)", name, desc.count, desc.stride, (uint32_t)desc.format ); |
| 213 | return Buffer(); |
| 214 | } |
| 215 | buf->resource.SetName( name ); |
| 216 | buf->lastAccessFrame = renderContext.GetRecordingFrameNumber(); |
| 217 | buf->name = name; |
| 218 | m_tempBuffers.push_back( buf ); |
| 219 | return Buffer( buf ); |
| 220 | } |
| 221 | ( *found )->lastAccessFrame = renderContext.GetRecordingFrameNumber(); |
| 222 | AppendName( *found, name ); |
| 223 | return Buffer( *found ); |
| 224 | } |
| 225 | |
| 226 | Tr2GpuResourcePool::Buffer Tr2GpuResourcePool::GetPersistentBuffer( const char* name, const Tr2BufferDescriptionAL& desc, const BufferInitializer& initializer ) |
| 227 | { |
no test coverage detected