----------------------------------------------------------------------------- Purpose: Finds a render model we've already loaded or loads a new one -----------------------------------------------------------------------------
| 3252 | // Purpose: Finds a render model we've already loaded or loads a new one |
| 3253 | //----------------------------------------------------------------------------- |
| 3254 | VulkanRenderModel *CMainApplication::FindOrLoadRenderModel( vr::TrackedDeviceIndex_t unTrackedDeviceIndex, const char *pchRenderModelName ) |
| 3255 | { |
| 3256 | VulkanRenderModel *pRenderModel = NULL; |
| 3257 | // To simplify the Vulkan rendering code, create an instance of the model for each model name. This is less efficient |
| 3258 | // memory wise, but simplifies the rendering code so we can store the transform in a constant buffer associated with |
| 3259 | // the model itself. You would not want to do this in a production application. |
| 3260 | //for( std::vector< VulkanRenderModel * >::iterator i = m_vecRenderModels.begin(); i != m_vecRenderModels.end(); i++ ) |
| 3261 | //{ |
| 3262 | //if( !stricmp( (*i)->GetName().c_str(), pchRenderModelName ) ) |
| 3263 | //{ |
| 3264 | //pRenderModel = *i; |
| 3265 | //break; |
| 3266 | //} |
| 3267 | //} |
| 3268 | |
| 3269 | // load the model if we didn't find one |
| 3270 | if( !pRenderModel ) |
| 3271 | { |
| 3272 | vr::RenderModel_t *pModel; |
| 3273 | vr::EVRRenderModelError error; |
| 3274 | while ( 1 ) |
| 3275 | { |
| 3276 | error = vr::VRRenderModels()->LoadRenderModel_Async( pchRenderModelName, &pModel ); |
| 3277 | if ( error != vr::VRRenderModelError_Loading ) |
| 3278 | break; |
| 3279 | |
| 3280 | ThreadSleep( 1 ); |
| 3281 | } |
| 3282 | |
| 3283 | if ( error != vr::VRRenderModelError_None ) |
| 3284 | { |
| 3285 | dprintf( "Unable to load render model %s - %s\n", pchRenderModelName, vr::VRRenderModels()->GetRenderModelErrorNameFromEnum( error ) ); |
| 3286 | return NULL; // move on to the next tracked device |
| 3287 | } |
| 3288 | |
| 3289 | vr::RenderModel_TextureMap_t *pTexture; |
| 3290 | while ( 1 ) |
| 3291 | { |
| 3292 | error = vr::VRRenderModels()->LoadTexture_Async( pModel->diffuseTextureId, &pTexture ); |
| 3293 | if ( error != vr::VRRenderModelError_Loading ) |
| 3294 | break; |
| 3295 | |
| 3296 | ThreadSleep( 1 ); |
| 3297 | } |
| 3298 | |
| 3299 | if ( error != vr::VRRenderModelError_None ) |
| 3300 | { |
| 3301 | dprintf( "Unable to load render texture id:%d for render model %s\n", pModel->diffuseTextureId, pchRenderModelName ); |
| 3302 | vr::VRRenderModels()->FreeRenderModel( pModel ); |
| 3303 | return NULL; // move on to the next tracked device |
| 3304 | } |
| 3305 | |
| 3306 | pRenderModel = new VulkanRenderModel( pchRenderModelName ); |
| 3307 | VkDescriptorSet pDescriptorSets[ 2 ] = |
| 3308 | { |
| 3309 | m_pDescriptorSets[ DESCRIPTOR_SET_LEFT_EYE_RENDER_MODEL0 + unTrackedDeviceIndex ], |
| 3310 | m_pDescriptorSets[ DESCRIPTOR_SET_RIGHT_EYE_RENDER_MODEL0 + unTrackedDeviceIndex ], |
| 3311 | }; |
nothing calls this directly
no test coverage detected