| @@ -44,7 +44,6 @@ | |||
| <ComponentName Value="MainForm"/> | |||
| <HasResources Value="True"/> | |||
| <ResourceBaseClass Value="Form"/> | |||
| <UnitName Value="uMainForm"/> | |||
| </Unit1> | |||
| <Unit2> | |||
| <Filename Value="..\..\utsRendererOpenGL.pas"/> | |||
| @@ -72,7 +71,6 @@ | |||
| <Unit7> | |||
| <Filename Value="..\..\utsFontCreatorGDI.pas"/> | |||
| <IsPartOfProject Value="True"/> | |||
| <UnitName Value="utsFontCreatorGDI"/> | |||
| </Unit7> | |||
| <Unit8> | |||
| <Filename Value="..\..\utsCodePages.pas"/> | |||
| @@ -85,17 +83,14 @@ | |||
| <Unit10> | |||
| <Filename Value="..\..\utsFontCreatorFreeType.pas"/> | |||
| <IsPartOfProject Value="True"/> | |||
| <UnitName Value="utsFontCreatorFreeType"/> | |||
| </Unit10> | |||
| <Unit11> | |||
| <Filename Value="..\..\utsGDI.pas"/> | |||
| <IsPartOfProject Value="True"/> | |||
| <UnitName Value="utsGDI"/> | |||
| </Unit11> | |||
| <Unit12> | |||
| <Filename Value="..\..\utsFreeType.pas"/> | |||
| <IsPartOfProject Value="True"/> | |||
| <UnitName Value="utsFreeType"/> | |||
| </Unit12> | |||
| <Unit13> | |||
| <Filename Value="..\..\utsOpenGLUtils.pas"/> | |||
| @@ -112,7 +107,7 @@ | |||
| </Target> | |||
| <SearchPaths> | |||
| <IncludeFiles Value="$(ProjOutDir);old"/> | |||
| <OtherUnitFiles Value="..\..;..\..\old;..\..\OpenGLCore"/> | |||
| <OtherUnitFiles Value="..\..;..\..\old;..\..\OpenGLCore;..\..\..\dglOpenGLES"/> | |||
| <UnitOutputDirectory Value="lib\$(TargetCPU)-$(TargetOS)"/> | |||
| </SearchPaths> | |||
| <Linking> | |||
| @@ -4,7 +4,7 @@ | |||
| <PathDelim Value="\"/> | |||
| <Version Value="9"/> | |||
| <BuildModes Active="Default"/> | |||
| <Units Count="65"> | |||
| <Units Count="67"> | |||
| <Unit0> | |||
| <Filename Value="TextSuiteTest.lpr"/> | |||
| <IsPartOfProject Value="True"/> | |||
| @@ -18,7 +18,6 @@ | |||
| <ComponentName Value="MainForm"/> | |||
| <HasResources Value="True"/> | |||
| <ResourceBaseClass Value="Form"/> | |||
| <UnitName Value="uMainForm"/> | |||
| <EditorIndex Value="-1"/> | |||
| <TopLine Value="140"/> | |||
| <CursorPos X="59" Y="154"/> | |||
| @@ -28,8 +27,10 @@ | |||
| <Filename Value="..\..\utsRendererOpenGL.pas"/> | |||
| <IsPartOfProject Value="True"/> | |||
| <UnitName Value="utsRendererOpenGL"/> | |||
| <TopLine Value="48"/> | |||
| <CursorPos X="36" Y="65"/> | |||
| <IsVisibleTab Value="True"/> | |||
| <WindowIndex Value="1"/> | |||
| <TopLine Value="171"/> | |||
| <CursorPos Y="187"/> | |||
| <UsageCount Value="70"/> | |||
| <Loaded Value="True"/> | |||
| </Unit2> | |||
| @@ -37,10 +38,8 @@ | |||
| <Filename Value="..\..\utsTextSuite.pas"/> | |||
| <IsPartOfProject Value="True"/> | |||
| <UnitName Value="utsTextSuite"/> | |||
| <IsVisibleTab Value="True"/> | |||
| <EditorIndex Value="1"/> | |||
| <TopLine Value="310"/> | |||
| <CursorPos X="51" Y="324"/> | |||
| <TopLine Value="216"/> | |||
| <CursorPos X="55" Y="316"/> | |||
| <UsageCount Value="70"/> | |||
| <Loaded Value="True"/> | |||
| </Unit3> | |||
| @@ -54,10 +53,11 @@ | |||
| <Filename Value="..\..\utsTypes.pas"/> | |||
| <IsPartOfProject Value="True"/> | |||
| <UnitName Value="utsTypes"/> | |||
| <EditorIndex Value="-1"/> | |||
| <TopLine Value="93"/> | |||
| <CursorPos X="5" Y="109"/> | |||
| <EditorIndex Value="4"/> | |||
| <TopLine Value="173"/> | |||
| <CursorPos X="59" Y="191"/> | |||
| <UsageCount Value="70"/> | |||
| <Loaded Value="True"/> | |||
| </Unit5> | |||
| <Unit6> | |||
| <Filename Value="..\..\utsUtils.pas"/> | |||
| @@ -70,10 +70,8 @@ | |||
| <Unit7> | |||
| <Filename Value="..\..\utsFontCreatorGDI.pas"/> | |||
| <IsPartOfProject Value="True"/> | |||
| <UnitName Value="utsFontCreatorGDI"/> | |||
| <IsVisibleTab Value="True"/> | |||
| <EditorIndex Value="-1"/> | |||
| <WindowIndex Value="1"/> | |||
| <WindowIndex Value="-1"/> | |||
| <TopLine Value="517"/> | |||
| <CursorPos Y="526"/> | |||
| <UsageCount Value="70"/> | |||
| @@ -97,7 +95,6 @@ | |||
| <Unit10> | |||
| <Filename Value="..\..\utsFontCreatorFreeType.pas"/> | |||
| <IsPartOfProject Value="True"/> | |||
| <UnitName Value="utsFontCreatorFreeType"/> | |||
| <EditorIndex Value="-1"/> | |||
| <TopLine Value="237"/> | |||
| <CursorPos X="51" Y="339"/> | |||
| @@ -106,7 +103,6 @@ | |||
| <Unit11> | |||
| <Filename Value="..\..\utsGDI.pas"/> | |||
| <IsPartOfProject Value="True"/> | |||
| <UnitName Value="utsGDI"/> | |||
| <EditorIndex Value="-1"/> | |||
| <WindowIndex Value="1"/> | |||
| <TopLine Value="284"/> | |||
| @@ -116,7 +112,6 @@ | |||
| <Unit12> | |||
| <Filename Value="..\..\utsFreeType.pas"/> | |||
| <IsPartOfProject Value="True"/> | |||
| <UnitName Value="utsFreeType"/> | |||
| <EditorIndex Value="-1"/> | |||
| <WindowIndex Value="1"/> | |||
| <TopLine Value="292"/> | |||
| @@ -124,13 +119,33 @@ | |||
| <UsageCount Value="46"/> | |||
| </Unit12> | |||
| <Unit13> | |||
| <Filename Value="..\..\utsOpenGLUtils.pas"/> | |||
| <IsPartOfProject Value="True"/> | |||
| <UnitName Value="utsOpenGLUtils"/> | |||
| <IsVisibleTab Value="True"/> | |||
| <EditorIndex Value="3"/> | |||
| <TopLine Value="206"/> | |||
| <CursorPos X="40" Y="220"/> | |||
| <UsageCount Value="21"/> | |||
| <Loaded Value="True"/> | |||
| </Unit13> | |||
| <Unit14> | |||
| <Filename Value="..\..\utsRendererOpenGLES.pas"/> | |||
| <UnitName Value="utsRendererOpenGLES"/> | |||
| <EditorIndex Value="1"/> | |||
| <TopLine Value="172"/> | |||
| <CursorPos Y="12"/> | |||
| <UsageCount Value="20"/> | |||
| <Loaded Value="True"/> | |||
| </Unit14> | |||
| <Unit15> | |||
| <Filename Value="new\utsTextSuite.pas"/> | |||
| <EditorIndex Value="-1"/> | |||
| <TopLine Value="1886"/> | |||
| <CursorPos X="33" Y="1904"/> | |||
| <UsageCount Value="89"/> | |||
| </Unit13> | |||
| <Unit14> | |||
| </Unit15> | |||
| <Unit16> | |||
| <Filename Value="old\TextSuite.pas"/> | |||
| <EditorIndex Value="-1"/> | |||
| <WindowIndex Value="1"/> | |||
| @@ -143,237 +158,236 @@ | |||
| <CursorPos X="3" Y="302"/> | |||
| </ExtraEditor1> | |||
| <UsageCount Value="84"/> | |||
| </Unit14> | |||
| <Unit15> | |||
| </Unit16> | |||
| <Unit17> | |||
| <Filename Value="old\TextSuiteImports.pas"/> | |||
| <EditorIndex Value="-1"/> | |||
| <WindowIndex Value="1"/> | |||
| <TopLine Value="656"/> | |||
| <CursorPos X="20" Y="635"/> | |||
| <UsageCount Value="84"/> | |||
| </Unit15> | |||
| <Unit16> | |||
| </Unit17> | |||
| <Unit18> | |||
| <Filename Value="old\TextSuiteWideUtils.pas"/> | |||
| <EditorIndex Value="-1"/> | |||
| <WindowIndex Value="1"/> | |||
| <TopLine Value="1243"/> | |||
| <CursorPos X="18" Y="1257"/> | |||
| <UsageCount Value="84"/> | |||
| </Unit16> | |||
| <Unit17> | |||
| </Unit18> | |||
| <Unit19> | |||
| <Filename Value="old\TextSuiteClasses.pas"/> | |||
| <EditorIndex Value="-1"/> | |||
| <WindowIndex Value="1"/> | |||
| <TopLine Value="654"/> | |||
| <CursorPos X="25" Y="673"/> | |||
| <UsageCount Value="84"/> | |||
| </Unit17> | |||
| <Unit18> | |||
| </Unit19> | |||
| <Unit20> | |||
| <Filename Value="old\TextSuitePostProcess.pas"/> | |||
| <EditorIndex Value="-1"/> | |||
| <WindowIndex Value="1"/> | |||
| <TopLine Value="163"/> | |||
| <CursorPos X="61" Y="141"/> | |||
| <UsageCount Value="84"/> | |||
| </Unit18> | |||
| <Unit19> | |||
| </Unit20> | |||
| <Unit21> | |||
| <Filename Value="old\TextSuiteTTFUtils.pas"/> | |||
| <EditorIndex Value="-1"/> | |||
| <WindowIndex Value="1"/> | |||
| <TopLine Value="83"/> | |||
| <CursorPos X="3" Y="91"/> | |||
| <UsageCount Value="84"/> | |||
| </Unit19> | |||
| <Unit20> | |||
| </Unit21> | |||
| <Unit22> | |||
| <Filename Value="old\TextSuiteVersion.pas"/> | |||
| <EditorIndex Value="-1"/> | |||
| <WindowIndex Value="-1"/> | |||
| <TopLine Value="-1"/> | |||
| <CursorPos X="-1" Y="-1"/> | |||
| <UsageCount Value="84"/> | |||
| </Unit20> | |||
| <Unit21> | |||
| </Unit22> | |||
| <Unit23> | |||
| <Filename Value="new\utsFontCreatorGDI.pas"/> | |||
| <EditorIndex Value="-1"/> | |||
| <TopLine Value="655"/> | |||
| <CursorPos X="53" Y="662"/> | |||
| <UsageCount Value="48"/> | |||
| </Unit21> | |||
| <Unit22> | |||
| </Unit23> | |||
| <Unit24> | |||
| <Filename Value="new\utsTtfUtils.pas"/> | |||
| <EditorIndex Value="-1"/> | |||
| <TopLine Value="128"/> | |||
| <CursorPos X="17" Y="144"/> | |||
| <UsageCount Value="40"/> | |||
| </Unit22> | |||
| <Unit23> | |||
| </Unit24> | |||
| <Unit25> | |||
| <Filename Value="new\utsTypes.pas"/> | |||
| <EditorIndex Value="-1"/> | |||
| <TopLine Value="152"/> | |||
| <CursorPos X="5" Y="168"/> | |||
| <UsageCount Value="40"/> | |||
| </Unit23> | |||
| <Unit24> | |||
| </Unit25> | |||
| <Unit26> | |||
| <Filename Value="new\utsUtils.pas"/> | |||
| <EditorIndex Value="-1"/> | |||
| <CursorPos Y="20"/> | |||
| <UsageCount Value="40"/> | |||
| </Unit24> | |||
| <Unit25> | |||
| </Unit26> | |||
| <Unit27> | |||
| <Filename Value="new\utsRendererOpenGL.pas"/> | |||
| <EditorIndex Value="-1"/> | |||
| <TopLine Value="356"/> | |||
| <CursorPos X="20" Y="376"/> | |||
| <UsageCount Value="37"/> | |||
| </Unit25> | |||
| <Unit26> | |||
| </Unit27> | |||
| <Unit28> | |||
| <Filename Value="..\bitSpace\_projects\MassiveUniverseOnline\bitSpaceEngine\src\OpenGLCore\uglcTypes.pas"/> | |||
| <EditorIndex Value="-1"/> | |||
| <WindowIndex Value="1"/> | |||
| <TopLine Value="261"/> | |||
| <CursorPos X="3" Y="277"/> | |||
| <UsageCount Value="35"/> | |||
| </Unit26> | |||
| <Unit27> | |||
| </Unit28> | |||
| <Unit29> | |||
| <Filename Value="..\bitSpace\_projects\MassiveUniverseOnline\bitSpaceEngine\src\OpenGLCore\dglOpenGL.pas"/> | |||
| <EditorIndex Value="-1"/> | |||
| <TopLine Value="1066"/> | |||
| <CursorPos X="27" Y="1082"/> | |||
| <UsageCount Value="30"/> | |||
| </Unit27> | |||
| <Unit28> | |||
| </Unit29> | |||
| <Unit30> | |||
| <Filename Value="new\uglctextsuite.pas"/> | |||
| <EditorIndex Value="-1"/> | |||
| <CursorPos X="3" Y="13"/> | |||
| <UsageCount Value="11"/> | |||
| </Unit28> | |||
| <Unit29> | |||
| </Unit30> | |||
| <Unit31> | |||
| <Filename Value="C:\Zusatzprogramme\Lazarus\fpc\2.7.1\source\rtl\inc\ustringh.inc"/> | |||
| <EditorIndex Value="-1"/> | |||
| <TopLine Value="113"/> | |||
| <CursorPos X="10" Y="129"/> | |||
| <UsageCount Value="38"/> | |||
| </Unit29> | |||
| <Unit30> | |||
| </Unit31> | |||
| <Unit32> | |||
| <Filename Value="C:\Zusatzprogramme\Lazarus\fpc\2.7.1\source\rtl\inc\ustrings.inc"/> | |||
| <EditorIndex Value="-1"/> | |||
| <TopLine Value="2091"/> | |||
| <CursorPos X="5" Y="2098"/> | |||
| <UsageCount Value="21"/> | |||
| </Unit30> | |||
| <Unit31> | |||
| </Unit32> | |||
| <Unit33> | |||
| <Filename Value="C:\Zusatzprogramme\Lazarus\fpc\2.7.1\source\rtl\inc\systemh.inc"/> | |||
| <EditorIndex Value="-1"/> | |||
| <TopLine Value="502"/> | |||
| <CursorPos X="3" Y="518"/> | |||
| <UsageCount Value="36"/> | |||
| </Unit31> | |||
| <Unit32> | |||
| </Unit33> | |||
| <Unit34> | |||
| <Filename Value="C:\Zusatzprogramme\Lazarus\fpc\2.7.1\source\rtl\inc\heaph.inc"/> | |||
| <EditorIndex Value="-1"/> | |||
| <TopLine Value="71"/> | |||
| <CursorPos X="10" Y="95"/> | |||
| <UsageCount Value="24"/> | |||
| </Unit32> | |||
| <Unit33> | |||
| </Unit34> | |||
| <Unit35> | |||
| <Filename Value="old\TextSuiteCPUUtils.pas"/> | |||
| <EditorIndex Value="-1"/> | |||
| <WindowIndex Value="1"/> | |||
| <CursorPos X="23" Y="20"/> | |||
| <UsageCount Value="14"/> | |||
| </Unit33> | |||
| <Unit34> | |||
| </Unit35> | |||
| <Unit36> | |||
| <Filename Value="..\glBitmap\glBitmap\glBitmap.pas"/> | |||
| <EditorIndex Value="-1"/> | |||
| <CursorPos X="14" Y="14"/> | |||
| <UsageCount Value="2"/> | |||
| </Unit34> | |||
| <Unit35> | |||
| </Unit36> | |||
| <Unit37> | |||
| <Filename Value="C:\Zusatzprogramme\Lazarus\fpc\2.7.1\source\rtl\objpas\math.pp"/> | |||
| <EditorIndex Value="-1"/> | |||
| <TopLine Value="1011"/> | |||
| <CursorPos X="47" Y="1015"/> | |||
| <UsageCount Value="6"/> | |||
| </Unit35> | |||
| <Unit36> | |||
| </Unit37> | |||
| <Unit38> | |||
| <Filename Value="C:\Zusatzprogramme\Lazarus\fpc\2.7.1\source\rtl\inc\mathh.inc"/> | |||
| <EditorIndex Value="-1"/> | |||
| <TopLine Value="84"/> | |||
| <CursorPos X="14" Y="101"/> | |||
| <UsageCount Value="6"/> | |||
| </Unit36> | |||
| <Unit37> | |||
| </Unit38> | |||
| <Unit39> | |||
| <Filename Value="C:\Zusatzprogramme\Lazarus\fpc\2.7.1\source\rtl\inc\genmath.inc"/> | |||
| <EditorIndex Value="-1"/> | |||
| <TopLine Value="152"/> | |||
| <CursorPos X="10" Y="155"/> | |||
| <UsageCount Value="6"/> | |||
| </Unit37> | |||
| <Unit38> | |||
| </Unit39> | |||
| <Unit40> | |||
| <Filename Value="C:\Zusatzprogramme\Lazarus\fpc\2.7.1\source\rtl\inc\dynlibs.pas"/> | |||
| <UnitName Value="dynlibs"/> | |||
| <EditorIndex Value="-1"/> | |||
| <TopLine Value="143"/> | |||
| <CursorPos X="3" Y="149"/> | |||
| <UsageCount Value="30"/> | |||
| </Unit38> | |||
| <Unit39> | |||
| </Unit40> | |||
| <Unit41> | |||
| <Filename Value="C:\Zusatzprogramme\Lazarus\fpc\2.7.1\source\rtl\win\dynlibs.inc"/> | |||
| <EditorIndex Value="-1"/> | |||
| <TopLine Value="26"/> | |||
| <CursorPos X="10" Y="42"/> | |||
| <UsageCount Value="28"/> | |||
| </Unit39> | |||
| <Unit40> | |||
| </Unit41> | |||
| <Unit42> | |||
| <Filename Value="C:\Zusatzprogramme\Lazarus\fpc\2.7.1\source\rtl\win\sysosh.inc"/> | |||
| <EditorIndex Value="-1"/> | |||
| <TopLine Value="11"/> | |||
| <CursorPos X="3" Y="19"/> | |||
| <UsageCount Value="11"/> | |||
| </Unit40> | |||
| <Unit41> | |||
| </Unit42> | |||
| <Unit43> | |||
| <Filename Value="C:\Zusatzprogramme\Lazarus\fpc\2.7.1\source\rtl\inc\objpash.inc"/> | |||
| <EditorIndex Value="-1"/> | |||
| <TopLine Value="177"/> | |||
| <CursorPos X="22" Y="195"/> | |||
| <UsageCount Value="15"/> | |||
| </Unit41> | |||
| <Unit42> | |||
| </Unit43> | |||
| <Unit44> | |||
| <Filename Value="C:\Zusatzprogramme\Lazarus\fpc\2.7.1\source\rtl\objpas\sysutils\sysunih.inc"/> | |||
| <EditorIndex Value="-1"/> | |||
| <WindowIndex Value="1"/> | |||
| <TopLine Value="25"/> | |||
| <CursorPos X="34" Y="43"/> | |||
| <UsageCount Value="26"/> | |||
| </Unit42> | |||
| <Unit43> | |||
| </Unit44> | |||
| <Unit45> | |||
| <Filename Value="C:\Zusatzprogramme\Lazarus\fpc\2.7.1\source\packages\fcl-base\src\syncobjs.pp"/> | |||
| <EditorIndex Value="-1"/> | |||
| <TopLine Value="113"/> | |||
| <CursorPos X="25" Y="115"/> | |||
| <UsageCount Value="16"/> | |||
| </Unit43> | |||
| <Unit44> | |||
| </Unit45> | |||
| <Unit46> | |||
| <Filename Value="C:\Zusatzprogramme\Lazarus\fpc\2.7.1\source\rtl\objpas\classes\classesh.inc"/> | |||
| <EditorIndex Value="-1"/> | |||
| <WindowIndex Value="1"/> | |||
| <TopLine Value="311"/> | |||
| <CursorPos X="14" Y="327"/> | |||
| <UsageCount Value="23"/> | |||
| </Unit44> | |||
| <Unit45> | |||
| </Unit46> | |||
| <Unit47> | |||
| <Filename Value="C:\Zusatzprogramme\Lazarus\fpc\2.7.1\source\rtl\inc\objpas.inc"/> | |||
| <EditorIndex Value="-1"/> | |||
| <UsageCount Value="29"/> | |||
| </Unit45> | |||
| <Unit46> | |||
| </Unit47> | |||
| <Unit48> | |||
| <Filename Value="C:\Zusatzprogramme\Lazarus\lcl\include\control.inc"/> | |||
| <EditorIndex Value="-1"/> | |||
| <TopLine Value="2843"/> | |||
| <CursorPos Y="2858"/> | |||
| <UsageCount Value="13"/> | |||
| </Unit46> | |||
| <Unit47> | |||
| </Unit48> | |||
| <Unit49> | |||
| <Filename Value="C:\Users\Erik\Desktop\RectPacking\unit1.pas"/> | |||
| <ComponentName Value="Form1"/> | |||
| <HasResources Value="True"/> | |||
| @@ -383,252 +397,249 @@ | |||
| <TopLine Value="376"/> | |||
| <CursorPos X="74" Y="397"/> | |||
| <UsageCount Value="21"/> | |||
| </Unit47> | |||
| <Unit48> | |||
| </Unit49> | |||
| <Unit50> | |||
| <Filename Value="..\bitSpace\_projects\MassiveUniverseOnline\bitSpaceEngine\src\OpenGLCore\uglcArrayBuffer.pas"/> | |||
| <EditorIndex Value="-1"/> | |||
| <WindowIndex Value="1"/> | |||
| <TopLine Value="102"/> | |||
| <CursorPos X="37" Y="112"/> | |||
| <UsageCount Value="10"/> | |||
| </Unit48> | |||
| <Unit49> | |||
| </Unit50> | |||
| <Unit51> | |||
| <Filename Value="..\bitSpace\_projects\MassiveUniverseOnline\bitSpaceEngine\src\OpenGLCore\uglcBitmap.pas"/> | |||
| <EditorIndex Value="-1"/> | |||
| <WindowIndex Value="1"/> | |||
| <TopLine Value="1047"/> | |||
| <CursorPos X="15" Y="1043"/> | |||
| <UsageCount Value="8"/> | |||
| </Unit49> | |||
| <Unit50> | |||
| </Unit51> | |||
| <Unit52> | |||
| <Filename Value="C:\Zusatzprogramme\Lazarus\fpc\2.7.1\source\rtl\objpas\objpas.pp"/> | |||
| <EditorIndex Value="-1"/> | |||
| <TopLine Value="19"/> | |||
| <CursorPos X="8" Y="35"/> | |||
| <UsageCount Value="8"/> | |||
| </Unit50> | |||
| <Unit51> | |||
| </Unit52> | |||
| <Unit53> | |||
| <Filename Value="C:\Zusatzprogramme\Lazarus\lcl\include\application.inc"/> | |||
| <EditorIndex Value="-1"/> | |||
| <TopLine Value="966"/> | |||
| <CursorPos Y="981"/> | |||
| <UsageCount Value="8"/> | |||
| </Unit51> | |||
| <Unit52> | |||
| </Unit53> | |||
| <Unit54> | |||
| <Filename Value="..\bitSpace\_projects\MassiveUniverseOnline\bitSpaceEngine\src\SpaceEngine\uengFrameLimiter.pas"/> | |||
| <EditorIndex Value="-1"/> | |||
| <TopLine Value="14"/> | |||
| <CursorPos X="13" Y="14"/> | |||
| <UsageCount Value="8"/> | |||
| </Unit52> | |||
| <Unit53> | |||
| </Unit54> | |||
| <Unit55> | |||
| <Filename Value="..\..\old\TextSuiteClasses.pas"/> | |||
| <UnitName Value="TextSuiteClasses"/> | |||
| <EditorIndex Value="-1"/> | |||
| <WindowIndex Value="1"/> | |||
| <TopLine Value="2705"/> | |||
| <CursorPos X="3" Y="2698"/> | |||
| <UsageCount Value="18"/> | |||
| </Unit53> | |||
| <Unit54> | |||
| </Unit55> | |||
| <Unit56> | |||
| <Filename Value="..\..\old\TextSuite.pas"/> | |||
| <EditorIndex Value="-1"/> | |||
| <WindowIndex Value="1"/> | |||
| <TopLine Value="29"/> | |||
| <CursorPos X="3" Y="45"/> | |||
| <UsageCount Value="14"/> | |||
| </Unit54> | |||
| <Unit55> | |||
| </Unit56> | |||
| <Unit57> | |||
| <Filename Value="..\..\old\TextSuiteWideUtils.pas"/> | |||
| <EditorIndex Value="-1"/> | |||
| <WindowIndex Value="1"/> | |||
| <TopLine Value="1362"/> | |||
| <CursorPos X="3" Y="1390"/> | |||
| <UsageCount Value="14"/> | |||
| </Unit55> | |||
| <Unit56> | |||
| </Unit57> | |||
| <Unit58> | |||
| <Filename Value="..\..\utsWideStringUtils.pas"/> | |||
| <EditorIndex Value="-1"/> | |||
| <CursorPos Y="9"/> | |||
| <UsageCount Value="18"/> | |||
| </Unit56> | |||
| <Unit57> | |||
| </Unit58> | |||
| <Unit59> | |||
| <Filename Value="..\..\old\TextSuiteCPUUtils.pas"/> | |||
| <EditorIndex Value="-1"/> | |||
| <WindowIndex Value="1"/> | |||
| <UsageCount Value="13"/> | |||
| </Unit57> | |||
| <Unit58> | |||
| </Unit59> | |||
| <Unit60> | |||
| <Filename Value="..\..\old\TextSuiteImports.pas"/> | |||
| <EditorIndex Value="-1"/> | |||
| <WindowIndex Value="1"/> | |||
| <CursorPos X="41" Y="12"/> | |||
| <UsageCount Value="13"/> | |||
| </Unit58> | |||
| <Unit59> | |||
| </Unit60> | |||
| <Unit61> | |||
| <Filename Value="..\..\old\TextSuiteOptions.inc"/> | |||
| <EditorIndex Value="-1"/> | |||
| <WindowIndex Value="1"/> | |||
| <UsageCount Value="13"/> | |||
| </Unit59> | |||
| <Unit60> | |||
| </Unit61> | |||
| <Unit62> | |||
| <Filename Value="..\..\old\TextSuitePostProcess.pas"/> | |||
| <EditorIndex Value="-1"/> | |||
| <WindowIndex Value="1"/> | |||
| <TopLine Value="261"/> | |||
| <CursorPos X="23" Y="345"/> | |||
| <UsageCount Value="13"/> | |||
| </Unit60> | |||
| <Unit61> | |||
| </Unit62> | |||
| <Unit63> | |||
| <Filename Value="..\..\old\TextSuiteTTFUtils.pas"/> | |||
| <EditorIndex Value="-1"/> | |||
| <WindowIndex Value="1"/> | |||
| <UsageCount Value="13"/> | |||
| </Unit61> | |||
| <Unit62> | |||
| </Unit63> | |||
| <Unit64> | |||
| <Filename Value="..\..\old\TextSuiteVersion.pas"/> | |||
| <EditorIndex Value="-1"/> | |||
| <WindowIndex Value="1"/> | |||
| <UsageCount Value="13"/> | |||
| </Unit62> | |||
| <Unit63> | |||
| </Unit64> | |||
| <Unit65> | |||
| <Filename Value="C:\Zusatzprogramme\Lazarus\fpc\2.7.1\source\rtl\win\wininc\unifun.inc"/> | |||
| <EditorIndex Value="-1"/> | |||
| <TopLine Value="53"/> | |||
| <CursorPos X="22" Y="69"/> | |||
| <UsageCount Value="26"/> | |||
| </Unit63> | |||
| <Unit64> | |||
| <Filename Value="..\..\utsOpenGLUtils.pas"/> | |||
| <IsPartOfProject Value="True"/> | |||
| <UnitName Value="utsOpenGLUtils"/> | |||
| </Unit65> | |||
| <Unit66> | |||
| <Filename Value="..\..\..\dglOpenGLES\dglOpenGLES.pas"/> | |||
| <UnitName Value="dglOpenGLES"/> | |||
| <EditorIndex Value="2"/> | |||
| <TopLine Value="297"/> | |||
| <CursorPos X="31" Y="382"/> | |||
| <UsageCount Value="21"/> | |||
| <TopLine Value="64"/> | |||
| <CursorPos X="48" Y="74"/> | |||
| <UsageCount Value="10"/> | |||
| <Loaded Value="True"/> | |||
| </Unit64> | |||
| </Unit66> | |||
| </Units> | |||
| <JumpHistory Count="30" HistoryIndex="29"> | |||
| <Position1> | |||
| <Filename Value="..\..\utsRendererOpenGL.pas"/> | |||
| <Caret Line="24" Column="57" TopLine="5"/> | |||
| <Filename Value="..\..\utsRendererOpenGLES.pas"/> | |||
| <Caret Line="17" Column="22" TopLine="5"/> | |||
| </Position1> | |||
| <Position2> | |||
| <Filename Value="..\..\utsOpenGLUtils.pas"/> | |||
| <Caret Line="327" TopLine="317"/> | |||
| <Filename Value="..\..\..\dglOpenGLES\dglOpenGLES.pas"/> | |||
| </Position2> | |||
| <Position3> | |||
| <Filename Value="..\..\utsOpenGLUtils.pas"/> | |||
| <Caret Line="335" Column="17" TopLine="317"/> | |||
| <Filename Value="..\..\utsRendererOpenGL.pas"/> | |||
| <Caret Line="210" Column="38" TopLine="196"/> | |||
| </Position3> | |||
| <Position4> | |||
| <Filename Value="..\..\utsRendererOpenGL.pas"/> | |||
| <Caret Line="26" Column="60" TopLine="8"/> | |||
| <Filename Value="..\..\utsOpenGLUtils.pas"/> | |||
| <Caret Line="378" Column="31" TopLine="297"/> | |||
| </Position4> | |||
| <Position5> | |||
| <Filename Value="..\..\utsOpenGLUtils.pas"/> | |||
| <Caret Line="69" Column="15" TopLine="54"/> | |||
| <Caret Line="21" Column="26" TopLine="5"/> | |||
| </Position5> | |||
| <Position6> | |||
| <Filename Value="..\..\utsRendererOpenGL.pas"/> | |||
| <Caret Line="27" Column="66" TopLine="10"/> | |||
| <Filename Value="..\..\utsOpenGLUtils.pas"/> | |||
| <Caret Line="54" TopLine="39"/> | |||
| </Position6> | |||
| <Position7> | |||
| <Filename Value="..\..\utsOpenGLUtils.pas"/> | |||
| <Caret Line="55" TopLine="55"/> | |||
| <Caret Line="53" TopLine="41"/> | |||
| </Position7> | |||
| <Position8> | |||
| <Filename Value="..\..\utsRendererOpenGL.pas"/> | |||
| <Caret Line="177" TopLine="171"/> | |||
| <Filename Value="..\..\utsOpenGLUtils.pas"/> | |||
| <Caret Line="143" Column="120" TopLine="133"/> | |||
| </Position8> | |||
| <Position9> | |||
| <Filename Value="..\..\utsRendererOpenGL.pas"/> | |||
| <Caret Line="9" Column="52"/> | |||
| <Filename Value="..\..\utsOpenGLUtils.pas"/> | |||
| <Caret Line="74" Column="15" TopLine="63"/> | |||
| </Position9> | |||
| <Position10> | |||
| <Filename Value="..\..\utsRendererOpenGL.pas"/> | |||
| <Caret Line="17" Column="15"/> | |||
| <Filename Value="..\..\utsOpenGLUtils.pas"/> | |||
| <Caret Line="191" Column="5" TopLine="177"/> | |||
| </Position10> | |||
| <Position11> | |||
| <Filename Value="..\..\utsOpenGLUtils.pas"/> | |||
| <Caret Line="55" Column="48" TopLine="39"/> | |||
| <Caret Line="132" Column="3" TopLine="128"/> | |||
| </Position11> | |||
| <Position12> | |||
| <Filename Value="..\..\utsOpenGLUtils.pas"/> | |||
| <Caret Line="58" Column="59" TopLine="39"/> | |||
| <Caret Line="190" Column="24" TopLine="176"/> | |||
| </Position12> | |||
| <Position13> | |||
| <Filename Value="..\..\utsRendererOpenGL.pas"/> | |||
| <Caret Line="102" Column="18" TopLine="81"/> | |||
| <Filename Value="..\..\utsTypes.pas"/> | |||
| <Caret Line="186" Column="55" TopLine="170"/> | |||
| </Position13> | |||
| <Position14> | |||
| <Filename Value="..\..\utsOpenGLUtils.pas"/> | |||
| <Caret Line="128" Column="30" TopLine="120"/> | |||
| <Caret Line="190" Column="24" TopLine="176"/> | |||
| </Position14> | |||
| <Position15> | |||
| <Filename Value="..\..\utsRendererOpenGL.pas"/> | |||
| <Caret Line="102" Column="18" TopLine="81"/> | |||
| <Filename Value="..\..\utsOpenGLUtils.pas"/> | |||
| <Caret Line="192" Column="7" TopLine="174"/> | |||
| </Position15> | |||
| <Position16> | |||
| <Filename Value="..\..\utsRendererOpenGL.pas"/> | |||
| <Caret Line="19" Column="119" TopLine="3"/> | |||
| <Filename Value="..\..\utsOpenGLUtils.pas"/> | |||
| <Caret Line="194" Column="45" TopLine="178"/> | |||
| </Position16> | |||
| <Position17> | |||
| <Filename Value="..\..\utsOpenGLUtils.pas"/> | |||
| <Caret Line="63" Column="7" TopLine="46"/> | |||
| <Caret Line="53" TopLine="9"/> | |||
| </Position17> | |||
| <Position18> | |||
| <Filename Value="..\..\utsOpenGLUtils.pas"/> | |||
| <Caret Line="153" Column="29" TopLine="137"/> | |||
| <Caret Line="198" Column="12" TopLine="187"/> | |||
| </Position18> | |||
| <Position19> | |||
| <Filename Value="..\..\utsRendererOpenGL.pas"/> | |||
| <Caret Line="20" Column="7" TopLine="3"/> | |||
| <Filename Value="..\..\utsOpenGLUtils.pas"/> | |||
| <Caret Line="207" Column="7" TopLine="187"/> | |||
| </Position19> | |||
| <Position20> | |||
| <Filename Value="..\..\utsRendererOpenGL.pas"/> | |||
| <Caret Line="122" Column="41" TopLine="106"/> | |||
| <Filename Value="..\..\utsOpenGLUtils.pas"/> | |||
| <Caret Line="205" Column="22" TopLine="189"/> | |||
| </Position20> | |||
| <Position21> | |||
| <Filename Value="..\..\utsRendererOpenGL.pas"/> | |||
| <Caret Line="22" Column="15" TopLine="6"/> | |||
| <Filename Value="..\..\utsOpenGLUtils.pas"/> | |||
| <Caret Line="216" TopLine="192"/> | |||
| </Position21> | |||
| <Position22> | |||
| <Filename Value="..\..\utsRendererOpenGL.pas"/> | |||
| <Caret Line="137" Column="27" TopLine="121"/> | |||
| <Filename Value="..\..\utsOpenGLUtils.pas"/> | |||
| <Caret Line="207" Column="71" TopLine="193"/> | |||
| </Position22> | |||
| <Position23> | |||
| <Filename Value="..\..\utsRendererOpenGL.pas"/> | |||
| <Caret Line="170" Column="15" TopLine="154"/> | |||
| <Filename Value="..\..\utsOpenGLUtils.pas"/> | |||
| <Caret Line="274" Column="17" TopLine="259"/> | |||
| </Position23> | |||
| <Position24> | |||
| <Filename Value="..\..\utsRendererOpenGL.pas"/> | |||
| <Caret Line="227" TopLine="199"/> | |||
| <Filename Value="..\..\utsOpenGLUtils.pas"/> | |||
| <Caret Line="18" Column="5" TopLine="2"/> | |||
| </Position24> | |||
| <Position25> | |||
| <Filename Value="..\..\utsRendererOpenGL.pas"/> | |||
| <Caret Line="30" Column="17" TopLine="15"/> | |||
| <Caret Line="75" Column="5" TopLine="73"/> | |||
| </Position25> | |||
| <Position26> | |||
| <Filename Value="..\..\utsOpenGLUtils.pas"/> | |||
| <Caret Line="81" Column="34" TopLine="64"/> | |||
| <Caret Line="62" Column="67" TopLine="47"/> | |||
| </Position26> | |||
| <Position27> | |||
| <Filename Value="..\..\utsRendererOpenGL.pas"/> | |||
| <Caret Line="211" Column="14" TopLine="200"/> | |||
| <Caret Line="19" Column="15" TopLine="3"/> | |||
| </Position27> | |||
| <Position28> | |||
| <Filename Value="..\..\utsRendererOpenGL.pas"/> | |||
| <Caret Line="74" Column="40" TopLine="53"/> | |||
| <Filename Value="..\..\..\dglOpenGLES\dglOpenGLES.pas"/> | |||
| <Caret Line="59" Column="33" TopLine="52"/> | |||
| </Position28> | |||
| <Position29> | |||
| <Filename Value="..\..\utsTextSuite.pas"/> | |||
| <Caret Line="973" TopLine="957"/> | |||
| <Filename Value="..\..\utsRendererOpenGL.pas"/> | |||
| <Caret Line="191" Column="39" TopLine="171"/> | |||
| </Position29> | |||
| <Position30> | |||
| <Filename Value="..\..\utsTextSuite.pas"/> | |||
| <Caret Line="1502" Column="61" TopLine="1496"/> | |||
| <Filename Value="..\..\utsOpenGLUtils.pas"/> | |||
| <Caret Line="225" Column="19" TopLine="206"/> | |||
| </Position30> | |||
| </JumpHistory> | |||
| </ProjectSession> | |||
| @@ -5,7 +5,7 @@ unit utsFontCreatorFreeType; | |||
| interface | |||
| uses | |||
| Classes, SysUtils, syncobjs, dynlibs, | |||
| Classes, SysUtils, | |||
| utsTextSuite, utsTypes, utsFreeType; | |||
| type | |||
| @@ -315,7 +315,7 @@ begin | |||
| if (err <> 0) then | |||
| raise EtsException.Create('unable to set char size: error=' + IntToStr(err)); | |||
| FillByte(prop, SizeOf(prop), 0); | |||
| FillByte(prop{%H-}, SizeOf(prop), 0); | |||
| prop.AntiAliasing := tsAANormal; | |||
| prop.FaceName := face^.family_name; | |||
| prop.StyleName := face^.style_name; | |||
| @@ -5,19 +5,16 @@ unit utsOpenGLUtils; | |||
| interface | |||
| uses | |||
| Classes, SysUtils, syncobjs, | |||
| Classes, SysUtils, | |||
| utsTextSuite, utsTypes; | |||
| type | |||
| TtsQuadPosF = array[0..3] of TtsPositionF; | |||
| TtsCharRenderRefOpenGL = class(TtsCharRenderRef) | |||
| public | |||
| TextureID: Integer; // ID of OpenGL texture where the char is stored in | |||
| TexCoordSize: TtsPositionF; // size of the char in texture coords (0.0 - 1.0) | |||
| TexCoordPos: TtsPositionF; // position of the char in texture coords (0.0 - 1.0) | |||
| VertexSize: TtsPositionF; // size of the char in world coords | |||
| VertexPos: TtsPositionF; // size of the char in world coords | |||
| Size: TtsPosition; | |||
| TexMat: TtsMatrix4f; | |||
| VertMat: TtsMatrix4f; | |||
| constructor Create; | |||
| end; | |||
| @@ -61,9 +58,8 @@ type | |||
| function CreateNewTexture: PtsFontTexture; virtual; | |||
| procedure FreeTexture(var aTexture: PtsFontTexture); virtual; | |||
| procedure UploadTexData(const aCharRef: TtsCharRenderRefOpenGL; | |||
| const aCharImage: TtsImage; const X, Y: Integer); virtual; | |||
| procedure UploadTexData(const aCharRef: TtsCharRenderRefOpenGL; const aCharImage: TtsImage; const X, Y: Integer); virtual; | |||
| protected | |||
| function CreateRenderRef(const aChar: TtsChar; const aCharImage: TtsImage): TtsCharRenderRef; override; | |||
| procedure FreeRenderRef(const aCharRef: TtsCharRenderRef); override; | |||
| @@ -92,10 +88,9 @@ constructor TtsCharRenderRefOpenGL.Create; | |||
| begin | |||
| inherited Create; | |||
| TextureID := 0; | |||
| FillByte(TexCoordPos, SizeOf(TexCoordPos), 0); | |||
| FillByte(TexCoordSize, SizeOf(TexCoordSize), 0); | |||
| FillByte(VertexPos, SizeOf(VertexPos), 0); | |||
| FillByte(VertexSize, SizeOf(VertexSize), 0); | |||
| FillByte(TexMat, SizeOf(TexMat), 0); | |||
| FillByte(VertMat, SizeOf(VertMat), 0); | |||
| FillByte(Size, SizeOf(Size), 0); | |||
| end; | |||
| //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// | |||
| @@ -152,8 +147,7 @@ begin | |||
| end; | |||
| //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// | |||
| procedure TtsBaseOpenGL.UploadTexData(const aCharRef: TtsCharRenderRefOpenGL; | |||
| const aCharImage: TtsImage; const X, Y: Integer); | |||
| procedure TtsBaseOpenGL.UploadTexData(const aCharRef: TtsCharRenderRefOpenGL; const aCharImage: TtsImage; const X, Y: Integer); | |||
| begin | |||
| // DUMMY | |||
| end; | |||
| @@ -211,21 +205,22 @@ var | |||
| item := InsertToTree(aTexture^.Usage, 0, 0, aTexture^.Size, aTexture^.Size, x, y); | |||
| if not Assigned(item) then | |||
| raise EtsRendererOpenGL.Create('unable to add glyph to texture'); | |||
| item^.ref := TtsCharRenderRefOpenGL.Create; | |||
| result := item^.ref; | |||
| // Text Coords | |||
| result.TextureID := aTexture^.ID; | |||
| result.TexCoordPos.x := x / aTexture^.Size; | |||
| result.TexCoordPos.y := y / aTexture^.Size; | |||
| result.TexCoordSize.x := aCharImage.Width / aTexture^.Size; | |||
| result.TexCoordSize.y := aCharImage.Height / aTexture^.Size; | |||
| // Vertex Coords | |||
| result.VertexPos.x := -aChar.GlyphRect.Left; | |||
| result.VertexPos.y := -aChar.GlyphRect.Top - aChar.GlyphOrigin.y; | |||
| result.VertexSize.x := aCharImage.Width; | |||
| result.VertexSize.y := aCharImage.Height; | |||
| result.TextureID := aTexture^.ID; | |||
| result.Size := tsPosition(aCharImage.Width, aCharImage.Height); | |||
| result.TexMat := tsMatrix4f( | |||
| tsVector4f(aCharImage.Width / aTexture^.Size, 0.0, 0.0, 0.0), | |||
| tsVector4f(0.0, aCharImage.Height / aTexture^.Size, 0.0, 0.0), | |||
| tsVector4f(0.0, 0.0, 1.0, 0.0), | |||
| tsVector4f(x / aTexture^.Size, y / aTexture^.Size, 0.0, 1.0)); | |||
| result.VertMat := tsMatrix4f( | |||
| tsVector4f(aCharImage.Width, 0.0, 0.0, 0.0), | |||
| tsVector4f(0.0, aCharImage.Height, 0.0, 0.0), | |||
| tsVector4f(0.0, 0.0, 1.0, 0.0), | |||
| tsVector4f(-aChar.GlyphRect.Left, -aChar.GlyphRect.Top - aChar.GlyphOrigin.y, 0.0, 1.0)); | |||
| UploadTexData(result, aCharImage, x, y); | |||
| end; | |||
| @@ -281,8 +276,8 @@ var | |||
| w := X2 - X1; | |||
| h := Y2 - Y1; | |||
| if not Assigned(aItem) or | |||
| (w < ref.VertexSize.x) or | |||
| (h < ref.VertexSize.y) then | |||
| (w < ref.Size.x) or | |||
| (h < ref.Size.y) then | |||
| exit; | |||
| result := (aItem^.ref = ref); | |||
| @@ -184,13 +184,11 @@ begin | |||
| glMatrixMode(GL_TEXTURE); | |||
| glPushMatrix; | |||
| glLoadIdentity; | |||
| glTranslatef(ref.TexCoordPos.x, ref.TexCoordPos.y, 0); | |||
| glScalef(ref.TexCoordSize.x, ref.TexCoordSize.y, 1); | |||
| glMultMatrixf(@ref.TexMat[0, 0]); | |||
| glMatrixMode(GL_MODELVIEW); | |||
| glPushMatrix; | |||
| glTranslatef(ref.VertexPos.x, ref.VertexPos.y, 0); | |||
| glScalef(ref.VertexSize.x, ref.VertexSize.y, 1); | |||
| glMultMatrixf(@ref.VertMat[0, 0]); | |||
| glBindBuffer(GL_ARRAY_BUFFER, fVBO); | |||
| glEnableClientState(GL_VERTEX_ARRAY); | |||
| @@ -0,0 +1,417 @@ | |||
| unit utsRendererOpenGLES; | |||
| {$mode objfpc}{$H+} | |||
| {.$DEFINE DEBUG} | |||
| interface | |||
| uses | |||
| Classes, SysUtils, | |||
| utsTextSuite, utsTypes, utsOpenGLUtils, dglOpenGLES; | |||
| type | |||
| TtsRendererOpenGLES = class(TtsBaseOpenGL) | |||
| private | |||
| fModelViewMatrix: TtsMatrix4f; | |||
| fProjMatrix: TtsMatrix4f; | |||
| fShaderProgram: GLuint; | |||
| fVBO: GLuint; | |||
| fShader: GLuint; | |||
| fCharPosLocation: GLint; | |||
| fCharTexPosLocation: GLint; | |||
| fCharOffsetLocation: GLint; | |||
| procedure SetModelViewMatrix(aValue: TtsMatrix4f); | |||
| procedure SetProjectionMatrix(aValue: TtsMatrix4f); | |||
| procedure SetShaderProgram(aValue: GLuint); | |||
| function LoadShader: GLuint; | |||
| procedure UpdateUniformProjMat; | |||
| procedure UpdateUniformModelMat; | |||
| procedure UpdateUniformCharOffset; | |||
| protected | |||
| function CreateNewTexture: PtsFontTexture; override; | |||
| procedure FreeTexture(var aTexture: PtsFontTexture); override; | |||
| procedure UploadTexData(const aCharRef: TtsCharRenderRefOpenGL; | |||
| const aCharImage: TtsImage; const X, Y: Integer); override; | |||
| procedure BeginRender; override; | |||
| procedure SetDrawPos(const X, Y: Integer); override; | |||
| procedure MoveDrawPos(const X, Y: Integer); override; | |||
| procedure SetColor(const aColor: TtsColor4f); override; | |||
| procedure Render(const aCharRef: TtsCharRenderRef); override; | |||
| public | |||
| property ShaderProgram: GLuint read fShaderProgram write SetShaderProgram; | |||
| property ProjectionMatrix: TtsMatrix4f read fProjMatrix write SetProjectionMatrix; | |||
| property ModelViewMatrix: TtsMatrix4f read fModelViewMatrix write SetModelViewMatrix; | |||
| constructor Create(const aContext: TtsContext; const aFormat: TtsFormat); | |||
| destructor Destroy; override; | |||
| end; | |||
| implementation | |||
| type | |||
| TVertex = packed record | |||
| pos: array[0..1] of GLfloat; | |||
| tex: array[0..1] of GLfloat; | |||
| end; | |||
| const | |||
| ATTRIB_LOCATION_POSITION = 0; | |||
| ATTRIB_LOCATION_TEXCOORD = 1; | |||
| ATTRIB_NAME_POSITION = 'inPosition'; | |||
| ATTRIB_NAME_TEXCOORD = 'inTexCoord'; | |||
| UNIFORM_NAME_TEXTURE = 'uTexture'; | |||
| UNIFORM_NAME_MODELVIEWMAT = 'uModelViewMat'; | |||
| UNIFORM_NAME_PROJMAT = 'uProjMat'; | |||
| UNIFORM_NAME_CHARTEXPOS = 'uCharTexPos'; | |||
| UNIFORM_NAME_CHARPOS = 'uCharPos'; | |||
| UNIFORM_NAME_CHAROFFSET = 'uCharOffset'; | |||
| VERTEX_SHADER = | |||
| 'attribute vec2 inPosition;' + | |||
| 'attribute vec2 inTexCoord;' + | |||
| 'varying vec2 vTexCoord;' + | |||
| 'uniform mat4 uModelViewMat;' + | |||
| 'uniform mat4 uProjMat;' + | |||
| 'uniform mat4 uCharTexPos;' + | |||
| 'uniform mat4 uCharPos;' + | |||
| 'uniform ivec2 uCharOffset;' + | |||
| 'void main() {' + | |||
| ' vec4 pos = uCharPos * vec4(inPosition, 0.0, 1.0);' + | |||
| ' pos += vec4(uCharOffset, 0.0, 0.0);' + | |||
| ' gl_Position = uProjMat * uModelViewMat * pos;' + | |||
| ' vTexCoord = (uCharTexPos * vec4(inTexCoord, 0.0, 1.0)).st;' + | |||
| '}'; | |||
| FRAGMENT_SHADER = | |||
| 'uniform sampler2D uTexture;' + | |||
| 'varying vec2 vTexCoord;' + | |||
| 'void main() {' + | |||
| ' gl_FragColor = texture2D(uTexture, vTexCoord);' + | |||
| '}'; | |||
| FORMAT_TYPES: array[TtsFormat] of packed record | |||
| InternalFormat: GLenum; | |||
| Format: GLenum; | |||
| DataFormat: GLenum; | |||
| end = ( | |||
| ( //tsFormatEmpty | |||
| InternalFormat: 0; | |||
| Format: 0; | |||
| DataFormat: 0), | |||
| ( //tsFormatRGBA8 | |||
| InternalFormat: GL_RGBA; | |||
| Format: GL_RGBA; | |||
| DataFormat: GL_UNSIGNED_BYTE), | |||
| ( //tsFormatLumAlpha8 | |||
| InternalFormat: GL_LUMINANCE_ALPHA; | |||
| Format: GL_LUMINANCE_ALPHA; | |||
| DataFormat: GL_UNSIGNED_BYTE), | |||
| ( //tsFormatAlpha8 | |||
| InternalFormat: GL_ALPHA; | |||
| Format: GL_ALPHA; | |||
| DataFormat: GL_UNSIGNED_BYTE), | |||
| ( //tsFormatAlpha8 | |||
| InternalFormat: GL_LUMINANCE; | |||
| Format: GL_LUMINANCE; | |||
| DataFormat: GL_UNSIGNED_BYTE) | |||
| ); | |||
| VBO_DATA: array[0..3] of TVertex = ( | |||
| (pos: (0.0, 0.0); tex: (0.0, 0.0)), | |||
| (pos: (0.0, 1.0); tex: (0.0, 1.0)), | |||
| (pos: (1.0, 0.0); tex: (1.0, 0.0)), | |||
| (pos: (1.0, 1.0); tex: (1.0, 1.0)) | |||
| ); | |||
| //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// | |||
| //TtsRendererOpenGLES/////////////////////////////////////////////////////////////////////////////////////////////////// | |||
| //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// | |||
| procedure TtsRendererOpenGLES.SetModelViewMatrix(aValue: TtsMatrix4f); | |||
| begin | |||
| fModelViewMatrix := aValue; | |||
| UpdateUniformModelMat; | |||
| end; | |||
| //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// | |||
| procedure TtsRendererOpenGLES.SetProjectionMatrix(aValue: TtsMatrix4f); | |||
| begin | |||
| fProjMatrix := aValue; | |||
| UpdateUniformProjMat; | |||
| end; | |||
| //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// | |||
| procedure TtsRendererOpenGLES.SetShaderProgram(aValue: GLuint); | |||
| begin | |||
| if (fShaderProgram = aValue) then | |||
| exit; | |||
| fShaderProgram := aValue; | |||
| fCharPosLocation := glGetUniformLocation(fShaderProgram, UNIFORM_NAME_CHARPOS); | |||
| fCharTexPosLocation := glGetUniformLocation(fShaderProgram, UNIFORM_NAME_CHARTEXPOS); | |||
| fCharOffsetLocation := glGetUniformLocation(fShaderProgram, UNIFORM_NAME_CHAROFFSET); | |||
| UpdateUniformProjMat; | |||
| UpdateUniformModelMat; | |||
| UpdateUniformCharOffset; | |||
| end; | |||
| //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// | |||
| function TtsRendererOpenGLES.LoadShader: GLuint; | |||
| {$IFDEF DEBUG} | |||
| procedure PrintShaderInfo(const aObj: GLuint); | |||
| var | |||
| msg: PChar; | |||
| bLen: GLint; | |||
| sLen: GLsizei; | |||
| begin | |||
| bLen := 0; | |||
| glGetShaderiv(aObj, GL_INFO_LOG_LENGTH, @bLen); | |||
| if bLen > 1 then begin | |||
| GetMem(msg, bLen * SizeOf(Char)); | |||
| try | |||
| glGetShaderInfoLog(aObj, bLen, @sLen, msg); | |||
| WriteLn(String(msg)); | |||
| finally | |||
| FreeMem(msg); | |||
| end; | |||
| end; | |||
| end; | |||
| procedure PrintProgramInfo(const aObj: GLuint); | |||
| var | |||
| msg: PChar; | |||
| bLen: GLint; | |||
| sLen: GLsizei; | |||
| begin | |||
| bLen := 0; | |||
| glGetProgramiv(aObj, GL_INFO_LOG_LENGTH, @bLen); | |||
| if bLen > 1 then begin | |||
| GetMem(msg, bLen * SizeOf(Char)); | |||
| try | |||
| glGetProgramInfoLog(aObj, bLen, @sLen, msg); | |||
| WriteLn(String(msg)); | |||
| finally | |||
| FreeMem(msg); | |||
| end; | |||
| end; | |||
| end; | |||
| {$ENDIF} | |||
| function CreateObj(const aCode: String; const aType: GLenum): GLuint; | |||
| var | |||
| code: PAnsiChar; | |||
| len: GLint; | |||
| begin | |||
| result := glCreateShader(aType); | |||
| len := Length(aCode); | |||
| code := PAnsiChar(aCode); | |||
| glShaderSource(result, 1, @code, @len); | |||
| glCompileShader(result); | |||
| {$IFDEF DEBUG}PrintShaderInfo(result);{$ENDIF} | |||
| end; | |||
| var | |||
| fragObj, vertObj: GLuint; | |||
| uLoc: Integer; | |||
| begin | |||
| result := glCreateProgram(); | |||
| vertObj := CreateObj(VERTEX_SHADER, GL_VERTEX_SHADER); | |||
| fragObj := CreateObj(FRAGMENT_SHADER, GL_FRAGMENT_SHADER); | |||
| glAttachShader(result, vertObj); | |||
| glAttachShader(result, fragObj); | |||
| glLinkProgram(result); | |||
| {$IFDEF DEBUG}PrintProgramInfo(result);{$ENDIF} | |||
| glBindAttribLocation(result, ATTRIB_LOCATION_POSITION, ATTRIB_NAME_POSITION); | |||
| glBindAttribLocation(result, ATTRIB_LOCATION_TEXCOORD, ATTRIB_NAME_TEXCOORD); | |||
| uLoc := glGetUniformLocation(result, UNIFORM_NAME_TEXTURE); | |||
| if (uLoc >= 0) then begin | |||
| glUseProgram(result); | |||
| glUniform1i(uLoc, 0); | |||
| glUseProgram(0); | |||
| end; | |||
| end; | |||
| //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// | |||
| procedure TtsRendererOpenGLES.UpdateUniformProjMat; | |||
| var | |||
| loc: Integer; | |||
| begin | |||
| loc := glGetUniformLocation(fShaderProgram, UNIFORM_NAME_PROJMAT); | |||
| if (loc >= 0) then begin | |||
| glUseProgram(fShaderProgram); | |||
| glUniformMatrix4fv(loc, 1, false, @fProjMatrix[0, 0]); | |||
| glUseProgram(0); | |||
| end; | |||
| end; | |||
| //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// | |||
| procedure TtsRendererOpenGLES.UpdateUniformModelMat; | |||
| var | |||
| loc: Integer; | |||
| begin | |||
| loc := glGetUniformLocation(fShaderProgram, UNIFORM_NAME_MODELVIEWMAT); | |||
| if (loc >= 0) then begin | |||
| glUseProgram(fShaderProgram); | |||
| glUniformMatrix4fv(loc, 1, false, @fModelViewMatrix[0, 0]); | |||
| glUseProgram(0); | |||
| end; | |||
| end; | |||
| //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// | |||
| procedure TtsRendererOpenGLES.UpdateUniformCharOffset; | |||
| begin | |||
| if (fCharOffsetLocation >= 0) then begin | |||
| glUseProgram(fShaderProgram); | |||
| glUniform2iv(fCharOffsetLocation, 1, @RenderPos.x); | |||
| glUseProgram(0); | |||
| end; | |||
| end; | |||
| //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// | |||
| function TtsRendererOpenGLES.CreateNewTexture: PtsFontTexture; | |||
| begin | |||
| new(result); | |||
| try | |||
| FillByte(result^, SizeOf(result^), 0); | |||
| new(result^.Usage); | |||
| FillByte(result^.Usage^, SizeOf(result^.Usage^), 0); | |||
| result^.Size := TextureSize; | |||
| glGenTextures(1, @result^.ID); | |||
| glBindTexture(GL_TEXTURE_2D, result^.ID); | |||
| glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); | |||
| glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); | |||
| glTexImage2D( | |||
| GL_TEXTURE_2D, | |||
| 0, | |||
| FORMAT_TYPES[Format].InternalFormat, | |||
| result^.Size, | |||
| result^.Size, | |||
| 0, | |||
| FORMAT_TYPES[Format].Format, | |||
| FORMAT_TYPES[Format].DataFormat, | |||
| nil); | |||
| PushTexture(result); | |||
| except | |||
| if Assigned(result^.Usage) then | |||
| Dispose(result^.Usage); | |||
| Dispose(result); | |||
| end; | |||
| end; | |||
| //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// | |||
| procedure TtsRendererOpenGLES.FreeTexture(var aTexture: PtsFontTexture); | |||
| begin | |||
| if Assigned(aTexture) then | |||
| glDeleteTextures(1, @aTexture^.ID); | |||
| inherited FreeTexture(aTexture); | |||
| end; | |||
| //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// | |||
| procedure TtsRendererOpenGLES.UploadTexData(const aCharRef: TtsCharRenderRefOpenGL; const aCharImage: TtsImage; const X, Y: Integer); | |||
| begin | |||
| glBindTexture(GL_TEXTURE_2D, aCharRef.TextureID); | |||
| glPixelStorei(GL_UNPACK_ALIGNMENT, 4); | |||
| glTexSubImage2D(GL_TEXTURE_2D, 0, | |||
| x, y, aCharImage.Width, aCharImage.Height, | |||
| FORMAT_TYPES[aCharImage.Format].Format, | |||
| FORMAT_TYPES[aCharImage.Format].DataFormat, | |||
| aCharImage.Data); | |||
| end; | |||
| //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// | |||
| procedure TtsRendererOpenGLES.BeginRender; | |||
| begin | |||
| inherited BeginRender; | |||
| glColor4f(Color.r, Color.g, Color.b, Color.a); | |||
| end; | |||
| //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// | |||
| procedure TtsRendererOpenGLES.SetDrawPos(const X, Y: Integer); | |||
| begin | |||
| inherited SetDrawPos(X, Y); | |||
| UpdateUniformCharOffset; | |||
| end; | |||
| //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// | |||
| procedure TtsRendererOpenGLES.MoveDrawPos(const X, Y: Integer); | |||
| begin | |||
| inherited MoveDrawPos(X, Y); | |||
| UpdateUniformCharOffset; | |||
| end; | |||
| //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// | |||
| procedure TtsRendererOpenGLES.SetColor(const aColor: TtsColor4f); | |||
| begin | |||
| inherited SetColor(aColor); | |||
| glColor4f(Color.r, Color.g, Color.b, Color.a); | |||
| end; | |||
| //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// | |||
| procedure TtsRendererOpenGLES.Render(const aCharRef: TtsCharRenderRef); | |||
| var | |||
| ref: TtsCharRenderRefOpenGL; | |||
| begin | |||
| if Assigned(aCharRef) and (aCharRef is TtsCharRenderRefOpenGL) then begin | |||
| ref := (aCharRef as TtsCharRenderRefOpenGL); | |||
| glBindTexture(GL_TEXTURE_2D, ref.TextureID); | |||
| glBindBuffer(GL_ARRAY_BUFFER, fVBO); | |||
| glEnableVertexAttribArray(ATTRIB_LOCATION_POSITION); | |||
| glVertexAttribPointer(ATTRIB_LOCATION_POSITION, 2, GL_FLOAT, false, SizeOf(TVertex), Pointer(0)); | |||
| glEnableVertexAttribArray(ATTRIB_LOCATION_TEXCOORD); | |||
| glVertexAttribPointer(ATTRIB_LOCATION_TEXCOORD, 2, GL_FLOAT, false, SizeOf(TVertex), Pointer(8)); | |||
| glUseProgram(fShaderProgram); | |||
| if (fCharPosLocation >= 0) then | |||
| glUniformMatrix4fv(fCharPosLocation, 1, false, @ref.VertMat); | |||
| if (fCharTexPosLocation >= 0) then | |||
| glUniformMatrix4fv(fCharTexPosLocation, 1, false, @ref.TexMat); | |||
| glDrawArrays(GL_TRIANGLE_STRIP, 0, 4); | |||
| glUseProgram(0); | |||
| glDisableVertexAttribArray(ATTRIB_LOCATION_TEXCOORD); | |||
| glDisableVertexAttribArray(ATTRIB_LOCATION_POSITION); | |||
| glBindTexture(GL_TEXTURE_2D, 0); | |||
| end; | |||
| end; | |||
| //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// | |||
| constructor TtsRendererOpenGLES.Create(const aContext: TtsContext; const aFormat: TtsFormat); | |||
| var | |||
| viewport: array[0..3] of Integer; | |||
| begin | |||
| inherited Create(aContext, aFormat); | |||
| glGenBuffers(1, @fVBO); | |||
| glBindBuffer(GL_ARRAY_BUFFER, fVBO); | |||
| glBufferData(GL_ARRAY_BUFFER, SizeOf(TVertex) * Length(VBO_DATA), @VBO_DATA[0].pos[0], GL_STATIC_DRAW); | |||
| glBindBuffer(GL_ARRAY_BUFFER, 0); | |||
| glGetIntegerv(GL_VIEWPORT, @viewport); | |||
| fProjMatrix := tsMatrix4f( | |||
| tsVector4f(2 / viewport[2], 0.0, 0.0, 0.0), | |||
| tsVector4f( 0.0, -2 / viewport[3], 0.0, 0.0), | |||
| tsVector4f( 0.0, 0.0, -0.1, 0.0), | |||
| tsVector4f( -1.0, 1.0, 0.0, 1.0)); | |||
| fModelViewMatrix := TS_MATRIX_IDENTITY; | |||
| fShader := LoadShader; | |||
| ShaderProgram := fShader; | |||
| end; | |||
| //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// | |||
| destructor TtsRendererOpenGLES.Destroy; | |||
| begin | |||
| glDeleteBuffers(1, @fVBO); | |||
| glDeleteProgram(fShader); | |||
| inherited Destroy; | |||
| end; | |||
| end. | |||
| @@ -159,6 +159,9 @@ type | |||
| end; | |||
| PtsColor4ub = ^TtsColor4ub; | |||
| TtsVector4f = array[0..3] of Single; | |||
| TtsMatrix4f = array[0..3] of TtsVector4f; | |||
| TtsTextMetric = packed record | |||
| Ascent: Integer; | |||
| Descent: Integer; | |||
| @@ -179,10 +182,15 @@ const | |||
| TS_MODES_MODULATE_ALL: TtsImageModes = (tsModeModulate, tsModeModulate, tsModeModulate, tsModeModulate); | |||
| TS_MODES_MODULATE_ALPHA: TtsImageModes = (tsModeReplace, tsModeReplace, tsModeReplace, tsModeModulate); | |||
| TS_MATRIX_IDENTITY: TtsMatrix4f = ((1, 0, 0, 0), (0, 1, 0, 0), (0, 0, 1, 0), (0, 0, 0, 1)); | |||
| function tsColor4f(r, g, b, a: Single): TtsColor4f; | |||
| function tsModes(r, g, b, a: TtsImageMode): TtsImageModes; | |||
| function tsRect(const l, t, r, b: Integer): TtsRect; | |||
| function tsPosition(const x, y: Integer): TtsPosition; | |||
| function tsPositionF(const x, y: Single): TtsPositionF; | |||
| function tsVector4f(X, Y, Z, W: Single): TtsVector4f; | |||
| function tsMatrix4f(X, Y, Z, P: TtsVector4f): TtsMatrix4f; | |||
| function tsFormatSize(const aFormat: TtsFormat): Integer; | |||
| procedure tsFormatMap(const aFormat: TtsFormat; var aData: PByte; const aColor: TtsColor4f); | |||
| @@ -235,6 +243,31 @@ begin | |||
| result.y := y; | |||
| end; | |||
| //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// | |||
| function tsPositionF(const x, y: Single): TtsPositionF; | |||
| begin | |||
| result.x := x; | |||
| result.y := y; | |||
| end; | |||
| //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// | |||
| function tsVector4f(X, Y, Z, W: Single): TtsVector4f; | |||
| begin | |||
| result[0] := X; | |||
| result[1] := Y; | |||
| result[2] := Z; | |||
| result[3] := W; | |||
| end; | |||
| //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// | |||
| function tsMatrix4f(X, Y, Z, P: TtsVector4f): TtsMatrix4f; | |||
| begin | |||
| result[0] := X; | |||
| result[1] := Y; | |||
| result[2] := Z; | |||
| result[3] := P; | |||
| end; | |||
| //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// | |||
| function tsFormatSize(const aFormat: TtsFormat): Integer; | |||
| begin | |||