Partager via


fonction glCopyPixels

La fonction glCopyPixels copie les pixels dans le framebuffer.

Syntaxe

void WINAPI glCopyPixels(
   GLint   x,
   GLint   y,
   GLsizei width,
   GLsizei height,
   GLenum  type
);

Paramètres

x

Coordonnée du plan x de la fenêtre du coin inférieur gauche de la région rectangulaire de pixels à copier.

y

Coordonnée du plan y de la fenêtre du coin inférieur gauche de la région rectangulaire de pixels à copier.

width

Dimension de largeur de la région rectangulaire de pixels à copier. Il ne doit pas être négatif.

height

Dimension de hauteur de la région rectangulaire de pixels à copier. Il ne doit pas être négatif.

type

Spécifie si glCopyPixels doit copier des valeurs de couleur, des valeurs de profondeur ou des valeurs de gabarit. Les constantes symboliques acceptables sont.

Valeur Signification
GL_COLOR
La fonction glCopyPixels lit les index ou les couleurs RVBA à partir de la mémoire tampon actuellement spécifiée en tant que mémoire tampon source de lecture (voir glReadBuffer).
Si OpenGL est en mode d’index de couleur :
  1. Chaque index lu à partir de cette mémoire tampon est converti en format à point fixe avec un nombre non spécifié de bits à droite du point binaire.
  2. Chaque index est déplacé vers la gauche de GL_INDEX_SHIFT bits et ajouté à GL_INDEX_OFFSET. Si GL_INDEX_SHIFT est négatif, le décalage se trouve à droite. Dans les deux cas, zéro bits remplit des emplacements de bits non spécifiés dans le résultat.
  3. Si GL_MAP_COLOR a la valeur true, l’index est remplacé par la valeur qu’il référence dans la table de recherche GL_PIXEL_MAP_I_TO_I.
  4. Que le remplacement de recherche de l’index soit effectué ou non, la partie entière de l’index est ensuite ETavec 2b 1, où b est le nombre de bits dans une mémoire tampon d’index de couleur.
Si OpenGL est en mode RVBA :
  1. Les composants rouge, vert, bleu et alpha de chaque pixel lu sont convertis en format à virgule flottante interne avec une précision non spécifiée.
  2. La conversion mappe la plus grande valeur de composant représentable à 1.0 et la valeur du composant zéro à 0.0.
  3. Les valeurs de couleur à virgule flottante obtenues sont ensuite multipliées par GL_c_SCALE et ajoutées à GL_c_BIAS, où c est ROUGE, VERT, BLEU et ALPHA pour les composants de couleur respectifs.
  4. Les résultats sont limités à la plage [0,1].
  5. Si GL_MAP_COLOR a la valeur true, chaque composant de couleur est mis à l’échelle en fonction de la taille de la table de recherche GL_PIXEL_MAP_c_TO_c, puis remplacé par la valeur qu’il référence dans cette table ; c est R, G, B ou A, respectivement. Les index ou couleurs RVBA résultants sont ensuite convertis en fragments en attachant la coordonnée z de position raster actuelle et les coordonnées de texture à chaque pixel, puis en affectant les coordonnées de fenêtre (xr + i, yr + j), où (xr , yr ) est la position raster actuelle, et le pixel était le pixel dans la position i dans la ligne j . Ces fragments de pixels sont ensuite traités comme les fragments générés par la rastérisation de points, de lignes ou de polygones. Le mappage de textures, le brouillard et toutes les opérations de fragment sont appliqués avant que les fragments ne soient écrits dans le framebuffer.
GL_DEPTH
Les valeurs de profondeur sont lues à partir de la mémoire tampon de profondeur et converties directement en format à virgule flottante interne avec une précision non spécifiée. La valeur de profondeur à virgule flottante obtenue est ensuite multipliée par GL_DEPTH_SCALE et ajoutée à GL_DEPTH_BIAS. Le résultat est serré à la plage [0,1].
Les composants de profondeur résultants sont ensuite convertis en fragments en attachant la couleur de la position raster actuelle ou l’index de couleur et les coordonnées de texture à chaque pixel, puis en affectant les coordonnées de fenêtre (xr + i, yr + j), où (xr , yr ) est la position raster actuelle, et le pixel était le pixel dans la position i dans la ligne j . Ces fragments de pixels sont ensuite traités comme les fragments générés par la rastérisation de points, de lignes ou de polygones. Le mappage de textures, le brouillard et toutes les opérations de fragment sont appliqués avant que les fragments ne soient écrits dans le framebuffer.
GL_STENCIL
Les index de gabarit sont lus à partir de la mémoire tampon de gabarit et convertis en format à point fixe interne avec un nombre non spécifié de bits à droite du point binaire. Chaque index à point fixe est ensuite décalé vers la gauche de GL_INDEX_SHIFT bits et ajouté à GL_INDEX_OFFSET. Si GL_INDEX_SHIFT est négatif, le décalage se trouve à droite. Dans les deux cas, zéro bits remplit des emplacements de bits non spécifiés dans le résultat. Si GL_MAP_STENCIL a la valeur true, l’index est remplacé par la valeur qu’il référence dans la table de recherche GL_PIXEL_MAP_S_TO_S. Que le remplacement de recherche de l’index soit effectué ou non, la partie entière de l’index est ensuite ETavec 2b - 1, où b est le nombre de bits dans la mémoire tampon de gabarit. Les index de gabarit résultants sont ensuite écrits dans la mémoire tampon de gabarit de sorte que l’index lu à partir de l’emplacement i de la ligne j est écrit dans l’emplacement (xr + i, yr + j), où (xr , yr ) est la position raster actuelle. Seuls le test de propriété des pixels, le test de scissor et le masque d’écriture du gabarit affectent ces écritures.

Valeur renvoyée

Cette fonction ne retourne pas de valeur.

Codes d’erreur

Les codes d’erreur suivants peuvent être récupérés par la fonction glGetError .

Name Signification
GL_INVALID_ENUM
type n’était pas une valeur acceptée.
GL_INVALID_VALUE
La largeur ou la hauteur était négative.
GL_INVALID_OPERATION
type a été GL_DEPTH et il n’y avait pas de mémoire tampon de profondeur.
GL_INVALID_OPERATION
type a été GL_STENCIL et il n’y avait pas de mémoire tampon de gabarit.
GL_INVALID_OPERATION
La fonction a été appelée entre un appel à glBegin et l’appel à glEnd correspondant.

Notes

La fonction glCopyPixels copie un rectangle de pixels alignés sur l’écran à partir de l’emplacement framebuffer spécifié vers une région par rapport à la position raster actuelle. Son fonctionnement est bien défini uniquement si la région source de pixels entière se trouve dans la partie exposée de la fenêtre. Les résultats des copies provenant de l’extérieur de la fenêtre ou de régions de la fenêtre qui ne sont pas exposées dépendent du matériel et ne sont pas définis.

Les paramètres x et y spécifient les coordonnées de fenêtre du coin inférieur gauche de la région rectangulaire à copier. Les paramètres largeur et hauteur spécifient les dimensions de la région rectangulaire à copier. La largeur et la hauteur doivent être non négatives.

Plusieurs paramètres contrôlent le traitement des données de pixels pendant leur copie. Ces paramètres sont définis avec trois fonctions : glPixelTransfer, glPixelMap et glPixelZoom. Cette rubrique décrit les effets sur glCopyPixels de la plupart des paramètres spécifiés par ces trois fonctions, mais pas tous.

La fonction glCopyPixels copie les valeurs de chaque pixel avec le coin inférieur gauche à (x + i, y + j) pour 0 =largeuri< et 0 = hauteur j<. Ce pixel est le pixel i dans la ligne j . Les pixels sont copiés dans l’ordre des lignes de la ligne la plus basse à la ligne la plus élevée, de gauche à droite dans chaque ligne.

Le paramètre de type spécifie si les données de couleur, de profondeur ou de gabarit doivent être copiées.

La rastérisation décrite jusqu’à présent suppose des facteurs de zoom de pixels de 1.0. Si vous utilisez glPixelZoom pour modifier les facteurs de zoom x et y , les pixels sont convertis en fragments comme suit. Si (xr , yr ) est la position raster actuelle et qu’un pixel donné se trouve à l’emplacement i dans la ligne j du rectangle de pixels source, des fragments sont générés pour les pixels dont les centres se trouvent dans le rectangle avec des coins à

(xr r + zoom ? i, yr + zoomyj)

et

(xr r + zoom ? (i + 1), yr + zoomy (j + 1))

zoomer ? est la valeur de GL_ZOOM_X et zoomy est la valeur de GL_ZOOM_Y.

Les modes spécifiés par glPixelStore n’ont aucun effet sur le fonctionnement de glCopyPixels.

Les fonctions suivantes récupèrent des informations relatives à glCopyPixels :

glGet avec argument GL_CURRENT_RASTER_POSITION

glGet avec argument GL_CURRENT_RASTER_POSITION_VALID

Pour copier le pixel de couleur dans le coin inférieur gauche de la fenêtre vers la position raster actuelle, utilisez

glCopyPixels( 0, 0, 1, 1, GL_COLOR);

Spécifications

Condition requise Valeur
Client minimal pris en charge
Windows 2000 Professionnel [applications de bureau uniquement]
Serveur minimal pris en charge
Windows 2000 Server [applications de bureau uniquement]
En-tête
Gl.h
Bibliothèque
Opengl32.lib
DLL
Opengl32.dll

Voir aussi

glBegin

glDepthFunc

glDrawBuffer

glDrawPixels

glEnd

glGet

glPixelMap

glPixelStore

glPixelTransfer

glPixelZoom

glRasterPos

glReadBuffer

glReadPixels

glStencilFunc