demo12.dpr 2.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. program demo12;
  2. {$I zglCustomConfig.cfg}
  3. {$I zgl_config.cfg}
  4. {$R *.res}
  5. uses
  6. zgl_screen,
  7. zgl_window,
  8. zgl_timers,
  9. zgl_keyboard,
  10. zgl_render_2d,
  11. zgl_fx,
  12. zgl_textures,
  13. zgl_textures_png,
  14. zgl_render_target,
  15. zgl_sprite_2d,
  16. zgl_font,
  17. zgl_text,
  18. zgl_math_2d,
  19. zgl_types,
  20. zgl_utils
  21. ;
  22. var
  23. dirRes : UTF8String {$IFNDEF MACOSX} = '../data/' {$ENDIF};
  24. fntMain : LongWord;
  25. texTux : zglPTexture;
  26. rtFull : zglPRenderTarget;
  27. rtDefault: zglPRenderTarget;
  28. procedure Init;
  29. begin
  30. texTux := tex_LoadFromFile(dirRes + 'tux_stand.png');
  31. tex_SetFrameSize(texTux, 64, 64);
  32. fntMain := font_LoadFromFile(dirRes + 'font.zfi');
  33. // RU: Ñîçäàåì RenderTarget è "öåïëÿåì" ïóñòóþ òåêñòóðó. Â ïðîöåññå òåêñòóðó ìîæíî ñìåíèòü ïðèñâîèâ rtarget.Surface äðóãóþ zglPTexture, ãëàâíîå ÷òî áû ñîâïàäàëè ðàçìåðû ñ òåìè, ÷òî óêàçàíû â
  34. // tex_CreateZero. Òàðãåòó òàêæå óêàçàí ôëàã RT_FULL_SCREEN, îòâå÷àþùèé çà òî, ÷òî áû â òåêñòóðó ïîìåùàëîñü âñå ñîäåðæèìîå ýêðàíà à íå îáëàñòü 256x256(êàê ñ ôëàãîì RT_DEFAULT).
  35. // EN: Create a RenderTarget and "bind" empty texture to it. Later texture can be changed via changing rtarget.Surface to another zglPTexture, the only requirement - the same size, that was
  36. // set in tex_CreateZero. Also target use flag RT_FULL_SCREEN that responsible for rendering whole content of screen into target, not only region 256x256(like with flag RT_DEFAULT).
  37. rtFull := rtarget_Add(tex_CreateZero(256, 256), RT_FULL_SCREEN);
  38. // RU: Äëÿ ñðàâíåíèÿ ñîçäàäèì åù¸ îäèí RenderTarget ñ ôëàãîì RT_DEFAULT.
  39. // EN: Create one more RenderTarget with flag RT_DEFAULT for comparison.
  40. rtDefault := rtarget_Add(tex_CreateZero(256, 256), RT_DEFAULT);
  41. setFontTextScale(15, fntMain);
  42. end;
  43. procedure Draw;
  44. begin
  45. // RU: Óñòàíàâëèâàåì òåêóùèé RenderTarget.
  46. // EN: Set current RenderTarget.
  47. rtarget_Set(rtFull);
  48. // RU: Ðèñóåì â íåãî.
  49. // EN: Render to it.
  50. asprite2d_Draw(texTux, random(800 - 64), random(600 - 64), 64, 64, 0, random(9) + 1);
  51. // RU: Âîçâðàùàåìñÿ ê îáû÷íîìó ðåíäåðó.
  52. // EN: Return to default rendering.
  53. rtarget_Set(nil);
  54. rtarget_Set(rtDefault);
  55. asprite2d_Draw(texTux, random(800 - 64), random(600 - 64), 64, 64, 0, random(9) + 1);
  56. rtarget_Set(nil);
  57. // RU: Òåïåðü ðèñóåì ñîäåðæèìîå RenderTarget'îâ.
  58. // EN: Render content of RenderTargets.
  59. ssprite2d_Draw(rtFull.Surface, (400 - 256) / 2, (600 - 256) / 2, 256, 256, 0);
  60. ssprite2d_Draw(rtDefault.Surface, (400 - 256) / 2 + 400, (600 - 256) / 2, 256, 256, 0);
  61. text_Draw(fntMain, 0, 0, 'FPS: ' + u_IntToStr(zgl_Get(RENDER_FPS)));
  62. end;
  63. Begin
  64. randomize();
  65. zgl_Reg(SYS_LOAD, @Init);
  66. zgl_Reg(SYS_DRAW, @Draw);
  67. wnd_SetCaption(utf8_Copy('12 - Render into Texture'));
  68. zgl_Init();
  69. End.