| 46 | } |
| 47 | |
| 48 | TEST_F( SwapChainResizing, CanResizeSwapChainWhileRendering ) |
| 49 | { |
| 50 | ENSURE_GPU_OR_SKIP |
| 51 | Tr2ShaderAL vs; |
| 52 | ASSERT_HRESULT_SUCCEEDED( CreatePositionOnlyVS( vs, *renderContext ) ); |
| 53 | |
| 54 | Tr2ShaderAL ps; |
| 55 | ASSERT_HRESULT_SUCCEEDED( CreateConstantColorPS( ps, *renderContext ) ); |
| 56 | |
| 57 | Tr2ShaderAL shaders[] = { vs, ps }; |
| 58 | Tr2ShaderProgramAL sp; |
| 59 | ASSERT_HRESULT_SUCCEEDED( sp.Create( shaders, 2, *renderContext ) ); |
| 60 | |
| 61 | float vertices[] = { |
| 62 | -0.5f, |
| 63 | -0.5f, |
| 64 | 0.0f, |
| 65 | -0.5f, |
| 66 | 0.5f, |
| 67 | 0.0f, |
| 68 | 0.5f, |
| 69 | -0.5f, |
| 70 | 0.0f, |
| 71 | }; |
| 72 | const uint32_t vbStride = 3 * sizeof( float ); |
| 73 | Tr2BufferAL vb; |
| 74 | ASSERT_HRESULT_SUCCEEDED( vb.Create( vbStride, sizeof( vertices ) / vbStride, Tr2GpuUsage::VERTEX_BUFFER, Tr2CpuUsage::NONE, vertices, *renderContext ) ); |
| 75 | |
| 76 | Tr2VertexDefinition definition; |
| 77 | definition.Add( Tr2VertexDefinition::FLOAT32_3, Tr2VertexDefinition::POSITION ); |
| 78 | |
| 79 | Tr2VertexLayoutAL vertexLayout; |
| 80 | ASSERT_HRESULT_SUCCEEDED( vertexLayout.Create( definition, *renderContext ) ); |
| 81 | |
| 82 | uint32_t g = 127; |
| 83 | |
| 84 | auto frame = [&] { |
| 85 | if( g % 200 == 0 ) |
| 86 | { |
| 87 | if( g % 400 == 0 ) |
| 88 | { |
| 89 | ASSERT_HRESULT_SUCCEEDED( ResizeWindow( 400, 400 ) ); |
| 90 | } |
| 91 | else |
| 92 | { |
| 93 | ASSERT_HRESULT_SUCCEEDED( ResizeWindow( 640, 480 ) ); |
| 94 | } |
| 95 | } |
| 96 | |
| 97 | |
| 98 | ASSERT_HRESULT_SUCCEEDED( renderContext->BeginScene() ); |
| 99 | ASSERT_HRESULT_SUCCEEDED( renderContext->Clear( CLEARFLAGS_TARGET, 0xff000000 | ( g & 0xff ), 1.0f ) ); |
| 100 | ASSERT_HRESULT_SUCCEEDED( renderContext->SetStreamSource( 0, vb, 0, vbStride ) ); |
| 101 | ASSERT_HRESULT_SUCCEEDED( renderContext->SetVertexLayout( vertexLayout ) ); |
| 102 | ASSERT_HRESULT_SUCCEEDED( renderContext->SetShaderProgram( sp ) ); |
| 103 | ASSERT_HRESULT_SUCCEEDED( renderContext->SetTopology( TOP_TRIANGLES ) ); |
| 104 | ASSERT_HRESULT_SUCCEEDED( renderContext->SetRenderState( RS_ZENABLE, 0 ) ); |
| 105 | ASSERT_HRESULT_SUCCEEDED( renderContext->SetRenderState( RS_CULLMODE, CULLMODE_NONE ) ); |
nothing calls this directly
no test coverage detected