Exemplo n.º 1
0
Vec3 FlexGrid::Measure()
{
	PrepareRender();
	return size.Promote();
}
Exemplo n.º 2
0
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 ();
}