PureBasic

OpenGLGadget()

Синтаксис

Result = OpenGLGadget(#Gadget , x , y , Width , Height [, Flags])

Описание


Создает Гаджет OpenGL в текущем списке Гаджетов (GadgetList). Этот Гаджет предоставляет Контекст (среду выполнения) для OpenGL, содержит поверхность для вывода графики через технологию OpenGL и события для взаимодействия с мышью и клавиатурой, что позволяет легко создавать 3D композиции посредством технологии OpenGL. Большинство команд OpenGL напрямую доступны в PureBasic, используя нотацию API - нижнее подчеркивание (команда заканчивается символом подчеркивания, например 'glBegin _()').

Параметры

#Gadget Номер для идентификации нового Гаджета. В качестве этого параметра можно использовать значение #PB_Any, чтобы сгенерировать этот Номер автоматически.
x, y, Width, Height Позиция и размеры нового Гаджета (в пикселях). Максимальная ширина и высота составляют 16 000 пикселей.
Flags (дополн.) Флаги, позволяющие изменить поведение Гаджета. Этот параметр может быть комбинацией следующих значение (с помощью оператора '|'):
  #PB_OpenGL_Keyboard               : Позволяет Гаджету получать фокус клавиатуры и события клавиатуры.
  #PB_OpenGL_NoFlipSynchronization  : Отключает синхронизацию vsync.
  #PB_OpenGL_FlipSynchronization    : Включает синхронизацию vsync (по умолчанию).
  #PB_OpenGL_NoDepthBuffer          : Отключает буфер глубины.
  #PB_OpenGL_16BitDepthBuffer       : Создает 16-битный буфер глубины (по умолчанию).
  #PB_OpenGL_24BitDepthBuffer       : Создает 24-битный буфер глубины.
  #PB_OpenGL_NoStencilBuffer        : Отключает трафаретный буфер  (по умолчанию).
  #PB_OpenGL_8BitStencilBuffer      : Создает 8-битный трафаретный буфер.
  #PB_OpenGL_NoAccumulationBuffer   : Отключает Аккумуляторный буфер (по умолчанию).
  #PB_OpenGL_32BitAccumulationBuffer: Создает 32-битный Аккумуляторный буфер.
  #PB_OpenGL_64BitAccumulationBuffer: Создает 64-битный Аккумуляторный буфер.
Флаг #PB_OpenGL_Keyboard необходим для получения любых клавиатурных событий в Гаджете. Если вы включите этот флаг, вам следует проверить наличие событий #PB_EventType_Focus и #PB_EventType_LostFocus и нарисовать визуальную индикацию Гаджета, когда он имеет фокус, таким образом пользователю будет ясно, какой Гаджет в данный момент находится в фокусе.

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

Возвращает не нулевое значение в случае успешного создания Гаджета, в противном случае возвращает ноль. Если в качестве параметра #Gadget использовалось значение #PB_Any, то в случае успеха, возвращаемым значением будет сгенерированный Номер Гаджета.

Комментарии

Изначально созданный Гаджет отображает только чёрный фон. Контекст предоставляемый этим новым, созданным Гаджетом становится текущим контекстом OpenGL. Чтобы изменить текущий контекст OpenGL, используйте атрибут #PB_OpenGL_SetContext. После завершения операций 3D-графики, кадр может быть выведен на экран с помощью атрибута #PB_OpenGL_FlipBuffers.

Гаджет сообщает о следующих событиях. Функция EventType() сообщает о типе текущего события Гаджета:
  #PB_EventType_MouseEnter      : В Гаджет введен курсор мыши.
  #PB_EventType_MouseLeave      : Курсор мыши покинул Гаджет.
  #PB_EventType_MouseMove       : Перемещение курсора мыши.
  #PB_EventType_MouseWheel      : Колесо мыши было перемещено.
  #PB_EventType_LeftButtonDown  : Левая кнопка мыши была нажата.
  #PB_EventType_LeftButtonUp    : Левая кнопка мыши была отпущена.
  #PB_EventType_LeftClick       : Щелчок левой кнопкой мыши.
  #PB_EventType_LeftDoubleClick : Двойной щелчок левой кнопкой мыши.
  #PB_EventType_RightButtonDown : Правая кнопка мыши была нажата.
  #PB_EventType_RightButtonUp   : Правая кнопка мыши была отпущена.
  #PB_EventType_RightClick      : Щелчок правой кнопкой мыши.
  #PB_EventType_RightDoubleClick: Двойной щелчок правой кнопкой мыши.
  #PB_EventType_MiddleButtonDown: Средняя кнопка мыши была нажата.
  #PB_EventType_MiddleButtonUp  : Средняя кнопка мыши была отпущена.
  #PB_EventType_Focus           : Гаджет получил фокус клавиатуры
  #PB_EventType_LostFocus       : Гаджет потерял фокус клавиатуры
  #PB_EventType_KeyDown         : Нажата клавиша
  #PB_EventType_KeyUp           : Отпущена клавиша
  #PB_EventType_Input           : Был введён текст    
Обратите внимание на то, что события #PB_EventType_KeyDown, #PB_EventType_KeyUp и #PB_EventType_Input передаются только тогда, когда Гаджет имеет фокус клавиатуры. Это значит, что при создании Гаджета должен быть установлен флаг #PB_Canvas_Keyboard, если Вы хотите использовать события клавиатуры. В Windows событие #PB_EventType_MouseWheel также отображается, только если Гаджет имеет фокус клавиатуры. В другой ОС это событие сообщается Гаджету под курсором, независимо от фокуса клавиатуры.

Дополнительная информация о текущем событии может быть получена с помощью функции GetGadgetAttribute(). Эта информация доступна, только если текущее событие, полученное через WaitWindowEvent() или WindowEvent(), является событием ЭТОГО Гаджета. Могут использоваться следующие атрибуты:

#PB_OpenGL_MouseX, #PB_OpenGL_MouseY
Возвращает заданную координату мыши относительно области рисования Гаджета. Это возвращает местоположение мыши во время создания события, поэтому результат может отличаться от координат, предоставленных функциями WindowMouseX() и WindowMouseY(), которые возвращают текущее местоположение мыши независимо от состояния обработанных событий. Координаты, возвращенные с помощью этих атрибутов, следует использовать для этого Гаджета, чтобы убедиться, что координаты мыши синхронизированы с текущим событием.
#PB_OpenGL_Buttons
Возвращает состояние кнопок мыши для события. Результатом является комбинация (с использованием операции '|') следующих значений:
  #PB_OpenGL_LeftButton  : Левая кнопка в данный момент недоступна.
  #PB_OpenGL_RightButton : Правая кнопка в данный момент недоступна.
  #PB_OpenGL_MiddleButton: Средняя кнопка в данный момент недоступна.
#PB_OpenGL_Modifiers
Возвращает состояние модификаторов клавиатуры для события. Результатом является комбинация (с использованием операции '|') следующих значений:
  #PB_OpenGL_Shift  : В данный момент нажата клавиша 'shift'.
  #PB_OpenGL_Alt    : В данный момент нажата клавиша 'alt'.
  #PB_OpenGL_Control: В данный момент нажата клавиша 'Control'.
  #PB_OpenGL_Command: В данный момент нажата клавиша 'command' (или "apple"). (Только для Mac OSX)
#PB_OpenGL_WheelDelta
Возвращает перемещение колеса мыши в текущем событии, в виде значений: 1 или -1. Положительное значение указывает, что колесо было перемещено вверх (от пользователя), а отрицательное значение указывает, что колесо было перемещено вниз (по направлению к пользователю). Этот атрибут равен 0, если текущее событие не является событием #PB_EventType_MouseWheel.
#PB_OpenGL_Key
Возвращает клавишу, которая была нажата или отпущена в событии #PB_EventType_KeyDown или #PB_EventType_KeyUp. Возвращаемое значение - одно из значений #PB_Shortcut_... используемых функцией AddKeyboardShortcut(). Этот атрибут возвращает необработанные нажатия клавиш. Для текста, набираемого в OpenGL Gadget, предпочтительнее отслеживать событие #PB_EventType_Input и использовать атрибут #PB_OpenGL_Input, поскольку это позволяет вводить символы, для которых требуется сочетание нескольких клавиш, таких как 'shift' и других не отображаемых клавиши.
#PB_OpenGL_Input
Возвращает входной символ, который был сгенерирован одним или более нажатиями клавиш. Этот атрибут присутствует только после события #PB_EventType_Input. Возвращаемое значение может быть преобразовано в строку с помощью функции Chr().
Помимо этой информации о событиях, GetGadgetAttribute() также может использоваться для чтения следующих атрибутов:

#PB_OpenGL_Cursor
Возвращает курсор, который в данный момент используется в Гаджете. Ниже перечислены возможные значения. Если Гаджет использует специальный курсор, возвращаемое значение равно -1.
#PB_OpenGL_CustomCursor
Возвращает дескриптор настраиваемого курсора, который был установлен с помощью команды SetGadgetAttribute(). Если Гаджет использует стандартный курсор, возвращаемое значение равно 0.
Функция SetGadgetAttribute() может использоваться для изменения следующих атрибутов Гаджета:

#PB_OpenGL_SetContext
Устанавливает контекст этого Гаджета в качестве текущего контекста OpenGL.
  #True  : OpenGL использует контекст из этого Гаджета.
  #False : Удаляет текущий контекст OpenGL. Контекст недоступен.
#PB_OpenGL_FlipBuffers
Меняет местами задний и передний буферы. Вся графика выводится на задний буфер, в то время как на экране отображается передний буфер. Поэтому чтобы изображение появилось на экране, необходимо поменять буферы местами, задний становится - передним, а передний - задним.
  #True  : Меняет местами буферы
  #False : НЕ меняет местами буферы (пока не используйте).
#PB_OpenGL_Cursor
Изменяет курсор, который отображается, когда мышь находится над Гаджетом. Возможны следующие значения:
  #PB_Cursor_Default        : default arrow cursor
  #PB_Cursor_Cross          : Курсор в виде перекрестия
  #PB_Cursor_IBeam          : I-курсор, используемый для выбора текста
  #PB_Cursor_Hand           : Курсор в виде руки
  #PB_Cursor_Busy           : Курсор часы или песочные часы
  #PB_Cursor_Denied         : Запрещающий знак или X курсор 
  #PB_Cursor_Arrows         : Стрелки во всех направлениях (недоступен в Mac OSX)
  #PB_Cursor_LeftRight      : Стрелки влево и вправо
  #PB_Cursor_UpDown         : Стрелки вверх и вниз
  #PB_Cursor_LeftUpRightDown: Диагональные стрелки (только для Windows)
  #PB_Cursor_LeftDownRightUp: Диагональные стрелки (только для Windows)
  #PB_Cursor_Invisible      : Скрывает курсор
#PB_OpenGL_CustomCursor
Изменяет курсор, отображаемый при наведении указателя мыши на Гаджет, на дескриптор настраиваемого курсора, созданный с использованием соответствующего API-интерфейса ОС. Этот атрибут ожидает ввода следующего вида:
Windows: дескриптор HCURSOR
Linux: указатель GtkCursor
MAC OSX: указатель на структуру Курсора.
Вы можете добавить 'Всплывающую мини-подсказку' к этому Гаджету с помощью функции GadgetToolTip().

Пример

OpenGLGadget .pb

См. также

GetGadgetAttribute(), SetGadgetAttribute(), EventType()

Поддерживаемые OS

Все

<- MDIGadget() - Оглавление Gadget - OpenGadgetList()->