demo12.pas 3.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  1. program demo12;
  2. {$I zglCustomConfig.cfg}
  3. uses
  4. zgl_main,
  5. zgl_screen,
  6. zgl_window,
  7. zgl_timers,
  8. zgl_render_2d,
  9. zgl_fx,
  10. zgl_textures,
  11. zgl_textures_png,
  12. zgl_render_target,
  13. zgl_sprite_2d,
  14. zgl_font,
  15. zgl_text,
  16. zgl_math_2d,
  17. zgl_utils
  18. ;
  19. var
  20. dirRes : UTF8String = 'data/';
  21. fntMain : zglPFont;
  22. texTux : zglPTexture;
  23. rtFull : zglPRenderTarget;
  24. rtDefault : zglPRenderTarget;
  25. procedure Init;
  26. begin
  27. zgl_Enable( CORRECT_RESOLUTION );
  28. scr_CorrectResolution( 800, 600 );
  29. texTux := tex_LoadFromFile( dirRes + 'tux_stand.png' );
  30. tex_SetFrameSize( texTux, 64, 64 );
  31. fntMain := font_LoadFromFile( dirRes + 'font.zfi' );
  32. // RU: Создаем RenderTarget и "цепляем" пустую текстуру. В процессе текстуру можно сменить присвоив rtarget.Surface другую zglPTexture, главное что бы совпадали размеры с теми, что указаны в
  33. // tex_CreateZero. Таргету также указан флаг RT_FULL_SCREEN, отвечающий за то, что бы в текстуру помещалось все содержимое экрана а не область 256x256(как с флагом RT_DEFAULT).
  34. // 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
  35. // 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).
  36. rtFull := rtarget_Add( tex_CreateZero( 256, 256 ), RT_FULL_SCREEN );
  37. // RU: Для сравнения создадим ещё один RenderTarget с флагом RT_DEFAULT.
  38. // EN: Create one more RenderTarget with flag RT_DEFAULT for comparison.
  39. rtDefault := rtarget_Add( tex_CreateZero( 256, 256 ), RT_DEFAULT );
  40. end;
  41. procedure Draw;
  42. begin
  43. // RU: Устанавливаем текущий RenderTarget.
  44. // EN: Set current RenderTarget.
  45. rtarget_Set( rtFull );
  46. // RU: Рисуем в него.
  47. // EN: Render to it.
  48. asprite2d_Draw( texTux, random( 800 - 64 ), random( 600 - 64 ), 64, 64, 0, random( 9 ) + 1 );
  49. // RU: Возвращаемся к обычному рендеру.
  50. // EN: Return to default rendering.
  51. rtarget_Set( nil );
  52. rtarget_Set( rtDefault );
  53. asprite2d_Draw( texTux, random( 800 - 64 ), random( 600 - 64 ), 64, 64, 0, random( 9 ) + 1 );
  54. rtarget_Set( nil );
  55. // RU: Теперь рисуем содержимое RenderTarget'ов.
  56. // EN: Render content of RenderTargets.
  57. ssprite2d_Draw( rtFull.Surface, ( 400 - 256 ) / 2, ( 600 - 256 ) / 2, 256, 256, 0 );
  58. ssprite2d_Draw( rtDefault.Surface, ( 400 - 256 ) / 2 + 400, ( 600 - 256 ) / 2, 256, 256, 0 );
  59. text_Draw( fntMain, 0, 0, 'FPS: ' + u_IntToStr( zgl_Get( RENDER_FPS ) ) );
  60. end;
  61. Begin
  62. randomize();
  63. zgl_Reg( SYS_LOAD, @Init );
  64. zgl_Reg( SYS_DRAW, @Draw );
  65. scr_SetOptions( 800, 600, REFRESH_MAXIMUM, TRUE, TRUE );
  66. zgl_Init();
  67. End.