gf_draw_begin()

Начать отображение

Прототип:

#include <gf/gf.h>
int gf_draw_begin( gf_context_t context );

Аргументы:

context
Дескриптор графического контекста для отображения.

Библиотека:

gf

Описание:

Данная функция начинает отображение, используя для этого получаемый контекст. Функция обеспечивает поток эксклюзивный доступ к аппаратному обеспечению и подготавливает оборудование к получения команд отрисовки. Также она обеспечивает применение всех текущих настроек контекста. Как только Вам больше не требуется эксклюзивный доступ к аппаратному обеспечению, следует вызвать gf_draw_end().


Warning: Хотя общее адресное пространство и позволяет легко предоставить общий доступ к контексту разным потокам одного процесса, с этим следует быть осторожными. Необходимо обеспечить вызов gf_draw_begin() каждым потоком перед началом рисования. Если не следовать этому совету, два потока могут получить доступ к аппаратному обеспечению одновременно, что оставит аппаратное обеспечение в неопределенном состоянии. Это будет иметь непредсказуемые последствия как для аппаратного, так и для программного обеспечения.

Вследствие того, что данная функция блокирует аппаратное обеспечение для эксклюзивного доступа для вызывающего потока, Вам нужно следовать советам ниже, чтобы обеспечить корректность работы других потоков, ожидающих отображения, и избежать потенциальных взаимных блокировок:


Note: Чтобы начать отображение, нужно использовать поверхность, связанную с контекстом (используйте gf_context_set_surface()). Если с контекстом не связана ни одна поверхность, функция завершится с ошибкой.

Следует вызывать gf_draw_begin() всякий раз, когда происходит попытка отображения в различные контексты.

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

GF_ERR_OK
Успешное завершение. Аппаратное обеспечение заблокировано, можно приступать к отображению.
GF_ERR_MEM
Недостаточно памяти для блокировки мьютекса.
GF_ERR_PARM
Некорректный контекст для отображения; контекст должен предоставлять поверхность с подходящим форматом для 2D отображения. Также возвращается, если значение параметра context равно NULL
GF_ERR_INUSE
Вызывающий поток уже вызвал gf_draw_begin(); рекурсивное поведение не допускается.
GF_ERR_SURFDESTROYED
По какой-то причине поверхность контекста является некорректной. Это может произойти, например, из-за переключения режимов или событий, связанных с управлением электроэнергией.

Классификация:

Графическая подсистема ЗОСРВ «Нейтрино», Graphics Framework

Обработчик прерываний
Нет
Обработчик сигналов
Нет
В потоке
Да

Тематические ссылки:

gf_draw_end(), gf_context_set_surface()

Основы рисования: Многопоточные приложения




Предыдущий раздел: GF API