Screen (Графика)
 
Инициализацию QB-подобного графического режима с помощью номера

Синтаксис


-lang fb|fblite диалекты:
Screen mode [, [ depth ] [, [ num_pages ] [, [ flags ] [, [ refresh_rate ]]]]]
Screen , [ active_page ] [, [ visible_page ]]
-lang qb диалект:
Screen [ mode ] [, [ colormode ] [, [ active_page ] [, [ visible_page ]]]]

Параметры

mode
Это графический QB-стиль с номером режима экрана (см. ниже). Если mode равен 0, тогда графический режим закрыт, и все функции работают в режиме консоли. Ниже приведены доступные режимы.
depth
Это глубина цвета в битах на пиксель. Это влияет только для режимов 14 и выше. Допускаются значения 8, 16 и 32. Также разрешены 15 и 24 как псевдонимы для 16 и 32, соответственно. Если этот параметр опущен, по умолчанию 8.
num_pages
Количество желаемых видеостраниц, смотрите ниже. Если этот параметр опущен, по умолчанию 1.
flags
Используются для выбора нескольких возможностей, таких как графический драйвер, полноэкранный режим. Есть константы, предопределенные в файле fbgfx.bi и готовые к использованию. Ниже приведены доступные флаги.
refresh_rate
запрашивает частоту обновления. Если она не доступна в видеокарте или параметр опущен, FreeBASIC автоматически выбирает частоту.
active_page
Используется для установки активной страницы, когда команды печати/рисования вступают в силу
visible_page
Используется для установки видимой страницы, которая показывается пользователю
colormode
Не используется - разрешен для совместимости с синтаксисом QB

Описание

Screen сообщает компилятору слинковать GfxLib и инициализировать режим QB-only, QB-on-GUI или OpenGL графику, в зависимости от настроек flags

В режимах QB-only устанавливается разрешение окна или полноэкранная установка, один или несколько буферов в стандартной памяти создаются, консольные команды перенаправляются на их графические версии, a палитра по умолчанию устанавливается и автоматический поток обновления экрана запускается. QB-подобная графика и консольные конструкции могут использоваться.

В режимах QB-on-GUI один или несколько буферов в стандартной памяти создаются, консольные команды перенаправляются на их графические версии, a палитра по умолчанию устанавливается. QB-подобная графика и консольные операторы могут использоваться. Зависит от пользователя создание окна и обновления его содержимого буферов графики.

В режимах OpenGL, разрешение окна или весь экран устанавливается,  один или нескольких буферов в стандартной памяти создаются, и инициализируется система библиотеки OpenGL. Здесь только OpenGL команды могут использоваться для записи в графический буфер. QB-подобные и консольные команды запрещены. Этот режим позволяет инициализацию OpenGL в портабельном виде; вы можете также использовать ScreenControl чтобы должным образом настроить формат GL пикселя перед вызовом Screen или получить список поддерживаемых расширений OpenGL после установки режима, и также использовать ScreenGLProc для получения указателей на функции расширения.

Любой буфер, который создается в стандартной памяти, использует один из трех поддерживаемых внутренних форматов пикселя, в зависимости от требуемой глубины цвета; смотрите Внутренние пиксельные форматы для детальной информации.

Если Screen не может установить необходимый режим, то выдается ошибка "Illegal function call", и указатель экрана установливается в 0. Таким образом ошибки Screen могут быть обнаружены с помощью стандартной обработки On Error или извлечения указателя экрана с помощью ScreenPtr.

Прежде чем устанавливать полноэкранный режим, желательно проверить, доступен ли такой режим в графической карте с помощью ScreenList.

Подробная информация о режиме
Список доступных режимов:
Режимы совместимости QB:
Номер режимаРазрешение ЭмуляцияТекстРазмер символаЦвета на экране
1320x200CGA 40X258x8 16 фоновых, 1 из четырех комплектов на переднем плане
2640x200CGA80x258x8 16 цветов  2 атрибута
7320x200EGA40x258x8 16 цветов  16 атрибутов
8640x200EGA80x258x8 16 цветов  16 атрибутов
9640x350EGA80x25 или 80x438x14 или 8x816 цветов  16 атрибутов
11640x480VGA80x30 или 80x608x16 или 8x8256K цветов  2 атрибута
12640x480VGA80x30 или 80x608x16 или 8x8256K цветов  16 атрибутов
13320x200MCGA40X258X8256K цветов  256 атрибутов

Новые FreeBASIC режимы:
Номер режимаРазрешение ЭмуляцияТекстРазмер символаЦвета на экране
14320x240  40x308x8256K цветов 256 атрибутов или непосредственный цвет
15400x300 50x378x8 256K цветов 256 атрибутов или непосредственный цвет
16512x384 64x24 или 64x488x16 или 8x8256K цветов 256 атрибутов или непосредственный цвет
17640x400 80x25 или 80x508x16 или 8x8256K цветов 256 атрибутов или непосредственный цвет
18640x480 80x30 или 80x608x16 или 8x8256K цветов 256 атрибутов или непосредственный цвет
19800x600 100x37 или 100x758x16 или 8x8256K цветов 256 атрибутов или непосредственный цвет
201024x768 128x48 или 128x968x16 или 8x8256K цветов 256 атрибутов или непосредственный цвет
211280x1024 160x64 или 160x1288x16 или 8x8256K цветов 256 атрибутов или непосредственный цвет


depth детали
Для режимов 14 и выше, параметр depth изменяет глубину цвета на указанный новый; Если depth не указан, режим запускается с 8bpp. Для режимов 13 и ниже, depth не имеет эффекта.

num_pages детали
Вы можете заказать любое количество страниц для любых видеорежимов; Если опустить этот параметр, будет доступна только видимая страница (номер 0). Видимая страница является видимой для пользователя частью, вы можете показывать эту страницу во время работы над другой; см. оператор ScreenSet для подробностей. Все страницы создаются в стандартной памяти, память видеокарты никогда не используется для буферизации видео.

flags детали:

Если флаги опущены, FreeBASIC использует QB-совместимый графический оконный (за исключением DOS) режим. Эти константы определены в fbgfx.bi. В диалекте -lang fb, эти константы являются частью FB Namespace. Обратите внимание, что большинство флагов не поддерживаются в DOS.

Доступные флаги:

Флаги графического режима
GFX_NULL: запускает QB-on-GUI графический режим. Это создает графический буфер без окна. Пользователь должен реализовывать окно, менеджер событий и обновление экрана при необходимости. Этот режим позволяет смешивать FreeBASIC функций рисования с управляемыми Windows API. Этот флаг переопределяет все другие флаги режима. См. Пример GFX_NULL в Windows.
GFX_OPENGL: Инициализирует OpenGL для рисования в окне. Нельзя использовать FreeBASIC графические функции. Экран не обновляется автоматически, для этого должен использоваться Flip. Этот параметр обеспечивает портативный способ инициализации библиотеки OpenGL.
Если ни один из вышеперечисленных флагов не указан, FreeBASIC входит в режим QB графики: это создает буфер окно и задает поток, который автоматически обновляет экран и управляет клавиатурой и мышью. Могут использоваться FreeBASIC функции рисования.

Флаги оконного режима
Флаги оконного режима флаги бессмысленны если режим GFX_NULL используется
GFX_WINDOWED: Если оконный режим поддерживается, FreeBASIC открывает окно требуемого размера на рабочем столе
GFX_FULLSCREEN: Режим переключения видеокарты переключает на требуемый режим , глубину цвета и устанавливается ОС полноэкранный режим. Если режим не доступен , FreeBASIC переключает на оконный режим.
Если GFX_FULLSCREEN не указывается, поведение предполагает режим GFX_WINDOWED.
GFX_NO_SWITCH: Предотвращает изменение пользователем полноэкранного режима в оконный режим и обратно, посредством Alt-Enter.
GFX_NO_FRAME: Создает окно без бордюра.
GFX_SHAPED_WINDOW: Создает прозрачные области, где RGBA(255, 0, 255, 0) рисуется на экране.
GFX_ALWAYS_ON_TOP: Создает окно, которое остается всегда сверху.

флаги параметров
Флаги, работающие в любом режиме, они активируют специальные поведения
GFX_ALPHA_PRIMITIVES: Сообщает графической библиотеке, что включается поддержка альфа канала для всех примитивов при их рисовании. Это означает, что альфа указанное в значении цвета (либо через RGBA макрос , либо через прямое указание цвета в виде &hAARRGGBB) всегда будет использоваться всеми примитивами.
GFX_HIGH_PRIORITY: Сообщает графической библиотеке более высокий приоритет для обработки графики. Влияет только на gdi и DirectX драйверы на платформе Win32.

Флаги OpenGL буфера
Эти флаги работают только в режиме OpenGL графики, и должны сочетаться с флагом GFX_OPENGL
GFX_STENCIL_BUFFER: Задает системе OpenGL использование шаблонов буфера
GFX_ACCUMULATION_BUFFER: Задает системе OpenGL использование накопления буфера
GFX_MULTISAMPLE: Запрашивает полноэкранное сглаживание через расширение ARB_multisample

В зависимости от того присутствует или нет параметр GFX_FULLSCREEN, Screen будет пытаться установить указанный видеорежим в полноэкранном или оконном режиме, соответственно. Если задать полноэкранный режим и система не может его установить, freebasic будет стараться создать оконный режим. Если включен оконный режим и системе не удается открыть окно для указанного режима, freebasic будет стараться переключиться в полноэкранный режим. Если все попытки неудачны, Screen не будет иметь никакого эффекта и выполнение продолжится со следующего оператора после вызова Screen. Вы должны заботиться о проверке установки графического режима и программа должна вести себя соответственно; один из способов проверить успешность установки Screen является проверка возвращаемого значения функции ScreenPtr; подробности на ее странице.

Графический режим консоли
Консольные команды (Locate, Print); входные данные могут быть использованы как со стандартным режимом QB Screen так и с расширенным тоже же, при условии, что глубина стандартного цвета не изменяется с помощью второго аргумента Screen. Там , где в таблице указано более чем одно разрешение в колонке "текст" доступного для текстового режима, требуемое разрешение текста может быть запрошено с помощью Width. Любые символы Print(при печати) будут стирать фон вокруг них; то есть не используется прозрачный фон.

Другие детали

В оконном режиме, нажав на кнопку закрытия окна будет добавлено нажатие клавиши Chr(255)&"k" в буфер Inkey. Нажав на кнопку развернуть окно , будет переключение в полноэкранный режим, если это возможно. Успешный вызов Screen задает видимую и рабочую страницы к странице с номером 0, сбрасывает палитры в указанный режим (см. палитры по умолчанию), сбрасывает выделенную область до размеров экрана, отключает сопоставления пользовательских координат, перемещает курсор к центру экрана, перемещает текстовый курсор в левый верхний угол экрана и соответственно устанавливает основной и фоновый цвета до ярко-белого и черного.

Пример

' Устанавливаем режим экрана 13 (320*200, 8bpp)
Screen 13
Print "Screen mode 13 set"

Sleep


#include "fbgfx.bi"
#if __FB_LANG__ = "fb"
Using FB '' Флаги режима экрана находятся в пространстве имен FB в lang FB
#endif


' Устанавливаем режим экрана 18 (640*480) с 32bpp глубиной цвета и 4-мя страницами, в оконном режиме; переключатели отключены
Screen 18, 32, 4, (GFX_WINDOWED Or GFX_NO_SWITCH)

' Убедимся, что экран был открыт успешно
If ScreenPtr = 0 Then
    Print "Error setting video mode!"
    End
End If

Print "Successfully set video mode"
Sleep


Различия платформ

  • В DOS, оконные и OpenGL соответствующие переключатели не доступны, смотрите также GfxLib обзор

Различия диалектов

Screen mode [, [depth] [, [num_pages] [, [flags] [, [refresh_rate]]]]]
или:
Screen , [active_page] [, [visible_page]]]

  • В диалекте -lang qb использование:
Screen [mode] [, [colormode] [, [active_page] [, [visible_page]]]]

Отличия от QB

  • Нет отличий в диалекте -lang qb.
  • В QB синтаксис был: Screen mode,colormode,active_page,visible_page. Из этих параметров FreeBASIC поддерживает только mode и переопределяет остальные. Используя Screen ,, apage,vpage обмен экранных страниц доступен только в диалекте -lang qb.
  • ScreenSet следует использовать в диалектах -lang fb и -lang fblite.

См. также