La façon la plus efficace d'initialiser la texture avec des zéros?
J'ai besoin d'initialiser OpenGL 2D texture avec des zéros.
Pourquoi? J'ai rendu à cette texture avec OpenCL. En gros, le rendu étapes sont les suivantes:
- Créer RGBA de la texture, de l'initialiser avec des zéros (il contient transparents les pixels noirs)
- OpenCL: calcul de la couleur des pixels où certains objets sont visibles et de les écrire dans cette texture
- OpenGL: ajouter de l'environnement de la cartographie des pixels transparents et affichage de l'image finale
Je n'ai donc pas besoin de passer toute la texture de données à glTexImage2d
. Mais selon la spécification, quand je passe la data=NULL, la texture de la mémoire est allouée mais non initialisé.
Allouer une mémoire côté client remplis de zéros et de passer à glTexImage2D
n'est pas une très bonne option, bien que seul je pense.
EDIT: en fait, je veux init seule composante alpha (RVB obtiendrez surchargée de toute façon), mais je doute que cela rendre la situation plus facile.
Vous devez vous connecter pour publier un commentaire.
Il y a plusieurs façons de le faire:
1: étant Donné une largeur et une hauteur pour une texture:
Pour une efficacité maximale, vous devez laisser du temps entre le moment où vous appelez cela et quand OpenCL commence son travail.
2: l'Attacher à un FBO et l'utilisation glClearBuffer.
Cela semble comme il devrait être plus rapide, car il n'y a pas de CPU-GPU de la DMA en cours. Mais la liaison et de déliaison des organisations confessionnelles peuvent introduire des inefficacités. Puis de nouveau, il ne peut pas. Profil pour s'assurer que.
Notez que cela fonctionne uniquement pour les formats d'image qui peuvent être utilisés comme cibles de rendu. Afin de ne pas les textures compressées.
3: données suffisamment de pilotes, vous pouvez utiliser le nouveau ARB_clear_texture extension:
Notez que cela fonctionne uniquement pour les formats d'image dont les données peuvent être fournies par standard pixel transferts. Afin de ne pas les formats compressés.
glClearBuffer
. C'est un très nouvelle version? A-t-elle des avantages par rapport àglClear
(ou le dernier, même obsolète)?.glClear
; il efface toutes les mémoires tampons de la même couleur claire.glClear
n'est pas obsolète, etglClearBuffer
vient de GL 3.0 (il n'y a aucune extension pour elle).Juste un heads-up: Le nouveau GL_ARB_clear_texture (core en 4.4) extension traite spécifiquement de ce problème.
glTexSubImage
est rempli avec l'ensemble de l'image:utilisation Pixel Buffer pour copier des données à partir de gpu, cette méthode est plus rapide et mieux
je. init PBO
ii.
Peut-être vous pouvez définir la texture que le rendu de la cible pour le premier passage et tirage noir primitive. Il peut être plus rapide car il n'y a pas de mémoire de transfert entre la ram et la carte graphique.