[Add] Text rendering with SDL_ttf and OpenGL.
This commit is contained in:
parent
8f06f70ad3
commit
9f464f3c14
@ -59,7 +59,7 @@
|
|||||||
<SubSystem>Windows</SubSystem>
|
<SubSystem>Windows</SubSystem>
|
||||||
<GenerateDebugInformation>true</GenerateDebugInformation>
|
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||||
<AdditionalLibraryDirectories>..\..\Libs\Win32\SDL\lib</AdditionalLibraryDirectories>
|
<AdditionalLibraryDirectories>..\..\Libs\Win32\SDL\lib</AdditionalLibraryDirectories>
|
||||||
<AdditionalDependencies>SDL.lib;SDL_image.lib;SDL_mixer.lib;opengl32.lib;glu32.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
<AdditionalDependencies>SDL.lib;SDL_image.lib;SDL_mixer.lib;SDL_ttf.lib;opengl32.lib;glu32.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
||||||
</Link>
|
</Link>
|
||||||
</ItemDefinitionGroup>
|
</ItemDefinitionGroup>
|
||||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
||||||
@ -79,7 +79,7 @@
|
|||||||
<EnableCOMDATFolding>true</EnableCOMDATFolding>
|
<EnableCOMDATFolding>true</EnableCOMDATFolding>
|
||||||
<OptimizeReferences>true</OptimizeReferences>
|
<OptimizeReferences>true</OptimizeReferences>
|
||||||
<AdditionalLibraryDirectories>..\..\Libs\Win32\SDL\lib</AdditionalLibraryDirectories>
|
<AdditionalLibraryDirectories>..\..\Libs\Win32\SDL\lib</AdditionalLibraryDirectories>
|
||||||
<AdditionalDependencies>SDL.lib;SDL_image.lib;SDL_mixer.lib;opengl32.lib;glu32.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
<AdditionalDependencies>SDL.lib;SDL_image.lib;SDL_mixer.lib;SDL_ttf.lib;opengl32.lib;glu32.lib;%(AdditionalDependencies)</AdditionalDependencies>
|
||||||
</Link>
|
</Link>
|
||||||
</ItemDefinitionGroup>
|
</ItemDefinitionGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
@ -87,6 +87,7 @@
|
|||||||
<ClInclude Include="..\..\src\Actor\NPC.h" />
|
<ClInclude Include="..\..\src\Actor\NPC.h" />
|
||||||
<ClInclude Include="..\..\src\Actor\Player.h" />
|
<ClInclude Include="..\..\src\Actor\Player.h" />
|
||||||
<ClInclude Include="..\..\src\Collision\AABB.h" />
|
<ClInclude Include="..\..\src\Collision\AABB.h" />
|
||||||
|
<ClInclude Include="..\..\src\Font\Font.h" />
|
||||||
<ClInclude Include="..\..\src\Global\Constants.h" />
|
<ClInclude Include="..\..\src\Global\Constants.h" />
|
||||||
<ClInclude Include="..\..\src\Global\Globals.h" />
|
<ClInclude Include="..\..\src\Global\Globals.h" />
|
||||||
<ClInclude Include="..\..\src\glx\glext.h" />
|
<ClInclude Include="..\..\src\glx\glext.h" />
|
||||||
@ -129,6 +130,7 @@
|
|||||||
<ClCompile Include="..\..\src\Actor\NPC.cpp" />
|
<ClCompile Include="..\..\src\Actor\NPC.cpp" />
|
||||||
<ClCompile Include="..\..\src\Actor\Player.cpp" />
|
<ClCompile Include="..\..\src\Actor\Player.cpp" />
|
||||||
<ClCompile Include="..\..\src\Collision\AABB.cpp" />
|
<ClCompile Include="..\..\src\Collision\AABB.cpp" />
|
||||||
|
<ClCompile Include="..\..\src\Font\Font.cpp" />
|
||||||
<ClCompile Include="..\..\src\Global\Constants.cpp" />
|
<ClCompile Include="..\..\src\Global\Constants.cpp" />
|
||||||
<ClCompile Include="..\..\src\Global\Globals.cpp" />
|
<ClCompile Include="..\..\src\Global\Globals.cpp" />
|
||||||
<ClCompile Include="..\..\src\IO\Input.cpp" />
|
<ClCompile Include="..\..\src\IO\Input.cpp" />
|
||||||
|
@ -40,6 +40,9 @@
|
|||||||
<Filter Include="Sound">
|
<Filter Include="Sound">
|
||||||
<UniqueIdentifier>{28fe54ce-152c-4d7d-8a14-3b9d0155d089}</UniqueIdentifier>
|
<UniqueIdentifier>{28fe54ce-152c-4d7d-8a14-3b9d0155d089}</UniqueIdentifier>
|
||||||
</Filter>
|
</Filter>
|
||||||
|
<Filter Include="Font">
|
||||||
|
<UniqueIdentifier>{be4a8635-8a7a-45ba-8c95-06e95cdfb8e3}</UniqueIdentifier>
|
||||||
|
</Filter>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ClInclude Include="..\..\src\Main\Game.h">
|
<ClInclude Include="..\..\src\Main\Game.h">
|
||||||
@ -162,6 +165,9 @@
|
|||||||
<ClInclude Include="..\..\src\Actor\Actor.h">
|
<ClInclude Include="..\..\src\Actor\Actor.h">
|
||||||
<Filter>Actor</Filter>
|
<Filter>Actor</Filter>
|
||||||
</ClInclude>
|
</ClInclude>
|
||||||
|
<ClInclude Include="..\..\src\Font\Font.h">
|
||||||
|
<Filter>Font</Filter>
|
||||||
|
</ClInclude>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ClCompile Include="..\..\src\Main\main.cpp">
|
<ClCompile Include="..\..\src\Main\main.cpp">
|
||||||
@ -260,5 +266,8 @@
|
|||||||
<ClCompile Include="..\..\src\Actor\Actor.cpp">
|
<ClCompile Include="..\..\src\Actor\Actor.cpp">
|
||||||
<Filter>Actor</Filter>
|
<Filter>Actor</Filter>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\..\src\Font\Font.cpp">
|
||||||
|
<Filter>Font</Filter>
|
||||||
|
</ClCompile>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
</Project>
|
</Project>
|
BIN
Data/Font/Fairydust.ttf
Normal file
BIN
Data/Font/Fairydust.ttf
Normal file
Binary file not shown.
@ -6,7 +6,8 @@ LIBS += -lGL \
|
|||||||
-lGLU \
|
-lGLU \
|
||||||
-lz \
|
-lz \
|
||||||
-ltinyxml \
|
-ltinyxml \
|
||||||
-lSDL_mixer
|
-lSDL_mixer \
|
||||||
|
-lSDL_ttf
|
||||||
win32: {
|
win32: {
|
||||||
LIBS -= -lGL \
|
LIBS -= -lGL \
|
||||||
-lGLU
|
-lGLU
|
||||||
|
249
Libs/Win32/SDL/include/SDL/SDL_ttf.h
Normal file
249
Libs/Win32/SDL/include/SDL/SDL_ttf.h
Normal file
@ -0,0 +1,249 @@
|
|||||||
|
/*
|
||||||
|
SDL_ttf: A companion library to SDL for working with TrueType (tm) fonts
|
||||||
|
Copyright (C) 2001-2012 Sam Lantinga <slouken@libsdl.org>
|
||||||
|
|
||||||
|
This software is provided 'as-is', without any express or implied
|
||||||
|
warranty. In no event will the authors be held liable for any damages
|
||||||
|
arising from the use of this software.
|
||||||
|
|
||||||
|
Permission is granted to anyone to use this software for any purpose,
|
||||||
|
including commercial applications, and to alter it and redistribute it
|
||||||
|
freely, subject to the following restrictions:
|
||||||
|
|
||||||
|
1. The origin of this software must not be misrepresented; you must not
|
||||||
|
claim that you wrote the original software. If you use this software
|
||||||
|
in a product, an acknowledgment in the product documentation would be
|
||||||
|
appreciated but is not required.
|
||||||
|
2. Altered source versions must be plainly marked as such, and must not be
|
||||||
|
misrepresented as being the original software.
|
||||||
|
3. This notice may not be removed or altered from any source distribution.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* This library is a wrapper around the excellent FreeType 2.0 library,
|
||||||
|
available at:
|
||||||
|
http://www.freetype.org/
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef _SDL_TTF_H
|
||||||
|
#define _SDL_TTF_H
|
||||||
|
|
||||||
|
#include "SDL.h"
|
||||||
|
#include "begin_code.h"
|
||||||
|
|
||||||
|
/* Set up for C function definitions, even when using C++ */
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* Printable format: "%d.%d.%d", MAJOR, MINOR, PATCHLEVEL
|
||||||
|
*/
|
||||||
|
#define SDL_TTF_MAJOR_VERSION 2
|
||||||
|
#define SDL_TTF_MINOR_VERSION 0
|
||||||
|
#define SDL_TTF_PATCHLEVEL 11
|
||||||
|
|
||||||
|
/* This macro can be used to fill a version structure with the compile-time
|
||||||
|
* version of the SDL_ttf library.
|
||||||
|
*/
|
||||||
|
#define SDL_TTF_VERSION(X) \
|
||||||
|
{ \
|
||||||
|
(X)->major = SDL_TTF_MAJOR_VERSION; \
|
||||||
|
(X)->minor = SDL_TTF_MINOR_VERSION; \
|
||||||
|
(X)->patch = SDL_TTF_PATCHLEVEL; \
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Backwards compatibility */
|
||||||
|
#define TTF_MAJOR_VERSION SDL_TTF_MAJOR_VERSION
|
||||||
|
#define TTF_MINOR_VERSION SDL_TTF_MINOR_VERSION
|
||||||
|
#define TTF_PATCHLEVEL SDL_TTF_PATCHLEVEL
|
||||||
|
#define TTF_VERSION(X) SDL_TTF_VERSION(X)
|
||||||
|
|
||||||
|
/* This function gets the version of the dynamically linked SDL_ttf library.
|
||||||
|
it should NOT be used to fill a version structure, instead you should
|
||||||
|
use the SDL_TTF_VERSION() macro.
|
||||||
|
*/
|
||||||
|
extern DECLSPEC const SDL_version * SDLCALL TTF_Linked_Version(void);
|
||||||
|
|
||||||
|
/* ZERO WIDTH NO-BREAKSPACE (Unicode byte order mark) */
|
||||||
|
#define UNICODE_BOM_NATIVE 0xFEFF
|
||||||
|
#define UNICODE_BOM_SWAPPED 0xFFFE
|
||||||
|
|
||||||
|
/* This function tells the library whether UNICODE text is generally
|
||||||
|
byteswapped. A UNICODE BOM character in a string will override
|
||||||
|
this setting for the remainder of that string.
|
||||||
|
*/
|
||||||
|
extern DECLSPEC void SDLCALL TTF_ByteSwappedUNICODE(int swapped);
|
||||||
|
|
||||||
|
/* The internal structure containing font information */
|
||||||
|
typedef struct _TTF_Font TTF_Font;
|
||||||
|
|
||||||
|
/* Initialize the TTF engine - returns 0 if successful, -1 on error */
|
||||||
|
extern DECLSPEC int SDLCALL TTF_Init(void);
|
||||||
|
|
||||||
|
/* Open a font file and create a font of the specified point size.
|
||||||
|
* Some .fon fonts will have several sizes embedded in the file, so the
|
||||||
|
* point size becomes the index of choosing which size. If the value
|
||||||
|
* is too high, the last indexed size will be the default. */
|
||||||
|
extern DECLSPEC TTF_Font * SDLCALL TTF_OpenFont(const char *file, int ptsize);
|
||||||
|
extern DECLSPEC TTF_Font * SDLCALL TTF_OpenFontIndex(const char *file, int ptsize, long index);
|
||||||
|
extern DECLSPEC TTF_Font * SDLCALL TTF_OpenFontRW(SDL_RWops *src, int freesrc, int ptsize);
|
||||||
|
extern DECLSPEC TTF_Font * SDLCALL TTF_OpenFontIndexRW(SDL_RWops *src, int freesrc, int ptsize, long index);
|
||||||
|
|
||||||
|
/* Set and retrieve the font style */
|
||||||
|
#define TTF_STYLE_NORMAL 0x00
|
||||||
|
#define TTF_STYLE_BOLD 0x01
|
||||||
|
#define TTF_STYLE_ITALIC 0x02
|
||||||
|
#define TTF_STYLE_UNDERLINE 0x04
|
||||||
|
#define TTF_STYLE_STRIKETHROUGH 0x08
|
||||||
|
extern DECLSPEC int SDLCALL TTF_GetFontStyle(const TTF_Font *font);
|
||||||
|
extern DECLSPEC void SDLCALL TTF_SetFontStyle(TTF_Font *font, int style);
|
||||||
|
extern DECLSPEC int SDLCALL TTF_GetFontOutline(const TTF_Font *font);
|
||||||
|
extern DECLSPEC void SDLCALL TTF_SetFontOutline(TTF_Font *font, int outline);
|
||||||
|
|
||||||
|
/* Set and retrieve FreeType hinter settings */
|
||||||
|
#define TTF_HINTING_NORMAL 0
|
||||||
|
#define TTF_HINTING_LIGHT 1
|
||||||
|
#define TTF_HINTING_MONO 2
|
||||||
|
#define TTF_HINTING_NONE 3
|
||||||
|
extern DECLSPEC int SDLCALL TTF_GetFontHinting(const TTF_Font *font);
|
||||||
|
extern DECLSPEC void SDLCALL TTF_SetFontHinting(TTF_Font *font, int hinting);
|
||||||
|
|
||||||
|
/* Get the total height of the font - usually equal to point size */
|
||||||
|
extern DECLSPEC int SDLCALL TTF_FontHeight(const TTF_Font *font);
|
||||||
|
|
||||||
|
/* Get the offset from the baseline to the top of the font
|
||||||
|
This is a positive value, relative to the baseline.
|
||||||
|
*/
|
||||||
|
extern DECLSPEC int SDLCALL TTF_FontAscent(const TTF_Font *font);
|
||||||
|
|
||||||
|
/* Get the offset from the baseline to the bottom of the font
|
||||||
|
This is a negative value, relative to the baseline.
|
||||||
|
*/
|
||||||
|
extern DECLSPEC int SDLCALL TTF_FontDescent(const TTF_Font *font);
|
||||||
|
|
||||||
|
/* Get the recommended spacing between lines of text for this font */
|
||||||
|
extern DECLSPEC int SDLCALL TTF_FontLineSkip(const TTF_Font *font);
|
||||||
|
|
||||||
|
/* Get/Set whether or not kerning is allowed for this font */
|
||||||
|
extern DECLSPEC int SDLCALL TTF_GetFontKerning(const TTF_Font *font);
|
||||||
|
extern DECLSPEC void SDLCALL TTF_SetFontKerning(TTF_Font *font, int allowed);
|
||||||
|
|
||||||
|
/* Get the number of faces of the font */
|
||||||
|
extern DECLSPEC long SDLCALL TTF_FontFaces(const TTF_Font *font);
|
||||||
|
|
||||||
|
/* Get the font face attributes, if any */
|
||||||
|
extern DECLSPEC int SDLCALL TTF_FontFaceIsFixedWidth(const TTF_Font *font);
|
||||||
|
extern DECLSPEC char * SDLCALL TTF_FontFaceFamilyName(const TTF_Font *font);
|
||||||
|
extern DECLSPEC char * SDLCALL TTF_FontFaceStyleName(const TTF_Font *font);
|
||||||
|
|
||||||
|
/* Check wether a glyph is provided by the font or not */
|
||||||
|
extern DECLSPEC int SDLCALL TTF_GlyphIsProvided(const TTF_Font *font, Uint16 ch);
|
||||||
|
|
||||||
|
/* Get the metrics (dimensions) of a glyph
|
||||||
|
To understand what these metrics mean, here is a useful link:
|
||||||
|
http://freetype.sourceforge.net/freetype2/docs/tutorial/step2.html
|
||||||
|
*/
|
||||||
|
extern DECLSPEC int SDLCALL TTF_GlyphMetrics(TTF_Font *font, Uint16 ch,
|
||||||
|
int *minx, int *maxx,
|
||||||
|
int *miny, int *maxy, int *advance);
|
||||||
|
|
||||||
|
/* Get the dimensions of a rendered string of text */
|
||||||
|
extern DECLSPEC int SDLCALL TTF_SizeText(TTF_Font *font, const char *text, int *w, int *h);
|
||||||
|
extern DECLSPEC int SDLCALL TTF_SizeUTF8(TTF_Font *font, const char *text, int *w, int *h);
|
||||||
|
extern DECLSPEC int SDLCALL TTF_SizeUNICODE(TTF_Font *font, const Uint16 *text, int *w, int *h);
|
||||||
|
|
||||||
|
/* Create an 8-bit palettized surface and render the given text at
|
||||||
|
fast quality with the given font and color. The 0 pixel is the
|
||||||
|
colorkey, giving a transparent background, and the 1 pixel is set
|
||||||
|
to the text color.
|
||||||
|
This function returns the new surface, or NULL if there was an error.
|
||||||
|
*/
|
||||||
|
extern DECLSPEC SDL_Surface * SDLCALL TTF_RenderText_Solid(TTF_Font *font,
|
||||||
|
const char *text, SDL_Color fg);
|
||||||
|
extern DECLSPEC SDL_Surface * SDLCALL TTF_RenderUTF8_Solid(TTF_Font *font,
|
||||||
|
const char *text, SDL_Color fg);
|
||||||
|
extern DECLSPEC SDL_Surface * SDLCALL TTF_RenderUNICODE_Solid(TTF_Font *font,
|
||||||
|
const Uint16 *text, SDL_Color fg);
|
||||||
|
|
||||||
|
/* Create an 8-bit palettized surface and render the given glyph at
|
||||||
|
fast quality with the given font and color. The 0 pixel is the
|
||||||
|
colorkey, giving a transparent background, and the 1 pixel is set
|
||||||
|
to the text color. The glyph is rendered without any padding or
|
||||||
|
centering in the X direction, and aligned normally in the Y direction.
|
||||||
|
This function returns the new surface, or NULL if there was an error.
|
||||||
|
*/
|
||||||
|
extern DECLSPEC SDL_Surface * SDLCALL TTF_RenderGlyph_Solid(TTF_Font *font,
|
||||||
|
Uint16 ch, SDL_Color fg);
|
||||||
|
|
||||||
|
/* Create an 8-bit palettized surface and render the given text at
|
||||||
|
high quality with the given font and colors. The 0 pixel is background,
|
||||||
|
while other pixels have varying degrees of the foreground color.
|
||||||
|
This function returns the new surface, or NULL if there was an error.
|
||||||
|
*/
|
||||||
|
extern DECLSPEC SDL_Surface * SDLCALL TTF_RenderText_Shaded(TTF_Font *font,
|
||||||
|
const char *text, SDL_Color fg, SDL_Color bg);
|
||||||
|
extern DECLSPEC SDL_Surface * SDLCALL TTF_RenderUTF8_Shaded(TTF_Font *font,
|
||||||
|
const char *text, SDL_Color fg, SDL_Color bg);
|
||||||
|
extern DECLSPEC SDL_Surface * SDLCALL TTF_RenderUNICODE_Shaded(TTF_Font *font,
|
||||||
|
const Uint16 *text, SDL_Color fg, SDL_Color bg);
|
||||||
|
|
||||||
|
/* Create an 8-bit palettized surface and render the given glyph at
|
||||||
|
high quality with the given font and colors. The 0 pixel is background,
|
||||||
|
while other pixels have varying degrees of the foreground color.
|
||||||
|
The glyph is rendered without any padding or centering in the X
|
||||||
|
direction, and aligned normally in the Y direction.
|
||||||
|
This function returns the new surface, or NULL if there was an error.
|
||||||
|
*/
|
||||||
|
extern DECLSPEC SDL_Surface * SDLCALL TTF_RenderGlyph_Shaded(TTF_Font *font,
|
||||||
|
Uint16 ch, SDL_Color fg, SDL_Color bg);
|
||||||
|
|
||||||
|
/* Create a 32-bit ARGB surface and render the given text at high quality,
|
||||||
|
using alpha blending to dither the font with the given color.
|
||||||
|
This function returns the new surface, or NULL if there was an error.
|
||||||
|
*/
|
||||||
|
extern DECLSPEC SDL_Surface * SDLCALL TTF_RenderText_Blended(TTF_Font *font,
|
||||||
|
const char *text, SDL_Color fg);
|
||||||
|
extern DECLSPEC SDL_Surface * SDLCALL TTF_RenderUTF8_Blended(TTF_Font *font,
|
||||||
|
const char *text, SDL_Color fg);
|
||||||
|
extern DECLSPEC SDL_Surface * SDLCALL TTF_RenderUNICODE_Blended(TTF_Font *font,
|
||||||
|
const Uint16 *text, SDL_Color fg);
|
||||||
|
|
||||||
|
/* Create a 32-bit ARGB surface and render the given glyph at high quality,
|
||||||
|
using alpha blending to dither the font with the given color.
|
||||||
|
The glyph is rendered without any padding or centering in the X
|
||||||
|
direction, and aligned normally in the Y direction.
|
||||||
|
This function returns the new surface, or NULL if there was an error.
|
||||||
|
*/
|
||||||
|
extern DECLSPEC SDL_Surface * SDLCALL TTF_RenderGlyph_Blended(TTF_Font *font,
|
||||||
|
Uint16 ch, SDL_Color fg);
|
||||||
|
|
||||||
|
/* For compatibility with previous versions, here are the old functions */
|
||||||
|
#define TTF_RenderText(font, text, fg, bg) \
|
||||||
|
TTF_RenderText_Shaded(font, text, fg, bg)
|
||||||
|
#define TTF_RenderUTF8(font, text, fg, bg) \
|
||||||
|
TTF_RenderUTF8_Shaded(font, text, fg, bg)
|
||||||
|
#define TTF_RenderUNICODE(font, text, fg, bg) \
|
||||||
|
TTF_RenderUNICODE_Shaded(font, text, fg, bg)
|
||||||
|
|
||||||
|
/* Close an opened font file */
|
||||||
|
extern DECLSPEC void SDLCALL TTF_CloseFont(TTF_Font *font);
|
||||||
|
|
||||||
|
/* De-initialize the TTF engine */
|
||||||
|
extern DECLSPEC void SDLCALL TTF_Quit(void);
|
||||||
|
|
||||||
|
/* Check if the TTF engine is initialized */
|
||||||
|
extern DECLSPEC int SDLCALL TTF_WasInit(void);
|
||||||
|
|
||||||
|
/* Get the kerning size of two glyphs */
|
||||||
|
extern DECLSPEC int TTF_GetFontKerningSize(TTF_Font *font, int prev_index, int index);
|
||||||
|
|
||||||
|
/* We'll use SDL for reporting errors */
|
||||||
|
#define TTF_SetError SDL_SetError
|
||||||
|
#define TTF_GetError SDL_GetError
|
||||||
|
|
||||||
|
/* Ends C function definitions when using C++ */
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
#include "close_code.h"
|
||||||
|
|
||||||
|
#endif /* _SDL_TTF_H */
|
BIN
Libs/Win32/SDL/lib/SDL_ttf.dll
Normal file
BIN
Libs/Win32/SDL/lib/SDL_ttf.dll
Normal file
Binary file not shown.
BIN
Libs/Win32/SDL/lib/SDL_ttf.lib
Normal file
BIN
Libs/Win32/SDL/lib/SDL_ttf.lib
Normal file
Binary file not shown.
BIN
Libs/Win32/SDL/lib/libfreetype-6.dll
Normal file
BIN
Libs/Win32/SDL/lib/libfreetype-6.dll
Normal file
Binary file not shown.
Binary file not shown.
161
src/Font/Font.cpp
Normal file
161
src/Font/Font.cpp
Normal file
@ -0,0 +1,161 @@
|
|||||||
|
#include <SDL/SDL_ttf.h>
|
||||||
|
#include "../Texture/Texture.h"
|
||||||
|
#include "../System/Debug.h"
|
||||||
|
#include "Font.h"
|
||||||
|
|
||||||
|
Font::Font(void) {
|
||||||
|
_texture = 0;
|
||||||
|
_spaceWidth = 0;
|
||||||
|
_tabWidth = 0;
|
||||||
|
_lineSkip = 0;
|
||||||
|
memset(_characters, 0, sizeof(_characters));
|
||||||
|
SetColor(1.0f, 1.0f, 1.0f, 1.0f);
|
||||||
|
}
|
||||||
|
|
||||||
|
Font::~Font(void) {
|
||||||
|
if(_texture) {
|
||||||
|
glDeleteTextures(1, &_texture);
|
||||||
|
_texture = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
bool Font::Load(const std::string& filename) {
|
||||||
|
TTF_Font* font = TTF_OpenFont(filename.c_str(), 16);
|
||||||
|
if(!font) {
|
||||||
|
Debug::logger->message("Error loading %s: %s", filename.c_str(), TTF_GetError());
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
glGenTextures(1, &_texture);
|
||||||
|
BindTexture(_texture);
|
||||||
|
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
|
||||||
|
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
|
||||||
|
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, Font::TEXTURE_WIDTH, Font::TEXTURE_HEIGHT,
|
||||||
|
0, GL_RGBA, GL_UNSIGNED_BYTE, NULL);
|
||||||
|
|
||||||
|
SDL_Color white = { 0xFF, 0xFF, 0xFF };
|
||||||
|
|
||||||
|
const int ascent = TTF_FontAscent(font);
|
||||||
|
|
||||||
|
int x = 0;
|
||||||
|
int y = 0;
|
||||||
|
int lineHeight = 0;
|
||||||
|
|
||||||
|
for(int i = 0; i < Font::MAX_CHARS; i++) {
|
||||||
|
FontChar& character = _characters[i];
|
||||||
|
|
||||||
|
int minx;
|
||||||
|
int maxy;
|
||||||
|
TTF_GlyphMetrics(font, i, &minx, NULL, NULL, &maxy, &character.advance);
|
||||||
|
|
||||||
|
character.xOffset += minx;
|
||||||
|
character.yOffset -= maxy;
|
||||||
|
character.yOffset += ascent;
|
||||||
|
|
||||||
|
SDL_Surface* glyphSurf = TTF_RenderGlyph_Blended(font, i, white);
|
||||||
|
|
||||||
|
if((x + glyphSurf->w) > 255) {
|
||||||
|
x = 0;
|
||||||
|
y += lineHeight;
|
||||||
|
lineHeight = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(glyphSurf->w == 0 || glyphSurf->h == 0) {
|
||||||
|
SDL_FreeSurface(glyphSurf);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
character.uvX = (float)x / (float)Font::TEXTURE_WIDTH;
|
||||||
|
character.uvY = (float)y / (float)Font::TEXTURE_HEIGHT;
|
||||||
|
character.uvW = (float)glyphSurf->w / (float)Font::TEXTURE_WIDTH;
|
||||||
|
character.uvH = (float)glyphSurf->h / (float)Font::TEXTURE_HEIGHT;
|
||||||
|
character.width = glyphSurf->w;
|
||||||
|
character.height = glyphSurf->h;
|
||||||
|
|
||||||
|
glTexSubImage2D(GL_TEXTURE_2D, 0, x, y, character.width, character.height,
|
||||||
|
GL_RGBA, GL_UNSIGNED_BYTE, glyphSurf->pixels);
|
||||||
|
|
||||||
|
SDL_FreeSurface(glyphSurf);
|
||||||
|
|
||||||
|
if(character.height > lineHeight) {
|
||||||
|
lineHeight = character.height;
|
||||||
|
}
|
||||||
|
|
||||||
|
x += character.width;
|
||||||
|
}
|
||||||
|
|
||||||
|
TTF_SizeText(font, " ", &_spaceWidth, NULL);
|
||||||
|
TTF_SizeText(font, "\t", &_tabWidth, NULL);
|
||||||
|
|
||||||
|
_lineSkip = TTF_FontLineSkip(font);
|
||||||
|
|
||||||
|
TTF_CloseFont(font);
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
void Font::DrawText(int xOffset, int yOffset, const char* text) {
|
||||||
|
glEnable(GL_TEXTURE_2D);
|
||||||
|
BindTexture(_texture);
|
||||||
|
|
||||||
|
glColor4fv(_color);
|
||||||
|
|
||||||
|
glBegin(GL_QUADS);
|
||||||
|
|
||||||
|
const int textLength = strlen(text);
|
||||||
|
|
||||||
|
int x = 0;
|
||||||
|
int y = 0;
|
||||||
|
|
||||||
|
for(int i = 0; i < textLength; i++) {
|
||||||
|
char c = text[i];
|
||||||
|
|
||||||
|
if(c == ' ') {
|
||||||
|
x += _spaceWidth;
|
||||||
|
continue;
|
||||||
|
} else if(c == '\t') {
|
||||||
|
x += _tabWidth;
|
||||||
|
continue;
|
||||||
|
} else if(c == '\n') {
|
||||||
|
x = 0;
|
||||||
|
y += _lineSkip;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
FontChar& charInfo = _characters[int(c)];
|
||||||
|
|
||||||
|
glTexCoord2f(
|
||||||
|
charInfo.uvX,
|
||||||
|
charInfo.uvY);
|
||||||
|
glVertex2i(
|
||||||
|
charInfo.xOffset + x + xOffset,
|
||||||
|
charInfo.yOffset + y + yOffset);
|
||||||
|
|
||||||
|
glTexCoord2f(
|
||||||
|
charInfo.uvX + charInfo.uvW,
|
||||||
|
charInfo.uvY);
|
||||||
|
glVertex2i(
|
||||||
|
charInfo.xOffset + x + charInfo.width + xOffset,
|
||||||
|
charInfo.yOffset + y + yOffset);
|
||||||
|
|
||||||
|
glTexCoord2f(
|
||||||
|
charInfo.uvX + charInfo.uvW,
|
||||||
|
charInfo.uvY + charInfo.uvH);
|
||||||
|
glVertex2i(
|
||||||
|
charInfo.xOffset + x + charInfo.width + xOffset,
|
||||||
|
charInfo.yOffset + y + charInfo.height + yOffset);
|
||||||
|
|
||||||
|
glTexCoord2f(
|
||||||
|
charInfo.uvX,
|
||||||
|
charInfo.uvY + charInfo.uvH);
|
||||||
|
glVertex2i(
|
||||||
|
charInfo.xOffset + x + xOffset,
|
||||||
|
charInfo.yOffset + y + charInfo.height + yOffset);
|
||||||
|
|
||||||
|
x += charInfo.advance;
|
||||||
|
}
|
||||||
|
|
||||||
|
glEnd();
|
||||||
|
|
||||||
|
glColor4f(1.0f, 1.0f, 1.0f, 1.0f);
|
||||||
|
}
|
53
src/Font/Font.h
Normal file
53
src/Font/Font.h
Normal file
@ -0,0 +1,53 @@
|
|||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include "../System/ResourceManager.h"
|
||||||
|
|
||||||
|
class Texture;
|
||||||
|
|
||||||
|
struct FontChar {
|
||||||
|
float uvX;
|
||||||
|
float uvY;
|
||||||
|
float uvW;
|
||||||
|
float uvH;
|
||||||
|
int width;
|
||||||
|
int height;
|
||||||
|
int xOffset;
|
||||||
|
int yOffset;
|
||||||
|
int advance;
|
||||||
|
};
|
||||||
|
|
||||||
|
class Font : public Resource {
|
||||||
|
template<class T> friend class ResourceManager;
|
||||||
|
|
||||||
|
public:
|
||||||
|
Font(void);
|
||||||
|
~Font(void);
|
||||||
|
|
||||||
|
bool Load(const std::string& filename);
|
||||||
|
|
||||||
|
void DrawText(int xOffset, int yOffset, const char* text);
|
||||||
|
|
||||||
|
int GetLineSkip() const { return _lineSkip; }
|
||||||
|
float* GetColor() { return _color; }
|
||||||
|
|
||||||
|
void SetColor(float r, float g, float b, float a) {
|
||||||
|
_color[0] = r;
|
||||||
|
_color[1] = g;
|
||||||
|
_color[2] = b;
|
||||||
|
_color[3] = a;
|
||||||
|
}
|
||||||
|
|
||||||
|
private:
|
||||||
|
unsigned int _texture;
|
||||||
|
int _spaceWidth;
|
||||||
|
int _tabWidth;
|
||||||
|
int _lineSkip;
|
||||||
|
|
||||||
|
float _color[4];
|
||||||
|
|
||||||
|
static const int MAX_CHARS = 128;
|
||||||
|
static const int TEXTURE_WIDTH = 256;
|
||||||
|
static const int TEXTURE_HEIGHT = 256;
|
||||||
|
|
||||||
|
FontChar _characters[MAX_CHARS];
|
||||||
|
};
|
@ -20,6 +20,8 @@ Game::Game(void) {
|
|||||||
//_NPC = new NPC();
|
//_NPC = new NPC();
|
||||||
_level = new Level();
|
_level = new Level();
|
||||||
//_rotationAngle = 0.0f;
|
//_rotationAngle = 0.0f;
|
||||||
|
_testFont = new Font();
|
||||||
|
_testFont->Load("../Data/Font/Fairydust.ttf");
|
||||||
}
|
}
|
||||||
|
|
||||||
Game::~Game(void) {
|
Game::~Game(void) {
|
||||||
@ -71,11 +73,17 @@ void Game::Render(void) {
|
|||||||
// Render our shit..
|
// Render our shit..
|
||||||
_level->Draw(xOffset, yOffset);
|
_level->Draw(xOffset, yOffset);
|
||||||
_player->Render();
|
_player->Render();
|
||||||
|
_testFont->SetColor(0.0f, 1.0f, 1.0f, 1.0f);
|
||||||
|
_testFont->DrawText(
|
||||||
|
_player->GetX() - 5,
|
||||||
|
_player->GetY() - _testFont->GetLineSkip() - 2,
|
||||||
|
"Miss D");
|
||||||
//_NPC->Render();
|
//_NPC->Render();
|
||||||
}
|
}
|
||||||
|
|
||||||
void Game::Shutdown(void) {
|
void Game::Shutdown(void) {
|
||||||
Debug::logger->message("\n ----- Cleaning Engine -----");
|
Debug::logger->message("\n ----- Cleaning Engine -----");
|
||||||
|
delete _testFont;
|
||||||
delete _player;
|
delete _player;
|
||||||
delete _level;
|
delete _level;
|
||||||
}
|
}
|
||||||
|
@ -2,6 +2,7 @@
|
|||||||
#include "../IO/Input.h"
|
#include "../IO/Input.h"
|
||||||
#include "../Actor/NPC.h"
|
#include "../Actor/NPC.h"
|
||||||
#include "../Actor/Player.h"
|
#include "../Actor/Player.h"
|
||||||
|
#include "../Font/Font.h"
|
||||||
|
|
||||||
class Sprite;
|
class Sprite;
|
||||||
class Level;
|
class Level;
|
||||||
@ -21,6 +22,7 @@ public:
|
|||||||
void OnResize(int width, int height);
|
void OnResize(int width, int height);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
Font* _testFont;
|
||||||
Player* _player;
|
Player* _player;
|
||||||
NPC* _NPC;
|
NPC* _NPC;
|
||||||
Level* _level;
|
Level* _level;
|
||||||
|
@ -11,6 +11,7 @@
|
|||||||
|
|
||||||
#include <SDL/SDL.h>
|
#include <SDL/SDL.h>
|
||||||
#include <SDL/SDL_mixer.h>
|
#include <SDL/SDL_mixer.h>
|
||||||
|
#include <SDL/SDL_ttf.h>
|
||||||
#include <GL/gl.h>
|
#include <GL/gl.h>
|
||||||
#include <time.h>
|
#include <time.h>
|
||||||
#include "Game.h"
|
#include "Game.h"
|
||||||
@ -20,6 +21,7 @@
|
|||||||
#include "../System/Debug.h"
|
#include "../System/Debug.h"
|
||||||
|
|
||||||
void Destroy(void) {
|
void Destroy(void) {
|
||||||
|
TTF_Quit();
|
||||||
Mix_CloseAudio();
|
Mix_CloseAudio();
|
||||||
DestroyInput();
|
DestroyInput();
|
||||||
SDL_FreeSurface(screen);
|
SDL_FreeSurface(screen);
|
||||||
@ -65,6 +67,10 @@ int main(int argc, char** argv) {
|
|||||||
Debug::logger->message("Audio opened..");
|
Debug::logger->message("Audio opened..");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if(TTF_Init()) {
|
||||||
|
Debug::logger->message("SDL_ttf initialized.\n");
|
||||||
|
}
|
||||||
|
|
||||||
info = SDL_GetVideoInfo();
|
info = SDL_GetVideoInfo();
|
||||||
if(!info) {
|
if(!info) {
|
||||||
// This should never accur.
|
// This should never accur.
|
||||||
@ -107,9 +113,9 @@ int main(int argc, char** argv) {
|
|||||||
game.Render();
|
game.Render();
|
||||||
SDL_GL_SwapBuffers();
|
SDL_GL_SwapBuffers();
|
||||||
|
|
||||||
Uint32 timeEnd = SDL_GetTicks();
|
Uint32 timeEnd = SDL_GetTicks();
|
||||||
dt = (float)(timeEnd - timeStart) / 1000.0f;
|
dt = (float)(timeEnd - timeStart) / 1000.0f;
|
||||||
timeStart = timeEnd;
|
timeStart = timeEnd;
|
||||||
}
|
}
|
||||||
|
|
||||||
game.Shutdown();
|
game.Shutdown();
|
||||||
|
Loading…
Reference in New Issue
Block a user