2011-02-10 5 views
0

누군가가 나에게 설명하기를 바라는 렌더링 타겟을 사용하는 데 문제가 있습니다. 일부 스프라이트를 렌더링하기 위해 렌더링 타겟을 사용하려고 시도하고 나서이 렌더 타겟을 일반 백 버퍼 50 % 불투명 (null)에 그립니다. 드로우 콜에서 대상을 두 번 이상 사용하는 경우를 제외하고는 훌륭하게 작동합니다.이 경우 마지막 그룹의 스프라이트 만 화면에 나타납니다.XNA 및 RenderTargets

여기에 몇 가지 가짜 코드가 있습니다.

// Normal Sprite Drawing. 
DrawSomeSprites(); 

SetRenderTarget(CompositeTarget); 

// These go on the render target. 
DrawSomeMoreSprites(); 

SetRenderTarget(null); 

// And now I draw onto the back buffer. 
DrawSprite(CompositeTarget); 


// So now I want to draw another bunch of sprites via my render target using the same approach. 
SetRenderTarget(CompositeTarget); 

// These are the only sprites that I can see on the screen. 
DrawSomeMoreSprites();    
SetRenderTarget(null); 
DrawSprite(CompositeTarget); 

나는 희망이있다. 렌더 타겟을 변경할 때마다 이전 렌더 타겟 (null)이 어떤 이유로 지워지는 것처럼 보입니다. 목표를 바꾸기 전에 모든 스프라이트 배치를 끝내고 있으며 오류가 발생하지 않으므로 여기서 무엇을해야할지 모르겠다. 분명히 목표는 동시에 모든 스프라이트 그룹을 화면에서 볼 수있게하는 것입니다. 나는 무엇을 여기에서 놓치고 있냐??

답변

2

This article explains why your render targets are being cleared.

기본적으로 XBox 그래픽 시스템이 작동하는 방식의 단점입니다. XBox GPU가 렌더링 할 수있는 메모리 영역은 단 하나뿐입니다. 렌더 타겟을 변경할 때, 그 메모리는 clobbered됩니다. XNA 2.0에서는 (기사에서 설명했듯이) Windows의 기본 동작이 Xbox 360 동작과 일치하도록 변경되어 플랫폼간에 일관되고 빠른 작업을 유지합니다.

원하는 동작을 선택하는 매개 변수는 RenderTargetUsage입니다. XBox의 내용을 보존하는 것이 입니다.

또는이 문제가 발생하지 않도록 렌더링을 수행하는 순서를 변경할 수도 있습니다.

+0

쥐! 지난 밤에 PIX 작업을 마침내 마쳤습니다. 예, 분명히 문제가되는 장소에서 다른 모든 클리어가 보입니다. 현재 렌더링 방식을 전혀 사용하지 않는 레이어 시스템이 있기 때문에 실제로 렌더링 순서를 변경할 수 없습니다. 대신 내가 원하는 효과를 내기 위해 픽셀 쉐이더를 사용할 수 있다고 생각합니까? –

+0

@ A.R. 렌더링 대상 (또는 백 버퍼)에서 RenterTargetUsage를 변경하여 문제를 해결할 수 없었습니까? (아니면 Xbox를 목표로하고 있습니까?) –

+0

그래, 렌더링 타겟 변경을 할 수는 있지만 엔진을 사용하여 결국 XBOX를 대상으로합니다. 따라서 발에서 자신을 쏠 수있는보다 흥미 진진한 방법을 찾고 싶습니다. =) 여하튼 Pixel Shader 아이디어에 대해 어떻게 생각하십니까? 내가 알고있는 일부 사람들은 그것이 효과가있을 것이라고 생각하지만, 그들은 정확히 프로가 아닙니다. –