[update] Improved the text rendering engine.

This commit is contained in:
falsycat 2019-10-14 00:00:00 +00:00
parent 6f6b08c06b
commit 3c441d5a5d
3 changed files with 24 additions and 24 deletions

View File

@ -41,17 +41,17 @@ class ResultScene : SceneInterface {
enum CubeInterval = 0.005; enum CubeInterval = 0.005;
/// ///
enum DescTextScale = vec3(-0.002, 0.002, 0.002); enum DescTextScale = vec3(-0.1, 0.1, 0.1);
/// ///
enum DescTextTranslation = vec3(0, -0.3, 0); enum DescTextTranslation = vec3(0, -0.3, 0);
/// ///
enum DescTextColor = vec4(0.2, 0.2, 0.2, 1); enum DescTextColor = vec4(0.2, 0.2, 0.2, 1);
/// ///
enum RankTextScale = vec3(-0.002, 0.002, 0.002); enum RankTextScale = vec3(-0.1, 0.1, 0.1);
/// ///
enum RankTextTranslation = vec3(0, -0.5, 0); enum RankTextTranslation = vec3(0, -0.5, 0);
/// ///
enum ScoreTextScale = vec3(-0.002, 0.002, 0.002); enum ScoreTextScale = vec3(-0.1, 0.1, 0.1);
/// ///
enum ScoreTextTranslation = vec3(0, -0.55, 0); enum ScoreTextTranslation = vec3(0, -0.55, 0);

View File

@ -28,11 +28,11 @@ import sj.FontSet,
class SelectScene : SceneInterface { class SelectScene : SceneInterface {
public: public:
/// ///
enum DescTextScale = vec3(-0.002, 0.002, 0.002); enum DescTextScale = vec3(-0.1, 0.1, 0.1);
/// ///
enum DescTextTranslation = vec3(0, -0.3, 0); enum DescTextTranslation = vec3(0, -0.3, 0);
/// ///
enum DescTextColor = vec4(0.02, 0.02, 0.02, 1); enum DescTextColor = vec4(0.2, 0.2, 0.2, 1);
/// ///
this(LobbyWorld lobby, ProgramSet program, FontSet fonts, Music[] music_list) { this(LobbyWorld lobby, ProgramSet program, FontSet fonts, Music[] music_list) {
@ -140,7 +140,7 @@ private abstract class AbstractSceneState {
enum LoadingCubeInterval = 0.06; enum LoadingCubeInterval = 0.06;
enum TitleTextSize = 40; enum TitleTextSize = 40;
enum TitleTextScale = vec3(-0.002, 0.002, 0.002); enum TitleTextScale = vec3(-0.1, 0.1, 0.1);
enum TitleTextTranslation = vec3(0, -0.4, 0); enum TitleTextTranslation = vec3(0, -0.4, 0);
enum TitleTextRandomTranslationRange = 0.02; enum TitleTextRandomTranslationRange = 0.02;
@ -293,12 +293,6 @@ private class MusicWaitState : AbstractSceneState {
void Initialize(size_t music_index) { void Initialize(size_t music_index) {
music_index_ = music_index; music_index_ = music_index;
music.PlayForPreview(); music.PlayForPreview();
with (owner.title_text_) {
matrix.scale = TitleTextScale;
matrix.translation =
TitleTextTranslation + vec3(-modelWidth/2*matrix.scale.x, 0, 0);
}
} }
override UpdateResult Update(KeyInput input) { override UpdateResult Update(KeyInput input) {
owner.lobby_.cube_matrix.rotation += CubeRotationSpeed; owner.lobby_.cube_matrix.rotation += CubeRotationSpeed;

View File

@ -47,31 +47,37 @@ class Text {
int bmp_width; int bmp_width;
size_t glyph_count; size_t glyph_count;
foreach (c; text) { foreach (c; text) {
if (c == ' ') continue;
with (gloader) { with (gloader) {
character = c; character = c;
Load(face).enforce; Load(face).enforce;
} }
const m = &face.glyph.metrics;
const mwidth = m.width *1f / face.max_advance_width;
const mheight = m.height *1f / face.max_advance_width;
const advance = m.horiAdvance *1f / face.max_advance_width;
const bear_x = m.horiBearingX*1f / face.max_advance_width;
const bear_y = m.horiBearingY*1f / face.max_advance_width;
if (mwidth == 0 || mheight == 0) {
model_width_ += advance;
continue;
}
const bitmap = face.EnforceGlyphBitmap(); const bitmap = face.EnforceGlyphBitmap();
const srcsz = vec2i(bitmap.width, bitmap.rows); const srcsz = vec2i(bitmap.width, bitmap.rows);
CopyRawPixels(bitmap.buffer, srcsz, pixels.ptr, texsz, vec2i(bmp_width, 0)); CopyRawPixels(bitmap.buffer, srcsz, pixels.ptr, texsz, vec2i(bmp_width, 0));
const m = &face.glyph.metrics;
const bearing_x = m.horiBearingX*1f / m.width * srcsz.x;
const bearing_y = m.horiBearingY*1f / m.height * srcsz.y;
const advance = m.horiAdvance *1f / m.width * srcsz.x;
const posleft = model_width_ + bearing_x;
const posright = posleft + srcsz.x;
const postop = bearing_y;
const posbottom = postop - srcsz.y;
const uvleft = bmp_width*1f / texsz.x; const uvleft = bmp_width*1f / texsz.x;
const uvright = (bmp_width + srcsz.x)*1f / texsz.x; const uvright = (bmp_width + srcsz.x)*1f / texsz.x;
const uvtop = 0f; const uvtop = 0f;
const uvbottom = srcsz.y*1f / texsz.y; const uvbottom = srcsz.y*1f / texsz.y;
const posleft = model_width_ + bear_x;
const posright = posleft + mwidth;
const postop = bear_y;
const posbottom = postop - mheight;
*vertices_ptr++ = posleft; *vertices_ptr++ = posleft;
*vertices_ptr++ = postop; *vertices_ptr++ = postop;
*vertices_ptr++ = 0; *vertices_ptr++ = 0;