if(m_Index-0) return -1;
if (SetPixel Format (hDCMem. mjndex. &pfd)-FALSE) return -1; *hGLRC - wglCreateContext(hDCMem); wglMakeCurrent(hDCMem. *hGLRC); }

Версия функции RenderH ) для рисования средствами OpenGL в битовую карту не приводится. Она отличается только тем, что вывод изображения из битовой карты на экран выполняется не при помощи SwapBuffers( ), а функцией GDI:

Bi tBlt(hDC.0.0.GetSysteirttetries(SMJ3XSCRE EN).
GetSystemMetri cs(SM_CYSCREEN ),hDCMem.0.0.SRCCOPY)

Следует отметить, что рисование в память работает менее надежно, чем стандартный вариант с двойной буферизацией. Так, в системе с ускорителем GeForce программа не работала до тех пор, пока в поле pfd.cColorBits не была записана именно та разрядность ячейки, которая использовалась в текущем видеорежиме. А в системе с ускорителем Radeon для рисования в битовую карту потребовалось снизить уровень аппаратного ускорения движком Скорость - Качество, как показано на рис. 22.3.

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

Инициализация библиотек и вывод примитивов

gl GetStri ng( ). Вместо названия фирмы-разработчика и типа ускорителя функция возвращает значение Microsoft и унифицированное название видеоадаптера. Но учитывая наличие ускорителей и версий библиотек от разных производителей, подобные оценки следует при необходимости получать самостоятельно для каждой конкретной конфигурации видеосистемы.

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


⇐ Предыдущая| |Следующая ⇒