Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
МУ к ЛР_v0.docx
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
587.09 Кб
Скачать

Расширенная работа с OpenGl-контекстом

Прежде чем получить контекст воспроизведения, сервер OpenGL должен получить детальные характеристики используемого оборудования. Эти характеристики хранятся в специальной структуре или массиве – описание формата пикселя. Формат пикселя определяет версию OpenGL-контекста, конфигурацию буфера цвета и вспомогательных буферов.

Для платформонезависимого взаимодействия с описанием формата пикселя в SDL предусмотрен механизм установки и получения OpenGL-атрибутов, объявленных следующим образом:

Установка OpenGL-атрибута:

extern DECLSPEC int SDLCALL SDL_GL_SetAttribute(SDL_GLattr

attr, int value);

где attrOpenGL-атрибут, который необходимо установить; value – значение атрибута.

Обратите внимание, функция SDL_GL_SetAttribute должна быть вызвана прежде чем будет создано окно с поддержкой OpenGL-контекста.

if (SDL_Init(SDL_INIT_VIDEO) < 0) {

//сообщение об ошибке

}

/* ... */

SDL_GL_SetAttribute(SDL_GL_RED_SIZE, 5);

SDL_GL_SetAttribute(SDL_GL_GREEN_SIZE, 5);

SDL_GL_SetAttribute(SDL_GL_BLUE_SIZE, 5);

SDL_GL_SetAttribute(SDL_GL_DEPTH_SIZE, 16);

SDL_GL_SetAttribute(SDL_GL_DOUBLEBUFFER, SDL_TRUE);

/* Создание окна с поддержкой OpenGL */

Получение значения OpenGL-атрибута:

extern DECLSPEC int SDLCALL SDL_GL_GetAttribute(SDL_GLattr attr, int *value);

где attrOpenGL-атрибут, который необходимо получить; value – указатель на переменную для записи значения.

Значения, передаваемые в параметре attr при вызове функций SDL_GL_SetAttribute и SDL_GL_GetAttribute:

SDL_GL_RED_SIZE – минимальный размер (в битах) красного канала в буфере цвета. По умолчанию равен 3.

SDL_GL_GREEN_SIZE – минимальный размер (в битах) зеленого канала в буфере цвета. По умолчанию равен 3.

SDL_GL_BLUE_SIZE – минимальный размер (в битах) синего канала в буфере цвета. По умолчанию равен 2.

SDL_GL_ALPHA_SIZE – минимальный размер (в битах) альфа-канала в буфере цвета. По умолчанию равен 0.

SDL_GL_BUFFER_SIZE – минимальный размер (в битах) буфера кадра (framebuffer). По умолчанию равен 0.

SDL_GL_DOUBLEBUFFER – включение / выключение режима двойной буферизации. По умолчанию включено.

SDL_GL_DEPTH_SIZE – минимальный размер (в битах) буфера глубины. По умолчанию равен 16.

SDL_GL_STENCIL_SIZE – минимальный размер (в битах) буфера трафарета. По умолчанию равен 0.

SDL_GL_ACCUM_RED_SIZE – минимальный размер (в битах) красного канала в накопительном буфере. По умолчанию равен 0.

SDL_GL_ACCUM_GREEN_SIZE – минимальный размер (в битах) зеленого канала в накопительном буфере. По умолчанию равен 0.

SDL_GL_ACCUM_BLUE_SIZE – минимальный размер (в битах) синего канала в накопительном буфере. По умолчанию равен 0.

SDL_GL_ACCUM_ALPHA_SIZE – минимальный размер (в битах) альфа-канала в накопительном буфере. По умолчанию равен 0.

SDL_GL_STEREO – включение/выключение режима стерео. По умолчанию выключено. (Доступно в SDL2)

SDL_GL_MULTISAMPLEBUFFERS – количество используемых буферов для многовыборочного сглаживания (multisample anti-aliasing). По умолчанию равен 0. (Доступно в SDL2)

SDL_GL_MULTISAMPLESAMPLES – количество выборок, используемых вокруг текущего пикселя используется для многовыборочного сглаживания (multisample anti-aliasing). По умолчанию равен 0. (Доступно в SDL2)

SDL_GL_ACCELERATED_VISUAL – включение / выключение аппаратного ускорения. (Доступно в SDL2)

В SDL2 была добавлена возможность задания необходимой версии OpenGL-контекста с введением следующих констант:

SDL_GL_CONTEXT_MAJOR_VERSION – основная версия OpenGL.

SDL_GL_CONTEXT_MINOR_VERSION – минорная версия OpenGL.

SDL_GL_CONTEXT_PROFILE_MASK – режим работы контекста, может принимать следующие значения:

SDL_GL_CONTEXT_PROFILE_CORE – режим Core Profile, устаревшие функции запрещены.

SDL_GL_CONTEXT_PROFILE_COMPATIBILITY – режим Compatibility profile, устаревшие функции разрешены. Используется по умолчанию.

SDL_GL_CONTEXT_PROFILE_ES – режим Embedded Systems Profile, доступно некоторая часть подмножества графического интерфейса OpenGL входящего в стандарт OpenGL ES [4].

Чтобы установить значения описания формата пикселя в значения по умолчанию применяется функция SDL_GL_ResetAttributes, объявленная следующим образом:

extern DECLSPEC void SDLCALL SDL_GL_ResetAttributes(void);