demo12.lpr 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109
  1. library demo12;
  2. {$I zglCustomConfig.cfg}
  3. {$I zgl_config.cfg}
  4. uses
  5. zgl_application,
  6. zgl_file,
  7. zgl_screen,
  8. zgl_window,
  9. zgl_timers,
  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_types,
  19. zgl_utils
  20. ;
  21. var
  22. dirRes : UTF8String = 'assets/';
  23. fntMain : LongWord;
  24. texTux : zglPTexture;
  25. rtFull : zglPRenderTarget;
  26. rtDefault : zglPRenderTarget;
  27. procedure Init;
  28. begin
  29. zgl_Enable( CORRECT_RESOLUTION );
  30. scr_CorrectResolution( 800, 600 );
  31. file_OpenArchive( PAnsiChar( zgl_Get( DIRECTORY_APPLICATION ) ) );
  32. texTux := tex_LoadFromFile( dirRes + 'tux_stand.png' );
  33. tex_SetFrameSize( texTux, 64, 64 );
  34. fntMain := font_LoadFromFile( dirRes + 'font.zfi' );
  35. // RU: Создаем RenderTarget и "цепляем" пустую текстуру. В процессе текстуру можно сменить присвоив rtarget.Surface другую zglPTexture, главное что бы совпадали размеры с теми, что указаны в
  36. // tex_CreateZero. Таргету также указан флаг RT_FULL_SCREEN, отвечающий за то, что бы в текстуру помещалось все содержимое экрана а не область 256x256(как с флагом RT_DEFAULT).
  37. // 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
  38. // 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).
  39. rtFull := rtarget_Add( tex_CreateZero( 256, 256 ), RT_FULL_SCREEN );
  40. // RU: Для сравнения создадим ещё один RenderTarget с флагом RT_DEFAULT.
  41. // EN: Create one more RenderTarget with flag RT_DEFAULT for comparison.
  42. rtDefault := rtarget_Add( tex_CreateZero( 256, 256 ), RT_DEFAULT );
  43. file_CloseArchive();
  44. setFontTextScale(20, fntMain);
  45. end;
  46. procedure Draw;
  47. begin
  48. // RU: Устанавливаем текущий RenderTarget.
  49. // EN: Set current RenderTarget.
  50. rtarget_Set( rtFull );
  51. // RU: Рисуем в него.
  52. // EN: Render to it.
  53. asprite2d_Draw( texTux, random( 800 - 64 ), random( 600 - 64 ), 64, 64, 0, random( 9 ) + 1 );
  54. // RU: Возвращаемся к обычному рендеру.
  55. // EN: Return to default rendering.
  56. rtarget_Set( nil );
  57. rtarget_Set( rtDefault );
  58. asprite2d_Draw( texTux, random( 800 - 64 ), random( 600 - 64 ), 64, 64, 0, random( 9 ) + 1 );
  59. rtarget_Set( nil );
  60. // RU: Теперь рисуем содержимое RenderTarget'ов.
  61. // EN: Render content of RenderTargets.
  62. ssprite2d_Draw( rtFull^.Surface, ( 400 - 256 ) / 2, ( 600 - 256 ) / 2, 256, 256, 0 );
  63. ssprite2d_Draw( rtDefault^.Surface, ( 400 - 256 ) / 2 + 400, ( 600 - 256 ) / 2, 256, 256, 0 );
  64. text_Draw( fntMain, 0, 0, 'FPS: ' + u_IntToStr( zgl_Get( RENDER_FPS ) ) );
  65. end;
  66. procedure Restore;
  67. begin
  68. file_OpenArchive( PAnsiChar( zgl_Get( DIRECTORY_APPLICATION ) ) );
  69. tex_RestoreFromFile( texTux, dirRes + 'tux_stand.png' );
  70. font_RestoreFromFile( fntMain, dirRes + 'font.zfi' );
  71. rtarget_Restore( rtFull );
  72. rtarget_Restore( rtDefault );
  73. file_CloseArchive();
  74. end;
  75. procedure Java_zengl_android_ZenGL_Main( var env; var thiz ); cdecl;
  76. begin
  77. randomize();
  78. zgl_Reg( SYS_LOAD, @Init );
  79. zgl_Reg( SYS_DRAW, @Draw );
  80. zgl_Reg( SYS_ANDROID_RESTORE, @Restore );
  81. scr_SetOptions();
  82. end;
  83. exports
  84. Java_zengl_android_ZenGL_Main,
  85. {$I android_export.inc}
  86. End.