recuperer l'adresse d'une texture [OpenGL] - Divers - Programmation
Marsh Posté le 23-12-2003 à 23:36:12
Pour la manipuler comme je l'entend sans passer par glSubTexImage2D. En gros pour appliquer directement des filtres dans le gout de ceux de photoshop.
Marsh Posté le 23-12-2003 à 23:37:46
je t'arrete tout de suite, c'est une trrrreeeeessss mauvaise idée
mais grave mauvaise
travaille sur une copie locale et renvoie cette copie a ta texture, mais directement attaquer la texture, non, c'est mal
Marsh Posté le 23-12-2003 à 23:43:58
SBAM a écrit : VJ'ai trouve tres peu de doc sur l'organisation des textures en memoire une fois chargees donc sauriez vous m'en conseiller ? |
C'est parce que tu n'es pas censé savoir. La carte peut convertir en un format interne, compresser, etc.
Donc méthode chrisbk.
Marsh Posté le 24-12-2003 à 00:24:15
chrisbk a écrit : je t'arrete tout de suite, c'est une trrrreeeeessss mauvaise idée |
Mais pourquoi c'est mal ? Moi je trouve ca mal les copies locales
Sinon pour le format propre a la cg comme disait youdontcare, je ne le savais pas Donc y a vraiment vraiment pas moyen ?...
edit : et pour "Avez vous une idee pour recuperer le pointer vers la veritable texture ?" Vous voyez une methode ?
Merci encore pour vos reponses
Marsh Posté le 24-12-2003 à 00:53:09
SBAM a écrit : |
parce que lire a partir de qqchose se trouvant en mem video, c'est tres mal. En fait, tu peux difficilement faire pire. La copie locale est infinement preferable
SBAM a écrit : |
laisse la en paix, cette texture
Marsh Posté le 25-12-2003 à 10:14:05
Pourquoi tu n'as pas de pointeurs a la creation de ta texture sans verrouillage explicite?
tout simplement pour que ton driver puisse la deplacer comme il veut cette texture. C'est ce qu'on appelle de l'optimisation et elle prend deux formes. La premiere c'est de deplacer la texture dans une forme optimale (qui n'est pas celle du fichier, exemple lineaire->swizzled) et dans une memoire rapide pour le GPU (le plus souvent memoire video, donc un pointeur sur cette memoire n'a aucun sens pour le CPU). La deuxieme c'est ce qu'on appelle du renommage. Une texture utilisée peut etre modifiee mais cette modification affectera une copie implicite de cette texture. Cette copie implicite a ete cree a un emplacement memoire arbitraire lors du verrouillage et donc tu n'as pas acces a cette information lors de la creation. Et surtout tu ne peux pas affecter la version originale de la texture (si tant est qu'on puisse considerer qu'il y ait une forme originale).
Sous Dx par exemple meme si tu peux demander explicitement qu'il n'y ait pas de renommage mais cela n'empechera pas les deplacements implicites, surtout s'il doit faire la conversion swizzled->lineaire->swizzled a chaque cycle de verrouillage/deverrouillage.
Quand je dis qu'il n'y a pas forcement de pointeurs a la creation de la texture c'est donc vrai a plusieurs niveaux: a cause du renommage et du deplacement implicite, tu ne peux travailler que sur une copie a la fois (la plus recente, ces multiples copies sont datees). Ensuite quand la texture est utilisée par le GPU en memoire video, il n'existe tout simplement pas de pointeur explicite accessible depuis ton programme vers la memoire de cette texture. Contente toi donc ton identifiant entier et demande a ton API de rapatrier les donnees dans un format lisible par toi apres que ton rendu soit termine mais ne t'attends pas a une vitesse de traitement phenomenale.
PS: si tu nous disais quel genre de traitement tu veux faire, c'est peut-etre realisable a partir d'un simple pixel shader (ou fragment program).
LeGreg
Marsh Posté le 05-01-2004 à 16:46:21
Merci beaucoup
Sinon comme je l'ai deja dis plus haut, je voulais effectuer des travaux simples comme ceux de photoshop sur ces textures mais c'est bon, je fonctionne sur des copies locales
Marsh Posté le 23-12-2003 à 22:19:56
Voila ma question :
Quand je charge une texture avec glTexImage2D ou gluBuildMipmap2d, la seule trace qu'il me reste de ce qu'est devenue ma texture est le gluint correspondant. Je crois avoir compris qu'il ne represente qu'un index. En gros, je voudrais pouvoir recuperer un pointer vers l'emplacement de ma texture telle qu'elle est reellement utilisee par opengl.
Je pense aussi avoir compris qu'il faut utiliser la fonction glPrioritizeTextures pour pouvoir placer la texture dans la ram afin de pouvoir y acceder.
J'ai trouve tres peu de doc sur l'organisation des textures en memoire une fois chargees donc sauriez vous m'en conseiller ?
Avez vous une idee pour recuperer le pointer vers la veritable texture ?
Merci par avance