選択できるのは25トピックまでです。 トピックは、先頭が英数字で、英数字とダッシュ('-')を使用した35文字以内のものにしてください。

143 行
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.