Функция 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 находится в режиме цветного индекса:- Каждый индекс, считываемый из этого буфера, преобразуется в формат с фиксированной точкой с неопределенным числом битов справа от двоичной точки.
- Каждый индекс сдвигается влево GL_INDEX_SHIFT битами и добавляется в GL_INDEX_OFFSET. Если GL_INDEX_SHIFT является отрицательным, сдвиг будет вправо. В любом случае нулевые биты заполняют в противном случае неопределенные расположения битов в результате.
- Если GL_MAP_COLOR имеет значение true, индекс заменяется значением, на которое он ссылается в таблице подстановки GL_PIXEL_MAP_I_TO_I.
- Независимо от того, выполняется ли подстановка индекса или нет, целочисленная часть индекса затем определяется с2b 1, где b — это число битов в буфере цветового индекса.
- Красный, зеленый, синий и альфа-компоненты каждого считываемого пикселя преобразуются во внутренний формат с плавающей запятой с неопределенной точностью.
- Преобразование сопоставляет наибольшее значение представленного компонента с 1,0, а значение компонента — с 0,0.
- Полученные значения цвета с плавающей запятой умножаются на GL_c_SCALE и добавляются в GL_c_BIAS, где c — RED, GREEN, BLUE и ALPHA для соответствующих компонентов цвета.
- Результаты зажимаются в диапазоне [0,1].
- Если 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 .
Имя | Значение |
---|---|
|
Type не является допустимым значением. |
|
Либо ширина , либо высота были отрицательными. |
|
тип был GL_DEPTH, а буфер глубины отсутствует. |
|
тип был GL_STENCIL, а буфер трафарета не существует. |
|
Функция была вызвана между вызовом 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 [только классические приложения] |
Заголовок |
|
Библиотека |
|
DLL |
|