Función glDrawPixels

La función glDrawPixels escribe un bloque de píxeles en el framebuffer.

Sintaxis

void WINAPI glDrawPixels(
         GLsizei width,
         GLsizei height,
         GLenum  format,
         GLenum  type,
   const GLvoid  *pixels
);

Parámetros

width

Dimensión de ancho del rectángulo de píxeles que se escribirá en el framebuffer.

height

Dimensión de alto del rectángulo de píxeles que se escribirá en el framebuffer.

format

Formato de los datos de píxeles. Las constantes simbólicas aceptables son las siguientes.

Value Significado
GL_COLOR_INDEX
Cada píxel es un valor único, un índice de color.
  1. La función glDrawPixels convierte cada píxel en formato de punto fijo, con un número no especificado de bits a la derecha del punto binario, independientemente del tipo de datos de memoria. Los valores de punto flotante se convierten en valores de punto fijo verdaderos. La función glDrawPixels convierte los datos enteros firmados y sin signo con todos los bits de fracción establecidos en cero. La función convierte los datos de mapa de bits en 0.0 o 1.0.
  2. La función glDrawPixels desplaza cada índice de punto fijo a la izquierda por GL_INDEX_SHIFT bits y lo agrega a GL_INDEX_OFFSET. Si GL_INDEX_SHIFT es negativo, el cambio está a la derecha. En cualquier caso, cero bits se rellenan en caso contrario ubicaciones de bits no especificadas en el resultado.
  3. Cuando se encuentra en modo RGBA, glDrawPixels convierte el índice resultante en un píxel RGBA mediante las tablas GL_PIXEL_MAP_I_TO_R, GL_PIXEL_MAP_I_TO_G, GL_PIXEL_MAP_I_TO_B y GL_PIXEL_MAP_I_TO_A. Cuando en el modo de índice de color y GL_MAP_COLOR es true, el índice se reemplaza por el valor que glDrawPixels hace referencia en la tabla de búsqueda GL_PIXEL_MAP_I_TO_I.
  4. Tanto si la búsqueda del índice se realiza o no, la parte entera del índice es ANDed con 2b - 1, donde b es el número de bits en un búfer de índice de color.
  5. A continuación, los índices resultantes o los colores RGBA se convierten en fragmentos mediante la asociación de las coordenadas z y de textura de la posición del ráster actual a cada píxel y, a continuación, asignando coordenadas de ventana x e y al fragmento de forma que x? = Ancho de módulo xrn +
    ¿Y? = yrn + /width
    donde (xr , yr ) es la posición del ráster actual.
  6. La función glDrawPixels trata estos fragmentos de píxeles igual que los fragmentos generados por puntos, líneas o polígonos rasterizantes. Aplica la asignación de texturas, la niebla y todas las operaciones de fragmento antes de escribir los fragmentos en el framebuffer.
GL_STENCIL_INDEX
Cada píxel es un valor único, un índice de galería de símbolos.
  1. La función glDrawPixels la convierte en formato de punto fijo, con un número no especificado de bits a la derecha del punto binario, independientemente del tipo de datos de memoria. Los valores de punto flotante se convierten en valores de punto fijo verdaderos. La función glDrawPixels convierte los datos enteros firmados y sin signo con todos los bits de fracción establecidos en cero. Los datos de mapa de bits se convierten en 0.0 o 1.0.
  2. La función glDrawPixels desplaza cada índice de punto fijo a la izquierda por GL_INDEX_SHIFT bits y lo agrega a GL_INDEX_OFFSET. Si GL_INDEX_SHIFT es negativo, el cambio está a la derecha. En cualquier caso, cero bits se rellenan en caso contrario ubicaciones de bits no especificadas en el resultado.
  3. Si GL_MAP_STENCIL es true, el índice se reemplaza por el valor al que glDrawPixels hace referencia en la tabla de búsqueda GL_PIXEL_MAP_S_TO_S.
  4. Tanto si la sustitución de búsqueda del índice se realiza o no, la parte entera del índice es ANDed con 2b - 1, donde b es el número de bits en el búfer de galería de símbolos. A continuación, los índices de galería de símbolos resultantes se escriben en el búfer de galería de símbolos de forma que el índice se escribe en la ubicación x? = Ancho de módulo xrn +
    ¿Y? = yrn + /width
    donde (xr ,yr ) es la posición del ráster actual. Solo la prueba de propiedad de píxeles, la prueba de tijera y la máscara de escritura de la galería de símbolos afectan a estas escrituras.
GL_DEPTH_COMPONENT
Cada píxel es un componente de profundidad única.
  1. La función glDrawPixels convierte datos de punto flotante directamente en un formato de punto flotante interno con precisión no especificada. Los datos enteros con signo se asignan linealmente al formato de punto flotante interno de forma que el valor entero representable más positivo se asigna a 1,0 y el valor representable más negativo se asigna a -1,0. Los datos enteros sin signo se asignan de forma similar: el valor entero más grande se asigna a 1,0 y cero se asigna a 0,0.
  2. La función glDrawPixels multiplica el valor de profundidad de punto flotante resultante por GL_DEPTH_SCALE y lo agrega a GL_DEPTH_BIAS. El resultado se sujeta al intervalo [0,1].
  3. La función glDrawPixels convierte los componentes de profundidad resultantes en fragmentos mediante la asociación del color de posición del ráster actual o el índice de color y las coordenadas de textura a cada píxel y, a continuación, asignando coordenadas de ventana x e y al fragmento de forma que x? = Ancho de módulo xrn +
    ¿Y? = yrn + /width
    donde (xr ,yr ) es la posición del ráster actual.
  4. A continuación, estos fragmentos de píxeles se tratan igual que los fragmentos generados por puntos rasterizadores, líneas o polígonos. La función glDrawPixels aplica la asignación de texturas, la niebla y todas las operaciones de fragmento antes de escribir los fragmentos en el framebuffer.
GL_RGBA
Cada píxel es un grupo de cuatro componentes en este orden: rojo, verde, azul, alfa.
  1. La función glDrawPixels convierte los valores de punto flotante directamente en un formato de punto flotante interno con precisión no especificada. Los valores enteros con signo se asignan linealmente al formato de punto flotante interno, de forma que el valor entero representable más positivo se asigna a 1,0 y el valor representable más negativo se asigna a -1,0. Los datos enteros sin signo se asignan de forma similar: el valor entero más grande se asigna a 1,0 y cero se asigna a 0,0.
  2. La función glDrawPixels multiplica los valores de color de punto flotante resultantes por GL_c_SCALE y los agrega a GL_c_BIAS, donde c es RED, GREEN, BLUE y ALPHA para los componentes de color respectivos. Los resultados se fijan en el intervalo [0,1].
  3. Si GL_MAP_COLOR es true, glDrawPixels escala cada componente de color por el tamaño de la tabla de búsqueda GL_PIXEL_MAP_c_TO_c y, a continuación, reemplaza el componente por el valor al que hace referencia en esa tabla; c es R, G, B o A, respectivamente.
  4. La función glDrawPixels convierte los colores RGBA resultantes en fragmentos mediante la asociación de las coordenadas z y de textura de la posición del ráster actual a cada píxel y, a continuación, asigna las coordenadas de ventana x e y al fragmento de forma que x? = Ancho de módulo xrn +
    ¿Y? = yrn + /width
    donde (xr ,yr ) es la posición del ráster actual.
  5. A continuación, estos fragmentos de píxeles se tratan igual que los fragmentos generados por puntos rasterizadores, líneas o polígonos. La función glDrawPixels aplica la asignación de texturas, la niebla y todas las operaciones de fragmento antes de escribir los fragmentos en el framebuffer.
GL_RED
Cada píxel es un único componente rojo.
La función glDrawPixels convierte este componente en el formato de punto flotante interno de la misma manera que el componente rojo de un píxel RGBA y, a continuación, lo convierte en un píxel RGBA con verde y azul establecido en 0,0 y alfa establecido en 1,0. Después de esta conversión, el píxel se trata igual que si se hubiera leído como un píxel RGBA.
GL_GREEN
Cada píxel es un único componente verde.
La función glDrawPixels convierte este componente en el formato de punto flotante interno de la misma manera que el componente verde de un píxel RGBA y, a continuación, lo convierte en un píxel RGBA con rojo y azul establecido en 0,0 y alfa establecido en 1,0. Después de esta conversión, el píxel se trata igual que si se hubiera leído como un píxel RGBA.
GL_BLUE
Cada píxel es un único componente azul.
La función glDrawPixels convierte este componente en el formato de punto flotante interno de la misma manera que el componente azul de un píxel RGBA y, a continuación, lo convierte en un píxel RGBA con rojo y verde establecido en 0,0 y alfa establecido en 1,0. Después de esta conversión, el píxel se trata igual que si se hubiera leído como un píxel RGBA.
GL_ALPHA
Cada píxel es un único componente alfa.
La función glDrawPixels convierte este componente en el formato de punto flotante interno de la misma manera que el componente alfa de un píxel RGBA y, a continuación, lo convierte en un píxel RGBA con rojo, verde y azul establecido en 0,0. Después de esta conversión, el píxel se trata igual que si se hubiera leído como un píxel RGBA.
GL_RGB
Cada píxel es un grupo de tres componentes en este orden: rojo, verde y azul. La función glDrawPixels convierte cada componente en el formato de punto flotante interno de la misma manera que son los componentes rojo, verde y azul de un píxel RGBA. El triple de color se convierte en un píxel RGBA con alfa establecido en 1,0. Después de esta conversión, el píxel se trata igual que si se hubiera leído como un píxel RGBA.
GL_LUMINANCE
Cada píxel es un único componente de luminancia.
La función glDrawPixels convierte este componente en el formato de punto flotante interno de la misma manera que el componente rojo de un píxel RGBA y, a continuación, lo convierte en un píxel RGBA con rojo, verde y azul establecido en el valor de luminancia convertido y alfa establecido en 1,0. Después de esta conversión, el píxel se trata igual que si se hubiera leído como un píxel RGBA.
GL_LUMINANCE_ALPHA
Cada píxel es un grupo de dos componentes en este orden: luminancia, alfa.
La función glDrawPixels convierte los dos componentes en el formato de punto flotante interno de la misma manera que el componente rojo de un píxel RGBA y, a continuación, los convierte en un píxel RGBA con rojo, verde y azul establecido en el valor de luminancia convertido y alfa establecido en el valor alfa convertido. Después de esta conversión, el píxel se trata igual que si se hubiera leído como un píxel RGBA.
GL_BGR_EXT
Cada píxel es un grupo de tres componentes en este orden: azul, verde y rojo.
GL_BGR_EXT proporciona un formato que coincide con el diseño de memoria de Windows mapas de bits independientes del dispositivo (DIB). Por lo tanto, las aplicaciones pueden usar los mismos datos con Windows llamadas a funciones y llamadas a funciones de píxeles openGL.
GL_BGRA_EXT
Cada píxel es un grupo de cuatro componentes en este orden: azul, verde, rojo, alfa.
GL_BGRA_EXT proporciona un formato que coincide con el diseño de memoria de Windows mapas de bits independientes del dispositivo (DIB). Por lo tanto, las aplicaciones pueden usar los mismos datos con Windows llamadas a funciones y llamadas a funciones de píxeles openGL.

type

Tipo de datos para píxeles. A continuación se muestran las constantes simbólicas aceptadas y sus significados.

Value Significado
GL_UNSIGNED_BYTE
Entero de 8 bits sin signo
GL_BYTE
Entero de 8 bits con signo
GL_BITMAP
Bits únicos en enteros de 8 bits sin signo
GL_UNSIGNED_SHORT
Entero de 16 bits sin signo
GL_SHORT
Entero de 16 bits con signo
GL_UNSIGNED_INT
Entero de 32 bits sin signo
GL_INT
Entero de 32 bits
GL_FLOAT
Punto flotante de precisión sencilla

Píxeles

Puntero a los datos de píxeles.

Valor devuelto

Esta función no devuelve ningún valor.

Códigos de error

La función glGetError puede recuperar los siguientes códigos de error.

NOMBRE Significado
GL_INVALID_VALUE
El ancho o el alto eran negativos.
GL_INVALID_ENUM
El formato o el tipo no eran un valor aceptado.
GL_INVALID_OPERATION
el formato era GL_RED, GL_GREEN, GL_BLUE, GL_ALPHA, GL_RGB, GL_RGBA, GL_BGR_EXT, GL_BGRA_EXT, GL_LUMINANCE o GL_LUMINANCE_ALPHA, y OpenGL estaba en modo de índice de color.
GL_INVALID_ENUM
el tipo se GL_BITMAP y el formato no se GL_COLOR_INDEX ni GL_STENCIL_INDEX.
GL_INVALID_OPERATION
format se GL_STENCIL_INDEX y no había ningún búfer de galería de símbolos.
GL_INVALID_OPERATION
Se llamó a la función entre una llamada a glBegin y la llamada correspondiente a glEnd.

Observaciones

La función glDrawPixels lee los datos de píxeles de la memoria y los escribe en el búfer de fotogramas en relación con la posición del ráster actual. Use glRasterPos para establecer la posición del ráster actual y use glGet con el argumento GL_CURRENT_RASTER_POSITION para consultar la posición del ráster.

Varios parámetros definen la codificación de datos de píxeles en memoria y controlan el procesamiento de los datos de píxeles antes de colocarlos en el framebuffer. Estos parámetros se establecen con cuatro funciones: glPixelStore, glPixelTransfer, glPixelMap y glPixelZoom. En este tema se describen los efectos en glDrawPixels de muchos, pero no todos, de los parámetros especificados por estas cuatro funciones.

Los datos se leen desde píxeles como una secuencia de bytes con signo o sin signo, shorts firmados o sin signo, enteros con signo o sin signo, o valores de punto flotante de precisión sencilla, en función del tipo. Cada uno de estos bytes, shorts, enteros o valores de punto flotante se interpreta como un componente de color o profundidad, o un índice, en función del formato. Los índices siempre se tratan individualmente. Los componentes de color se tratan como grupos de uno, dos, tres o cuatro valores, de nuevo en función del formato. Tanto los índices individuales como los grupos de componentes se conocen como píxeles. Si el tipo es GL_BITMAP, los datos deben ser bytes sin signo y el formato debe ser GL_COLOR_INDEX o GL_STENCIL_INDEX. Cada byte sin signo se trata como ocho píxeles de 1 bits, con un orden de bits determinado por GL_UNPACK_LSB_FIRST (consulte glPixelStore).

Los píxeles de ancho por alto se leen de la memoria, empezando por píxeles de ubicación. De forma predeterminada, estos píxeles se toman de ubicaciones de memoria adyacentes, excepto que, después de leer todos los píxeles de ancho , el puntero de lectura está avanzado al siguiente límite de 4 bytes. La función glPixelStore especifica la alineación de fila de 4 bytes con el argumento GL_UNPACK_ALIGNMENT, y puede establecerla en 1, 2, 4 o 8 bytes. Otros parámetros de almacén de píxeles especifican diferentes avances de puntero de lectura, tanto antes de leer el primer píxel como después de leer todos los píxeles de ancho . La función glPixelStore funciona en cada uno de los píxeles de ancho a alto que lee de la memoria de la misma manera, en función de los valores de varios parámetros especificados por glPixelTransfer y glPixelMap. Los detalles de estas operaciones, así como el búfer de destino en el que se dibujan los píxeles, son específicos del formato de los píxeles, según lo especificado por formato.

La rasterización descrita hasta ahora supone factores de zoom de píxeles de 1,0. Si usa glPixelZoom para cambiar los factores de zoom de píxeles x e y , los píxeles se convierten en fragmentos de la siguiente manera. Si (xr,yr) es la posición del ráster actual y un píxel determinado se encuentra en la nª columna y la fila mth del rectángulo de píxeles, los fragmentos se generan para píxeles cuyos centros están en el rectángulo con esquinas en las esquinas.

(xr + zoom? n, yrzoomym + )

(xr + zoom? (n + 1), yrzoomy + (m + 1))

¿dónde zoom? es el valor de GL_ZOOM_X y zoomy es el valor de GL_ZOOM_Y.

Las siguientes funciones recuperan información relacionada con glDrawPixels:

glGet con GL_CURRENT_RASTER_POSITION de argumentos

glGet con GL_CURRENT_RASTER_POSITION_VALID de argumentos

Requisitos

Requisito Value
Cliente mínimo compatible
Windows 2000 Professional [solo aplicaciones de escritorio]
Servidor mínimo compatible
Windows 2000 Server [solo aplicaciones de escritorio]
Encabezado
Gl.h
Biblioteca
Opengl32.lib
Archivo DLL
Opengl32.dll

Consulte también

glAlphaFunc

glBegin

glBlendFunc

glCopyPixels

glDepthFunc

glEnd

glGet

glLogicOp

glPixelMap

glPixelStore

glPixelTransfer

glPixelZoom

glRasterPos

glReadPixels

glScissor

glStencilFunc