From 9cc8eaf41e2effca3ba2c1bcf6da853121695473 Mon Sep 17 00:00:00 2001 From: Ketmar Dark Date: Wed, 20 Apr 2016 21:27:05 +0300 Subject: [PATCH] better console font, etc --- d2dfont.d | 52 +++++++++++++++++++++++++------ data/console/confont.png | Bin 0 -> 2692 bytes data/{ => console}/sigil_of_baphomet.png | Bin render.d | 20 +++++++----- 4 files changed, 56 insertions(+), 16 deletions(-) create mode 100644 data/console/confont.png rename data/{ => console}/sigil_of_baphomet.png (100%) diff --git a/d2dfont.d b/d2dfont.d index 58d94e1..e7580aa 100644 --- a/d2dfont.d +++ b/d2dfont.d @@ -186,15 +186,6 @@ void fontDrawText (ref D2DFont font, int x, int y, const(char)[] str) { } -public int conCharHeight () { return smbwfont.vga.ptr[32].height; } -public int conCharWidth (char ch) { auto v = smbwfont.vga.ptr[ch]; return (v !is null ? v.width : 0); } - -public void conDrawChar (char ch) { - bindTexture(smbwfont.fontAtlas.tex.id); - glCallList(cast(uint)ch+smbwfont.listBase); -} - - int fontTextWidth (ref D2DFont font, const(char)[] str) { int res = 0; foreach (char ch; str) { @@ -224,3 +215,46 @@ public int bfTextWidth (const(char)[] str) { return fontTextWidth(bffont, str); public int smTextHeight (const(char)[] str) { return fontTextHeight(smfont, str); } public int bfTextHeight (const(char)[] str) { return fontTextHeight(bffont, str); } + + +// ////////////////////////////////////////////////////////////////////////// // +__gshared Texture conFontTex; +__gshared GLuint conListBase; +enum ConCharWdt = 10; + +public void loadConFont () { + conFontTex = new Texture("console/confont.png", Texture.Option.Nearest); + conListBase = glGenLists(256); + glPushMatrix(); + scope(exit) glPopMatrix(); + foreach (ubyte cc; 0..256) { + int x = 0, y = 0; + if (cc > ' ') { x = ((cc-32)%16)*16; y = ((cc-32)/16)*16; } + glNewList(conListBase+cc, GL_COMPILE); + // draw char sprite + int x0 = 0; + int y0 = 0; + int x1 = ConCharWdt; + int y1 = 16; + float tx0 = x/256.0f, ty0 = y/256.0f; + float tx1 = (x+ConCharWdt)/256.0f, ty1 = (y+16)/256.0f; + glBegin(GL_QUADS); + glTexCoord2f(tx0, ty0); glVertex2i(x0, y0); // top-left + glTexCoord2f(tx1, ty0); glVertex2i(x1, y0); // top-right + glTexCoord2f(tx1, ty1); glVertex2i(x1, y1); // bottom-right + glTexCoord2f(tx0, ty1); glVertex2i(x0, y1); // bottom-left + glEnd(); + // move coords + glTranslatef(ConCharWdt, 0, 0); + // done + glEndList(); + } +} + +public int conCharHeight () { pragma(inline, true); return 16; } +public int conCharWidth (char ch) { pragma(inline, true); return ConCharWdt; } + +public void conDrawChar (char ch) { + bindTexture(conFontTex.id); + glCallList(cast(uint)ch+conListBase); +} diff --git a/data/console/confont.png b/data/console/confont.png new file mode 100644 index 0000000000000000000000000000000000000000..5cba6754e11c960e5c09a4c86b3f67acd62aa588 GIT binary patch literal 2692 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 F{{S*jun7PF literal 0 HcwPel00001 diff --git a/data/sigil_of_baphomet.png b/data/console/sigil_of_baphomet.png similarity index 100% rename from data/sigil_of_baphomet.png rename to data/console/sigil_of_baphomet.png diff --git a/render.d b/render.d index b76c375..70548cf 100644 --- a/render.d +++ b/render.d @@ -77,6 +77,7 @@ __gshared bool scanlines = false; __gshared bool doLighting = true; __gshared bool gamePaused = false; __gshared bool rConsoleVisible = false; +__gshared int rConsoleHeight = 16*3; shared bool editMode = false; shared bool vquitRequested = false; @@ -133,6 +134,9 @@ shared static this () { conRegVar!doLighting("r_lighting", "dynamic lighting"); conRegVar!gamePaused("g_pause", "pause game"); conRegVar!rConsoleVisible("r_console", "console visibility"); + conRegVar!rConsoleHeight(16*3, vlHeight, "r_conheight"); + rConsoleHeight = vlHeight-vlHeight/3; + rConsoleHeight = vlHeight/2; conRegVar!frameInterpolation("r_interpolation", "interpolate camera and sprite movement"); conRegVar!scale(1, 2, "r_scale"); conRegFunc!({ @@ -262,8 +266,9 @@ public void initOpenGL () { editorImg.imageData.colors[] = Color(0, 0, 0, 0); fboEditor = new FBO(vlWidth, vlHeight, Texture.Option.Nearest); - texSigil = new Texture("sigil_of_baphomet.png", Texture.Option.Nearest); + texSigil = new Texture("console/sigil_of_baphomet.png", Texture.Option.Nearest); fboConsole = new FBO(vlWidth, vlHeight, Texture.Option.Nearest); + loadConFont(); // setup matrices glMatrixMode(GL_MODELVIEW); @@ -277,6 +282,7 @@ public void initOpenGL () { // ////////////////////////////////////////////////////////////////////////// // void renderConsoleFBO () { + enum XOfs = 2; __gshared ulong lastChange = 0; if (lastChange == cbufLastChange) return; // rerender console @@ -298,7 +304,7 @@ void renderConsoleFBO () { glBlendFunc(GL_SRC_ALPHA, GL_ONE); // draw sigil glColor4f(1.0f, 1.0f, 1.0f, 0.2f); - drawAtXY(texSigil, (me.width-texSigil.width)/2, (me.height-texSigil.height)/2); + drawAtXY(texSigil, (me.width-texSigil.width)/2, (vlHeight-rConsoleHeight)/2+(me.height-texSigil.height)/2); // draw text glColor4f(0.0f, 1.0f, 0.0f, 1.0f); int y = me.height-conCharHeight-2; @@ -306,13 +312,13 @@ void renderConsoleFBO () { //scope(exit) glPopAttrib(); glPushMatrix(); scope(exit) glPopMatrix(); - glTranslatef(0, y, 0); + glTranslatef(XOfs, y, 0); foreach (auto line; conbufLinesRev) { if (line.length == 0) { glPopMatrix(); glPushMatrix(); y -= conCharHeight; - glTranslatef(2, y, 0); + glTranslatef(XOfs, y, 0); } else { usize pos = line.length; for (;;) { @@ -320,7 +326,7 @@ void renderConsoleFBO () { usize sp = pos; while (sp > 0) { char ch = line[sp-1]; - if (w+conCharWidth(ch) > me.width-4) break; + if (w+conCharWidth(ch) > me.width-XOfs*2) break; w += conCharWidth(ch); --sp; } @@ -328,7 +334,7 @@ void renderConsoleFBO () { glPopMatrix(); glPushMatrix(); y -= conCharHeight; - glTranslatef(2, y, 0); + glTranslatef(XOfs, y, 0); if (sp == 0 || y < 0) break; pos = sp; } @@ -1118,7 +1124,7 @@ void renderScene (MonoTime curtime) { glEnable(GL_BLEND); glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); glColor4f(1.0f, 1.0f, 1.0f, 0.7f); - drawAtXY(fboConsole.tex, 0, 0-vlHeight/3, mirrorY:true); + drawAtXY(fboConsole.tex, 0, rConsoleHeight-vlHeight, mirrorY:true); } } -- 2.11.4.GIT