Question

J'utilise XNA comme une base facile et agréable pour certains traitements graphiques que je fais sur le processeur, car il fournit déjà beaucoup de choses dont j'ai besoin. Actuellement, mon & Quot; rendertarget & Quot; est un tableau de couleurs personnalisées struct que j'ai écrites et composé de trois champs à virgule flottante: R, G, B.

Lorsque je souhaite afficher ce résultat à l'écran, je convertis manuellement ce tableau en couleur Texture2D fournie par XNA (seulement 8 bits de précision par canal) en bloquant simplement le résultat dans une plage d'octets comprise entre 0 et 255. J'ai ensuite défini ce nouveau tableau en tant que données d'un SurfaceFormat (il a un SurfaceFormat.Color sur SpriteBatch) et restituer la texture avec un StructLayout.

Ce que je recherche, c’est un moyen de supprimer ce processus de traduction sur le processeur et d’envoyer simplement mon backbuffer directement au GPU sous forme de texture, sur laquelle je souhaite effectuer un post-traitement de base. Et j’ai vraiment besoin d’un peu plus de précision que de 8 bits (pas nécessairement de 32 bits, mais comme ce que je fais ne nécessite pas beaucoup de GPU, je suppose que cela ne peut pas faire mal).

Comment pourrais-je m'y prendre?

Je pensais que si je donnais à Color une taille explicite de 32 octets (donc 8 octets de remplissage, car mes trois canaux ne remplissent que 24 bits) via SurfaceFormat.Vector4 et définissons le SetData<Color> de la texture rendue avec le < => à VertexDeclaration (32 octets de grande taille) et a rempli la texture avec <=> que cela fonctionnerait peut-être. Mais je reçois cette exception:

  

Le type que vous utilisez pour T dans cette méthode est une taille non valide pour cette ressource.

Est-il possible d'utiliser n'importe quelle <=> composition arbitraire et de l'interpréter en tant que données de texture dans le GPU, comme vous pouvez le faire avec des sommets via <=> en précisant la manière dont elle est agencée?

Était-ce utile?

La solution

Je pense avoir ce que je veux en vidant la couleur struct que j'ai créée et en utilisant Vector4 pour mes informations de couleur. Cela fonctionne si la SurfaceFormat de la texture est également définie sur <=>.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top