다음을 통해 공유


glDrawPixels 함수

glDrawPixels 함수는 프레임 버퍼에 픽셀 블록을 씁니다.

구문

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

매개 변수

width

프레임 버퍼에 기록될 픽셀 사각형의 너비 차원입니다.

height(높이)

프레임 버퍼에 기록될 픽셀 사각형의 높이 차원입니다.

format

픽셀 데이터의 형식입니다. 허용되는 기호 상수는 다음과 같습니다.

의미
GL_COLOR_INDEX
각 픽셀은 단일 값인 색 인덱스입니다.
  1. glDrawPixels 함수는 메모리 데이터 형식에 관계없이 각 픽셀을 고정 소수점 형식으로 변환하고, 불특정 수의 비트가 이진점 오른쪽에 있습니다. 부동 소수점 값은 true 고정 소수점 값으로 변환됩니다. glDrawPixels 함수는 모든 소수 비트가 0으로 설정된 부호 있는 정수 및 부호 없는 정수 데이터를 변환합니다. 함수는 비트맵 데이터를 0.0 또는 1.0으로 변환합니다.
  2. glDrawPixels 함수는 각 고정 소수점 인덱스를 GL_INDEX_SHIFT 비트로 이동하고 GL_INDEX_OFFSET 추가합니다. GL_INDEX_SHIFT 음수이면 오른쪽으로 이동됩니다. 두 경우 모두 0비트 는 결과에서 지정되지 않은 비트 위치를 채웁니다.
  3. RGBA 모드에서 glDrawPixels 는 GL_PIXEL_MAP_I_TO_R, GL_PIXEL_MAP_I_TO_G, GL_PIXEL_MAP_I_TO_B 및 GL_PIXEL_MAP_I_TO_A 테이블을 사용하여 결과 인덱스를 RGBA 픽셀로 변환합니다. 색 인덱스 모드에서 GL_MAP_COLOR true이면 인덱스가 조회 테이블 GL_PIXEL_MAP_I_TO_I glDrawPixels 가 참조하는 값으로 바뀝니다.
  4. 인덱스의 조회 대체가 수행되었는지 여부에 관계없이 인덱스의 정수 부분은 ANDed로 2b - 1입니다. 여기서 b 는 색 인덱스 버퍼의 비트 수입니다.
  5. 그런 다음 결과 인덱스 또는 RGBA 색은 현재 래스터 위치 z 좌표 및 텍스처 좌표를 각 픽셀에 연결한 다음 xy 창 좌표를 n번째 조각에 할당하여 조각으로 변환됩니다. = xr + n 모드 너비
    y? = yr + n/width
    여기서 (xr , yr )는 현재 래스터 위치입니다.
  6. glDrawPixels 함수는 이러한 픽셀 조각을 점, 선 또는 다각형 래스터화에 의해 생성된 조각처럼 처리합니다. 프레임 버퍼에 조각을 쓰기 전에 텍스처 매핑, 안개 및 모든 조각 작업을 적용합니다.
GL_STENCIL_INDEX
각 픽셀은 단일 값인 스텐실 인덱스입니다.
  1. glDrawPixels 함수는 메모리 데이터 형식에 관계없이 이진 지점의 오른쪽에 지정된 수의 비트가 있는 고정 소수점 형식으로 변환합니다. 부동 소수점 값은 true 고정 소수점 값으로 변환됩니다. glDrawPixels 함수는 모든 소수 비트가 0으로 설정된 부호 있는 정수 및 부호 없는 정수 데이터를 변환합니다. 비트맵 데이터는 0.0 또는 1.0으로 변환됩니다.
  2. glDrawPixels 함수는 각 고정 소수점 인덱스를 GL_INDEX_SHIFT 비트로 이동하고 GL_INDEX_OFFSET 추가합니다. GL_INDEX_SHIFT 음수이면 오른쪽으로 이동됩니다. 두 경우 모두 0비트 는 결과에서 지정되지 않은 비트 위치를 채웁니다.
  3. GL_MAP_STENCIL true이면 인덱스가 glDrawPixels 가 GL_PIXEL_MAP_S_TO_S 조회 테이블에서 참조하는 값으로 바뀝니다.
  4. 인덱스의 조회 대체가 수행되었는지 여부에 관계없이 인덱스의 정수 부분은 ANDed와 2b - 1입니다. 여기서 b 는 스텐실 버퍼의 비트 수입니다. 그러면 결과 스텐실 인덱스가 스텐실 버퍼에 기록되므로 n번째 인덱스가 위치 x에 쓰여지 나요? = xr + n 모드 너비
    y? = yr + n/width
    여기서 (xr ,yr )는 현재 래스터 위치입니다. 픽셀 소유권 테스트, 가위 테스트 및 스텐실 쓰기 마스크만 이러한 쓰기에 영향을 줍니다.
GL_DEPTH_COMPONENT
각 픽셀은 단일 깊이 구성 요소입니다.
  1. glDrawPixels 함수는 부동 소수점 데이터를 지정되지 않은 정밀도로 내부 부동 소수점 형식으로 직접 변환합니다. 부호 있는 정수 데이터는 가장 긍정적인 표현 가능한 정수 값이 1.0에 매핑되고 가장 음의 표현 가능한 값이 -1.0에 매핑되도록 내부 부동 소수점 형식에 선형으로 매핑됩니다. 부호 없는 정수 데이터는 비슷하게 매핑됩니다. 가장 큰 정수 값은 1.0에 매핑되고 0은 0.0에 매핑됩니다.
  2. glDrawPixels 함수는 결과 부동 소수점 깊이 값을 GL_DEPTH_SCALE 곱하고 GL_DEPTH_BIAS 추가합니다. 결과는 [0,1] 범위로 고정됩니다.
  3. glDrawPixels 함수는 현재 래스터 위치 색 또는 색 인덱스 및 텍스처 좌표를 각 픽셀에 연결한 다음 xy 창 좌표를 n번째 조각에 할당하여 결과 깊이 구성 요소를 조각으로 변환합니다. = xr + n 모드 너비
    y? = yr + n/width
    여기서 (xr ,yr )는 현재 래스터 위치입니다.
  4. 그런 다음 이러한 픽셀 조각은 점, 선 또는 다각형을 래스터화하여 생성된 조각처럼 처리됩니다. glDrawPixels 함수는 프레임 버퍼에 조각을 쓰기 전에 텍스처 매핑, 안개 및 모든 조각 작업을 적용합니다.
GL_RGBA
각 픽셀은 빨간색, 녹색, 파랑, 알파의 4개 구성 요소 그룹입니다.
  1. glDrawPixels 함수는 부동 소수점 값을 지정되지 않은 정밀도로 내부 부동 소수점 형식으로 직접 변환합니다. 부호 있는 정수 값은 가장 긍정적인 표현 가능한 정수 값이 1.0에 매핑되고 가장 음의 표현 가능한 값이 -1.0에 매핑되도록 내부 부동 소수점 형식에 선형으로 매핑됩니다. 부호 없는 정수 데이터는 비슷하게 매핑됩니다. 가장 큰 정수 값은 1.0에 매핑되고 0은 0.0에 매핑됩니다.
  2. glDrawPixels 함수는 결과 부동 소수점 색 값을 GL_c_SCALE 곱하고 GL_c_BIAS 추가합니다. 여기서 c는 각 색 구성 요소에 대해 RED, GREEN, BLUE 및 ALPHA입니다. 결과는 [0,1] 범위로 고정됩니다.
  3. GL_MAP_COLOR true이면 glDrawPixels 는 각 색 구성 요소의 크기를 조회 테이블 GL_PIXEL_MAP_c_TO_c 크기로 조정한 다음 해당 테이블에서 참조하는 값으로 구성 요소를 바꿉니다. c 는 각각 R, G, B 또는 A입니다.
  4. glDrawPixels 함수는 현재 래스터 위치 z 좌표 및 텍스처 좌표를 각 픽셀에 연결한 다음 xy 창 좌표를 x와 같은 n번째 조각에 할당하여 결과 RGBA 색을 조각으로 변환합니다. = xr + n 모드 너비
    y? = yr + n /width
    여기서 (xr ,yr )는 현재 래스터 위치입니다.
  5. 그런 다음 이러한 픽셀 조각은 점, 선 또는 다각형을 래스터화하여 생성된 조각처럼 처리됩니다. glDrawPixels 함수는 프레임 버퍼에 조각을 쓰기 전에 텍스처 매핑, 안개 및 모든 조각 작업을 적용합니다.
GL_RED
각 픽셀은 단일 빨간색 구성 요소입니다.
glDrawPixels 함수는 이 구성 요소를 RGBA 픽셀의 빨간색 구성 요소와 동일한 방식으로 내부 부동 소수점 형식으로 변환한 다음 녹색 및 파란색이 0.0으로 설정되고 알파가 1.0으로 설정된 RGBA 픽셀로 변환합니다. 이 변환 후 픽셀은 RGBA 픽셀로 읽은 것처럼 처리됩니다.
GL_GREEN
각 픽셀은 단일 녹색 구성 요소입니다.
glDrawPixels 함수는 RGBA 픽셀의 녹색 구성 요소와 동일한 방식으로 이 구성 요소를 내부 부동 소수점 형식으로 변환한 다음 빨간색과 파란색이 0.0으로 설정되고 알파가 1.0으로 설정된 RGBA 픽셀로 변환합니다. 이 변환 후 픽셀은 RGBA 픽셀로 읽은 것처럼 처리됩니다.
GL_BLUE
각 픽셀은 단일 파란색 구성 요소입니다.
glDrawPixels 함수는 RGBA 픽셀의 파란색 구성 요소와 동일한 방식으로 이 구성 요소를 내부 부동 소수점 형식으로 변환한 다음 빨간색과 녹색이 0.0으로 설정되고 알파가 1.0으로 설정된 RGBA 픽셀로 변환합니다. 이 변환 후 픽셀은 RGBA 픽셀로 읽은 것처럼 처리됩니다.
GL_ALPHA
각 픽셀은 단일 알파 구성 요소입니다.
glDrawPixels 함수는 RGBA 픽셀의 알파 구성 요소와 동일한 방식으로 이 구성 요소를 내부 부동 소수점 형식으로 변환한 다음 빨간색, 녹색 및 파란색이 0.0으로 설정된 RGBA 픽셀로 변환합니다. 이 변환 후 픽셀은 RGBA 픽셀로 읽은 것처럼 처리됩니다.
GL_RGB
각 픽셀은 빨간색, 녹색, 파란색의 세 가지 구성 요소로 구성된 그룹입니다. glDrawPixels 함수는 RGBA 픽셀의 빨간색, 녹색 및 파란색 구성 요소와 동일한 방식으로 각 구성 요소를 내부 부동 소수점 형식으로 변환합니다. 색 삼중은 알파가 1.0으로 설정된 RGBA 픽셀로 변환됩니다. 이 변환 후 픽셀은 RGBA 픽셀로 읽은 것처럼 처리됩니다.
GL_LUMINANCE
각 픽셀은 단일 광도 구성 요소입니다.
glDrawPixels 함수는 이 구성 요소를 RGBA 픽셀의 빨간색 구성 요소와 동일한 방식으로 내부 부동 소수점 형식으로 변환한 다음 빨강, 녹색 및 파란색이 변환된 광도 값으로 설정된 RGBA 픽셀로 변환하고 알파를 1.0으로 설정합니다. 이 변환 후 픽셀은 RGBA 픽셀로 읽은 것처럼 처리됩니다.
GL_LUMINANCE_ALPHA
각 픽셀은 광도, 알파의 두 가지 구성 요소로 구성된 그룹입니다.
glDrawPixels 함수는 두 구성 요소를 RGBA 픽셀의 빨간색 구성 요소와 동일한 방식으로 내부 부동 소수점 형식으로 변환한 다음 빨강, 녹색 및 파랑이 변환된 광도 값으로 설정된 RGBA 픽셀로 변환하고 알파를 변환된 알파 값으로 설정합니다. 이 변환 후 픽셀은 RGBA 픽셀로 읽은 것처럼 처리됩니다.
GL_BGR_EXT
각 픽셀은 파란색, 녹색, 빨간색의 세 가지 구성 요소로 구성된 그룹입니다.
GL_BGR_EXT Windows 디바이스 독립적 비트맵(DIB)의 메모리 레이아웃과 일치하는 형식을 제공합니다. 따라서 애플리케이션은 Windows 함수 호출 및 OpenGL 픽셀 함수 호출에서 동일한 데이터를 사용할 수 있습니다.
GL_BGRA_EXT
각 픽셀은 파란색, 녹색, 빨간색, 알파의 네 가지 구성 요소로 구성된 그룹입니다.
GL_BGRA_EXT Windows 디바이스 독립적 비트맵(DIB)의 메모리 레이아웃과 일치하는 형식을 제공합니다. 따라서 애플리케이션은 Windows 함수 호출 및 OpenGL 픽셀 함수 호출에서 동일한 데이터를 사용할 수 있습니다.

type

픽셀의 데이터 형식 입니다. 다음은 허용되는 기호 상수와 그 의미입니다.

의미
GL_UNSIGNED_BYTE
부호 없는 8비트 정수
GL_BYTE
부호 있는 8비트 정수
GL_BITMAP
부호 없는 8비트 정수의 단일 비트
GL_UNSIGNED_SHORT
부호 없는 16비트 정수
GL_SHORT
부호 있는 16비트 정수
GL_UNSIGNED_INT
부호 없는 32비트 정수
GL_INT
32비트 정수
GL_FLOAT
단정밀도 부동 소수점

픽셀

픽셀 데이터에 대한 포인터입니다.

반환 값

이 함수는 값을 반환하지 않습니다.

오류 코드

glGetError 함수에서 다음 오류 코드를 검색할 수 있습니다.

Name 의미
GL_INVALID_VALUE
너비 또는 높이가 음수였습니다.
GL_INVALID_ENUM
형식 또는 형식이 허용되는 값이 아니었습니다.
GL_INVALID_OPERATION
형식 은 GL_RED, GL_GREEN, GL_BLUE, GL_ALPHA, GL_RGB, GL_RGBA, GL_BGR_EXT, GL_BGRA_EXT, GL_LUMINANCE 또는 GL_LUMINANCE_ALPHA, OpenGL은 색 인덱스 모드에 있었습니다.
GL_INVALID_ENUM
형식 이 GL_BITMAP 형식 이 GL_COLOR_INDEX 또는 GL_STENCIL_INDEX 않았습니다.
GL_INVALID_OPERATION
형식 이 GL_STENCIL_INDEX 스텐실 버퍼가 없습니다.
GL_INVALID_OPERATION
함수는 glBegin 호출과 glEnd에 대한 해당 호출 사이에 호출되었습니다.

설명

glDrawPixels 함수는 메모리에서 픽셀 데이터를 읽고 현재 래스터 위치를 기준으로 프레임 버퍼에 씁니다. glRasterPos를 사용하여 현재 래스터 위치를 설정하고 인수 GL_CURRENT_RASTER_POSITION glGet을 사용하여 래스터 위치를 쿼리합니다.

여러 매개 변수는 메모리에서 픽셀 데이터의 인코딩을 정의하고 프레임 버퍼에 배치되기 전에 픽셀 데이터의 처리를 제어합니다. 이러한 매개 변수는 glPixelStore, glPixelTransfer, glPixelMap 및 glPixelZoom 가지 함수로 설정됩니다. 이 항목에서는 이러한 네 가지 함수에서 지정한 매개 변수 중 전부는 아니지만 많은 glDrawPixels 에 미치는 영향에 대해 설명합니다.

데이터는 형식에 따라 부호 있는 바이트 또는 부호 없는 바이트, 부호 있거나 부호 없는 반바지, 부호 있거나 부호 없는 정수 또는 단정밀도 부동 소수점 값의 시퀀스로 픽셀에서 읽습니다. 이러한 각 바이트, 반바지, 정수 또는 부동 소수점 값은 형식에 따라 하나의 색 또는 깊이 구성 요소 또는 하나의 인덱스로 해석됩니다. 인덱스는 항상 개별적으로 처리됩니다. 색 구성 요소는 형식에 따라 다시 1, 2, 3 또는 4개의 값 그룹으로 처리됩니다. 개별 인덱스와 구성 요소 그룹을 모두 픽셀이라고 합니다. 형식이 GL_BITMAP 경우 데이터는 부호 없는 바이트여야 하며 형식은 GL_COLOR_INDEX 또는 GL_STENCIL_INDEX 합니다. 부호 없는 각 바이트는 8개의 1비트 픽셀로 처리되며 비트 순서는 GL_UNPACK_LSB_FIRST 의해 결정됩니다( glPixelStore 참조).

높이 픽셀별 너비는 위치 픽셀부터 시작하여 메모리에서 읽습니다. 기본적으로 이러한 픽셀은 모든 너비 픽셀을 읽은 후 읽기 포인터가 다음 4 바이트 경계로 진행된다는 점을 제외하고 인접한 메모리 위치에서 가져옵니다. glPixelStore 함수는 인수 GL_UNPACK_ALIGNMENT 4바이트 행 맞춤을 지정하고 1, 2, 4 또는 8바이트로 설정할 수 있습니다. 다른 픽셀 저장소 매개 변수는 첫 번째 픽셀을 읽기 전과 모든 너비 픽셀을 읽은 후에 서로 다른 읽기 포인터 진행을 지정합니다. glPixelStore 함수는 glPixelTransferglPixelMap으로 지정된 여러 매개 변수의 값을 기반으로 메모리에서 동일한 방식으로 읽는 각 높이별 픽셀에서 작동합니다. 이러한 작업의 세부 정보와 픽셀이 그려지는 대상 버퍼는 형식별로 지정된 픽셀 형식에 따라 다릅니다.

지금까지 설명한 래스터화는 픽셀 확대/축소 계수 1.0을 가정합니다. glPixelZoom을 사용하여 xy 픽셀 확대/축소 인수를 변경하는 경우 픽셀은 다음과 같이 조각으로 변환됩니다. (xr,yr)이 현재 래스터 위치이고 지정된 픽셀이 픽셀 사각형의 n번째 열과 m번째 행에 있는 경우 모서리가 있는 사각형에 있는 픽셀에 대해 조각이 생성됩니다.

(xr + 확대/축소? n, yr + zoomym)

(xr + 확대/축소? (n + 1), yr + zoomy (m + 1))

여기서 확대/축소? 는 GL_ZOOM_X 값이고 확대/축소y 는 GL_ZOOM_Y 값입니다.

다음 함수는 glDrawPixels와 관련된 정보를 검색합니다.

인수가 GL_CURRENT_RASTER_POSITION glGet

인수가 GL_CURRENT_RASTER_POSITION_VALID glGet

요구 사항

요구 사항
지원되는 최소 클라이언트
Windows 2000 Professional[데스크톱 앱만]
지원되는 최소 서버
Windows 2000 Server[데스크톱 앱만]
헤더
Gl.h
라이브러리
Opengl32.lib
DLL
Opengl32.dll

추가 정보

glAlphaFunc

glBegin

glBlendFunc

glCopyPixels

glDepthFunc

glEnd

glGet

glLogicOp

glPixelMap

glPixelStore

glPixelTransfer

glPixelZoom

glRasterPos

glReadPixels

glScissor

glStencilFunc