ich lege mir ganz normal nach diversen Anleitungen ein RenderTarget an:
Code: Alles auswählen
D3D11_TEXTURE2D_DESC renderTargetTextureDesc;
renderTargetTextureDesc.Height = textureHeight * atlasHeight;
renderTargetTextureDesc.Width = textureWidth * atlasWidth;
renderTargetTextureDesc.MipLevels = 1;
renderTargetTextureDesc.ArraySize = 1;
renderTargetTextureDesc.Format = DXGI_FORMAT_R32G32B32A32_FLOAT;
renderTargetTextureDesc.SampleDesc.Count = 1;
renderTargetTextureDesc.SampleDesc.Quality = 0;
renderTargetTextureDesc.Usage = D3D11_USAGE_DEFAULT ;
renderTargetTextureDesc.BindFlags = D3D11_BIND_RENDER_TARGET | D3D11_BIND_SHADER_RESOURCE;
renderTargetTextureDesc.CPUAccessFlags = 0;
renderTargetTextureDesc.MiscFlags = D3D11_RESOURCE_MISC_GENERATE_MIPS;
pd3dDevice->CreateTexture2D( &renderTargetTextureDesc, NULL, &renderTargetTexture );
renderTargetTextureDesc.Format = DXGI_FORMAT_D32_FLOAT;
renderTargetTextureDesc.BindFlags = D3D11_BIND_DEPTH_STENCIL;
pd3dDevice->CreateTexture2D( &renderTargetTextureDesc, NULL, &depthTex );
D3D11_RENDER_TARGET_VIEW_DESC renderTargetViewDesc;
renderTargetViewDesc.Texture2D.MipSlice = 0;
renderTargetViewDesc.Format = DXGI_FORMAT_R32G32B32A32_FLOAT;
renderTargetViewDesc.ViewDimension = D3D11_RTV_DIMENSION_TEXTURE2D;
pd3dDevice->CreateRenderTargetView( renderTargetTexture, &renderTargetViewDesc, &renderTargetView );
D3D11_DEPTH_STENCIL_VIEW_DESC depthStencilViewDesc;
ZeroMemory( &depthStencilViewDesc, sizeof(depthStencilViewDesc) );
depthStencilViewDesc.Format = DXGI_FORMAT_D32_FLOAT;
depthStencilViewDesc.ViewDimension = D3D11_DSV_DIMENSION_TEXTURE2D;
pd3dDevice->CreateDepthStencilView( depthTex, &depthStencilViewDesc, &depthStencilView);
Code: Alles auswählen
ID3D11RenderTargetView* oldRenderTargetViews[1] = {NULL};
ID3D11DepthStencilView* oldDepthStencilView = NULL;
D3D11_VIEWPORT oldVP;
UINT noVP = 1;
pd3dImmediateContext->OMGetRenderTargets(1, oldRenderTargetViews, &oldDepthStencilView );
pd3dImmediateContext->RSGetViewports( &noVP, &oldVP );
//--------------------------
pd3dImmediateContext->OMSetRenderTargets(1, &renderTargetView, depthStencilView);
float ClearColor[4] = { 0.7f, 0.7f, 0.8f, 0.0f };
ID3D11RenderTargetView* pRTV = DXUTGetD3D11RenderTargetView();
pd3dImmediateContext->ClearRenderTargetView( pRTV, ClearColor );
// Clear the depth stencil
ID3D11DepthStencilView* pDSV = DXUTGetD3D11DepthStencilView();
pd3dImmediateContext->ClearDepthStencilView( pDSV, D3D11_CLEAR_DEPTH, 1.0, 0 );
//--------------------------
//set constant buffer for modelviewmatrix
//--------------------------
D3D11_MAPPED_SUBRESOURCE MapResource;
pd3dImmediateContext->Map( constantBufferForVis, 0, D3D11_MAP_WRITE_DISCARD, 0, &MapResource );
CB_VS_PER_OBJECT* cbForVis = ( CB_VS_PER_OBJECT* )MapResource.pData;
D3DXMatrixTranspose( &cbForVis->m_mWorldViewProjection, &all );
pd3dImmediateContext->Unmap( constantBufferForVis, 0 );
pd3dImmediateContext->VSSetConstantBuffers( 1, 1, &constantBufferForVis );
//--------------------------
pd3dImmediateContext->RSSetViewports(1, &viewport);
pd3dImmediateContext->IASetInputLayout( inputLayout );
pd3dImmediateContext->IASetPrimitiveTopology(D3D11_PRIMITIVE_TOPOLOGY_TRIANGLESTRIP);
pd3dImmediateContext->VSSetShader( vsForRenderTarget, NULL, 0);
pd3dImmediateContext->PSSetShaderResources( 0, 1, &texelPositionView );
pd3dImmediateContext->PSSetShader( psForRenderTarget, NULL, 0);
pd3dImmediateContext->PSSetSamplers( 0, 1, &SamplerState );
//--------------------------
//Render geometrie
//--------------------------
pd3dImmediateContext->IASetVertexBuffers( 0, 1, &g_pVertexBufferSix, &stride, &offset );
pd3dImmediateContext->Draw(sizeof(quadSix)/sizeof(quadSix[0]) , 0);
pd3dImmediateContext->IASetVertexBuffers( 0, 1, &g_pVertexBufferSeven, &stride, &offset );
pd3dImmediateContext->Draw(sizeof(quadSeven)/sizeof(quadSeven[0]) , 0);
pd3dImmediateContext->IASetVertexBuffers( 0, 1, &g_pVertexBufferEight, &stride, &offset );
pd3dImmediateContext->Draw(sizeof(quadEight)/sizeof(quadEight[0]) , 0);
pd3dImmediateContext->IASetVertexBuffers( 0, 1, &g_pVertexBufferNine, &stride, &offset );
pd3dImmediateContext->Draw(sizeof(quadNine)/sizeof(quadNine[0]) , 0);
pd3dImmediateContext->IASetVertexBuffers( 0, 1, &g_pVertexBufferTen, &stride, &offset );
pd3dImmediateContext->Draw(sizeof(quadTen)/sizeof(quadTen[0]) , 0);
pd3dImmediateContext->IASetVertexBuffers( 0, 1, &g_pVertexBufferEleven, &stride, &offset );
pd3dImmediateContext->Draw(sizeof(quadEleven)/sizeof(quadEleven[0]) , 0);
pd3dImmediateContext->IASetVertexBuffers( 0, 1, &g_pVertexBufferTwelve, &stride, &offset );
pd3dImmediateContext->Draw(sizeof(quadTwelve)/sizeof(quadTwelve[0]) , 0);
pd3dImmediateContext->IASetVertexBuffers( 0, 1, &g_pVertexBuffer, &stride, &offset );
pd3dImmediateContext->Draw(sizeof(quadOne)/sizeof(quadOne[0]) , 0);
pd3dImmediateContext->IASetVertexBuffers( 0, 1, &g_pVertexBufferTwo, &stride, &offset );
pd3dImmediateContext->Draw(sizeof(quadTwo)/sizeof(quadTwo[0]) , 0);
pd3dImmediateContext->IASetVertexBuffers( 0, 1, &g_pVertexBufferThree, &stride, &offset );
pd3dImmediateContext->Draw(sizeof(quadThree)/sizeof(quadThree[0]) , 0);
pd3dImmediateContext->IASetVertexBuffers( 0, 1, &g_pVertexBufferFour, &stride, &offset );
pd3dImmediateContext->Draw(sizeof(quadFour)/sizeof(quadFour[0]) , 0);
pd3dImmediateContext->IASetVertexBuffers( 0, 1, &g_pVertexBufferFive, &stride, &offset );
pd3dImmediateContext->Draw(sizeof(quadFive)/sizeof(quadFive[0]) , 0);
pd3dImmediateContext->CopyResource( outputTexture, renderTargetTexture);
pd3dImmediateContext->RSSetViewports( 1, &oldVP );
pd3dImmediateContext->OMSetRenderTargets(1, oldRenderTargetViews, oldDepthStencilView );
SAFE_RELEASE( renderTargetView );
SAFE_RELEASE( depthStencilView );