Vec3 FlexGrid::Measure() { PrepareRender(); return size.Promote(); }
void CFXAPISample::Render () { PrepareRender (); static int frameNumber = 0; frameNumber++; deviceContext_->OMSetDepthStencilState (depthStencilState_.Get (), 0); deviceContext_->VSSetShader (vertexShader_.Get (), nullptr, 0); deviceContext_->PSSetShader (pixelShader_.Get (), nullptr, 0); deviceContext_->IASetIndexBuffer (indexBuffer_.Get (), DXGI_FORMAT_R32_UINT, 0); ID3D11Buffer* vertexBuffers[] = { vertexBuffer_.Get () }; UINT strides[] = { sizeof (Vertex) }; UINT offsets[] = { 0 }; deviceContext_->IASetVertexBuffers (0, 1, vertexBuffers, strides, offsets); deviceContext_->IASetInputLayout (inputLayout_.Get ()); deviceContext_->IASetPrimitiveTopology (D3D11_PRIMITIVE_TOPOLOGY_TRIANGLELIST); /** What happens here is: * On every odd frame, render an increasingly red color into texture_ * In every frame, blit texture into the back buffer */ if (cfxEnabled_) { // We're starting to use texture_, notify the API. Notice that we need // to notify even if we don't actually write to it in this frame. agsDriverExtensions_NotifyResourceBeginAllAccess (agsContext_, texture_.Get ()); } if ((frameNumber & 1) == 1) { const float clearColor[] = { (frameNumber % 256) / 256.0f, 0.042f, 0.042f, 1 }; D3D11_VIEWPORT viewports[1]; viewports[0].Height = 1080; viewports[0].Width = 1920; viewports[0].MinDepth = 0; viewports[0].MaxDepth = 1; viewports[0].TopLeftX = 0; viewports[0].TopLeftY = 0; deviceContext_->RSSetViewports (1, viewports); ID3D11ShaderResourceView* psSRVs[] = { uploadTextureSRV_.Get () }; ID3D11RenderTargetView* renderTargetViews[] = { textureRTV_.Get () }; deviceContext_->OMSetRenderTargets (1, renderTargetViews, nullptr); deviceContext_->PSSetShaderResources (0, 1, psSRVs); deviceContext_->UpdateSubresource (uploadTexture_.Get (), 0, nullptr, clearColor, sizeof (float) * 4, sizeof (float) * 4); deviceContext_->DrawIndexed (6, 0, 0); if (cfxEnabled_) { // We're done with writes to texture_, notify the API so it can // start copying agsDriverExtensions_NotifyResourceEndWrites (agsContext_, texture_.Get (), nullptr, nullptr, 0); } } D3D11_VIEWPORT viewports[1]; viewports[0].Height = 1080; viewports[0].Width = 1920; viewports[0].MinDepth = 0; viewports[0].MaxDepth = 1; viewports[0].TopLeftX = 0; viewports[0].TopLeftY = 0; deviceContext_->RSSetViewports (1, viewports); ID3D11RenderTargetView* renderTargetViews[] = { renderTargetView_.Get () }; deviceContext_->OMSetRenderTargets (1, renderTargetViews, nullptr); ID3D11ShaderResourceView* psSRVs[] = { textureSRV_.Get () }; deviceContext_->PSSetShaderResources (0, 1, psSRVs); deviceContext_->DrawIndexed (6, 0, 0); if (cfxEnabled_) { // We're done using texture_ for this frame, notify the API agsDriverExtensions_NotifyResourceEndAllAccess (agsContext_, texture_.Get ()); } ID3D11ShaderResourceView* psNullSRVs[] = { nullptr }; deviceContext_->PSSetShaderResources (0, 1, psNullSRVs); FinalizeRender (); }