About 3/4 done with new font system
This commit is contained in:
@ -15,7 +15,6 @@ namespace Dawn {
|
||||
class DawnGame;
|
||||
class RenderPipeline;
|
||||
class ShaderManager;
|
||||
class FontManager;
|
||||
|
||||
class IRenderManager {
|
||||
protected:
|
||||
@ -56,13 +55,6 @@ namespace Dawn {
|
||||
* @return Reference to the shader manager.
|
||||
*/
|
||||
virtual ShaderManager * getShaderManager() = 0;
|
||||
|
||||
/**
|
||||
* Returns the font manager that this render manager uses.
|
||||
*
|
||||
* @return Reference ot the font manager.
|
||||
*/
|
||||
virtual FontManager * getFontManager() = 0;
|
||||
|
||||
/**
|
||||
* Sets the render flags for the render manager to use.
|
||||
|
@ -6,7 +6,6 @@
|
||||
# Sources
|
||||
target_sources(${DAWN_TARGET_NAME}
|
||||
PRIVATE
|
||||
FontManager.cpp
|
||||
BitmapFont.cpp
|
||||
ExampleFont.cpp
|
||||
TrueTypeFont.cpp
|
||||
|
@ -1,24 +0,0 @@
|
||||
// Copyright (c) 2023 Dominic Masters
|
||||
//
|
||||
// This software is released under the MIT License.
|
||||
// https://opensource.org/licenses/MIT
|
||||
|
||||
#include "FontManager.hpp"
|
||||
|
||||
using namespace Dawn;
|
||||
|
||||
FontManager::FontManager() {
|
||||
|
||||
}
|
||||
|
||||
void FontManager::init() {
|
||||
// Init FreeType
|
||||
if(FT_Init_FreeType(&fontLibrary)) {
|
||||
std::cout << "ERROR::FREETYPE: Could not init FreeType Library" << std::endl;
|
||||
assertUnreachable();
|
||||
}
|
||||
}
|
||||
|
||||
FontManager::~FontManager() {
|
||||
|
||||
}
|
@ -1,23 +0,0 @@
|
||||
// Copyright (c) 2023 Dominic Masters
|
||||
//
|
||||
// This software is released under the MIT License.
|
||||
// https://opensource.org/licenses/MIT
|
||||
|
||||
#pragma once
|
||||
#include "dawnlibs.hpp"
|
||||
#include "assert/assert.hpp"
|
||||
|
||||
namespace Dawn {
|
||||
class FontManager {
|
||||
protected:
|
||||
|
||||
public:
|
||||
FT_Library fontLibrary;
|
||||
|
||||
FontManager();
|
||||
|
||||
void init();
|
||||
|
||||
~FontManager();
|
||||
};
|
||||
}
|
@ -6,7 +6,6 @@
|
||||
# Sources
|
||||
target_sources(${DAWN_TARGET_NAME}
|
||||
PRIVATE
|
||||
NewTrueType.cpp
|
||||
NewTrueTypeFace.cpp
|
||||
NewTrueTypeFaceTexture.hpp
|
||||
NewTrueTypeFaceTexture.cpp
|
||||
)
|
@ -1,28 +0,0 @@
|
||||
// Copyright (c) 2023 Dominic Masters
|
||||
//
|
||||
// This software is released under the MIT License.
|
||||
// https://opensource.org/licenses/MIT
|
||||
|
||||
#include "NewTrueType.hpp"
|
||||
|
||||
using namespace Dawn;
|
||||
|
||||
NewTrueType::NewTrueType(FontManager *fontMan) {
|
||||
assertNotNull(fontMan);
|
||||
this->fontManager = fontMan;
|
||||
}
|
||||
|
||||
void NewTrueType::addStyle(flag_t style) {
|
||||
assertTrue(this->faces.find(style) == this->faces.end());
|
||||
|
||||
//Create the face
|
||||
this->faces[style] = new NewTrueTypeFace();
|
||||
}
|
||||
|
||||
NewTrueType::~NewTrueType() {
|
||||
auto it = this->faces.begin();
|
||||
while(it != this->faces.end()) {
|
||||
delete it->second;
|
||||
it++;
|
||||
}
|
||||
}
|
@ -1,24 +0,0 @@
|
||||
// Copyright (c) 2023 Dominic Masters
|
||||
//
|
||||
// This software is released under the MIT License.
|
||||
// https://opensource.org/licenses/MIT
|
||||
|
||||
#pragma once
|
||||
#include "NewTrueTypeFace.hpp"
|
||||
#include "display/font/FontManager.hpp"
|
||||
|
||||
namespace Dawn {
|
||||
class NewTrueType {
|
||||
protected:
|
||||
std::map<flag_t, NewTrueTypeFace*> faces;
|
||||
FontManager *fontManager;
|
||||
|
||||
public:
|
||||
NewTrueType(FontManager *fontMan);
|
||||
void addStyle(flag_t style);
|
||||
NewTrueTypeFace * getFace(flag_t style);
|
||||
~NewTrueType();
|
||||
|
||||
friend class NewTrueTypeFace;
|
||||
};
|
||||
}
|
@ -3,7 +3,7 @@
|
||||
// This software is released under the MIT License.
|
||||
// https://opensource.org/licenses/MIT
|
||||
|
||||
#include "NewTrueType.hpp"
|
||||
#include "asset/assets/NewTrueTypeAsset.hpp"
|
||||
|
||||
using namespace Dawn;
|
||||
|
||||
@ -15,17 +15,10 @@ usagelockid_t NewTrueTypeFace::lock(struct NewTrueTypeFaceTextureStyle style) {
|
||||
NewTrueTypeFaceTexture *texture = nullptr;
|
||||
auto existing = this->texturesByStyle.find(style);
|
||||
if(existing == this->texturesByStyle.end()) {
|
||||
// Load face
|
||||
FT_Face face;
|
||||
assertUnreachable();
|
||||
|
||||
// Does not exist, create it.
|
||||
texture = new NewTrueTypeFaceTexture(this, face, style);
|
||||
this->textures.push_back(texture);
|
||||
this->texturesByStyle[style] = texture;
|
||||
|
||||
// Cleanup face
|
||||
FT_Done_Face(face);
|
||||
} else {
|
||||
texture = existing->second;
|
||||
}
|
||||
@ -48,6 +41,7 @@ NewTrueTypeFaceTexture * NewTrueTypeFace::getTexture(usagelockid_t lock) {
|
||||
|
||||
void NewTrueTypeFace::unlock(usagelockid_t lock) {
|
||||
auto texture = this->getTexture(lock);
|
||||
assertNotNull(texture);
|
||||
texture->locks.removeLock(lock);
|
||||
this->stylesByLock.erase(lock);
|
||||
auto it = std::find(this->locksByStyle[texture->style].begin(), this->locksByStyle[texture->style].end(), lock);
|
||||
@ -59,6 +53,5 @@ NewTrueTypeFace::~NewTrueTypeFace() {
|
||||
auto it = this->textures.begin();
|
||||
while(it != this->textures.end()) {
|
||||
delete *it;
|
||||
it = this->textures.erase(it);
|
||||
}
|
||||
}
|
@ -8,13 +8,13 @@
|
||||
|
||||
namespace Dawn {
|
||||
class NewTrueTypeFace {
|
||||
protected:
|
||||
public:
|
||||
std::vector<NewTrueTypeFaceTexture*> textures;
|
||||
std::map<struct NewTrueTypeFaceTextureStyle, NewTrueTypeFaceTexture*> texturesByStyle;
|
||||
std::map<struct NewTrueTypeFaceTextureStyle, std::vector<usagelockid_t>> locksByStyle;
|
||||
std::map<usagelockid_t, struct NewTrueTypeFaceTextureStyle> stylesByLock;
|
||||
FT_Face face;
|
||||
|
||||
public:
|
||||
/**
|
||||
* Create a new TrueTypeFace object. TrueType face holds multiple textures
|
||||
* of various styles of this face. This face may be "Arial Bold" and have
|
||||
@ -51,7 +51,5 @@ namespace Dawn {
|
||||
* Destroys this TrueTypeFace object, and all textures associated with it.
|
||||
*/
|
||||
~NewTrueTypeFace();
|
||||
|
||||
friend class NewTrueType;
|
||||
};
|
||||
}
|
@ -3,7 +3,7 @@
|
||||
// This software is released under the MIT License.
|
||||
// https://opensource.org/licenses/MIT
|
||||
|
||||
#include "NewTrueTypeFaceTexture.hpp"
|
||||
#include "NewTrueTypeFace.hpp"
|
||||
|
||||
using namespace Dawn;
|
||||
|
||||
@ -13,11 +13,15 @@ NewTrueTypeFaceTexture::NewTrueTypeFaceTexture(
|
||||
struct NewTrueTypeFaceTextureStyle style
|
||||
) {
|
||||
assertNotNull(trueTypeFace);
|
||||
assertTrue(this->style.fontSize < 256);
|
||||
assertTrue(style.fontSize < 256);
|
||||
|
||||
this->trueTypeFace = trueTypeFace;
|
||||
this->face = &face;
|
||||
this->style = style;
|
||||
|
||||
this->locks.onEmpty = [&]() {
|
||||
delete this;
|
||||
};
|
||||
|
||||
// Set freetype font size prior to baking.
|
||||
if(FT_Set_Pixel_Sizes(face, 0, this->style.fontSize)) {
|
||||
@ -85,4 +89,14 @@ NewTrueTypeFaceTexture::NewTrueTypeFaceTexture(
|
||||
|
||||
struct NewTrueTypeCharacter NewTrueTypeFaceTexture::getCharacterData(FT_ULong c) {
|
||||
return this->characterData[c];
|
||||
}
|
||||
|
||||
NewTrueTypeFaceTexture::~NewTrueTypeFaceTexture() {
|
||||
auto it = std::find(
|
||||
this->trueTypeFace->textures.begin(),
|
||||
this->trueTypeFace->textures.end(),
|
||||
this
|
||||
);
|
||||
assertTrue(it != this->trueTypeFace->textures.end());
|
||||
this->trueTypeFace->textures.erase(it);
|
||||
}
|
@ -11,7 +11,6 @@
|
||||
|
||||
namespace Dawn {
|
||||
class NewTrueTypeFace;
|
||||
class NewTrueType;
|
||||
|
||||
typedef uint32_t newtruetypelock_t;
|
||||
|
||||
@ -26,17 +25,19 @@ namespace Dawn {
|
||||
struct NewTrueTypeFaceTextureStyle {
|
||||
uint32_t fontSize;
|
||||
flag_t style;
|
||||
|
||||
bool operator < (const struct NewTrueTypeFaceTextureStyle& r) const {
|
||||
return std::tie(fontSize, style) < std::tie(r.fontSize, r.style);
|
||||
}
|
||||
};
|
||||
|
||||
class NewTrueTypeFaceTexture {
|
||||
protected:
|
||||
public:
|
||||
FT_Face *face;
|
||||
NewTrueTypeFace *trueTypeFace;
|
||||
std::map<FT_ULong, struct NewTrueTypeCharacter> characterData;
|
||||
struct NewTrueTypeFaceTextureStyle style;
|
||||
UsageLock locks;
|
||||
|
||||
public:
|
||||
Texture texture;
|
||||
|
||||
/**
|
||||
@ -66,6 +67,5 @@ namespace Dawn {
|
||||
~NewTrueTypeFaceTexture();
|
||||
|
||||
friend class NewTrueTypeFace;
|
||||
friend class NewTrueType;
|
||||
};
|
||||
}
|
Reference in New Issue
Block a user