Пример 04 - Рендеринг в текстуру
В этом примере мы научимся, как использовать цели рендеринга.
Сначала мы объявим переменные чтобы работать с целью рендеринга и спрайт, который с ней ассоциирован:
hgeSprite* tar;
HTARGET target;
Когда приложение теряет фокус, идентификатор текстуры цели рендеринга может измениться. Поэтому мы
напишем функцию реагирующую на получение фокуса, которая получит новую текстуру цели рендеринга:
bool FocusGainFunc()
{
if(tar && target)
tar->SetTexture(hge->Target_GetTexture(target));
return false;
}
В FrameFunc (функция кадра) мы сначала нарисует все наше хозяйство в текстуру, указывая нашу
цель рендеринга в функции Gfx_BeginScene:
hge->Gfx_BeginScene(target);
hge->Gfx_Clear(0);
par->Render();
spr->Render(x, y);
hge->Gfx_EndScene();
Затем мы нарисуем несколько экземпляров текстуры на экране:
hge->Gfx_BeginScene();
hge->Gfx_Clear(0);
for(i=0;i<6;i++)
{
tar->SetColor(0xFFFFFF | (((5-i)*40+55)<<24));
tar->RenderEx(i*100.0f, i*50.0f, i*M_PI/8, 1.0f-i*0.1f);
}
fnt->printf(5,5,"dt:%.3f\nFPS:%d", dt, hge->Timer_GetFPS());
hge->Gfx_EndScene();
В функции WinMain мы назначим нашу функцию получения фокуса:
hge->System_SetState(HGE_FOCUSGAINFUNC, FocusGainFunc);
Затем, после инициализации HGE, мы создадим цель рендеринга и спрайт, которым мы будем
пользоваться для вывода созданной текстуры:
target=hge->Target_Create(512,512,false);
tar=new hgeSprite(
hge->Target_GetTexture(target),0,0,512,512);
tar->SetBlendMode(
BLEND_COLORMUL | BLEND_ALPHAADD | BLEND_NOZWRITE);
В конце приложения мы удалим спрайт, который мы использовали для отображения сгенинированной текстуры и самой
цели рендеринга:
delete tar;
hge->Target_Free(target);
Остальной код завершения идентичен тому, что был в предидущих примерах.
Полный исходный код с детальными комментариями для этого примера можно найти в директории tutorials\tutorial04.
Необходимые медиа файлы вы найдете в директории tutorials\precompiled.
|