Using idTech 5 fonts for gui and console.
|
Before Width: | Height: | Size: 1.0 MiB After Width: | Height: | Size: 1.0 MiB |
|
Before Width: | Height: | Size: 1.0 MiB After Width: | Height: | Size: 1.0 MiB |
|
Before Width: | Height: | Size: 1.0 MiB After Width: | Height: | Size: 1.0 MiB |
|
Before Width: | Height: | Size: 1.0 MiB After Width: | Height: | Size: 1.0 MiB |
|
Before Width: | Height: | Size: 1.0 MiB After Width: | Height: | Size: 1.0 MiB |
|
After Width: | Height: | Size: 1012 KiB |
|
After Width: | Height: | Size: 723 KiB |
@@ -7,9 +7,9 @@
|
||||
|
||||
This file has been generated with the Type Info Generator v1.1 (c) 2004 id Software
|
||||
|
||||
1204 constants
|
||||
1199 constants
|
||||
135 enums
|
||||
622 classes/structs/unions
|
||||
624 classes/structs/unions
|
||||
38 templates
|
||||
7 max inheritance level for 'idAI_Vagary'
|
||||
|
||||
@@ -569,11 +569,6 @@ static constantInfo_t constantInfo[] = {
|
||||
{ "int", "DXR_MATERIAL_PREVIEW", "3" },
|
||||
{ "int", "DXR_WIDGET_0", "4" },
|
||||
{ "int", "DXR_WORLD_NUM", "5" },
|
||||
{ "const int", "GLYPH_START", "0" },
|
||||
{ "const int", "GLYPH_END", "255" },
|
||||
{ "const int", "GLYPH_CHARSTART", "32" },
|
||||
{ "const int", "GLYPH_CHAREND", "127" },
|
||||
{ "const int", "GLYPHS_PER_FONT", "255-0+1" },
|
||||
{ "const int", "SMALLCHAR_WIDTH", "8" },
|
||||
{ "const int", "SMALLCHAR_HEIGHT", "16" },
|
||||
{ "const int", "BIGCHAR_WIDTH", "16" },
|
||||
@@ -4499,43 +4494,55 @@ static classVariableInfo_t glconfig_t_typeInfo[] = {
|
||||
{ NULL, 0 }
|
||||
};
|
||||
|
||||
static classVariableInfo_t glyphInfo_t_typeInfo[] = {
|
||||
{ "int", "height", (intptr_t)(&((glyphInfo_t *)0)->height), sizeof( ((glyphInfo_t *)0)->height ) },
|
||||
{ "int", "top", (intptr_t)(&((glyphInfo_t *)0)->top), sizeof( ((glyphInfo_t *)0)->top ) },
|
||||
{ "int", "bottom", (intptr_t)(&((glyphInfo_t *)0)->bottom), sizeof( ((glyphInfo_t *)0)->bottom ) },
|
||||
{ "int", "pitch", (intptr_t)(&((glyphInfo_t *)0)->pitch), sizeof( ((glyphInfo_t *)0)->pitch ) },
|
||||
{ "int", "xSkip", (intptr_t)(&((glyphInfo_t *)0)->xSkip), sizeof( ((glyphInfo_t *)0)->xSkip ) },
|
||||
{ "int", "imageWidth", (intptr_t)(&((glyphInfo_t *)0)->imageWidth), sizeof( ((glyphInfo_t *)0)->imageWidth ) },
|
||||
{ "int", "imageHeight", (intptr_t)(&((glyphInfo_t *)0)->imageHeight), sizeof( ((glyphInfo_t *)0)->imageHeight ) },
|
||||
{ "float", "s", (intptr_t)(&((glyphInfo_t *)0)->s), sizeof( ((glyphInfo_t *)0)->s ) },
|
||||
{ "float", "t", (intptr_t)(&((glyphInfo_t *)0)->t), sizeof( ((glyphInfo_t *)0)->t ) },
|
||||
{ "float", "s2", (intptr_t)(&((glyphInfo_t *)0)->s2), sizeof( ((glyphInfo_t *)0)->s2 ) },
|
||||
{ "float", "t2", (intptr_t)(&((glyphInfo_t *)0)->t2), sizeof( ((glyphInfo_t *)0)->t2 ) },
|
||||
{ "const idMaterial *", "glyph", (intptr_t)(&((glyphInfo_t *)0)->glyph), sizeof( ((glyphInfo_t *)0)->glyph ) },
|
||||
{ "char[32]", "shaderName", (intptr_t)(&((glyphInfo_t *)0)->shaderName), sizeof( ((glyphInfo_t *)0)->shaderName ) },
|
||||
static classVariableInfo_t scaledGlyphInfo_t_typeInfo[] = {
|
||||
{ "float", "top", (intptr_t)(&((scaledGlyphInfo_t *)0)->top), sizeof( ((scaledGlyphInfo_t *)0)->top ) },
|
||||
{ "float", "left", (intptr_t)(&((scaledGlyphInfo_t *)0)->left), sizeof( ((scaledGlyphInfo_t *)0)->left ) },
|
||||
{ "float", "width", (intptr_t)(&((scaledGlyphInfo_t *)0)->width), sizeof( ((scaledGlyphInfo_t *)0)->width ) },
|
||||
{ "float", "height", (intptr_t)(&((scaledGlyphInfo_t *)0)->height), sizeof( ((scaledGlyphInfo_t *)0)->height ) },
|
||||
{ "float", "xSkip", (intptr_t)(&((scaledGlyphInfo_t *)0)->xSkip), sizeof( ((scaledGlyphInfo_t *)0)->xSkip ) },
|
||||
{ "float", "s1", (intptr_t)(&((scaledGlyphInfo_t *)0)->s1), sizeof( ((scaledGlyphInfo_t *)0)->s1 ) },
|
||||
{ "float", "t1", (intptr_t)(&((scaledGlyphInfo_t *)0)->t1), sizeof( ((scaledGlyphInfo_t *)0)->t1 ) },
|
||||
{ "float", "s2", (intptr_t)(&((scaledGlyphInfo_t *)0)->s2), sizeof( ((scaledGlyphInfo_t *)0)->s2 ) },
|
||||
{ "float", "t2", (intptr_t)(&((scaledGlyphInfo_t *)0)->t2), sizeof( ((scaledGlyphInfo_t *)0)->t2 ) },
|
||||
{ "const idMaterial *", "material", (intptr_t)(&((scaledGlyphInfo_t *)0)->material), sizeof( ((scaledGlyphInfo_t *)0)->material ) },
|
||||
{ NULL, 0 }
|
||||
};
|
||||
|
||||
static classVariableInfo_t fontInfo_t_typeInfo[] = {
|
||||
{ "glyphInfo_t[256]", "glyphs", (intptr_t)(&((fontInfo_t *)0)->glyphs), sizeof( ((fontInfo_t *)0)->glyphs ) },
|
||||
{ "float", "glyphScale", (intptr_t)(&((fontInfo_t *)0)->glyphScale), sizeof( ((fontInfo_t *)0)->glyphScale ) },
|
||||
{ "char[64]", "name", (intptr_t)(&((fontInfo_t *)0)->name), sizeof( ((fontInfo_t *)0)->name ) },
|
||||
static classVariableInfo_t idFont_glyphInfo_t_typeInfo[] = {
|
||||
{ "byte", "width", (intptr_t)(&((idFont::glyphInfo_t *)0)->width), sizeof( ((idFont::glyphInfo_t *)0)->width ) },
|
||||
{ "byte", "height", (intptr_t)(&((idFont::glyphInfo_t *)0)->height), sizeof( ((idFont::glyphInfo_t *)0)->height ) },
|
||||
{ "char", "top", (intptr_t)(&((idFont::glyphInfo_t *)0)->top), sizeof( ((idFont::glyphInfo_t *)0)->top ) },
|
||||
{ "char", "left", (intptr_t)(&((idFont::glyphInfo_t *)0)->left), sizeof( ((idFont::glyphInfo_t *)0)->left ) },
|
||||
{ "byte", "xSkip", (intptr_t)(&((idFont::glyphInfo_t *)0)->xSkip), sizeof( ((idFont::glyphInfo_t *)0)->xSkip ) },
|
||||
{ "uint16_t", "s", (intptr_t)(&((idFont::glyphInfo_t *)0)->s), sizeof( ((idFont::glyphInfo_t *)0)->s ) },
|
||||
{ "uint16_t", "t", (intptr_t)(&((idFont::glyphInfo_t *)0)->t), sizeof( ((idFont::glyphInfo_t *)0)->t ) },
|
||||
{ NULL, 0 }
|
||||
};
|
||||
|
||||
static classVariableInfo_t fontInfoEx_t_typeInfo[] = {
|
||||
{ "fontInfo_t", "fontInfoSmall", (intptr_t)(&((fontInfoEx_t *)0)->fontInfoSmall), sizeof( ((fontInfoEx_t *)0)->fontInfoSmall ) },
|
||||
{ "fontInfo_t", "fontInfoMedium", (intptr_t)(&((fontInfoEx_t *)0)->fontInfoMedium), sizeof( ((fontInfoEx_t *)0)->fontInfoMedium ) },
|
||||
{ "fontInfo_t", "fontInfoLarge", (intptr_t)(&((fontInfoEx_t *)0)->fontInfoLarge), sizeof( ((fontInfoEx_t *)0)->fontInfoLarge ) },
|
||||
{ "int", "maxHeight", (intptr_t)(&((fontInfoEx_t *)0)->maxHeight), sizeof( ((fontInfoEx_t *)0)->maxHeight ) },
|
||||
{ "int", "maxWidth", (intptr_t)(&((fontInfoEx_t *)0)->maxWidth), sizeof( ((fontInfoEx_t *)0)->maxWidth ) },
|
||||
{ "int", "maxHeightSmall", (intptr_t)(&((fontInfoEx_t *)0)->maxHeightSmall), sizeof( ((fontInfoEx_t *)0)->maxHeightSmall ) },
|
||||
{ "int", "maxWidthSmall", (intptr_t)(&((fontInfoEx_t *)0)->maxWidthSmall), sizeof( ((fontInfoEx_t *)0)->maxWidthSmall ) },
|
||||
{ "int", "maxHeightMedium", (intptr_t)(&((fontInfoEx_t *)0)->maxHeightMedium), sizeof( ((fontInfoEx_t *)0)->maxHeightMedium ) },
|
||||
{ "int", "maxWidthMedium", (intptr_t)(&((fontInfoEx_t *)0)->maxWidthMedium), sizeof( ((fontInfoEx_t *)0)->maxWidthMedium ) },
|
||||
{ "int", "maxHeightLarge", (intptr_t)(&((fontInfoEx_t *)0)->maxHeightLarge), sizeof( ((fontInfoEx_t *)0)->maxHeightLarge ) },
|
||||
{ "int", "maxWidthLarge", (intptr_t)(&((fontInfoEx_t *)0)->maxWidthLarge), sizeof( ((fontInfoEx_t *)0)->maxWidthLarge ) },
|
||||
{ "char[64]", "name", (intptr_t)(&((fontInfoEx_t *)0)->name), sizeof( ((fontInfoEx_t *)0)->name ) },
|
||||
static classVariableInfo_t idFont_fontInfo_t_oldInfo_t_typeInfo[] = {
|
||||
{ "float", "maxWidth", (intptr_t)(&((idFont::fontInfo_t::oldInfo_t *)0)->maxWidth), sizeof( ((idFont::fontInfo_t::oldInfo_t *)0)->maxWidth ) },
|
||||
{ "float", "maxHeight", (intptr_t)(&((idFont::fontInfo_t::oldInfo_t *)0)->maxHeight), sizeof( ((idFont::fontInfo_t::oldInfo_t *)0)->maxHeight ) },
|
||||
{ NULL, 0 }
|
||||
};
|
||||
|
||||
static classVariableInfo_t idFont_fontInfo_t_typeInfo[] = {
|
||||
{ "idFont::fontInfo_t::oldInfo_t[3]", "oldInfo", (intptr_t)(&((idFont::fontInfo_t *)0)->oldInfo), sizeof( ((idFont::fontInfo_t *)0)->oldInfo ) },
|
||||
{ "short", "ascender", (intptr_t)(&((idFont::fontInfo_t *)0)->ascender), sizeof( ((idFont::fontInfo_t *)0)->ascender ) },
|
||||
{ "short", "descender", (intptr_t)(&((idFont::fontInfo_t *)0)->descender), sizeof( ((idFont::fontInfo_t *)0)->descender ) },
|
||||
{ "short", "numGlyphs", (intptr_t)(&((idFont::fontInfo_t *)0)->numGlyphs), sizeof( ((idFont::fontInfo_t *)0)->numGlyphs ) },
|
||||
{ "glyphInfo_t *", "glyphData", (intptr_t)(&((idFont::fontInfo_t *)0)->glyphData), sizeof( ((idFont::fontInfo_t *)0)->glyphData ) },
|
||||
{ "uint32_t *", "charIndex", (intptr_t)(&((idFont::fontInfo_t *)0)->charIndex), sizeof( ((idFont::fontInfo_t *)0)->charIndex ) },
|
||||
{ "char[128]", "ascii", (intptr_t)(&((idFont::fontInfo_t *)0)->ascii), sizeof( ((idFont::fontInfo_t *)0)->ascii ) },
|
||||
{ "int", "materialWidth", (intptr_t)(&((idFont::fontInfo_t *)0)->materialWidth), sizeof( ((idFont::fontInfo_t *)0)->materialWidth ) },
|
||||
{ "int", "materialHeight", (intptr_t)(&((idFont::fontInfo_t *)0)->materialHeight), sizeof( ((idFont::fontInfo_t *)0)->materialHeight ) },
|
||||
{ "const idMaterial *", "material", (intptr_t)(&((idFont::fontInfo_t *)0)->material), sizeof( ((idFont::fontInfo_t *)0)->material ) },
|
||||
{ NULL, 0 }
|
||||
};
|
||||
|
||||
static classVariableInfo_t idFont_typeInfo[] = {
|
||||
{ "idStr", "name", (intptr_t)(&((idFont *)0)->name), sizeof( ((idFont *)0)->name ) },
|
||||
{ "idFont *", "alias", (intptr_t)(&((idFont *)0)->alias), sizeof( ((idFont *)0)->alias ) },
|
||||
{ "fontInfo_t *", "fontInfo", (intptr_t)(&((idFont *)0)->fontInfo), sizeof( ((idFont *)0)->fontInfo ) },
|
||||
{ NULL, 0 }
|
||||
};
|
||||
|
||||
@@ -4677,8 +4684,7 @@ static classVariableInfo_t idDeviceContext_typeInfo[] = {
|
||||
{ "const idMaterial *[2]", "cursorImages", (intptr_t)(&((idDeviceContext *)0)->cursorImages), sizeof( ((idDeviceContext *)0)->cursorImages ) },
|
||||
{ "const idMaterial *[7]", "scrollBarImages", (intptr_t)(&((idDeviceContext *)0)->scrollBarImages), sizeof( ((idDeviceContext *)0)->scrollBarImages ) },
|
||||
{ "const idMaterial *", "whiteImage", (intptr_t)(&((idDeviceContext *)0)->whiteImage), sizeof( ((idDeviceContext *)0)->whiteImage ) },
|
||||
{ "fontInfoEx_t *", "activeFont", (intptr_t)(&((idDeviceContext *)0)->activeFont), sizeof( ((idDeviceContext *)0)->activeFont ) },
|
||||
{ "fontInfo_t *", "useFont", (intptr_t)(&((idDeviceContext *)0)->useFont), sizeof( ((idDeviceContext *)0)->useFont ) },
|
||||
{ "idFont *", "activeFont", (intptr_t)(&((idDeviceContext *)0)->activeFont), sizeof( ((idDeviceContext *)0)->activeFont ) },
|
||||
{ "idStr", "fontName", (intptr_t)(&((idDeviceContext *)0)->fontName), sizeof( ((idDeviceContext *)0)->fontName ) },
|
||||
{ "float", "xScale", (intptr_t)(&((idDeviceContext *)0)->xScale), sizeof( ((idDeviceContext *)0)->xScale ) },
|
||||
{ "float", "yScale", (intptr_t)(&((idDeviceContext *)0)->yScale), sizeof( ((idDeviceContext *)0)->yScale ) },
|
||||
@@ -5312,11 +5318,11 @@ static classVariableInfo_t frameLookup_t_typeInfo[] = {
|
||||
{ NULL, 0 }
|
||||
};
|
||||
|
||||
static classVariableInfo_t class_290_class_290_typeInfo[] = {
|
||||
// { "const idSoundShader *", "soundShader", (intptr_t)(&((class_290::class_290 *)0)->soundShader), sizeof( ((class_290::class_290 *)0)->soundShader ) },
|
||||
// { "const function_t *", "function", (intptr_t)(&((class_290::class_290 *)0)->function), sizeof( ((class_290::class_290 *)0)->function ) },
|
||||
// { "const idDeclSkin *", "skin", (intptr_t)(&((class_290::class_290 *)0)->skin), sizeof( ((class_290::class_290 *)0)->skin ) },
|
||||
// { "int", "index", (intptr_t)(&((class_290::class_290 *)0)->index), sizeof( ((class_290::class_290 *)0)->index ) },
|
||||
static classVariableInfo_t class_292_class_292_typeInfo[] = {
|
||||
// { "const idSoundShader *", "soundShader", (intptr_t)(&((class_292::class_292 *)0)->soundShader), sizeof( ((class_292::class_292 *)0)->soundShader ) },
|
||||
// { "const function_t *", "function", (intptr_t)(&((class_292::class_292 *)0)->function), sizeof( ((class_292::class_292 *)0)->function ) },
|
||||
// { "const idDeclSkin *", "skin", (intptr_t)(&((class_292::class_292 *)0)->skin), sizeof( ((class_292::class_292 *)0)->skin ) },
|
||||
// { "int", "index", (intptr_t)(&((class_292::class_292 *)0)->index), sizeof( ((class_292::class_292 *)0)->index ) },
|
||||
{ NULL, 0 }
|
||||
};
|
||||
|
||||
@@ -9264,9 +9270,11 @@ static classTypeInfo_t classTypeInfo[] = {
|
||||
{ "idRenderModel", "", sizeof(idRenderModel), idRenderModel_typeInfo },
|
||||
{ "idRenderModelManager", "", sizeof(idRenderModelManager), idRenderModelManager_typeInfo },
|
||||
{ "glconfig_t", "", sizeof(glconfig_t), glconfig_t_typeInfo },
|
||||
{ "glyphInfo_t", "", sizeof(glyphInfo_t), glyphInfo_t_typeInfo },
|
||||
{ "fontInfo_t", "", sizeof(fontInfo_t), fontInfo_t_typeInfo },
|
||||
{ "fontInfoEx_t", "", sizeof(fontInfoEx_t), fontInfoEx_t_typeInfo },
|
||||
{ "scaledGlyphInfo_t", "", sizeof(scaledGlyphInfo_t), scaledGlyphInfo_t_typeInfo },
|
||||
{ "idFont::glyphInfo_t", "", sizeof(idFont::glyphInfo_t), idFont_glyphInfo_t_typeInfo },
|
||||
{ "idFont::fontInfo_t::oldInfo_t", "", sizeof(idFont::fontInfo_t::oldInfo_t), idFont_fontInfo_t_oldInfo_t_typeInfo },
|
||||
{ "idFont::fontInfo_t", "", sizeof(idFont::fontInfo_t), idFont_fontInfo_t_typeInfo },
|
||||
{ "idFont", "", sizeof(idFont), idFont_typeInfo },
|
||||
{ "idRenderSystem", "", sizeof(idRenderSystem), idRenderSystem_typeInfo },
|
||||
{ "renderGlobalFog_t", "", sizeof(renderGlobalFog_t), renderGlobalFog_t_typeInfo },
|
||||
{ "renderEntity_t", "", sizeof(renderEntity_t), renderEntity_t_typeInfo },
|
||||
@@ -9351,7 +9359,7 @@ static classTypeInfo_t classTypeInfo[] = {
|
||||
{ "jointAnimInfo_t", "", sizeof(jointAnimInfo_t), jointAnimInfo_t_typeInfo },
|
||||
{ "jointMod_t", "", sizeof(jointMod_t), jointMod_t_typeInfo },
|
||||
{ "frameLookup_t", "", sizeof(frameLookup_t), frameLookup_t_typeInfo },
|
||||
// { "class_290::class_290", "", sizeof(class_290::class_290), class_290_class_290_typeInfo },
|
||||
// { "class_292::class_292", "", sizeof(class_292::class_292), class_292_class_292_typeInfo },
|
||||
{ "frameCommand_t", "", sizeof(frameCommand_t), frameCommand_t_typeInfo },
|
||||
{ "animFlags_t", "", sizeof(animFlags_t), animFlags_t_typeInfo },
|
||||
{ "idModelExport", "", sizeof(idModelExport), idModelExport_typeInfo },
|
||||
|
||||
@@ -358,6 +358,7 @@
|
||||
<ClInclude Include="framework\Common_local.h" />
|
||||
<ClInclude Include="framework\Compressor.h" />
|
||||
<ClInclude Include="framework\Console.h" />
|
||||
<ClInclude Include="framework\ConsoleHistory.h" />
|
||||
<ClInclude Include="framework\CVarSystem.h" />
|
||||
<ClInclude Include="framework\DeclAF.h" />
|
||||
<ClInclude Include="framework\DeclEntityDef.h" />
|
||||
@@ -389,6 +390,7 @@
|
||||
<ClInclude Include="idlib\precompiled.h" />
|
||||
<ClInclude Include="renderer\Cinematic.h" />
|
||||
<ClInclude Include="renderer\DeviceContext.h" />
|
||||
<ClInclude Include="renderer\Font.h" />
|
||||
<ClInclude Include="renderer\glext.h" />
|
||||
<ClInclude Include="renderer\GuiModel.h" />
|
||||
<ClInclude Include="renderer\Image.h" />
|
||||
@@ -1550,6 +1552,7 @@
|
||||
<ClCompile Include="framework\Common.cpp" />
|
||||
<ClCompile Include="framework\Compressor.cpp" />
|
||||
<ClCompile Include="framework\Console.cpp" />
|
||||
<ClCompile Include="framework\ConsoleHistory.cpp" />
|
||||
<ClCompile Include="framework\CVarSystem.cpp" />
|
||||
<ClCompile Include="framework\DeclAF.cpp" />
|
||||
<ClCompile Include="framework\DeclEntityDef.cpp" />
|
||||
@@ -1620,9 +1623,9 @@
|
||||
<ClCompile Include="renderer\RenderWorld_load.cpp" />
|
||||
<ClCompile Include="renderer\RenderWorld_portals.cpp" />
|
||||
<ClCompile Include="renderer\RenderWorld_terrain.cpp" />
|
||||
<ClCompile Include="renderer\Font.cpp" />
|
||||
<ClCompile Include="renderer\tr_backend.cpp" />
|
||||
<ClCompile Include="renderer\tr_deform.cpp" />
|
||||
<ClCompile Include="renderer\tr_font.cpp" />
|
||||
<ClCompile Include="renderer\tr_guisurf.cpp" />
|
||||
<ClCompile Include="renderer\tr_light.cpp" />
|
||||
<ClCompile Include="renderer\tr_masked_occlusion.cpp" />
|
||||
|
||||
@@ -156,6 +156,9 @@
|
||||
<ClInclude Include="framework\Console.h">
|
||||
<Filter>Framework</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="framework\ConsoleHistory.h">
|
||||
<Filter>Framework</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="framework\CVarSystem.h">
|
||||
<Filter>Framework</Filter>
|
||||
</ClInclude>
|
||||
@@ -576,6 +579,9 @@
|
||||
<ClInclude Include="renderer\DeviceContext.h">
|
||||
<Filter>Renderer</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="renderer\Font.h">
|
||||
<Filter>Renderer</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="tools\radiant\OutlinerDlg.h">
|
||||
<Filter>Tools\Radiant</Filter>
|
||||
</ClInclude>
|
||||
@@ -677,6 +683,9 @@
|
||||
<ClCompile Include="framework\Console.cpp">
|
||||
<Filter>Framework</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="framework\ConsoleHistory.cpp">
|
||||
<Filter>Framework</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="framework\CVarSystem.cpp">
|
||||
<Filter>Framework</Filter>
|
||||
</ClCompile>
|
||||
@@ -809,7 +818,7 @@
|
||||
<ClCompile Include="renderer\tr_deform.cpp">
|
||||
<Filter>Renderer</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="renderer\tr_font.cpp">
|
||||
<ClCompile Include="renderer\Font.cpp">
|
||||
<Filter>Renderer</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="renderer\tr_guisurf.cpp">
|
||||
|
||||
@@ -29,6 +29,8 @@ If you have questions concerning this license or the applicable additional terms
|
||||
#include "precompiled.h"
|
||||
#pragma hdrstop
|
||||
|
||||
#include "ConsoleHistory.h"
|
||||
|
||||
void SCR_DrawTextLeftAlign( float &y, const char *text, ... ) id_attribute((format(printf,2,3)));
|
||||
void SCR_DrawTextRightAlign( float &y, const char *text, ... ) id_attribute((format(printf,2,3)));
|
||||
extern int QD3D12_GetActiveFrameGenerationMultiplier( void );
|
||||
@@ -36,14 +38,14 @@ extern const char *QD3D12_GetAdapterName( void );
|
||||
extern int QD3D12_GetVideoMemoryInfo( uint64_t *usageBytes, uint64_t *budgetBytes, uint64_t *dedicatedBytes );
|
||||
extern glconfig_t glConfig;
|
||||
|
||||
#define LINE_WIDTH 78
|
||||
#define LINE_WIDTH 160
|
||||
#define NUM_CON_TIMES 4
|
||||
#define CON_TEXTSIZE 0x30000
|
||||
#define TOTAL_LINES (CON_TEXTSIZE / LINE_WIDTH)
|
||||
#define CONSOLE_FIRSTREPEAT 200
|
||||
#define CONSOLE_REPEAT 100
|
||||
|
||||
#define COMMAND_HISTORY 64
|
||||
static const char *CONSOLE_FONT_NAME = "editor";
|
||||
|
||||
// the console will query the cvar and command systems for
|
||||
// command completion information
|
||||
@@ -65,8 +67,6 @@ public:
|
||||
|
||||
//============================
|
||||
|
||||
const idMaterial * charSetShader;
|
||||
|
||||
private:
|
||||
void KeyDownEvent( int key );
|
||||
|
||||
@@ -106,12 +106,6 @@ private:
|
||||
// for transparent notify lines
|
||||
idVec4 color;
|
||||
|
||||
idEditField historyEditLines[COMMAND_HISTORY];
|
||||
|
||||
int nextHistoryLine;// the last line in the history buffer, not masked
|
||||
int historyLine; // the line being displayed from history buffer
|
||||
// will be <= nextHistoryLine
|
||||
|
||||
idEditField consoleField;
|
||||
|
||||
static idCVar con_speed;
|
||||
@@ -154,7 +148,7 @@ void SCR_DrawTextLeftAlign( float &y, const char *text, ... ) {
|
||||
va_start( argptr, text );
|
||||
idStr::vsnPrintf( string, sizeof( string ), text, argptr );
|
||||
va_end( argptr );
|
||||
renderSystem->DrawSmallStringExt( 0, y + 2, string, colorWhite, true, localConsole.charSetShader );
|
||||
renderSystem->DrawSmallStringExt( 0, y + 2, string, colorWhite, true, NULL );
|
||||
y += SMALLCHAR_HEIGHT + 4;
|
||||
}
|
||||
|
||||
@@ -169,7 +163,7 @@ void SCR_DrawTextRightAlign( float &y, const char *text, ... ) {
|
||||
va_start( argptr, text );
|
||||
int i = idStr::vsnPrintf( string, sizeof( string ), text, argptr );
|
||||
va_end( argptr );
|
||||
renderSystem->DrawSmallStringExt( 635 - i * SMALLCHAR_WIDTH, y + 2, string, colorWhite, true, localConsole.charSetShader );
|
||||
renderSystem->DrawSmallStringExt( 635 - i * SMALLCHAR_WIDTH, y + 2, string, colorWhite, true, NULL );
|
||||
y += SMALLCHAR_HEIGHT + 4;
|
||||
}
|
||||
|
||||
@@ -192,9 +186,130 @@ static const idVec4 &SCR_FrameTimeColor( int msec ) {
|
||||
return colorRed;
|
||||
}
|
||||
|
||||
static int SCR_ConsoleSmallStringWidth( const char *text );
|
||||
|
||||
static void SCR_DrawSmallStringRightAlign( float y, const idVec4 &color, const char *text ) {
|
||||
const int w = strlen( text ) * SMALLCHAR_WIDTH;
|
||||
renderSystem->DrawSmallStringExt( ( SCREEN_WIDTH - 5.0f ) - w, idMath::FtoiFast( y ) + 2, text, color, true, localConsole.charSetShader );
|
||||
const int w = SCR_ConsoleSmallStringWidth( text );
|
||||
renderSystem->DrawSmallStringExt( ( SCREEN_WIDTH - 5.0f ) - w, idMath::FtoiFast( y ) + 2, text, color, true, NULL );
|
||||
}
|
||||
|
||||
static const float SCR_CONSOLE_SMALL_FONT_SCALE = 0.255f;
|
||||
static const float SCR_CONSOLE_SMALL_CHAR_PAD = 0.75f;
|
||||
static const float SCR_CONSOLE_BIG_FONT_SCALE = 0.33f;
|
||||
static const float SCR_CONSOLE_BIG_CHAR_PAD = 0.75f;
|
||||
|
||||
static const idVec4 CONSOLE_COLOR_TEXT( 0.78f, 0.78f, 0.74f, 1.0f );
|
||||
static const idVec4 CONSOLE_COLOR_DIM_TEXT( 0.48f, 0.48f, 0.45f, 1.0f );
|
||||
static const idVec4 CONSOLE_COLOR_WARNING( 0.92f, 0.86f, 0.08f, 1.0f );
|
||||
static const idVec4 CONSOLE_COLOR_ERROR( 0.95f, 0.06f, 0.02f, 1.0f );
|
||||
static const idVec4 CONSOLE_COLOR_ORANGE( 1.0f, 0.34f, 0.02f, 1.0f );
|
||||
static const idVec4 CONSOLE_COLOR_GREEN( 0.55f, 0.82f, 0.12f, 1.0f );
|
||||
static const idVec4 CONSOLE_COLOR_COMPLETE( 0.95f, 0.18f, 0.02f, 0.35f );
|
||||
|
||||
static const idVec4 &SCR_ConsoleColorForIndex( int colorIndex ) {
|
||||
switch ( colorIndex ) {
|
||||
case ( C_COLOR_RED & 15 ):
|
||||
case ( C_COLOR_MAGENTA & 15 ):
|
||||
return CONSOLE_COLOR_ERROR;
|
||||
case ( C_COLOR_GREEN & 15 ):
|
||||
return CONSOLE_COLOR_GREEN;
|
||||
case ( C_COLOR_YELLOW & 15 ):
|
||||
return CONSOLE_COLOR_WARNING;
|
||||
case ( C_COLOR_GRAY & 15 ):
|
||||
return CONSOLE_COLOR_DIM_TEXT;
|
||||
case ( C_COLOR_BLACK & 15 ):
|
||||
return colorBlack;
|
||||
case ( C_COLOR_DEFAULT & 15 ):
|
||||
case ( C_COLOR_WHITE & 15 ):
|
||||
case ( C_COLOR_CYAN & 15 ):
|
||||
case ( C_COLOR_BLUE & 15 ):
|
||||
default:
|
||||
return CONSOLE_COLOR_TEXT;
|
||||
}
|
||||
}
|
||||
|
||||
static int SCR_ConsoleSmallStringWidth( const char *text ) {
|
||||
if ( text == NULL ) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
idFont *font = renderSystem->RegisterFont( CONSOLE_FONT_NAME );
|
||||
if ( font == NULL ) {
|
||||
return strlen( text ) * SMALLCHAR_WIDTH;
|
||||
}
|
||||
|
||||
int width = 0;
|
||||
for ( const unsigned char *s = (const unsigned char *)text; *s != '\0'; s++ ) {
|
||||
if ( idStr::IsColor( (const char *)s ) ) {
|
||||
s++;
|
||||
continue;
|
||||
}
|
||||
float advance = font->GetGlyphWidth( SCR_CONSOLE_SMALL_FONT_SCALE, *s );
|
||||
if ( advance <= 0.0f ) {
|
||||
advance = SMALLCHAR_WIDTH;
|
||||
}
|
||||
width += idMath::FtoiFast( advance + SCR_CONSOLE_SMALL_CHAR_PAD );
|
||||
}
|
||||
|
||||
return width;
|
||||
}
|
||||
|
||||
static int SCR_ConsoleBigStringWidth( const char *text ) {
|
||||
if ( text == NULL ) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
idFont *font = renderSystem->RegisterFont( CONSOLE_FONT_NAME );
|
||||
if ( font == NULL ) {
|
||||
return strlen( text ) * BIGCHAR_WIDTH;
|
||||
}
|
||||
|
||||
int width = 0;
|
||||
for ( const unsigned char *s = (const unsigned char *)text; *s != '\0'; s++ ) {
|
||||
if ( idStr::IsColor( (const char *)s ) ) {
|
||||
s++;
|
||||
continue;
|
||||
}
|
||||
float advance = font->GetGlyphWidth( SCR_CONSOLE_BIG_FONT_SCALE, *s );
|
||||
if ( advance <= 0.0f ) {
|
||||
advance = BIGCHAR_WIDTH;
|
||||
}
|
||||
width += idMath::FtoiFast( advance + SCR_CONSOLE_BIG_CHAR_PAD );
|
||||
}
|
||||
|
||||
return width;
|
||||
}
|
||||
|
||||
static void SCR_DrawConsoleTextLine( const short *text_p, int y ) {
|
||||
char run[LINE_WIDTH + 1];
|
||||
int runLen = 0;
|
||||
int runColor = idStr::ColorIndex( C_COLOR_WHITE );
|
||||
int last = LINE_WIDTH - 1;
|
||||
int penX = SMALLCHAR_WIDTH;
|
||||
|
||||
while ( last >= 0 && ( text_p[last] & 0xff ) == ' ' ) {
|
||||
last--;
|
||||
}
|
||||
|
||||
for ( int x = 0; x <= last; x++ ) {
|
||||
const int ch = text_p[x] & 0xff;
|
||||
const int color = idStr::ColorIndex( text_p[x] >> 8 );
|
||||
|
||||
if ( runLen > 0 && color != runColor ) {
|
||||
run[runLen] = '\0';
|
||||
renderSystem->DrawSmallStringExt( penX, y, run, SCR_ConsoleColorForIndex( runColor ), true, NULL );
|
||||
penX += SCR_ConsoleSmallStringWidth( run );
|
||||
runLen = 0;
|
||||
}
|
||||
|
||||
runColor = color;
|
||||
run[runLen++] = ch;
|
||||
}
|
||||
|
||||
if ( runLen > 0 ) {
|
||||
run[runLen] = '\0';
|
||||
renderSystem->DrawSmallStringExt( penX, y, run, SCR_ConsoleColorForIndex( runColor ), true, NULL );
|
||||
}
|
||||
}
|
||||
|
||||
static uint64_t SCR_BytesToMiB( uint64_t bytes ) {
|
||||
@@ -243,9 +358,9 @@ float SCR_DrawFPS( float y ) {
|
||||
} else {
|
||||
s = va( "%ifps %dms", fps, averageFrameTime );
|
||||
}
|
||||
w = strlen( s ) * BIGCHAR_WIDTH;
|
||||
w = SCR_ConsoleBigStringWidth( s );
|
||||
|
||||
renderSystem->DrawBigStringExt( (SCREEN_WIDTH - 5.0f) - w, idMath::FtoiFast(y) + 2, s, frameColor, true, localConsole.charSetShader);
|
||||
renderSystem->DrawBigStringExt( (SCREEN_WIDTH - 5.0f) - w, idMath::FtoiFast(y) + 2, s, frameColor, true, NULL);
|
||||
|
||||
y += BIGCHAR_HEIGHT + 4;
|
||||
s = va( "game cpu:%4.1fms render cpu:%4.1fms pt gpu:%4.1fms", com_lastGameFrameMsec, com_lastRenderFrameMsec, com_pathTracingGpuMsec );
|
||||
@@ -416,8 +531,6 @@ idConsoleLocal::Init
|
||||
==============
|
||||
*/
|
||||
void idConsoleLocal::Init( void ) {
|
||||
int i;
|
||||
|
||||
keyCatching = false;
|
||||
|
||||
lastKeyEvent = -1;
|
||||
@@ -427,13 +540,9 @@ void idConsoleLocal::Init( void ) {
|
||||
|
||||
consoleField.SetWidthInChars( LINE_WIDTH );
|
||||
|
||||
for ( i = 0 ; i < COMMAND_HISTORY ; i++ ) {
|
||||
historyEditLines[i].Clear();
|
||||
historyEditLines[i].SetWidthInChars( LINE_WIDTH );
|
||||
}
|
||||
|
||||
cmdSystem->AddCommand( "clear", Con_Clear_f, CMD_FL_SYSTEM, "clears the console" );
|
||||
cmdSystem->AddCommand( "conDump", Con_Dump_f, CMD_FL_SYSTEM, "dumps the console text to a file" );
|
||||
ConsoleHistory_RegisterCommands();
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -444,6 +553,7 @@ idConsoleLocal::Shutdown
|
||||
void idConsoleLocal::Shutdown( void ) {
|
||||
cmdSystem->RemoveCommand( "clear" );
|
||||
cmdSystem->RemoveCommand( "conDump" );
|
||||
ConsoleHistory_UnregisterCommands();
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -455,13 +565,8 @@ the renderSystem is initialized
|
||||
==============
|
||||
*/
|
||||
void idConsoleLocal::LoadGraphics() {
|
||||
#ifdef QUAKE4
|
||||
// jmarshall
|
||||
charSetShader = declManager->FindMaterial("fonts/english/bigchars");
|
||||
// jmarshall end
|
||||
#else
|
||||
charSetShader = declManager->FindMaterial( "textures/bigchars" );
|
||||
#endif
|
||||
consoleHistory.LoadHistoryFile();
|
||||
renderSystem->RegisterFont( CONSOLE_FONT_NAME );
|
||||
whiteShader = declManager->FindMaterial( "_white" );
|
||||
consoleShader = declManager->FindMaterial( "console" );
|
||||
}
|
||||
@@ -651,10 +756,7 @@ void idConsoleLocal::KeyDownEvent( int key ) {
|
||||
cmdSystem->BufferCommandText( CMD_EXEC_APPEND, consoleField.GetBuffer() ); // valid command
|
||||
cmdSystem->BufferCommandText( CMD_EXEC_APPEND, "\n" );
|
||||
|
||||
// copy line to history buffer
|
||||
historyEditLines[nextHistoryLine % COMMAND_HISTORY] = consoleField;
|
||||
nextHistoryLine++;
|
||||
historyLine = nextHistoryLine;
|
||||
consoleHistory.AddToHistory( consoleField.GetBuffer() );
|
||||
|
||||
consoleField.Clear();
|
||||
consoleField.SetWidthInChars( LINE_WIDTH );
|
||||
@@ -675,20 +777,19 @@ void idConsoleLocal::KeyDownEvent( int key ) {
|
||||
|
||||
if ( ( key == K_UPARROW ) ||
|
||||
( ( tolower(key) == 'p' ) && idKeyInput::IsDown( K_CTRL ) ) ) {
|
||||
if ( nextHistoryLine - historyLine < COMMAND_HISTORY && historyLine > 0 ) {
|
||||
historyLine--;
|
||||
idStr history = consoleHistory.RetrieveFromHistory( true );
|
||||
if ( !history.IsEmpty() ) {
|
||||
consoleField.SetBuffer( history.c_str() );
|
||||
}
|
||||
consoleField = historyEditLines[ historyLine % COMMAND_HISTORY ];
|
||||
return;
|
||||
}
|
||||
|
||||
if ( ( key == K_DOWNARROW ) ||
|
||||
( ( tolower( key ) == 'n' ) && idKeyInput::IsDown( K_CTRL ) ) ) {
|
||||
if ( historyLine == nextHistoryLine ) {
|
||||
return;
|
||||
idStr history = consoleHistory.RetrieveFromHistory( false );
|
||||
if ( !history.IsEmpty() ) {
|
||||
consoleField.SetBuffer( history.c_str() );
|
||||
}
|
||||
historyLine++;
|
||||
consoleField = historyEditLines[ historyLine % COMMAND_HISTORY ];
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -1019,7 +1120,7 @@ void idConsoleLocal::DrawInput() {
|
||||
autoCompleteLength = strlen( consoleField.GetBuffer() ) - consoleField.GetAutoCompleteLength();
|
||||
|
||||
if ( autoCompleteLength > 0 ) {
|
||||
renderSystem->SetColor4( .8f, .2f, .2f, .45f );
|
||||
renderSystem->SetColor( CONSOLE_COLOR_COMPLETE );
|
||||
|
||||
renderSystem->DrawStretchPic( 2 * SMALLCHAR_WIDTH + consoleField.GetAutoCompleteLength() * SMALLCHAR_WIDTH,
|
||||
y + 2, autoCompleteLength * SMALLCHAR_WIDTH, SMALLCHAR_HEIGHT - 2, 0, 0, 0, 0, whiteShader );
|
||||
@@ -1027,11 +1128,11 @@ void idConsoleLocal::DrawInput() {
|
||||
}
|
||||
}
|
||||
|
||||
renderSystem->SetColor( idStr::ColorForIndex( C_COLOR_CYAN ) );
|
||||
renderSystem->SetColor( CONSOLE_COLOR_ORANGE );
|
||||
|
||||
renderSystem->DrawSmallChar( 1 * SMALLCHAR_WIDTH, y, ']', localConsole.charSetShader );
|
||||
renderSystem->DrawSmallChar( 1 * SMALLCHAR_WIDTH, y, ']', NULL );
|
||||
|
||||
consoleField.Draw(2 * SMALLCHAR_WIDTH, y, SCREEN_WIDTH - 3 * SMALLCHAR_WIDTH, true, charSetShader );
|
||||
consoleField.Draw(2 * SMALLCHAR_WIDTH, y, SCREEN_WIDTH - 3 * SMALLCHAR_WIDTH, true, NULL );
|
||||
}
|
||||
|
||||
|
||||
@@ -1043,19 +1144,15 @@ Draws the last few lines of output transparently over the game top
|
||||
================
|
||||
*/
|
||||
void idConsoleLocal::DrawNotify() {
|
||||
int x, v;
|
||||
int v;
|
||||
short *text_p;
|
||||
int i;
|
||||
int time;
|
||||
int currentColor;
|
||||
|
||||
if ( con_noPrint.GetBool() ) {
|
||||
return;
|
||||
}
|
||||
|
||||
currentColor = idStr::ColorIndex( C_COLOR_WHITE );
|
||||
renderSystem->SetColor( idStr::ColorForIndex( currentColor ) );
|
||||
|
||||
v = 0;
|
||||
for ( i = current-NUM_CON_TIMES+1; i <= current; i++ ) {
|
||||
if ( i < 0 ) {
|
||||
@@ -1070,22 +1167,12 @@ void idConsoleLocal::DrawNotify() {
|
||||
continue;
|
||||
}
|
||||
text_p = text + (i % TOTAL_LINES)*LINE_WIDTH;
|
||||
|
||||
for ( x = 0; x < LINE_WIDTH; x++ ) {
|
||||
if ( ( text_p[x] & 0xff ) == ' ' ) {
|
||||
continue;
|
||||
}
|
||||
if ( idStr::ColorIndex(text_p[x]>>8) != currentColor ) {
|
||||
currentColor = idStr::ColorIndex(text_p[x]>>8);
|
||||
renderSystem->SetColor( idStr::ColorForIndex( currentColor ) );
|
||||
}
|
||||
renderSystem->DrawSmallChar( (x+1)*SMALLCHAR_WIDTH, v, text_p[x] & 0xff, localConsole.charSetShader );
|
||||
}
|
||||
SCR_DrawConsoleTextLine( text_p, v );
|
||||
|
||||
v += SMALLCHAR_HEIGHT;
|
||||
}
|
||||
|
||||
renderSystem->SetColor( colorCyan );
|
||||
renderSystem->SetColor( CONSOLE_COLOR_TEXT );
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -1096,13 +1183,12 @@ Draws the console with the solid background
|
||||
================
|
||||
*/
|
||||
void idConsoleLocal::DrawSolidConsole( float frac ) {
|
||||
int i, x;
|
||||
int i, x = 0;
|
||||
float y;
|
||||
int rows;
|
||||
short *text_p;
|
||||
int row;
|
||||
int lines;
|
||||
int currentColor;
|
||||
|
||||
lines = idMath::FtoiFast( SCREEN_HEIGHT * frac );
|
||||
if ( lines <= 0 ) {
|
||||
@@ -1115,29 +1201,29 @@ void idConsoleLocal::DrawSolidConsole( float frac ) {
|
||||
|
||||
// draw the background
|
||||
y = frac * SCREEN_HEIGHT - 2;
|
||||
renderSystem->SetColor( colorWhite );
|
||||
if ( y < 1.0f ) {
|
||||
y = 0.0f;
|
||||
} else {
|
||||
renderSystem->DrawStretchPic( 0, 0, SCREEN_WIDTH, y, 0, 1.0f - displayFrac, 1, 1, consoleShader );
|
||||
}
|
||||
|
||||
renderSystem->SetColor( colorCyan );
|
||||
renderSystem->SetColor( CONSOLE_COLOR_ORANGE );
|
||||
renderSystem->DrawStretchPic( 0, y, SCREEN_WIDTH, 2, 0, 0, 0, 0, whiteShader );
|
||||
renderSystem->SetColor( colorWhite );
|
||||
|
||||
// draw the version number
|
||||
|
||||
renderSystem->SetColor( idStr::ColorForIndex( C_COLOR_CYAN ) );
|
||||
|
||||
idStr version = va("%s.%i", ENGINE_VERSION, BUILD_NUMBER);
|
||||
i = version.Length();
|
||||
|
||||
for ( x = 0; x < i; x++ ) {
|
||||
renderSystem->DrawSmallChar( SCREEN_WIDTH - ( i - x ) * SMALLCHAR_WIDTH,
|
||||
(lines-(SMALLCHAR_HEIGHT+SMALLCHAR_HEIGHT/2)), version[x], localConsole.charSetShader );
|
||||
|
||||
y = lines - ( SMALLCHAR_HEIGHT * 2 ) - 6;
|
||||
if ( y < SMALLCHAR_HEIGHT ) {
|
||||
y = SMALLCHAR_HEIGHT;
|
||||
}
|
||||
|
||||
idStr compileVersion = COMPILE_VERSION;
|
||||
compileVersion.StripLeading( ' ' );
|
||||
SCR_DrawSmallStringRightAlign( y, CONSOLE_COLOR_ERROR, GAME_NAME );
|
||||
SCR_DrawSmallStringRightAlign( y + SMALLCHAR_HEIGHT, CONSOLE_COLOR_ERROR, va( "Date: %s", compileVersion.c_str() ) );
|
||||
|
||||
|
||||
// draw the text
|
||||
vislines = lines;
|
||||
@@ -1148,9 +1234,9 @@ void idConsoleLocal::DrawSolidConsole( float frac ) {
|
||||
// draw from the bottom up
|
||||
if ( display != current ) {
|
||||
// draw arrows to show the buffer is backscrolled
|
||||
renderSystem->SetColor( idStr::ColorForIndex( C_COLOR_CYAN ) );
|
||||
renderSystem->SetColor( CONSOLE_COLOR_ORANGE );
|
||||
for ( x = 0; x < LINE_WIDTH; x += 4 ) {
|
||||
renderSystem->DrawSmallChar( (x+1)*SMALLCHAR_WIDTH, idMath::FtoiFast( y ), '^', localConsole.charSetShader );
|
||||
renderSystem->DrawSmallChar( (x+1)*SMALLCHAR_WIDTH, idMath::FtoiFast( y ), '^', NULL );
|
||||
}
|
||||
y -= SMALLCHAR_HEIGHT;
|
||||
rows--;
|
||||
@@ -1162,9 +1248,6 @@ void idConsoleLocal::DrawSolidConsole( float frac ) {
|
||||
row--;
|
||||
}
|
||||
|
||||
currentColor = idStr::ColorIndex( C_COLOR_WHITE );
|
||||
renderSystem->SetColor( idStr::ColorForIndex( currentColor ) );
|
||||
|
||||
for ( i = 0; i < rows; i++, y -= SMALLCHAR_HEIGHT, row-- ) {
|
||||
if ( row < 0 ) {
|
||||
break;
|
||||
@@ -1175,24 +1258,13 @@ void idConsoleLocal::DrawSolidConsole( float frac ) {
|
||||
}
|
||||
|
||||
text_p = text + (row % TOTAL_LINES)*LINE_WIDTH;
|
||||
|
||||
for ( x = 0; x < LINE_WIDTH; x++ ) {
|
||||
if ( ( text_p[x] & 0xff ) == ' ' ) {
|
||||
continue;
|
||||
}
|
||||
|
||||
if ( idStr::ColorIndex(text_p[x]>>8) != currentColor ) {
|
||||
currentColor = idStr::ColorIndex(text_p[x]>>8);
|
||||
renderSystem->SetColor( idStr::ColorForIndex( currentColor ) );
|
||||
}
|
||||
renderSystem->DrawSmallChar( (x+1)*SMALLCHAR_WIDTH, idMath::FtoiFast( y ), text_p[x] & 0xff, localConsole.charSetShader );
|
||||
}
|
||||
SCR_DrawConsoleTextLine( text_p, idMath::FtoiFast( y ) );
|
||||
}
|
||||
|
||||
// draw the input prompt, user text, and cursor if desired
|
||||
DrawInput();
|
||||
|
||||
renderSystem->SetColor( colorCyan );
|
||||
renderSystem->SetColor( CONSOLE_COLOR_TEXT );
|
||||
}
|
||||
|
||||
|
||||
@@ -1206,7 +1278,7 @@ ForceFullScreen is used by the editor
|
||||
void idConsoleLocal::Draw( bool forceFullScreen ) {
|
||||
float y = 0.0f;
|
||||
|
||||
if ( !charSetShader ) {
|
||||
if ( !whiteShader || !consoleShader ) {
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
@@ -523,6 +523,42 @@ void idEditField::SetBuffer( const char *buf ) {
|
||||
SetCursor( strlen( buffer ) );
|
||||
}
|
||||
|
||||
static int EditFieldSmallStringWidth( const char *text, int length ) {
|
||||
if ( text == NULL || length <= 0 ) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
idFont *font = renderSystem->RegisterFont( "editor" );
|
||||
if ( font == NULL ) {
|
||||
return length * SMALLCHAR_WIDTH;
|
||||
}
|
||||
|
||||
int width = 0;
|
||||
for ( int i = 0; text[i] != '\0' && i < length; i++ ) {
|
||||
if ( idStr::IsColor( text + i ) ) {
|
||||
i++;
|
||||
continue;
|
||||
}
|
||||
float advance = font->GetGlyphWidth( 0.255f, (const unsigned char)text[i] );
|
||||
if ( advance <= 0.0f ) {
|
||||
advance = SMALLCHAR_WIDTH;
|
||||
}
|
||||
width += idMath::FtoiFast( advance + 0.75f );
|
||||
}
|
||||
return width;
|
||||
}
|
||||
|
||||
static int EditFieldSmallCharLeft( int ch ) {
|
||||
idFont *font = renderSystem->RegisterFont( "editor" );
|
||||
if ( font == NULL ) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
scaledGlyphInfo_t glyphInfo;
|
||||
font->GetScaledGlyph( 0.255f, ch & 255, glyphInfo );
|
||||
return idMath::FtoiFast( glyphInfo.left );
|
||||
}
|
||||
|
||||
/*
|
||||
===============
|
||||
idEditField::Draw
|
||||
@@ -534,9 +570,6 @@ void idEditField::Draw( int x, int y, int width, bool showCursor, const idMateri
|
||||
int prestep;
|
||||
int cursorChar;
|
||||
char str[MAX_EDIT_LINE];
|
||||
int size;
|
||||
|
||||
size = SMALLCHAR_WIDTH;
|
||||
|
||||
drawLen = widthInChars;
|
||||
len = strlen( buffer ) + 1;
|
||||
@@ -587,9 +620,9 @@ void idEditField::Draw( int x, int y, int width, bool showCursor, const idMateri
|
||||
}
|
||||
|
||||
if ( idKeyInput::GetOverstrikeMode() ) {
|
||||
cursorChar = 11;
|
||||
cursorChar = '_';
|
||||
} else {
|
||||
cursorChar = 10;
|
||||
cursorChar = '|';
|
||||
}
|
||||
|
||||
// Move the cursor back to account for color codes
|
||||
@@ -600,5 +633,5 @@ void idEditField::Draw( int x, int y, int width, bool showCursor, const idMateri
|
||||
}
|
||||
}
|
||||
|
||||
renderSystem->DrawSmallChar( x + ( cursor - prestep ) * size, y, cursorChar, shader );
|
||||
renderSystem->DrawSmallChar( x + EditFieldSmallStringWidth( str, cursor - prestep ) - EditFieldSmallCharLeft( cursorChar ), y, cursorChar, shader );
|
||||
}
|
||||
|
||||
@@ -43,6 +43,7 @@ If you have questions concerning this license or the applicable additional terms
|
||||
#endif
|
||||
|
||||
#define ENGINE_VERSION GAME_NAME " " __DATE__ " " __TIME__ // printed in console
|
||||
#define COMPILE_VERSION " " __DATE__ " " __TIME__
|
||||
|
||||
// paths
|
||||
#define CD_BASEDIR "Doom"
|
||||
|
||||
@@ -45,31 +45,55 @@ idVec4 idDeviceContext::colorNone;
|
||||
idCVar gui_smallFontLimit( "gui_smallFontLimit", "0.30", CVAR_GUI | CVAR_ARCHIVE, "" );
|
||||
idCVar gui_mediumFontLimit( "gui_mediumFontLimit", "0.60", CVAR_GUI | CVAR_ARCHIVE, "" );
|
||||
|
||||
static uint32_t DC_ReadUTF8Char( const char *text, int &index ) {
|
||||
const unsigned char *s = (const unsigned char *)text + index;
|
||||
uint32_t c = s[0];
|
||||
|
||||
idList<fontInfoEx_t> idDeviceContext::fonts;
|
||||
if ( c < 0x80 || s[1] == '\0' ) {
|
||||
index++;
|
||||
return c;
|
||||
}
|
||||
if ( ( c & 0xE0 ) == 0xC0 ) {
|
||||
index += 2;
|
||||
return ( ( c & 0x1F ) << 6 ) | ( s[1] & 0x3F );
|
||||
}
|
||||
if ( ( c & 0xF0 ) == 0xE0 && s[2] != '\0' ) {
|
||||
index += 3;
|
||||
return ( ( c & 0x0F ) << 12 ) | ( ( s[1] & 0x3F ) << 6 ) | ( s[2] & 0x3F );
|
||||
}
|
||||
if ( ( c & 0xF8 ) == 0xF0 && s[2] != '\0' && s[3] != '\0' ) {
|
||||
index += 4;
|
||||
return ( ( c & 0x07 ) << 18 ) | ( ( s[1] & 0x3F ) << 12 ) | ( ( s[2] & 0x3F ) << 6 ) | ( s[3] & 0x3F );
|
||||
}
|
||||
|
||||
index++;
|
||||
return c;
|
||||
}
|
||||
|
||||
|
||||
idList<idFont *> idDeviceContext::fonts;
|
||||
|
||||
int idDeviceContext::FindFont( const char *name ) {
|
||||
int c = fonts.Num();
|
||||
for (int i = 0; i < c; i++) {
|
||||
if (idStr::Icmp(name, fonts[i].name) == 0) {
|
||||
if (idStr::Icmp(name, fonts[i]->GetName()) == 0) {
|
||||
return i;
|
||||
}
|
||||
}
|
||||
|
||||
// If the font was not found, try to register it
|
||||
idStr fileName = name;
|
||||
fileName.Replace("fonts", va("fonts/%s", fontLang.c_str()) );
|
||||
idFont *font = renderSystem->RegisterFont( name );
|
||||
if (font != NULL) {
|
||||
for (int i = 0; i < fonts.Num(); i++) {
|
||||
if (fonts[i] == font) {
|
||||
return i;
|
||||
}
|
||||
}
|
||||
return fonts.Append( font );
|
||||
}
|
||||
|
||||
fontInfoEx_t fontInfo;
|
||||
int index = fonts.Append( fontInfo );
|
||||
if ( renderSystem->RegisterFont( fileName, fonts[index] ) ){
|
||||
idStr::Copynz( fonts[index].name, name, sizeof( fonts[index].name ) );
|
||||
return index;
|
||||
} else {
|
||||
common->Printf( "Could not register font %s [%s]\n", name, fileName.c_str() );
|
||||
common->Printf( "Could not register font %s\n", name );
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
|
||||
void idDeviceContext::SetupFonts() {
|
||||
fonts.SetGranularity( 1 );
|
||||
@@ -87,9 +111,9 @@ void idDeviceContext::SetupFonts() {
|
||||
|
||||
void idDeviceContext::SetFont( int num ) {
|
||||
if ( num >= 0 && num < fonts.Num() ) {
|
||||
activeFont = &fonts[num];
|
||||
activeFont = fonts[num];
|
||||
} else {
|
||||
activeFont = &fonts[0];
|
||||
activeFont = fonts[0];
|
||||
}
|
||||
}
|
||||
|
||||
@@ -101,7 +125,7 @@ void idDeviceContext::Init() {
|
||||
whiteImage->SetSort( SS_GUI );
|
||||
mbcs = false;
|
||||
SetupFonts();
|
||||
activeFont = &fonts[0];
|
||||
activeFont = fonts[0];
|
||||
colorPurple = idVec4(1, 0, 1, 1);
|
||||
colorOrange = idVec4(1, 1, 0, 1);
|
||||
colorYellow = idVec4(0, 1, 1, 1);
|
||||
@@ -146,7 +170,6 @@ void idDeviceContext::Shutdown() {
|
||||
|
||||
void idDeviceContext::Clear() {
|
||||
initialized = false;
|
||||
useFont = NULL;
|
||||
activeFont = NULL;
|
||||
mbcs = false;
|
||||
}
|
||||
@@ -645,97 +668,81 @@ void idDeviceContext::DrawCursor(float *x, float *y, float size) {
|
||||
=======================================================================================================================
|
||||
*/
|
||||
|
||||
void idDeviceContext::PaintChar(float x,float y,float width,float height,float scale,float s,float t,float s2,float t2,const idMaterial *hShader) {
|
||||
float w, h;
|
||||
w = width * scale;
|
||||
h = height * scale;
|
||||
void idDeviceContext::PaintChar(float x, float y, const scaledGlyphInfo_t &glyphInfo) {
|
||||
y -= glyphInfo.top;
|
||||
x += glyphInfo.left;
|
||||
|
||||
float w = glyphInfo.width;
|
||||
float h = glyphInfo.height;
|
||||
float s = glyphInfo.s1;
|
||||
float t = glyphInfo.t1;
|
||||
float s2 = glyphInfo.s2;
|
||||
float t2 = glyphInfo.t2;
|
||||
const idMaterial *hShader = glyphInfo.material;
|
||||
|
||||
if (ClippedCoords(&x, &y, &w, &h, &s, &t, &s2, &t2)) {
|
||||
return;
|
||||
}
|
||||
|
||||
AdjustCoords(&x, &y, &w, &h);
|
||||
DrawStretchPic(x, y, w, h, s, t, s2, t2, hShader);
|
||||
}
|
||||
|
||||
|
||||
void idDeviceContext::SetFontByScale(float scale) {
|
||||
if (scale <= gui_smallFontLimit.GetFloat()) {
|
||||
useFont = &activeFont->fontInfoSmall;
|
||||
activeFont->maxHeight = activeFont->maxHeightSmall;
|
||||
activeFont->maxWidth = activeFont->maxWidthSmall;
|
||||
} else if (scale <= gui_mediumFontLimit.GetFloat()) {
|
||||
useFont = &activeFont->fontInfoMedium;
|
||||
activeFont->maxHeight = activeFont->maxHeightMedium;
|
||||
activeFont->maxWidth = activeFont->maxWidthMedium;
|
||||
} else {
|
||||
useFont = &activeFont->fontInfoLarge;
|
||||
activeFont->maxHeight = activeFont->maxHeightLarge;
|
||||
activeFont->maxWidth = activeFont->maxWidthLarge;
|
||||
}
|
||||
}
|
||||
|
||||
int idDeviceContext::DrawText(float x, float y, float scale, idVec4 color, const char *text, float adjust, int limit, int style, int cursor) {
|
||||
int len, count;
|
||||
idVec4 newColor;
|
||||
const glyphInfo_t *glyph;
|
||||
float useScale;
|
||||
SetFontByScale(scale);
|
||||
useScale = scale * useFont->glyphScale;
|
||||
count = 0;
|
||||
if ( text && color.w != 0.0f ) {
|
||||
const unsigned char *s = (const unsigned char*)text;
|
||||
idVec4 newColor;
|
||||
|
||||
idStr drawText = text ? text : "";
|
||||
int charIndex = 0;
|
||||
int count = 0;
|
||||
|
||||
if ( text && color.w != 0.0f && activeFont != NULL ) {
|
||||
renderSystem->SetColor(color);
|
||||
memcpy(&newColor[0], &color[0], sizeof(idVec4));
|
||||
len = strlen(text);
|
||||
int len = drawText.Length();
|
||||
if (limit > 0 && len > limit) {
|
||||
len = limit;
|
||||
}
|
||||
|
||||
while (s && *s && count < len) {
|
||||
if ( *s < GLYPH_START || *s > GLYPH_END ) {
|
||||
s++;
|
||||
continue;
|
||||
}
|
||||
glyph = &useFont->glyphs[*s];
|
||||
float prevGlyphSkip = 0.0f;
|
||||
|
||||
//
|
||||
// int yadj = Assets.textFont.glyphs[text[i]].bottom +
|
||||
// Assets.textFont.glyphs[text[i]].top; float yadj = scale *
|
||||
// (Assets.textFont.glyphs[text[i]].imageHeight -
|
||||
// Assets.textFont.glyphs[text[i]].height);
|
||||
//
|
||||
if ( idStr::IsColor((const char*)s) ) {
|
||||
if ( *(s+1) == C_COLOR_DEFAULT ) {
|
||||
while ( charIndex < len ) {
|
||||
if ( idStr::IsColor( drawText.c_str() + charIndex ) ) {
|
||||
if ( drawText[ charIndex + 1 ] == C_COLOR_DEFAULT ) {
|
||||
newColor = color;
|
||||
} else {
|
||||
newColor = idStr::ColorForIndex( *(s+1) );
|
||||
newColor = idStr::ColorForIndex( drawText[ charIndex + 1 ] );
|
||||
newColor[3] = color[3];
|
||||
}
|
||||
if (cursor == count || cursor == count+1) {
|
||||
float partialSkip = ((glyph->xSkip * useScale) + adjust) / 5.0f;
|
||||
if ( cursor == count ) {
|
||||
partialSkip *= 2.0f;
|
||||
if (cursor == charIndex || cursor == charIndex + 1) {
|
||||
float backup = 0.0f;
|
||||
if ( prevGlyphSkip > 0.0f ) {
|
||||
backup = ( prevGlyphSkip + adjust) / 5.0f;
|
||||
}
|
||||
if ( cursor == charIndex ) {
|
||||
backup *= 2.0f;
|
||||
} else {
|
||||
renderSystem->SetColor(newColor);
|
||||
}
|
||||
DrawEditCursor(x - partialSkip, y, scale);
|
||||
DrawEditCursor(x - backup, y, scale);
|
||||
}
|
||||
renderSystem->SetColor(newColor);
|
||||
s += 2;
|
||||
charIndex += 2;
|
||||
count += 2;
|
||||
continue;
|
||||
} else {
|
||||
float yadj = useScale * glyph->top;
|
||||
PaintChar(x,y - yadj,glyph->imageWidth,glyph->imageHeight,useScale,glyph->s,glyph->t,glyph->s2,glyph->t2,glyph->glyph);
|
||||
|
||||
if (cursor == count) {
|
||||
DrawEditCursor(x, y, scale);
|
||||
}
|
||||
x += (glyph->xSkip * useScale) + adjust;
|
||||
s++;
|
||||
count++;
|
||||
}
|
||||
|
||||
int glyphStart = charIndex;
|
||||
uint32_t textChar = DC_ReadUTF8Char( drawText.c_str(), charIndex );
|
||||
scaledGlyphInfo_t glyphInfo;
|
||||
activeFont->GetScaledGlyph( scale, textChar, glyphInfo );
|
||||
prevGlyphSkip = glyphInfo.xSkip;
|
||||
|
||||
PaintChar( x, y, glyphInfo );
|
||||
|
||||
if (cursor == glyphStart) {
|
||||
DrawEditCursor(x, y, scale);
|
||||
}
|
||||
x += glyphInfo.xSkip + adjust;
|
||||
count += charIndex - glyphStart;
|
||||
}
|
||||
if (cursor == len) {
|
||||
DrawEditCursor(x, y, scale);
|
||||
@@ -755,32 +762,22 @@ void idDeviceContext::SetSize(float width, float height) {
|
||||
}
|
||||
|
||||
int idDeviceContext::CharWidth( const char c, float scale ) {
|
||||
glyphInfo_t *glyph;
|
||||
float useScale;
|
||||
SetFontByScale(scale);
|
||||
fontInfo_t *font = useFont;
|
||||
useScale = scale * font->glyphScale;
|
||||
glyph = &font->glyphs[(const unsigned char)c];
|
||||
return idMath::FtoiFast( glyph->xSkip * useScale );
|
||||
return activeFont == NULL ? 0 : idMath::Ftoi( activeFont->GetGlyphWidth( scale, (const unsigned char)c ) );
|
||||
}
|
||||
|
||||
int idDeviceContext::TextWidth( const char *text, float scale, int limit ) {
|
||||
int i, width;
|
||||
|
||||
SetFontByScale( scale );
|
||||
const glyphInfo_t *glyphs = useFont->glyphs;
|
||||
|
||||
if ( text == NULL ) {
|
||||
if ( text == NULL || activeFont == NULL ) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
width = 0;
|
||||
int i;
|
||||
float width = 0.0f;
|
||||
if ( limit > 0 ) {
|
||||
for ( i = 0; text[i] != '\0' && i < limit; i++ ) {
|
||||
if ( idStr::IsColor( text + i ) ) {
|
||||
i++;
|
||||
} else {
|
||||
width += glyphs[((const unsigned char *)text)[i]].xSkip;
|
||||
width += activeFont->GetGlyphWidth( scale, ((const unsigned char *)text)[i] );
|
||||
}
|
||||
}
|
||||
} else {
|
||||
@@ -788,61 +785,23 @@ int idDeviceContext::TextWidth( const char *text, float scale, int limit ) {
|
||||
if ( idStr::IsColor( text + i ) ) {
|
||||
i++;
|
||||
} else {
|
||||
width += glyphs[((const unsigned char *)text)[i]].xSkip;
|
||||
width += activeFont->GetGlyphWidth( scale, ((const unsigned char *)text)[i] );
|
||||
}
|
||||
}
|
||||
}
|
||||
return idMath::FtoiFast( scale * useFont->glyphScale * width );
|
||||
return idMath::Ftoi( width );
|
||||
}
|
||||
|
||||
int idDeviceContext::TextHeight(const char *text, float scale, int limit) {
|
||||
int len, count;
|
||||
float max;
|
||||
glyphInfo_t *glyph;
|
||||
float useScale;
|
||||
const char *s = text;
|
||||
SetFontByScale(scale);
|
||||
fontInfo_t *font = useFont;
|
||||
|
||||
useScale = scale * font->glyphScale;
|
||||
max = 0;
|
||||
if (text) {
|
||||
len = strlen(text);
|
||||
if (limit > 0 && len > limit) {
|
||||
len = limit;
|
||||
}
|
||||
|
||||
count = 0;
|
||||
while (s && *s && count < len) {
|
||||
if ( idStr::IsColor(s) ) {
|
||||
s += 2;
|
||||
continue;
|
||||
}
|
||||
else {
|
||||
glyph = &font->glyphs[*(const unsigned char*)s];
|
||||
if (max < glyph->height) {
|
||||
max = glyph->height;
|
||||
}
|
||||
|
||||
s++;
|
||||
count++;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return idMath::FtoiFast( max * useScale );
|
||||
return activeFont == NULL ? 0 : idMath::Ftoi( activeFont->GetLineHeight( scale ) );
|
||||
}
|
||||
|
||||
int idDeviceContext::MaxCharWidth(float scale) {
|
||||
SetFontByScale(scale);
|
||||
float useScale = scale * useFont->glyphScale;
|
||||
return idMath::FtoiFast( activeFont->maxWidth * useScale );
|
||||
return activeFont == NULL ? 0 : idMath::Ftoi( activeFont->GetMaxCharWidth( scale ) );
|
||||
}
|
||||
|
||||
int idDeviceContext::MaxCharHeight(float scale) {
|
||||
SetFontByScale(scale);
|
||||
float useScale = scale * useFont->glyphScale;
|
||||
return idMath::FtoiFast( activeFont->maxHeight * useScale );
|
||||
return activeFont == NULL ? 0 : idMath::Ftoi( activeFont->GetLineHeight( scale ) );
|
||||
}
|
||||
|
||||
const idMaterial *idDeviceContext::GetScrollBarImage(int index) {
|
||||
@@ -927,11 +886,13 @@ void idDeviceContext::DrawEditCursor( float x, float y, float scale ) {
|
||||
if ( (int)( com_ticNumber >> 4 ) & 1 ) {
|
||||
return;
|
||||
}
|
||||
SetFontByScale(scale);
|
||||
float useScale = scale * useFont->glyphScale;
|
||||
const glyphInfo_t *glyph2 = &useFont->glyphs[(overStrikeMode) ? '_' : '|'];
|
||||
float yadj = useScale * glyph2->top;
|
||||
PaintChar(x, y - yadj,glyph2->imageWidth,glyph2->imageHeight,useScale,glyph2->s,glyph2->t,glyph2->s2,glyph2->t2,glyph2->glyph);
|
||||
if ( activeFont == NULL ) {
|
||||
return;
|
||||
}
|
||||
char cursorChar = (overStrikeMode) ? '_' : '|';
|
||||
scaledGlyphInfo_t glyphInfo;
|
||||
activeFont->GetScaledGlyph(scale, cursorChar, glyphInfo);
|
||||
PaintChar(x, y, glyphInfo);
|
||||
}
|
||||
|
||||
int idDeviceContext::DrawText( const char *text, float textScale, int textAlign, idVec4 color, idRectangle rectDraw, bool wrap, int cursor, bool calcOnly, idList<int> *breaks, int limit ) {
|
||||
@@ -948,8 +909,6 @@ int idDeviceContext::DrawText( const char *text, float textScale, int textAlign,
|
||||
|
||||
bool lineBreak, wordBreak;
|
||||
|
||||
SetFontByScale( textScale );
|
||||
|
||||
textWidth = 0;
|
||||
newLinePtr = NULL;
|
||||
|
||||
@@ -1071,7 +1030,7 @@ int idDeviceContext::DrawText( const char *text, float textScale, int textAlign,
|
||||
buff[len] = '\0';
|
||||
// update the width
|
||||
if ( *( buff + len - 1 ) != C_COLOR_ESCAPE && (len <= 1 || *( buff + len - 2 ) != C_COLOR_ESCAPE)) {
|
||||
textWidth += textScale * useFont->glyphScale * useFont->glyphs[ (const unsigned char)*( buff + len - 1 ) ].xSkip;
|
||||
textWidth += activeFont != NULL ? activeFont->GetGlyphWidth( textScale, (const unsigned char)*( buff + len - 1 ) ) : 0.0f;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -29,6 +29,8 @@ If you have questions concerning this license or the applicable additional terms
|
||||
#ifndef __DEVICECONTEXT_H__
|
||||
#define __DEVICECONTEXT_H__
|
||||
|
||||
#include "Font.h"
|
||||
|
||||
// device context support for gui stuff
|
||||
//
|
||||
|
||||
@@ -87,6 +89,7 @@ public:
|
||||
|
||||
void EnableClipping(bool b) { enableClipping = b; };
|
||||
void SetFont( int num );
|
||||
void SetFont( idFont *font ) { if ( font != NULL ) { activeFont = font; } }
|
||||
|
||||
void SetOverStrike(bool b) { overStrikeMode = b; }
|
||||
|
||||
@@ -129,15 +132,13 @@ public:
|
||||
|
||||
private:
|
||||
int DrawText(float x, float y, float scale, idVec4 color, const char *text, float adjust, int limit, int style, int cursor = -1);
|
||||
void PaintChar(float x,float y,float width,float height,float scale,float s,float t,float s2,float t2,const idMaterial *hShader);
|
||||
void SetFontByScale( float scale );
|
||||
void PaintChar(float x, float y, const scaledGlyphInfo_t &glyphInfo);
|
||||
void Clear( void );
|
||||
|
||||
const idMaterial *cursorImages[CURSOR_COUNT];
|
||||
const idMaterial *scrollBarImages[SCROLLBAR_COUNT];
|
||||
const idMaterial *whiteImage;
|
||||
fontInfoEx_t *activeFont;
|
||||
fontInfo_t *useFont;
|
||||
idFont *activeFont;
|
||||
idStr fontName;
|
||||
float xScale;
|
||||
float yScale;
|
||||
@@ -149,7 +150,7 @@ private:
|
||||
|
||||
idList<idRectangle> clipRects;
|
||||
|
||||
static idList<fontInfoEx_t> fonts;
|
||||
static idList<idFont *> fonts;
|
||||
idStr fontLang;
|
||||
|
||||
bool enableClipping;
|
||||
|
||||
@@ -1494,6 +1494,12 @@ idImage *idImageManager::ImageFromFile( const char *_name, textureFilter_t filte
|
||||
name.Replace( ".tga", "" );
|
||||
name.BackSlashesToSlashes();
|
||||
|
||||
if ( idStr::Icmpn( name.c_str(), "fonts", 5 ) == 0 || idStr::Icmpn( name.c_str(), "newfonts", 8 ) == 0 ) {
|
||||
filter = ( filter == TF_DEFAULT ) ? TF_LINEAR : filter;
|
||||
allowDownSize = false;
|
||||
depth = TD_HIGH_QUALITY;
|
||||
}
|
||||
|
||||
//
|
||||
// see if the image is already loaded, unless we
|
||||
// are in a reloadImages call
|
||||
@@ -1561,7 +1567,7 @@ idImage *idImageManager::ImageFromFile( const char *_name, textureFilter_t filte
|
||||
//
|
||||
image = AllocImage( name );
|
||||
|
||||
// HACK: to allow keep fonts from being mip'd, as new ones will be introduced with localization
|
||||
// HACK: to allow keep old fonts from being mip'd, as new ones will be introduced with localization
|
||||
// this keeps us from having to make a material for each font tga
|
||||
if ( name.Find( "fontImage_") >= 0 ) {
|
||||
allowDownSize = false;
|
||||
|
||||
@@ -388,11 +388,47 @@ idRenderSystemLocal::DrawSmallChar
|
||||
small chars are drawn at native screen resolution
|
||||
=====================
|
||||
*/
|
||||
void idRenderSystemLocal::DrawSmallChar( int x, int y, int ch, const idMaterial *material ) {
|
||||
int row, col;
|
||||
float frow, fcol;
|
||||
float size;
|
||||
static const char *CONSOLE_FONT_NAME = "editor";
|
||||
|
||||
static void R_DrawFontChar( idRenderSystemLocal *renderSystem, float x, float y, float scale, float baselineOffset, int ch ) {
|
||||
idFont *font = renderSystem->RegisterFont( CONSOLE_FONT_NAME );
|
||||
if ( font == NULL || ch == ' ' ) {
|
||||
return;
|
||||
}
|
||||
|
||||
scaledGlyphInfo_t glyphInfo;
|
||||
font->GetScaledGlyph( scale, ch & 255, glyphInfo );
|
||||
if ( glyphInfo.material == NULL ) {
|
||||
return;
|
||||
}
|
||||
|
||||
float baseline = y + baselineOffset;
|
||||
renderSystem->DrawStretchPic( x + glyphInfo.left, baseline - glyphInfo.top,
|
||||
glyphInfo.width, glyphInfo.height,
|
||||
glyphInfo.s1, glyphInfo.t1, glyphInfo.s2, glyphInfo.t2,
|
||||
glyphInfo.material );
|
||||
}
|
||||
|
||||
static const float CONSOLE_SMALL_FONT_SCALE = 0.255f;
|
||||
static const float CONSOLE_SMALL_CHAR_PAD = 0.75f;
|
||||
static const float CONSOLE_BIG_FONT_SCALE = 0.33f;
|
||||
static const float CONSOLE_BIG_CHAR_PAD = 0.75f;
|
||||
|
||||
static float R_FontGlyphAdvance( idRenderSystemLocal *renderSystem, float scale, int ch ) {
|
||||
idFont *font = renderSystem->RegisterFont( CONSOLE_FONT_NAME );
|
||||
if ( font == NULL ) {
|
||||
return SMALLCHAR_WIDTH;
|
||||
}
|
||||
|
||||
float advance = font->GetGlyphWidth( scale, ch & 255 );
|
||||
if ( advance <= 0.0f ) {
|
||||
advance = SMALLCHAR_WIDTH;
|
||||
}
|
||||
return advance;
|
||||
}
|
||||
|
||||
void idRenderSystemLocal::DrawSmallChar( int x, int y, int ch, const idMaterial *material ) {
|
||||
(void)material;
|
||||
ch &= 255;
|
||||
|
||||
if ( ch == ' ' ) {
|
||||
@@ -403,17 +439,7 @@ void idRenderSystemLocal::DrawSmallChar( int x, int y, int ch, const idMaterial
|
||||
return;
|
||||
}
|
||||
|
||||
row = ch >> 4;
|
||||
col = ch & 15;
|
||||
|
||||
frow = row * 0.0625f;
|
||||
fcol = col * 0.0625f;
|
||||
size = 0.0625f;
|
||||
|
||||
DrawStretchPic( x, y, SMALLCHAR_WIDTH, SMALLCHAR_HEIGHT,
|
||||
fcol, frow,
|
||||
fcol + size, frow + size,
|
||||
material );
|
||||
R_DrawFontChar( this, x, y, CONSOLE_SMALL_FONT_SCALE, SMALLCHAR_HEIGHT - 2.0f, ch );
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -450,7 +476,7 @@ void idRenderSystemLocal::DrawSmallStringExt( int x, int y, const char *string,
|
||||
continue;
|
||||
}
|
||||
DrawSmallChar( xx, y, *s, material );
|
||||
xx += SMALLCHAR_WIDTH;
|
||||
xx += idMath::FtoiFast( R_FontGlyphAdvance( this, CONSOLE_SMALL_FONT_SCALE, *s ) + CONSOLE_SMALL_CHAR_PAD );
|
||||
s++;
|
||||
}
|
||||
SetColor( colorWhite );
|
||||
@@ -462,10 +488,7 @@ idRenderSystemLocal::DrawBigChar
|
||||
=====================
|
||||
*/
|
||||
void idRenderSystemLocal::DrawBigChar( int x, int y, int ch, const idMaterial *material ) {
|
||||
int row, col;
|
||||
float frow, fcol;
|
||||
float size;
|
||||
|
||||
(void)material;
|
||||
ch &= 255;
|
||||
|
||||
if ( ch == ' ' ) {
|
||||
@@ -476,17 +499,7 @@ void idRenderSystemLocal::DrawBigChar( int x, int y, int ch, const idMaterial *m
|
||||
return;
|
||||
}
|
||||
|
||||
row = ch >> 4;
|
||||
col = ch & 15;
|
||||
|
||||
frow = row * 0.0625f;
|
||||
fcol = col * 0.0625f;
|
||||
size = 0.0625f;
|
||||
|
||||
DrawStretchPic( x, y, BIGCHAR_WIDTH, BIGCHAR_HEIGHT,
|
||||
fcol, frow,
|
||||
fcol + size, frow + size,
|
||||
material );
|
||||
R_DrawFontChar( this, x, y, CONSOLE_BIG_FONT_SCALE, BIGCHAR_HEIGHT - 1.0f, ch );
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -523,7 +536,7 @@ void idRenderSystemLocal::DrawBigStringExt( int x, int y, const char *string, co
|
||||
continue;
|
||||
}
|
||||
DrawBigChar( xx, y, *s, material );
|
||||
xx += BIGCHAR_WIDTH;
|
||||
xx += idMath::FtoiFast( R_FontGlyphAdvance( this, CONSOLE_BIG_FONT_SCALE, *s ) + CONSOLE_BIG_CHAR_PAD );
|
||||
s++;
|
||||
}
|
||||
SetColor( colorWhite );
|
||||
|
||||
@@ -110,49 +110,7 @@ enum dxrWorldId_t {
|
||||
DXR_WORLD_NUM
|
||||
};
|
||||
|
||||
// font support
|
||||
const int GLYPH_START = 0;
|
||||
const int GLYPH_END = 255;
|
||||
const int GLYPH_CHARSTART = 32;
|
||||
const int GLYPH_CHAREND = 127;
|
||||
const int GLYPHS_PER_FONT = GLYPH_END - GLYPH_START + 1;
|
||||
|
||||
typedef struct {
|
||||
int height; // number of scan lines
|
||||
int top; // top of glyph in buffer
|
||||
int bottom; // bottom of glyph in buffer
|
||||
int pitch; // width for copying
|
||||
int xSkip; // x adjustment
|
||||
int imageWidth; // width of actual image
|
||||
int imageHeight; // height of actual image
|
||||
float s; // x offset in image where glyph starts
|
||||
float t; // y offset in image where glyph starts
|
||||
float s2;
|
||||
float t2;
|
||||
const idMaterial * glyph; // shader with the glyph
|
||||
char shaderName[32];
|
||||
} glyphInfo_t;
|
||||
|
||||
typedef struct {
|
||||
glyphInfo_t glyphs [GLYPHS_PER_FONT];
|
||||
float glyphScale;
|
||||
char name[64];
|
||||
} fontInfo_t;
|
||||
|
||||
typedef struct {
|
||||
fontInfo_t fontInfoSmall;
|
||||
fontInfo_t fontInfoMedium;
|
||||
fontInfo_t fontInfoLarge;
|
||||
int maxHeight;
|
||||
int maxWidth;
|
||||
int maxHeightSmall;
|
||||
int maxWidthSmall;
|
||||
int maxHeightMedium;
|
||||
int maxWidthMedium;
|
||||
int maxHeightLarge;
|
||||
int maxWidthLarge;
|
||||
char name[64];
|
||||
} fontInfoEx_t;
|
||||
#include "Font.h"
|
||||
|
||||
const int SMALLCHAR_WIDTH = 8;
|
||||
const int SMALLCHAR_HEIGHT = 16;
|
||||
@@ -204,7 +162,7 @@ public:
|
||||
virtual void EndLevelLoad( void ) = 0;
|
||||
|
||||
// font support
|
||||
virtual bool RegisterFont( const char *fontName, fontInfoEx_t &font ) = 0;
|
||||
virtual idFont * RegisterFont( const char *fontName ) = 0;
|
||||
|
||||
// GUI drawing just involves shader parameter setting and axial image subsections
|
||||
virtual void SetColor( const idVec4 &rgba ) = 0;
|
||||
|
||||
@@ -1984,8 +1984,6 @@ void idRenderSystemLocal::Shutdown( void ) {
|
||||
|
||||
R_MaskedOcclusionCulling_Shutdown();
|
||||
|
||||
R_DoneFreeType( );
|
||||
|
||||
if ( glConfig.isInitialized ) {
|
||||
globalImages->PurgeAllImages();
|
||||
}
|
||||
@@ -2015,6 +2013,7 @@ void idRenderSystemLocal::Shutdown( void ) {
|
||||
|
||||
delete guiModel;
|
||||
delete demoGuiModel;
|
||||
FreeFonts();
|
||||
|
||||
Clear();
|
||||
|
||||
|
||||
@@ -1,631 +0,0 @@
|
||||
/*
|
||||
===========================================================================
|
||||
|
||||
IceTech GPL Source Code
|
||||
Copyright (C) 2026 Justin Marshall
|
||||
|
||||
This file is part of the IceTech GPL Source Code ("IceTech Source Code").
|
||||
|
||||
IceTech Source Code is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation, either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
IceTech Source Code is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with IceTech Source Code. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
In addition, the IceTech Source Code is also subject to certain additional terms. You should have received a copy of these additional terms immediately following the terms and conditions of the GNU General Public License which accompanied the IceTech Source Code. If not, please request a copy in writing from id Software at the address below.
|
||||
|
||||
If you have questions concerning this license or the applicable additional terms, you may contact in writing Justin Marshall, justinmarshall20@gmail.com
|
||||
|
||||
===========================================================================
|
||||
*/
|
||||
|
||||
#include "precompiled.h"
|
||||
#include "tr_local.h"
|
||||
|
||||
#define FILESIZE_fontInfo_t (20548)
|
||||
|
||||
#ifdef BUILD_FREETYPE
|
||||
#include "../ft2/fterrors.h"
|
||||
#include "../ft2/ftsystem.h"
|
||||
#include "../ft2/ftimage.h"
|
||||
#include "../ft2/freetype.h"
|
||||
#include "../ft2/ftoutln.h"
|
||||
|
||||
#define _FLOOR(x) ((x) & -64)
|
||||
#define _CEIL(x) (((x)+63) & -64)
|
||||
#define _TRUNC(x) ((x) >> 6)
|
||||
|
||||
FT_Library ftLibrary = NULL;
|
||||
#endif
|
||||
|
||||
|
||||
#ifdef BUILD_FREETYPE
|
||||
|
||||
/*
|
||||
============
|
||||
R_GetGlyphInfo
|
||||
============
|
||||
*/
|
||||
void R_GetGlyphInfo(FT_GlyphSlot glyph, int* left, int* right, int* width, int* top, int* bottom, int* height, int* pitch) {
|
||||
|
||||
*left = _FLOOR(glyph->metrics.horiBearingX);
|
||||
*right = _CEIL(glyph->metrics.horiBearingX + glyph->metrics.width);
|
||||
*width = _TRUNC(*right - *left);
|
||||
|
||||
*top = _CEIL(glyph->metrics.horiBearingY);
|
||||
*bottom = _FLOOR(glyph->metrics.horiBearingY - glyph->metrics.height);
|
||||
*height = _TRUNC(*top - *bottom);
|
||||
*pitch = (qtrue ? (*width + 3) & -4 : (*width + 7) >> 3);
|
||||
}
|
||||
|
||||
/*
|
||||
============
|
||||
R_RenderGlyph
|
||||
============
|
||||
*/
|
||||
FT_Bitmap* R_RenderGlyph(FT_GlyphSlot glyph, glyphInfo_t* glyphOut) {
|
||||
FT_Bitmap* bit2;
|
||||
int left, right, width, top, bottom, height, pitch, size;
|
||||
|
||||
R_GetGlyphInfo(glyph, &left, &right, &width, &top, &bottom, &height, &pitch);
|
||||
|
||||
if (glyph->format == ft_glyph_format_outline) {
|
||||
size = pitch * height;
|
||||
|
||||
bit2 = Mem_Alloc(sizeof(FT_Bitmap));
|
||||
|
||||
bit2->width = width;
|
||||
bit2->rows = height;
|
||||
bit2->pitch = pitch;
|
||||
bit2->pixel_mode = ft_pixel_mode_grays;
|
||||
//bit2->pixel_mode = ft_pixel_mode_mono;
|
||||
bit2->buffer = Mem_Alloc(pitch * height);
|
||||
bit2->num_grays = 256;
|
||||
|
||||
memset(bit2->buffer, 0, size);
|
||||
|
||||
FT_Outline_Translate(&glyph->outline, -left, -bottom);
|
||||
|
||||
FT_Outline_Get_Bitmap(ftLibrary, &glyph->outline, bit2);
|
||||
|
||||
glyphOut->height = height;
|
||||
glyphOut->pitch = pitch;
|
||||
glyphOut->top = (glyph->metrics.horiBearingY >> 6) + 1;
|
||||
glyphOut->bottom = bottom;
|
||||
|
||||
return bit2;
|
||||
}
|
||||
else {
|
||||
common->Printf("Non-outline fonts are not supported\n");
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
|
||||
/*
|
||||
============
|
||||
RE_ConstructGlyphInfo
|
||||
============
|
||||
*/
|
||||
glyphInfo_t* RE_ConstructGlyphInfo(unsigned char* imageOut, int* xOut, int* yOut, int* maxHeight, FT_Face face, const unsigned char c, qboolean calcHeight) {
|
||||
int i;
|
||||
static glyphInfo_t glyph;
|
||||
unsigned char* src, * dst;
|
||||
float scaled_width, scaled_height;
|
||||
FT_Bitmap* bitmap = NULL;
|
||||
|
||||
memset(&glyph, 0, sizeof(glyphInfo_t));
|
||||
// make sure everything is here
|
||||
if (face != NULL) {
|
||||
FT_Load_Glyph(face, FT_Get_Char_Index(face, c), FT_LOAD_DEFAULT);
|
||||
bitmap = R_RenderGlyph(face->glyph, &glyph);
|
||||
if (bitmap) {
|
||||
glyph.xSkip = (face->glyph->metrics.horiAdvance >> 6) + 1;
|
||||
}
|
||||
else {
|
||||
return &glyph;
|
||||
}
|
||||
|
||||
if (glyph.height > *maxHeight) {
|
||||
*maxHeight = glyph.height;
|
||||
}
|
||||
|
||||
if (calcHeight) {
|
||||
Mem_Free(bitmap->buffer);
|
||||
Mem_Free(bitmap);
|
||||
return &glyph;
|
||||
}
|
||||
|
||||
/*
|
||||
// need to convert to power of 2 sizes so we do not get
|
||||
// any scaling from the gl upload
|
||||
for (scaled_width = 1 ; scaled_width < glyph.pitch ; scaled_width<<=1)
|
||||
;
|
||||
for (scaled_height = 1 ; scaled_height < glyph.height ; scaled_height<<=1)
|
||||
;
|
||||
*/
|
||||
|
||||
scaled_width = glyph.pitch;
|
||||
scaled_height = glyph.height;
|
||||
|
||||
// we need to make sure we fit
|
||||
if (*xOut + scaled_width + 1 >= 255) {
|
||||
if (*yOut + *maxHeight + 1 >= 255) {
|
||||
*yOut = -1;
|
||||
*xOut = -1;
|
||||
Mem_Free(bitmap->buffer);
|
||||
Mem_Free(bitmap);
|
||||
return &glyph;
|
||||
}
|
||||
else {
|
||||
*xOut = 0;
|
||||
*yOut += *maxHeight + 1;
|
||||
}
|
||||
}
|
||||
else if (*yOut + *maxHeight + 1 >= 255) {
|
||||
*yOut = -1;
|
||||
*xOut = -1;
|
||||
Mem_Free(bitmap->buffer);
|
||||
Mem_Free(bitmap);
|
||||
return &glyph;
|
||||
}
|
||||
|
||||
src = bitmap->buffer;
|
||||
dst = imageOut + (*yOut * 256) + *xOut;
|
||||
|
||||
if (bitmap->pixel_mode == ft_pixel_mode_mono) {
|
||||
for (i = 0; i < glyph.height; i++) {
|
||||
int j;
|
||||
unsigned char* _src = src;
|
||||
unsigned char* _dst = dst;
|
||||
unsigned char mask = 0x80;
|
||||
unsigned char val = *_src;
|
||||
for (j = 0; j < glyph.pitch; j++) {
|
||||
if (mask == 0x80) {
|
||||
val = *_src++;
|
||||
}
|
||||
if (val & mask) {
|
||||
*_dst = 0xff;
|
||||
}
|
||||
mask >>= 1;
|
||||
|
||||
if (mask == 0) {
|
||||
mask = 0x80;
|
||||
}
|
||||
_dst++;
|
||||
}
|
||||
|
||||
src += glyph.pitch;
|
||||
dst += 256;
|
||||
|
||||
}
|
||||
}
|
||||
else {
|
||||
for (i = 0; i < glyph.height; i++) {
|
||||
memcpy(dst, src, glyph.pitch);
|
||||
src += glyph.pitch;
|
||||
dst += 256;
|
||||
}
|
||||
}
|
||||
|
||||
// we now have an 8 bit per pixel grey scale bitmap
|
||||
// that is width wide and pf->ftSize->metrics.y_ppem tall
|
||||
|
||||
glyph.imageHeight = scaled_height;
|
||||
glyph.imageWidth = scaled_width;
|
||||
glyph.s = (float)*xOut / 256;
|
||||
glyph.t = (float)*yOut / 256;
|
||||
glyph.s2 = glyph.s + (float)scaled_width / 256;
|
||||
glyph.t2 = glyph.t + (float)scaled_height / 256;
|
||||
|
||||
*xOut += scaled_width + 1;
|
||||
}
|
||||
|
||||
Mem_Free(bitmap->buffer);
|
||||
Mem_Free(bitmap);
|
||||
|
||||
return &glyph;
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
static int fdOffset;
|
||||
static byte* fdFile;
|
||||
|
||||
/*
|
||||
============
|
||||
readInt
|
||||
============
|
||||
*/
|
||||
int readInt(void) {
|
||||
int i = fdFile[fdOffset] + (fdFile[fdOffset + 1] << 8) + (fdFile[fdOffset + 2] << 16) + (fdFile[fdOffset + 3] << 24);
|
||||
fdOffset += 4;
|
||||
return i;
|
||||
}
|
||||
|
||||
/*
|
||||
============
|
||||
readFloat
|
||||
============
|
||||
*/
|
||||
float readFloat(void) {
|
||||
float f;
|
||||
memcpy(&f, &fdFile[fdOffset], sizeof(float));
|
||||
fdOffset += sizeof(float);
|
||||
return LittleFloat(f);
|
||||
}
|
||||
|
||||
/*
|
||||
============
|
||||
RegisterFont
|
||||
|
||||
Loads 3 point sizes, 12, 24, and 48
|
||||
============
|
||||
*/
|
||||
|
||||
bool idRenderSystemLocal::RegisterFont(const char* fontName, fontInfoEx_t& font) {
|
||||
#ifdef QUAKE4
|
||||
|
||||
void* faceData;
|
||||
ID_TIME_T ftime;
|
||||
int fontCount;
|
||||
int found;
|
||||
char fontDatName[1024];
|
||||
char materialName[1024];
|
||||
|
||||
memset(&font, 0, sizeof(font));
|
||||
|
||||
found = 0;
|
||||
|
||||
for (fontCount = 0; fontCount < 3; fontCount++) {
|
||||
int pointSize;
|
||||
fontInfo_t* outFont;
|
||||
|
||||
if (fontCount == 0) {
|
||||
pointSize = 12;
|
||||
outFont = &font.fontInfoSmall;
|
||||
}
|
||||
else if (fontCount == 1) {
|
||||
pointSize = 24;
|
||||
outFont = &font.fontInfoMedium;
|
||||
}
|
||||
else {
|
||||
pointSize = 48;
|
||||
outFont = &font.fontInfoLarge;
|
||||
}
|
||||
|
||||
idStr::snPrintf(fontDatName, sizeof(fontDatName), "%s_%i.fontdat", fontName, pointSize);
|
||||
#define FILESIZE_q4FontInfo_t 9236
|
||||
if (fileSystem->ReadFile(fontDatName, NULL, &ftime) != FILESIZE_q4FontInfo_t) {
|
||||
continue;
|
||||
}
|
||||
|
||||
if (fileSystem->ReadFile(fontDatName, &faceData, &ftime) <= 0 || faceData == NULL) {
|
||||
continue;
|
||||
}
|
||||
|
||||
fdOffset = 0;
|
||||
fdFile = reinterpret_cast<byte*>(faceData);
|
||||
|
||||
found |= 1 << fontCount;
|
||||
|
||||
idStr::Copynz(outFont->name, fontDatName, sizeof(outFont->name));
|
||||
|
||||
int mw = 0;
|
||||
int mh = 0;
|
||||
|
||||
for (int i = 0; i < GLYPHS_PER_FONT; i++) {
|
||||
glyphInfo_t& glyph = outFont->glyphs[i];
|
||||
|
||||
/*
|
||||
Quake 4 disk glyph order:
|
||||
float width;
|
||||
float height;
|
||||
float horiAdvance;
|
||||
float horiBearingX;
|
||||
float horiBearingY;
|
||||
float s1;
|
||||
float t1;
|
||||
float s2;
|
||||
float t2;
|
||||
|
||||
Doom 3 glyphInfo_t is not the same struct, so map it.
|
||||
*/
|
||||
const float q4Width = readFloat();
|
||||
const float q4Height = readFloat();
|
||||
const float q4HoriAdvance = readFloat();
|
||||
const float q4HoriBearingX = readFloat();
|
||||
const float q4HoriBearingY = readFloat();
|
||||
const float q4S1 = readFloat();
|
||||
const float q4T1 = readFloat();
|
||||
const float q4S2 = readFloat();
|
||||
const float q4T2 = readFloat();
|
||||
|
||||
glyph.height = (int)q4Height;
|
||||
glyph.top = (int)q4HoriBearingY;
|
||||
glyph.bottom = (int)(q4HoriBearingY - q4Height);
|
||||
glyph.pitch = (int)q4Width;
|
||||
glyph.xSkip = (int)q4HoriAdvance;
|
||||
glyph.imageWidth = (int)q4Width;
|
||||
glyph.imageHeight = (int)q4Height;
|
||||
|
||||
glyph.s = q4S1;
|
||||
glyph.t = q4T1;
|
||||
glyph.s2 = q4S2;
|
||||
glyph.t2 = q4T2;
|
||||
|
||||
glyph.glyph = NULL;
|
||||
glyph.shaderName[0] = '\0';
|
||||
|
||||
if (mw < glyph.xSkip) {
|
||||
mw = glyph.xSkip;
|
||||
}
|
||||
if (mh < glyph.height) {
|
||||
mh = glyph.height;
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
Quake 4 stores these after the glyph array:
|
||||
pointSize, fontHeight, ascender, descender, material pointer
|
||||
|
||||
Doom 3's fontInfo_t does not have those fields, so consume them.
|
||||
*/
|
||||
const float q4PointSize = readFloat();
|
||||
const float q4FontHeight = readFloat();
|
||||
const float q4Ascender = readFloat();
|
||||
const float q4Descender = readFloat();
|
||||
|
||||
// consume the saved material pointer / padding from the .fontdat
|
||||
readInt();
|
||||
|
||||
outFont->glyphScale = 48.0f / pointSize;
|
||||
|
||||
fileSystem->FreeFile(faceData);
|
||||
faceData = NULL;
|
||||
|
||||
/*
|
||||
The Quake 4 atlas is the .tga beside the .fontdat:
|
||||
fonts/marine_12.fontdat
|
||||
fonts/marine_12.tga
|
||||
|
||||
Doom 3 stores material per glyph, so assign the same atlas material
|
||||
to every glyph.
|
||||
*/
|
||||
idStr::snPrintf(materialName, sizeof(materialName), "%s_%i.tga", fontName, pointSize);
|
||||
|
||||
for (int i = 0; i < GLYPHS_PER_FONT; i++) {
|
||||
outFont->glyphs[i].glyph = declManager->FindMaterial(materialName);
|
||||
if (outFont->glyphs[i].glyph != NULL) {
|
||||
outFont->glyphs[i].glyph->SetSort(SS_GUI);
|
||||
}
|
||||
idStr::Copynz(outFont->glyphs[i].shaderName, materialName, sizeof(outFont->glyphs[i].shaderName));
|
||||
}
|
||||
|
||||
if (fontCount == 0) {
|
||||
font.maxWidthSmall = mw;
|
||||
font.maxHeightSmall = mh;
|
||||
}
|
||||
else if (fontCount == 1) {
|
||||
font.maxWidthMedium = mw;
|
||||
font.maxHeightMedium = mh;
|
||||
}
|
||||
else {
|
||||
font.maxWidthLarge = mw;
|
||||
font.maxHeightLarge = mh;
|
||||
}
|
||||
}
|
||||
|
||||
switch (found) {
|
||||
case 1:
|
||||
memcpy(&font.fontInfoMedium, &font.fontInfoSmall, sizeof(font.fontInfoMedium));
|
||||
font.maxWidthMedium = font.maxWidthSmall;
|
||||
font.maxHeightMedium = font.maxHeightSmall;
|
||||
|
||||
memcpy(&font.fontInfoLarge, &font.fontInfoSmall, sizeof(font.fontInfoLarge));
|
||||
font.maxWidthLarge = font.maxWidthSmall;
|
||||
font.maxHeightLarge = font.maxHeightSmall;
|
||||
break;
|
||||
|
||||
case 2:
|
||||
memcpy(&font.fontInfoSmall, &font.fontInfoMedium, sizeof(font.fontInfoSmall));
|
||||
font.maxWidthSmall = font.maxWidthMedium;
|
||||
font.maxHeightSmall = font.maxHeightMedium;
|
||||
|
||||
memcpy(&font.fontInfoLarge, &font.fontInfoMedium, sizeof(font.fontInfoLarge));
|
||||
font.maxWidthLarge = font.maxWidthMedium;
|
||||
font.maxHeightLarge = font.maxHeightMedium;
|
||||
break;
|
||||
|
||||
case 3:
|
||||
memcpy(&font.fontInfoLarge, &font.fontInfoMedium, sizeof(font.fontInfoLarge));
|
||||
font.maxWidthLarge = font.maxWidthMedium;
|
||||
font.maxHeightLarge = font.maxHeightMedium;
|
||||
break;
|
||||
|
||||
case 4:
|
||||
memcpy(&font.fontInfoSmall, &font.fontInfoLarge, sizeof(font.fontInfoSmall));
|
||||
font.maxWidthSmall = font.maxWidthLarge;
|
||||
font.maxHeightSmall = font.maxHeightLarge;
|
||||
|
||||
memcpy(&font.fontInfoMedium, &font.fontInfoLarge, sizeof(font.fontInfoMedium));
|
||||
font.maxWidthMedium = font.maxWidthLarge;
|
||||
font.maxHeightMedium = font.maxHeightLarge;
|
||||
break;
|
||||
|
||||
case 5:
|
||||
memcpy(&font.fontInfoMedium, &font.fontInfoLarge, sizeof(font.fontInfoMedium));
|
||||
font.maxWidthMedium = font.maxWidthLarge;
|
||||
font.maxHeightMedium = font.maxHeightLarge;
|
||||
break;
|
||||
|
||||
case 6:
|
||||
memcpy(&font.fontInfoSmall, &font.fontInfoMedium, sizeof(font.fontInfoSmall));
|
||||
font.maxWidthSmall = font.maxWidthMedium;
|
||||
font.maxHeightSmall = font.maxHeightMedium;
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
return found != 0;
|
||||
|
||||
#else
|
||||
|
||||
#ifdef BUILD_FREETYPE
|
||||
FT_Face face;
|
||||
int j, k, xOut, yOut, lastStart, imageNumber;
|
||||
int scaledSize, newSize, maxHeight, left, satLevels;
|
||||
unsigned char* out, * imageBuff;
|
||||
glyphInfo_t* glyph;
|
||||
idImage* image;
|
||||
idMaterial* h;
|
||||
float max;
|
||||
#endif
|
||||
|
||||
void* faceData;
|
||||
ID_TIME_T ftime;
|
||||
int i, len, fontCount;
|
||||
char name[1024];
|
||||
|
||||
int pointSize = 12;
|
||||
|
||||
assert(sizeof(float) == 4 && "if this is false, readFloat() won't work");
|
||||
|
||||
memset(&font, 0, sizeof(font));
|
||||
|
||||
for (fontCount = 0; fontCount < 3; fontCount++) {
|
||||
|
||||
if (fontCount == 0) {
|
||||
pointSize = 12;
|
||||
}
|
||||
else if (fontCount == 1) {
|
||||
pointSize = 24;
|
||||
}
|
||||
else {
|
||||
pointSize = 48;
|
||||
}
|
||||
|
||||
float glyphScale = 1.0f;
|
||||
glyphScale *= 48.0f / pointSize;
|
||||
|
||||
idStr::snPrintf(name, sizeof(name), "%s/fontImage_%i.dat", fontName, pointSize);
|
||||
|
||||
fontInfo_t* outFont;
|
||||
if (fontCount == 0) {
|
||||
outFont = &font.fontInfoSmall;
|
||||
}
|
||||
else if (fontCount == 1) {
|
||||
outFont = &font.fontInfoMedium;
|
||||
}
|
||||
else {
|
||||
outFont = &font.fontInfoLarge;
|
||||
}
|
||||
|
||||
idStr::Copynz(outFont->name, name, sizeof(outFont->name));
|
||||
|
||||
len = fileSystem->ReadFile(name, NULL, &ftime);
|
||||
if (len != FILESIZE_fontInfo_t) {
|
||||
common->Warning("RegisterFont: couldn't find font: '%s'", name);
|
||||
return false;
|
||||
}
|
||||
|
||||
fileSystem->ReadFile(name, &faceData, &ftime);
|
||||
|
||||
fdOffset = 0;
|
||||
fdFile = reinterpret_cast<unsigned char*>(faceData);
|
||||
|
||||
for (i = 0; i < GLYPHS_PER_FONT; i++) {
|
||||
outFont->glyphs[i].height = readInt();
|
||||
outFont->glyphs[i].top = readInt();
|
||||
outFont->glyphs[i].bottom = readInt();
|
||||
outFont->glyphs[i].pitch = readInt();
|
||||
outFont->glyphs[i].xSkip = readInt();
|
||||
outFont->glyphs[i].imageWidth = readInt();
|
||||
outFont->glyphs[i].imageHeight = readInt();
|
||||
outFont->glyphs[i].s = readFloat();
|
||||
outFont->glyphs[i].t = readFloat();
|
||||
outFont->glyphs[i].s2 = readFloat();
|
||||
outFont->glyphs[i].t2 = readFloat();
|
||||
|
||||
readInt();
|
||||
|
||||
memcpy(outFont->glyphs[i].shaderName, &fdFile[fdOffset + 6], 32 - 6);
|
||||
fdOffset += 32;
|
||||
}
|
||||
|
||||
outFont->glyphScale = readFloat();
|
||||
|
||||
int mw = 0;
|
||||
int mh = 0;
|
||||
|
||||
for (i = GLYPH_START; i < GLYPH_END; i++) {
|
||||
idStr::snPrintf(name, sizeof(name), "%s/%s", fontName, outFont->glyphs[i].shaderName);
|
||||
|
||||
outFont->glyphs[i].glyph = declManager->FindMaterial(name);
|
||||
outFont->glyphs[i].glyph->SetSort(SS_GUI);
|
||||
|
||||
if (mh < outFont->glyphs[i].height) {
|
||||
mh = outFont->glyphs[i].height;
|
||||
}
|
||||
if (mw < outFont->glyphs[i].xSkip) {
|
||||
mw = outFont->glyphs[i].xSkip;
|
||||
}
|
||||
}
|
||||
|
||||
if (fontCount == 0) {
|
||||
font.maxWidthSmall = mw;
|
||||
font.maxHeightSmall = mh;
|
||||
}
|
||||
else if (fontCount == 1) {
|
||||
font.maxWidthMedium = mw;
|
||||
font.maxHeightMedium = mh;
|
||||
}
|
||||
else {
|
||||
font.maxWidthLarge = mw;
|
||||
font.maxHeightLarge = mh;
|
||||
}
|
||||
|
||||
fileSystem->FreeFile(faceData);
|
||||
}
|
||||
|
||||
return true;
|
||||
|
||||
#endif // QUAKE4
|
||||
}
|
||||
|
||||
/*
|
||||
============
|
||||
R_InitFreeType
|
||||
============
|
||||
*/
|
||||
void R_InitFreeType(void) {
|
||||
#ifdef BUILD_FREETYPE
|
||||
if (FT_Init_FreeType(&ftLibrary)) {
|
||||
common->Printf("R_InitFreeType: Unable to initialize FreeType.\n");
|
||||
}
|
||||
#endif
|
||||
// registeredFontCount = 0;
|
||||
}
|
||||
|
||||
/*
|
||||
============
|
||||
R_DoneFreeType
|
||||
============
|
||||
*/
|
||||
void R_DoneFreeType(void) {
|
||||
#ifdef BUILD_FREETYPE
|
||||
if (ftLibrary) {
|
||||
FT_Done_FreeType(ftLibrary);
|
||||
ftLibrary = NULL;
|
||||
}
|
||||
#endif
|
||||
// registeredFontCount = 0;
|
||||
}
|
||||
@@ -707,7 +707,7 @@ public:
|
||||
virtual void FreeRenderWorld( idRenderWorld *rw );
|
||||
virtual void BeginLevelLoad( void );
|
||||
virtual void EndLevelLoad( void );
|
||||
virtual bool RegisterFont( const char *fontName, fontInfoEx_t &font );
|
||||
virtual idFont * RegisterFont( const char *fontName );
|
||||
virtual void SetColor( const idVec4 &rgba );
|
||||
virtual void SetColor4( float r, float g, float b, float a );
|
||||
virtual void DrawStretchPic ( const idDrawVert *verts, const glIndex_t *indexes, int vertCount, int indexCount, const idMaterial *material,
|
||||
@@ -744,6 +744,7 @@ public:
|
||||
~idRenderSystemLocal( void );
|
||||
|
||||
void Clear( void );
|
||||
void FreeFonts( void );
|
||||
void SetBackEndRenderer(); // sets tr.backEndRenderer based on cvars
|
||||
void RenderViewToViewport( const renderView_t *renderView, idScreenRect *viewport );
|
||||
|
||||
@@ -807,6 +808,7 @@ public:
|
||||
int guiRecursionLevel; // to prevent infinite overruns
|
||||
class idGuiModel * guiModel;
|
||||
class idGuiModel * demoGuiModel;
|
||||
idList<idFont *> fonts;
|
||||
|
||||
unsigned short gammaTable[256]; // brightness / gamma modify this
|
||||
|
||||
@@ -1079,8 +1081,6 @@ const int GLS_DEFAULT = GLS_DEPTHFUNC_ALWAYS;
|
||||
void R_Init( void );
|
||||
void R_InitOpenGL( void );
|
||||
|
||||
void R_DoneFreeType( void );
|
||||
|
||||
void R_SetColorMappings( void );
|
||||
|
||||
void R_ScreenShot_f( const idCmdArgs &args );
|
||||
|
||||
@@ -151,7 +151,7 @@
|
||||
812258C20912BC79005D34B9 /* RenderWorld_portals.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 812257810912BC79005D34B9 /* RenderWorld_portals.cpp */; };
|
||||
812258C30912BC79005D34B9 /* tr_backend.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 812257830912BC79005D34B9 /* tr_backend.cpp */; };
|
||||
812258C40912BC79005D34B9 /* tr_deform.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 812257840912BC79005D34B9 /* tr_deform.cpp */; };
|
||||
812258C50912BC79005D34B9 /* tr_font.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 812257850912BC79005D34B9 /* tr_font.cpp */; };
|
||||
812258C50912BC79005D34B9 /* Font.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 812257850912BC79005D34B9 /* Font.cpp */; };
|
||||
812258C60912BC79005D34B9 /* tr_guisurf.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 812257860912BC79005D34B9 /* tr_guisurf.cpp */; };
|
||||
812258C70912BC79005D34B9 /* tr_light.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 812257870912BC79005D34B9 /* tr_light.cpp */; };
|
||||
812258C80912BC79005D34B9 /* tr_lightrun.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 812257880912BC79005D34B9 /* tr_lightrun.cpp */; };
|
||||
@@ -177,6 +177,7 @@
|
||||
812258DC0912BC79005D34B9 /* Common.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 812257AA0912BC79005D34B9 /* Common.cpp */; };
|
||||
812258DD0912BC79005D34B9 /* Compressor.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 812257AC0912BC79005D34B9 /* Compressor.cpp */; };
|
||||
812258DE0912BC79005D34B9 /* Console.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 812257AE0912BC79005D34B9 /* Console.cpp */; };
|
||||
7D0C00010000000000000001 /* ConsoleHistory.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7D0C00020000000000000001 /* ConsoleHistory.cpp */; };
|
||||
812258DF0912BC79005D34B9 /* CVarSystem.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 812257B00912BC79005D34B9 /* CVarSystem.cpp */; };
|
||||
812258E00912BC79005D34B9 /* DeclAF.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 812257B20912BC79005D34B9 /* DeclAF.cpp */; };
|
||||
812258E10912BC79005D34B9 /* DeclEntityDef.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 812257B40912BC79005D34B9 /* DeclEntityDef.cpp */; };
|
||||
@@ -515,6 +516,7 @@
|
||||
812257780912BC79005D34B9 /* RenderEntity.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = RenderEntity.cpp; sourceTree = "<group>"; };
|
||||
812257790912BC79005D34B9 /* RenderSystem.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = RenderSystem.cpp; sourceTree = "<group>"; };
|
||||
8122577A0912BC79005D34B9 /* RenderSystem.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = RenderSystem.h; sourceTree = "<group>"; };
|
||||
8122577A0912BC79005D34C0 /* Font.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = Font.h; sourceTree = "<group>"; };
|
||||
8122577B0912BC79005D34B9 /* RenderSystem_init.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = RenderSystem_init.cpp; sourceTree = "<group>"; };
|
||||
8122577C0912BC79005D34B9 /* RenderWorld.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = RenderWorld.cpp; sourceTree = "<group>"; };
|
||||
8122577D0912BC79005D34B9 /* RenderWorld.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = RenderWorld.h; sourceTree = "<group>"; };
|
||||
@@ -525,7 +527,7 @@
|
||||
812257820912BC79005D34B9 /* simplex.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = simplex.h; sourceTree = "<group>"; };
|
||||
812257830912BC79005D34B9 /* tr_backend.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = tr_backend.cpp; sourceTree = "<group>"; };
|
||||
812257840912BC79005D34B9 /* tr_deform.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = tr_deform.cpp; sourceTree = "<group>"; };
|
||||
812257850912BC79005D34B9 /* tr_font.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = tr_font.cpp; sourceTree = "<group>"; };
|
||||
812257850912BC79005D34B9 /* Font.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = Font.cpp; sourceTree = "<group>"; };
|
||||
812257860912BC79005D34B9 /* tr_guisurf.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = tr_guisurf.cpp; sourceTree = "<group>"; };
|
||||
812257870912BC79005D34B9 /* tr_light.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = tr_light.cpp; sourceTree = "<group>"; };
|
||||
812257880912BC79005D34B9 /* tr_lightrun.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = tr_lightrun.cpp; sourceTree = "<group>"; };
|
||||
@@ -566,6 +568,8 @@
|
||||
812257AD0912BC79005D34B9 /* Compressor.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = Compressor.h; sourceTree = "<group>"; };
|
||||
812257AE0912BC79005D34B9 /* Console.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = Console.cpp; sourceTree = "<group>"; };
|
||||
812257AF0912BC79005D34B9 /* Console.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = Console.h; sourceTree = "<group>"; };
|
||||
7D0C00020000000000000001 /* ConsoleHistory.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = ConsoleHistory.cpp; sourceTree = "<group>"; };
|
||||
7D0C00030000000000000001 /* ConsoleHistory.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = ConsoleHistory.h; sourceTree = "<group>"; };
|
||||
812257B00912BC79005D34B9 /* CVarSystem.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = CVarSystem.cpp; sourceTree = "<group>"; };
|
||||
812257B10912BC79005D34B9 /* CVarSystem.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = CVarSystem.h; sourceTree = "<group>"; };
|
||||
812257B20912BC79005D34B9 /* DeclAF.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = DeclAF.cpp; sourceTree = "<group>"; };
|
||||
@@ -1034,6 +1038,7 @@
|
||||
812257780912BC79005D34B9 /* RenderEntity.cpp */,
|
||||
812257790912BC79005D34B9 /* RenderSystem.cpp */,
|
||||
8122577A0912BC79005D34B9 /* RenderSystem.h */,
|
||||
8122577A0912BC79005D34C0 /* Font.h */,
|
||||
8122577B0912BC79005D34B9 /* RenderSystem_init.cpp */,
|
||||
8122577C0912BC79005D34B9 /* RenderWorld.cpp */,
|
||||
8122577D0912BC79005D34B9 /* RenderWorld.h */,
|
||||
@@ -1044,7 +1049,7 @@
|
||||
812257820912BC79005D34B9 /* simplex.h */,
|
||||
812257830912BC79005D34B9 /* tr_backend.cpp */,
|
||||
812257840912BC79005D34B9 /* tr_deform.cpp */,
|
||||
812257850912BC79005D34B9 /* tr_font.cpp */,
|
||||
812257850912BC79005D34B9 /* Font.cpp */,
|
||||
812257860912BC79005D34B9 /* tr_guisurf.cpp */,
|
||||
812257870912BC79005D34B9 /* tr_light.cpp */,
|
||||
812257880912BC79005D34B9 /* tr_lightrun.cpp */,
|
||||
@@ -1151,6 +1156,8 @@
|
||||
812257AD0912BC79005D34B9 /* Compressor.h */,
|
||||
812257AE0912BC79005D34B9 /* Console.cpp */,
|
||||
812257AF0912BC79005D34B9 /* Console.h */,
|
||||
7D0C00020000000000000001 /* ConsoleHistory.cpp */,
|
||||
7D0C00030000000000000001 /* ConsoleHistory.h */,
|
||||
812257B00912BC79005D34B9 /* CVarSystem.cpp */,
|
||||
812257B10912BC79005D34B9 /* CVarSystem.h */,
|
||||
812257B20912BC79005D34B9 /* DeclAF.cpp */,
|
||||
@@ -1600,7 +1607,7 @@
|
||||
812258C20912BC79005D34B9 /* RenderWorld_portals.cpp in Sources */,
|
||||
812258C30912BC79005D34B9 /* tr_backend.cpp in Sources */,
|
||||
812258C40912BC79005D34B9 /* tr_deform.cpp in Sources */,
|
||||
812258C50912BC79005D34B9 /* tr_font.cpp in Sources */,
|
||||
812258C50912BC79005D34B9 /* Font.cpp in Sources */,
|
||||
812258C60912BC79005D34B9 /* tr_guisurf.cpp in Sources */,
|
||||
812258C70912BC79005D34B9 /* tr_light.cpp in Sources */,
|
||||
812258C80912BC79005D34B9 /* tr_lightrun.cpp in Sources */,
|
||||
@@ -1626,6 +1633,7 @@
|
||||
812258DC0912BC79005D34B9 /* Common.cpp in Sources */,
|
||||
812258DD0912BC79005D34B9 /* Compressor.cpp in Sources */,
|
||||
812258DE0912BC79005D34B9 /* Console.cpp in Sources */,
|
||||
7D0C00010000000000000001 /* ConsoleHistory.cpp in Sources */,
|
||||
812258DF0912BC79005D34B9 /* CVarSystem.cpp in Sources */,
|
||||
812258E00912BC79005D34B9 /* DeclAF.cpp in Sources */,
|
||||
812258E10912BC79005D34B9 /* DeclEntityDef.cpp in Sources */,
|
||||
|
||||
@@ -125,9 +125,9 @@ renderer_string = ' \
|
||||
draw_nv10.cpp \
|
||||
draw_nv20.cpp \
|
||||
draw_r200.cpp \
|
||||
Font.cpp \
|
||||
tr_backend.cpp \
|
||||
tr_deform.cpp \
|
||||
tr_font.cpp \
|
||||
tr_guisurf.cpp \
|
||||
tr_light.cpp \
|
||||
tr_lightrun.cpp \
|
||||
@@ -151,6 +151,7 @@ framework_string = ' \
|
||||
Common.cpp \
|
||||
Compressor.cpp \
|
||||
Console.cpp \
|
||||
ConsoleHistory.cpp \
|
||||
DemoFile.cpp \
|
||||
DeclAF.cpp \
|
||||
DeclEntityDef.cpp \
|
||||
|
||||