2012-03-18 1 views
2

XNA를 처음 사용하고 그래픽 스택을 지정된 상태로 복원하기위한 기본 제공 워크 플로가 있는지 궁금합니다. 예를 들어, 내 3D 장면을 렌더링 스프라이트 후 발견, 3 차원 부분이 SpriteBatch.begin를 호출 한 후 작동이 중지() 나는SetRenderTarget()과 같은 함수로 인해 XNA 특성 변경이 다시 발생합니다.

GraphicsDevice.BlendState = BlendState.Opaque; 
    GraphicsDevice.DepthStencilState = DepthStencilState.Default; 
    GraphicsDevice.SamplerStates[0] = SamplerState.LinearWrap; 

하여 문제를 해결했다 가진 glPushAttrib 같은 뭔가 /) (거기 glPopAttrib()를 사용하여 스프라이트 엔진이 변경된 상태를 아는 대신 이것을 래핑 할 수 있습니까?

내 현재 문제는 렌더 타겟을 가지고 놀고 있는데, 내가 생성 한 후 SetRenderTarget()을 호출 한 후 3D 부분이 망가져있는 것 같습니다.

예를 들어 설명서의 내용에서 그래픽 장치를 null로 설정하면 다음 두 가지 기능을 모두 호출해야합니다.

GraphicsDevice.SetRenderTarget(target); 
    GraphicsDevice.SetRenderTarget(null); 

위의 첫 번째 행을 주석 처리하면 3D 렌더링이 올바로 유지되므로 일부 통화 상태가 변경 될 수 있습니다. 이러한 상태 변경은 호출에 의해 문서화되거나 상태를 명시 적으로 저장하고 일부 작업을 마쳤을 때 상태를 복원하는 방법이 있습니까? 렌더 타겟에 대한 몇 가지 문서가있다

답변

0

,

http://msdn.microsoft.com/en-us/library/microsoft.xna.framework.graphics.rendertarget%28v=xnagamestudio.20%29.aspx

에서, 다시 백 버퍼에 렌더 타겟을 다시 설정에 대해 확실하지 내가 가진 또한

GraphicsDevice.SetRenderTarget(0, null); 

(내 임의의 아이디어를 사용하려면 그것)

당신은 (아마) 이것을 spritebatch에 추가 할 수 있습니다.

SpriteBatch.Begin(SpriteSortMode.FrontToBack, BlendState.Opaque, SamplerState.LinearWrap, DepthStencilState.Default, null); 

Havent는 렌더링 타겟을 많이 사용했지만, 나는 똑같은 것을 믿습니다. 다음에 재설정 할 다음 번에 인수가없는 spriteBatch를 호출하십시오 (또는 해당 spritebatch에 대해 원하는대로)

관련 문제