2012-11-10 2 views
1

나는 XNA에서 왔는데, 여기서 나는 렌더 타겟을 쉽게 만들 수 있고 간단한 "Texture2D"로 사용할 수있다. ID3D11RenderTargetView 개체와 ID3D11ShaderResourceView 개체를 만들었습니다. 내 렌더링 타겟에 내 스프라이트를 그리고 ShaderResourceView로 사용하여 셰이더로 보내고 싶습니다. RenderTargetView to ShaderResourceView

나는 쿼리 시도처럼 렌더 타겟의 인터페이스 : 위의 코드는 내가하려고 내 쉐이더에 모든 프레임을 보내려는 "자원"개체 (에 대한 가능한 값을 생성하지 않습니다

ID3D11ShaderResourceView *resource= NULL; 
renderTargetobject->QueryInterface<ID3D11ShaderResourceView >(&resource); 

간단한 반성을하십시오).

답변

6

OK, 마침내 알아 냈습니다. 튜토리얼을 따르는 것이 XNA에서 코드를 이식하는 것보다 낫다는 것이 밝혀졌습니다. 어떻게 든이 작업을 렌더링 태그 자원을 모든 프레임의 쉐이더 리소스 뷰에 "복사"하고 싶었지만 렌더링 전에 설정되어있는 경우 모두 동일한 texture2D 리소스와 렌더 타겟에 연결되어야합니다 그 연결된 텍스쳐에 자동으로 쓸 것이고, shaderresourceview는 호출 될 때 자동으로 그것을 찾는다.

그래서 코드는, 사람이 걱정하는 경우 :

//global declarations: 
ID3D11Device*   g_pd3dDevice; 
ID3D11DeviceContext* g_pImmediateContext; 

ID3D11Texture2D* refTex; 
ID3D11RenderTargetView* refRen; 
ID3D11ShaderResourceView* refRes; 


void SetUp() 
{ 
D3D11_TEXTURE2D_DESC textureDesc; 
ZeroMemory(&textureDesc, sizeof(textureDesc)); 

textureDesc.Width = SCREENWIDTH; 
textureDesc.Height = SCREENHEIGHT; 
textureDesc.MipLevels = 1; 
textureDesc.ArraySize = 1; 
textureDesc.Format = DXGI_FORMAT_R32G32B32A32_FLOAT; 
textureDesc.SampleDesc.Count = 1; 
textureDesc.Usage = D3D11_USAGE_DEFAULT; 
textureDesc.BindFlags = D3D11_BIND_RENDER_TARGET | D3D11_BIND_SHADER_RESOURCE; 
textureDesc.CPUAccessFlags = 0; 
textureDesc.MiscFlags = 0; 

g_pd3dDevice->CreateTexture2D(&textureDesc, NULL, &refTex); 



D3D11_RENDER_TARGET_VIEW_DESC renderTargetViewDesc; 
renderTargetViewDesc.Format = DXGI_FORMAT_R32G32B32A32_FLOAT; 
renderTargetViewDesc.ViewDimension = D3D11_RTV_DIMENSION_TEXTURE2D; 
renderTargetViewDesc.Texture2D.MipSlice = 0; 

g_pd3dDevice->CreateRenderTargetView(refTex, &renderTargetViewDesc, &refRen); 



D3D11_SHADER_RESOURCE_VIEW_DESC shaderResourceViewDesc; 
shaderResourceViewDesc.Format = DXGI_FORMAT_R32G32B32A32_FLOAT; 
shaderResourceViewDesc.ViewDimension = D3D11_SRV_DIMENSION_TEXTURE2D; 
shaderResourceViewDesc.Texture2D.MostDetailedMip = 0; 
shaderResourceViewDesc.Texture2D.MipLevels = 1; 


g_pd3dDevice->CreateShaderResourceView(refTex, &shaderResourceViewDesc, &refRes); 
} 

void DrawToTexture() 
{ 
g_pImmediateContext->OMSetRenderTargets(1, &refRen,NULL); 
float ClearColor[4] = { 0.0f, 0.0f, 0.0f, 1.0f }; 
g_pImmediateContext->ClearRenderTargetView(refRen, ClearColor); 

//then draw what you want to the target 


}