Поделиться через


Функция glCopyPixels

Функция glCopyPixels копирует пиксели в framebuffer.

Синтаксис

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

Параметры

x

Координата окна x-плоскости нижнего левого угла прямоугольной области пикселей для копирования.

y

Координата окна в левом нижнем углу прямоугольной области пикселей для копирования.

width

Размер ширины прямоугольной области копируемых пикселей. Должно быть неотрицательным значением.

height

Размер высоты прямоугольной области копируемых пикселей. Должно быть неотрицательным значением.

type

Указывает, следует ли использовать glCopyPixels для копирования значений цвета, глубины или наборов элементов. Допустимые символические константы: .

Значение Значение
GL_COLOR
Функция glCopyPixels считывает индексы или цвета RGBA из буфера, который в настоящее время указан в качестве буфера источника чтения (см. glReadBuffer).
Если OpenGL находится в режиме цветного индекса:
  1. Каждый индекс, считываемый из этого буфера, преобразуется в формат с фиксированной точкой с неопределенным числом битов справа от двоичной точки.
  2. Каждый индекс сдвигается влево GL_INDEX_SHIFT битами и добавляется в GL_INDEX_OFFSET. Если GL_INDEX_SHIFT является отрицательным, сдвиг будет вправо. В любом случае нулевые биты заполняют в противном случае неопределенные расположения битов в результате.
  3. Если GL_MAP_COLOR имеет значение true, индекс заменяется значением, на которое он ссылается в таблице подстановки GL_PIXEL_MAP_I_TO_I.
  4. Независимо от того, выполняется ли подстановка индекса или нет, целочисленная часть индекса затем определяется с2b 1, где b — это число битов в буфере цветового индекса.
Если OpenGL находится в режиме RGBA:
  1. Красный, зеленый, синий и альфа-компоненты каждого считываемого пикселя преобразуются во внутренний формат с плавающей запятой с неопределенной точностью.
  2. Преобразование сопоставляет наибольшее значение представленного компонента с 1,0, а значение компонента — с 0,0.
  3. Полученные значения цвета с плавающей запятой умножаются на GL_c_SCALE и добавляются в GL_c_BIAS, где c — RED, GREEN, BLUE и ALPHA для соответствующих компонентов цвета.
  4. Результаты зажимаются в диапазоне [0,1].
  5. Если GL_MAP_COLOR имеет значение true, каждый компонент цвета масштабируется в зависимости от размера таблицы подстановки GL_PIXEL_MAP_c_TO_c, а затем заменяется значением, на которое он ссылается в этой таблице; c имеет значение R, G, B или A соответственно. Затем результирующие индексы или цвета RGBA преобразуются в фрагменты, прикрепляя координаты Z текущего растра и координаты текстуры к каждому пикселю, а затем присваивая координаты окна (xr + i, yr + j), где (xr , yr ) — текущая позиция растра, а пиксель — пиксель в позиции i в строке j . Затем эти пиксельные фрагменты обрабатываются так же, как фрагменты, созданные растеризовыванием точек, линий или многоугольников. Сопоставление текстур, туман и все операции фрагментов применяются перед записью фрагментов в framebuffer.
GL_DEPTH
Значения глубины считываются из буфера глубины и преобразуются непосредственно во внутренний формат с плавающей запятой с неопределенной точностью. Полученное значение глубины с плавающей запятой умножается на GL_DEPTH_SCALE и добавляется в GL_DEPTH_BIAS. Результат зажимается в диапазоне [0,1].
Затем результирующие компоненты глубины преобразуются в фрагменты, прикрепляя цвет или индекс цвета растровой позиции и координаты текстуры к каждому пикселю, а затем присваивая координаты окна (xr + i, yr + j), где (xr , yr ) — текущая позиция растра, а пиксель — пиксель в позиции i в строке j . Затем эти пиксельные фрагменты обрабатываются так же, как фрагменты, созданные растеризовыванием точек, линий или многоугольников. Сопоставление текстур, туман и все операции фрагментов применяются перед записью фрагментов в framebuffer.
GL_STENCIL
Индексы набора элементов считываются из буфера трафарета и преобразуются во внутренний формат с фиксированной запятой с неопределенным числом битов справа от двоичной точки. Каждый индекс с фиксированной запятой затем сдвигается влево на GL_INDEX_SHIFT битами и добавляется в GL_INDEX_OFFSET. Если GL_INDEX_SHIFT является отрицательным, сдвиг будет вправо. В любом случае нулевые биты заполняют в противном случае неопределенные расположения битов в результате. Если GL_MAP_STENCIL имеет значение true, индекс заменяется значением, на которое он ссылается в таблице подстановки GL_PIXEL_MAP_S_TO_S. Независимо от того, выполняется ли подстановка индекса или нет, целочисленная часть индекса затем edс 2b по 1, где b — количество битов в буфере набора элементов. Полученные индексы наборов элементов записываются в буфер трафарета таким образом, что индекс, считаный из расположения i строки j , записывается в расположение (xr + i, yr + j), где (xr , yr ) — текущая позиция растра. Только тест владения пикселями, ножницы и маска записи набора элементов влияют на эти операции записи.

Возвращаемое значение

Эта функция не возвращает значение.

Коды ошибок

Следующие коды ошибок могут быть получены функцией glGetError .

Имя Значение
GL_INVALID_ENUM
Type не является допустимым значением.
GL_INVALID_VALUE
Либо ширина , либо высота были отрицательными.
GL_INVALID_OPERATION
тип был GL_DEPTH, а буфер глубины отсутствует.
GL_INVALID_OPERATION
тип был GL_STENCIL, а буфер трафарета не существует.
GL_INVALID_OPERATION
Функция была вызвана между вызовом glBegin и соответствующим вызовом glEnd.

Комментарии

Функция glCopyPixels копирует выровненный по экрану прямоугольник пикселей из указанного расположения framebuffer в область относительно текущей позиции растра. Его операция четко определена, только если вся область источника пикселей находится в предоставленной части окна. Результаты копирования из-за пределов окна или из областей окна, которые не предоставляются, зависят от оборудования и не определены.

Параметры x и y определяют координаты окна левого нижнего угла прямоугольной области, для копирования. Параметры ширины и высоты определяют размеры прямоугольной области для копирования. И ширина , и высота должны быть неагтивными.

Несколько параметров управляют обработкой пиксельных данных во время их копирования. Эти параметры задаются с помощью трех функций: glPixelTransfer, glPixelMap и glPixelZoom. В этом разделе описывается влияние на glCopyPixels большинства (но не всех) параметров, заданных этими тремя функциями.

Функция glCopyPixels копирует значения из каждого пикселя с левым нижним углом (x + i, y + j) для 0 = i<ширина и 0 = высота j<. Этот пиксель называется пикселем i в строке j . Пиксели копируются в порядке строк из самой низкой строки в самую высокую, слева направо в каждой строке.

Параметр type указывает, нужно ли копировать данные цвета, глубины или набора элементов.

При растеризации, описанной на данный момент, предполагается, что коэффициенты масштабирования пикселей — 1,0. Если вы используете glPixelZoom для изменения коэффициентов масштаба пикселей x и y , пиксели преобразуются в фрагменты следующим образом. Если (xr , yr ) является текущей позицией растра, а заданный пиксель находится в расположении i в строке j исходного пикселя прямоугольника, то фрагменты создаются для пикселей, центры которых находятся в прямоугольнике с углами в

(xr) + масштаб? i, yr + zoomyj)

и

(xr) + масштаб? (i + 1), yr + zoomy (j + 1))

Где масштаб? — значение GL_ZOOM_X, а масштабy — значение GL_ZOOM_Y.

Режимы, заданные glPixelStore , не влияют на работу glCopyPixels.

Следующие функции извлекают сведения, связанные с glCopyPixels:

glGet с аргументом GL_CURRENT_RASTER_POSITION

glGet с аргументом GL_CURRENT_RASTER_POSITION_VALID

Чтобы скопировать цветной пиксель в левом нижнем углу окна в текущее положение растра, используйте

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

Требования

Требование Значение
Минимальная версия клиента
Windows 2000 Professional [только классические приложения]
Минимальная версия сервера
Windows 2000 Server [только классические приложения]
Заголовок
Gl.h
Библиотека
Opengl32.lib
DLL
Opengl32.dll

См. также раздел

glBegin

glDepthFunc

glDrawBuffer

glDrawPixels

glEnd

glGet

glPixelMap

glPixelStore

glPixelTransfer

glPixelZoom

glRasterPos

glReadBuffer

glReadPixels

glStencilFunc