Pergunta

Eu uso XNA como base fácil agradável para alguns de processamento gráfico que estou escrevendo sobre o CPU, porque ele já fornece um monte de coisas que eu preciso. Atualmente, o meu "rendertarget" é uma matriz de um costume cor struct eu escrevi que consiste em três flutuantes campos de pontos: R, G, B.

Quando eu quero tornar isso na tela, eu converter manualmente essa matriz para o struct cores que XNA fornece (apenas 8 bits de precisão por canal), basta apertar o resultado dentro do intervalo de bytes de 0-255. Eu, então, definir esta nova matriz como os dados de um Texture2D (ele tem um SurfaceFormat de SurfaceFormat.Color) e tornar a textura com um SpriteBatch.

O que eu estou procurando é uma maneira de se livrar deste processo de tradução na CPU e simplesmente enviar meu backbuffer diretamente para a GPU como uma espécie de textura, onde eu quiser fazer alguma pós-processamento básico. E eu realmente preciso de um pouco mais precisão do que 8 bits lá (não necessariamente 32-bits, mas desde que eu estou fazendo não é GPU intensivo, não pode ferir eu acho).

Como eu iria fazer isso?

Eu percebi que se eu dei a cores um tamanho explícito de 32 bytes (para 8 bytes de enchimento, porque meus três canais preencher somente 24 bits) através StructLayout e definir o SurfaceFormat da textura que é processado com o SpriteBatch para SurfaceFormat.Vector4 (32 bytes grande) e encheu a textura com SetData<Color> que seria talvez trabalho. Mas eu recebo esta exceção:

O tipo que você está usando para T neste método é um tamanho inválido para este recurso.

É possível usar qualquer struct arbitrariamente composta e interpretá-lo como dados de textura na GPU como você pode com vértices através VertexDeclaration especificando como ele é colocado para fora?

Foi útil?

Solução

Eu acho que eu tenho o que eu quero por despejar o struct Cor eu fiz e usando Vector4 para minha informação de cor. Isso funciona se o SurfaceFormat da textura também está definido para Vector4.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top