2009-10-24 5 views
1

XNA를 사용하면 그래픽 작업을 쉽게 처리 할 수 ​​있습니다. 이미 필요한 많은 작업을 제공하기 때문에 CPU에서 처리하고 있습니다. 현재, "rendertarget"은 R, G, B 세 개의 부동 소수점 필드로 구성된 사용자 정의 Color struct의 배열입니다.XNA : 텍스처를 GPU에 텍스처로 가져 오기

화면에서 렌더링하려고 할 때이 배열을 수동으로 변환합니다 0-255 바이트 범위 내에서 단순히 결과를 클램핑하여 XNA가 채널당 8 비트의 정밀도를 제공하는 색상 struct에 그런 다음이 새로운 배열을 Texture2D (SurfaceFormatSurfaceFormat.Color)의 데이터로 설정하고 SpriteBatch으로 텍스처를 렌더링합니다.

내가 찾고있는 것은 CPU에서이 변환 프로세스를 없애고 GPU에 직접적으로 GPU에 직접 데이터를 보내어 몇 가지 기본 사후 처리를 수행하려는 것입니다. 그리고 실제로 8 비트보다 더 정밀도가 필요합니다 (반드시 32 비트가 아니지만 GPU 집중이 아니기 때문에 추측 할 수 없습니다).

어떻게해야합니까?

는 내가 32 바이트의 색상을 명시 적으로 크기를 준 경우 StructLayout을 통해 (그래서 8 바이트의 패딩, 내 세 개의 채널은 24 개 비트를 채우기 때문에) 및합니다 (SpriteBatchSurfaceFormat.Vector4에 렌더링되는 텍스처의 SurfaceFormat을 설정하는 것이 생각 32 바이트 크다) 텍스처를 SetData<Color>으로 채웠다. 그러나이 예외가 발생합니다 :

이 메서드에서 T에 대해 사용중인 형식은이 리소스에 대해 잘못된 크기입니다.

그것은 당신이 배치 어떻게 지정하여 VertexDeclaration을 통해 꼭지점 할 수있는 것처럼 GPU에서 텍스처 데이터를 임의로 struct을 만들어 하나를 사용하고로 해석 할 수 있습니까?

답변

2

내 색상 정보에 Vector4을 사용하여 만든 색상 struct을 버리고 싶습니다. 텍스처의 SurfaceFormatVector4으로 설정된 경우이 작업이 가능합니다.