Du kannst nicht mehr als 25 Themen auswählen Themen müssen entweder mit einem Buchstaben oder einer Ziffer beginnen. Sie können Bindestriche („-“) enthalten und bis zu 35 Zeichen lang sein.

143 Zeilen
4.0 KiB

  1. unit uMainForm;
  2. interface
  3. uses
  4. Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs,
  5. uglcContext,
  6. utsTextSuite, utsRendererOpenGL, utsFontCreatorGDI, utsTypes, utsPostProcess;
  7. type
  8. TMainForm = class(TForm)
  9. procedure FormCreate(Sender: TObject);
  10. procedure FormDestroy(Sender: TObject);
  11. procedure FormPaint(Sender: TObject);
  12. private
  13. fContext: TglcContext;
  14. ftsContext: TtsContext;
  15. ftsRenderer: TtsRendererOpenGL;
  16. ftsCreator1: TtsFontGeneratorGDI;
  17. ftsCreator2: TtsFontGeneratorGDI;
  18. ftsFont1: TtsFont;
  19. ftsFont2: TtsFont;
  20. procedure Render;
  21. public
  22. { Public declarations }
  23. end;
  24. var
  25. MainForm: TMainForm;
  26. implementation
  27. {$R *.dfm}
  28. uses
  29. dglOpenGL;
  30. const
  31. TEST_TEXT = 'Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum.';
  32. procedure TMainForm.FormCreate(Sender: TObject);
  33. var
  34. pf: TglcContextPixelFormatSettings;
  35. pp: TtsPostProcessStep;
  36. img: TtsImage;
  37. const
  38. PATTER_DATA: array[0..15] of Byte = (
  39. $FF, $BF, $7F, $BF,
  40. $BF, $FF, $BF, $7F,
  41. $7F, $BF, $FF, $BF,
  42. $BF, $7F, $BF, $FF);
  43. begin
  44. pf := TglcContext.MakePF();
  45. fContext := TglcContext.GetPlatformClass.Create(self, pf);
  46. fContext.BuildContext;
  47. ftsContext := TtsContext.Create;
  48. ftsRenderer := TtsRendererOpenGL.Create(ftsContext, tsFormatRGBA8);
  49. ftsCreator1 := TtsFontGeneratorGDI.Create(ftsContext);
  50. ftsFont1 := ftsCreator1.GetFontByFile(ExtractFilePath(Application.ExeName) + '../Prototype.ttf', ftsRenderer, 40, [], tsAANormal);
  51. pp := TtsPostProcessFillColor.Create(tsColor4f(0, 0, 0, 1), TS_MODES_REPLACE_ALL, TS_CHANNELS_RGB);
  52. pp.AddUsageChars(tsUsageExclude, 'Lorem');
  53. ftsCreator1.AddPostProcessStep(pp);
  54. pp := TtsPostProcessFillColor.Create(tsColor4f(1.0, 0.0, 0.0, 1.0), TS_MODES_MODULATE_ALL, TS_CHANNELS_RGB);
  55. pp.AddUsageChars(tsUsageInclude, 'Lorem');
  56. ftsCreator1.AddPostProcessStep(pp);
  57. img := TtsImage.Create;
  58. img.CreateEmpty(tsFormatAlpha8, 4, 4);
  59. Move(PATTER_DATA[0], img.Data^, 16);
  60. pp := TtsPostProcessFillPattern.Create(img, true, 0, 0, TS_MODES_MODULATE_ALL, TS_CHANNELS_RGBA);
  61. pp.AddUsageChars(tsUsageInclude, 'Lorem');
  62. ftsCreator1.AddPostProcessStep(pp);
  63. ftsCreator2 := TtsFontGeneratorGDI.Create(ftsContext);
  64. ftsFont2 := ftsCreator2.GetFontByFile(ExtractFilePath(Application.ExeName) + '../Prototype.ttf', ftsRenderer, 40, [tsStyleStrikeout], tsAANormal);
  65. pp := TtsPostProcessFillColor.Create(tsColor4f(0, 0, 0.5, 1), TS_MODES_REPLACE_ALL, TS_CHANNELS_RGB);
  66. pp.AddUsageChars(tsUsageExclude, 'e');
  67. ftsCreator2.AddPostProcessStep(pp);
  68. pp := TtsPostProcessBorder.Create(3.0, 0.5, tsColor4f(0.0, 0.5, 0.0, 1.0), true);
  69. pp.AddUsageChars(tsUsageInclude, 'e');
  70. ftsCreator2.AddPostProcessStep(pp);
  71. end;
  72. procedure TMainForm.FormDestroy(Sender: TObject);
  73. begin
  74. FreeAndNil(ftsFont2);
  75. FreeAndNil(ftsCreator2);
  76. FreeAndNil(ftsFont1);
  77. FreeAndNil(ftsCreator1);
  78. FreeAndNil(ftsRenderer);
  79. FreeAndNil(ftsContext);
  80. FreeAndNil(fContext);
  81. end;
  82. procedure TMainForm.FormPaint(Sender: TObject);
  83. begin
  84. if Assigned(fContext) then begin
  85. Render;
  86. fContext.SwapBuffers;
  87. end;
  88. end;
  89. procedure TMainForm.Render;
  90. var
  91. block: TtsTextBlock;
  92. begin
  93. glClearColor(1, 1, 1, 1);
  94. glClear(GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT);
  95. glViewport(0, 0, ClientWidth, ClientHeight);
  96. glMatrixMode(GL_PROJECTION);
  97. glLoadIdentity;
  98. glOrtho(0, ClientWidth, ClientHeight, 0, -10, 10);
  99. glMatrixMode(GL_MODELVIEW);
  100. glLoadIdentity;
  101. glEnable(GL_BLEND);
  102. glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
  103. block := ftsRenderer.BeginBlock(10, 10, ClientWidth-20, ClientHeight-20, [tsBlockFlagWordWrap]);
  104. try
  105. block.HorzAlign := tsHorzAlignJustify;
  106. block.ChangeFont(ftsFont1);
  107. block.ChangeColor(tsColor4f(1.0, 1.0, 1.0, 1.0));
  108. block.TextOutW(TEST_TEXT + sLineBreak);
  109. block.ChangeFont(ftsFont2);
  110. block.TextOutW(TEST_TEXT);
  111. finally
  112. ftsRenderer.EndBlock(block);
  113. end;
  114. end;
  115. end.