demo12.pas 3.3 KB

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