Программирование графики с использованием Direct3D

       

Преобразования типов COLORREF и D3DCOLOR


Для представления цветов Windows использует значения типа COLORREF. В Direct3D для той же цели применяется тип D3DCOLOR. Эти два типа несовместимы, и поэтому класс RMWin предоставляет функции преобразования типов. Функция COLORREF_2_D3DCOLOR() преобразует тип, используемый в Windows, в тип, понятный Direct3D. Функция D3DCOLOR_2_COLORREF() выполняет обратное преобразование. Код этих функций выглядит так:

inline D3DCOLOR RMWin::COLORREF_2_D3DCOLOR(COLORREF cref) { D3DVALUE r = D3DVALUE(GetRValue(cref))/D3DVALUE(255); D3DVALUE g = D3DVALUE(GetGValue(cref))/D3DVALUE(255); D3DVALUE b = D3DVALUE(GetBValue(cref))/D3DVALUE(255); return D3DRMCreateColorRGB(r, g, b); }

inline COLORREF RMWin::D3DCOLOR_2_COLORREF(D3DCOLOR d3dclr) { D3DVALUE red = D3DVALUE(255) * D3DRMColorGetRed(d3dclr); D3DVALUE green = D3DVALUE(255) * D3DRMColorGetGreen(d3dclr); D3DVALUE blue = D3DVALUE(255) * D3DRMColorGetBlue(d3dclr); return RGB((int)red, (int)green, (int)blue); }

Для улучшения производительности обе функции объявлены как inline.

СОВЕТ ?Вопросы быстродействия. В общем случае, беспокойство о производительности приложений, использующих такие пакеты, как Direct3D подобно перестановке кресел на Титанике. Девяносто девять процентов работы в использующей Direct3D программе, выполняется непосредственно Direct3D. Код приложения составляет незначительную часть общей картины, и чтобы он сильно ухудшил производительность, его надо действительно очень плохо написать.



Содержание раздела