Comment puis-je redimensionner texture existante pièces jointes à mes framebuffer?
Quand je redimensionner ma fenêtre, j'ai besoin de redimensionner mes textures qui sont attachés à mon framebuffer. J'ai essayé d'appeler glTexStorage2D encore une fois, avec différents paramètres de taille. Cependant cela ne fonctionne pas.
Comment puis-je redimensionner les textures attaché à mon framebuffer? (Y compris la profondeur de l'attachement)
MODIFIER
Code que j'ai essayé:
glBindTexture(m_target, m_name);
glTexStorage2D(m_target, 1, m_format, m_width, m_height);
glBindTexture(m_target, 0);
où m_name, m_target et m_format sont sauvés de la texture originale et m_width et m_height sont les nouvelles dimensions.
EDIT2
S'il vous plaît dites-moi pourquoi cela a été downvoted afin que je puisse corriger la question.
EDIT3
Ici, quelqu'un d'autre avait le même problème.
J'ai trouvé que la texture était rendu correctement à la FBO, mais qu'il a été affichée à la bonne taille. C'était comme si la première fois, la texture a été envoyé à la valeur par défaut framebuffer la taille de la texture a été fixé de façon permanente, et puis quand le redimensionnement de la texture a été envoyé il était traitée comme si elle était de la taille d'origine. Par exemple, si la première texture était 100x100 et la deuxième texture était 50x50 alors la totalité de la texture serait affiché dans le coin inférieur gauche de l'écran. A l'inverse, si la texture originale a été 50x50 et la nouvelle texture 100x100 alors le résultat serait le bas gauche de l'image affichée sur l'écran entier.
Cependant, il utilise un shader pour résoudre ce problème. Ce n'est pas la façon dont je veux faire. Il y a une autre solution, non?
OriginalL'auteur gartenriese | 2014-04-29
Vous devez vous connecter pour publier un commentaire.
Si vous avez été en utilisant
glTexImage2D (...)
pour allouer de l'espace de stockage pour votre texture, il serait possible de ré-allouer du stockage de n'importe quelle image dans la texture, à tout moment, sans pour autant supprimer la texture.Cependant, vous êtes pas à l'aide de
glTexImage2D (...)
, vous utilisezglTexStorage2D (...)
. Cela crée une immuable la texture de l'objet, dont les exigences en matière d'entreposage sont fixés une fois et ne peut jamais être modifié. Tous les appels àglTexImage2D (...)
ouglTexStorage2D (...)
après que vous allouer du stockage va d'abord générerGL_INVALID_OPERATION
et ne rien faire d'autre.Si vous souhaitez créer une texture dont la taille peut être modifiée à tout moment, ne pas utiliser de
glTexStorage2D (...)
. Au lieu de cela, passer quelques factice (mais compatible) valeurs pour le type de données et le format deglTexImage2D (...)
.Par exemple, si vous souhaitez affecter une texture avec 1 LOD c'est
m_width
xm_height
:Si
m_width
oum_height
changer plus tard, vous pouvez ré-allouer du stockage de la même façon:C'est une situation très différente que si vous utilisez
glTexStorage2D (...)
. Qui va vous empêcher de ré-allocation de stockage, et il suffit de créer unGL_INVALID_OPERATION
erreur.Vous devez consulter la page de manuel pour
glTexStorage2D (...)
, il stipule ce qui suit:Quand la cible est
GL_TEXTURE_2D, GL_PROXY_TEXTURE_2D
,GL_TEXTURE_RECTANGLE
,GL_PROXY_TEXTURE_RECTANGLE
ouGL_PROXY_TEXTURE_CUBE_MAP
, appelant glTexStorage2D est l'équivalent, en supposant aucune erreur n'est générée, pour l'exécution de la suite pseudo-code:Quand la cible est
GL_TEXTURE_CUBE_MAP
, glTexStorage2D est équivalent à:Quand la cible est
GL_TEXTURE_1D
ouGL_TEXTURE_1D_ARRAY
, glTexStorage2D est équivalent à:Pas si vous voulez la texture à l'échelle 1:1 avec de la fenêtre. Vous pouvez toujours la taille de la texture de vos cheveux à l'avance, ou haut de gamme. Mais
glTexStorage (...)
vous empêche de re-dimensionnement d'une texture après qu'il a été créé.glTexImage2D (...)
, d'autre part, vous permettra de modifier à tout moment.ok, merci!..
OriginalL'auteur Andon M. Coleman