From 498c34273b59b957504c82fe396595a75dcfb3b0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=BA=91=E9=A3=8E?= Date: Wed, 14 Jun 2023 09:17:38 +0800 Subject: [PATCH] Larger debug text for retina display (#3109) * Add Init.Resolution.scaleDebug * clamp scale to BGFX_CONFIG_MAX_SCALE_DEBUG * update version * Use textWdith/textHeight in helloworld --- bindings/bf/bgfx.bf | 1 + bindings/cs/bgfx.cs | 1 + bindings/d/types.d | 3 ++- bindings/zig/bgfx.zig | 1 + examples/00-helloworld/helloworld.cpp | 8 +++++--- include/bgfx/bgfx.h | 1 + include/bgfx/c99/bgfx.h | 1 + include/bgfx/defines.h | 2 +- scripts/bgfx.idl | 3 ++- src/bgfx.cpp | 18 +++++++++++------- src/bgfx_p.h | 5 +++-- src/config.h | 4 ++++ 12 files changed, 33 insertions(+), 15 deletions(-) diff --git a/bindings/bf/bgfx.bf b/bindings/bf/bgfx.bf index 609f2fe77..8d8b06691 100644 --- a/bindings/bf/bgfx.bf +++ b/bindings/bf/bgfx.bf @@ -2114,6 +2114,7 @@ public static class bgfx public uint32 reset; public uint8 numBackBuffers; public uint8 maxFrameLatency; + public uint8 scaleDebug; } [CRepr] diff --git a/bindings/cs/bgfx.cs b/bindings/cs/bgfx.cs index ba5ab70d1..c1b5d994f 100644 --- a/bindings/cs/bgfx.cs +++ b/bindings/cs/bgfx.cs @@ -2093,6 +2093,7 @@ public static partial class bgfx public uint reset; public byte numBackBuffers; public byte maxFrameLatency; + public byte scaleDebug; } public unsafe struct Init diff --git a/bindings/d/types.d b/bindings/d/types.d index ae44638f4..e5d06eb9b 100644 --- a/bindings/d/types.d +++ b/bindings/d/types.d @@ -18,7 +18,7 @@ enum expandEnum(EnumType, string fqnEnumType = EnumType.stringof) = (){ extern(C) @nogc nothrow: -enum uint BGFX_API_VERSION = 118; +enum uint BGFX_API_VERSION = 119; alias bgfx_view_id_t = ushort; @@ -886,6 +886,7 @@ struct bgfx_resolution_t uint reset; /// Reset parameters. ubyte numBackBuffers; /// Number of back buffers. ubyte maxFrameLatency; /// Maximum frame latency. + ubyte scaleDebug; /// Scale factor for debug view. } /// Configurable runtime limits parameters. diff --git a/bindings/zig/bgfx.zig b/bindings/zig/bgfx.zig index 465fa5027..dc854a4f0 100644 --- a/bindings/zig/bgfx.zig +++ b/bindings/zig/bgfx.zig @@ -1338,6 +1338,7 @@ pub const Caps = extern struct { reset: u32, numBackBuffers: u8, maxFrameLatency: u8, + scaleDebug: u8, }; pub const Init = extern struct { diff --git a/examples/00-helloworld/helloworld.cpp b/examples/00-helloworld/helloworld.cpp index 884a9ab0a..37f8e0a3f 100644 --- a/examples/00-helloworld/helloworld.cpp +++ b/examples/00-helloworld/helloworld.cpp @@ -90,9 +90,12 @@ public: // Use debug font to print information about this example. bgfx::dbgTextClear(); + + const bgfx::Stats* stats = bgfx::getStats(); + bgfx::dbgTextImage( - bx::max(uint16_t(m_width /2/8 ), 20)-20 - , bx::max(uint16_t(m_height/2/16), 6)-6 + bx::max(uint16_t(stats->textWidth/2), 20)-20 + , bx::max(uint16_t(stats->textHeight/2), 6)-6 , 40 , 12 , s_logo @@ -103,7 +106,6 @@ public: bgfx::dbgTextPrintf(80, 1, 0x0f, "\x1b[;0m \x1b[;1m \x1b[; 2m \x1b[; 3m \x1b[; 4m \x1b[; 5m \x1b[; 6m \x1b[; 7m \x1b[0m"); bgfx::dbgTextPrintf(80, 2, 0x0f, "\x1b[;8m \x1b[;9m \x1b[;10m \x1b[;11m \x1b[;12m \x1b[;13m \x1b[;14m \x1b[;15m \x1b[0m"); - const bgfx::Stats* stats = bgfx::getStats(); bgfx::dbgTextPrintf(0, 2, 0x0f, "Backbuffer %dW x %dH in pixels, debug text %dW x %dH in characters." , stats->width , stats->height diff --git a/include/bgfx/bgfx.h b/include/bgfx/bgfx.h index 2b62fbbaf..1c9feb7fc 100644 --- a/include/bgfx/bgfx.h +++ b/include/bgfx/bgfx.h @@ -647,6 +647,7 @@ namespace bgfx uint32_t reset; //!< Reset parameters. uint8_t numBackBuffers; //!< Number of back buffers. uint8_t maxFrameLatency; //!< Maximum frame latency. + uint8_t scaleDebug; //!< Scale factor for debug view. }; /// Initialization parameters used by `bgfx::init`. diff --git a/include/bgfx/c99/bgfx.h b/include/bgfx/c99/bgfx.h index ae34f49c9..1a6411cd9 100644 --- a/include/bgfx/c99/bgfx.h +++ b/include/bgfx/c99/bgfx.h @@ -639,6 +639,7 @@ typedef struct bgfx_resolution_s uint32_t reset; /** Reset parameters. */ uint8_t numBackBuffers; /** Number of back buffers. */ uint8_t maxFrameLatency; /** Maximum frame latency. */ + uint8_t scaleDebug; /** Scale factor for debug view. */ } bgfx_resolution_t; diff --git a/include/bgfx/defines.h b/include/bgfx/defines.h index 809efff0d..068fc9cc2 100644 --- a/include/bgfx/defines.h +++ b/include/bgfx/defines.h @@ -15,7 +15,7 @@ #ifndef BGFX_DEFINES_H_HEADER_GUARD #define BGFX_DEFINES_H_HEADER_GUARD -#define BGFX_API_VERSION UINT32_C(118) +#define BGFX_API_VERSION UINT32_C(119) /** * Color RGB/alpha/depth write. When it's not specified write will be disabled. diff --git a/scripts/bgfx.idl b/scripts/bgfx.idl index a0d9428c6..0d4b37595 100644 --- a/scripts/bgfx.idl +++ b/scripts/bgfx.idl @@ -1,7 +1,7 @@ -- vim: syntax=lua -- bgfx interface -version(118) +version(119) typedef "bool" typedef "char" @@ -791,6 +791,7 @@ struct.Resolution { ctor } .reset "uint32_t" --- Reset parameters. .numBackBuffers "uint8_t" --- Number of back buffers. .maxFrameLatency "uint8_t" --- Maximum frame latency. + .scaleDebug "uint8_t" --- Scale factor for debug view. --- Configurable runtime limits parameters. struct.Limits { namespace = "Init" } diff --git a/src/bgfx.cpp b/src/bgfx.cpp index 323b26238..663d8d137 100644 --- a/src/bgfx.cpp +++ b/src/bgfx.cpp @@ -669,7 +669,7 @@ namespace bgfx static const uint32_t numBatchVertices = numCharsPerBatch*4; static const uint32_t numBatchIndices = numCharsPerBatch*6; - void TextVideoMemBlitter::init() + void TextVideoMemBlitter::init(uint8_t scale) { BGFX_CHECK_API_THREAD(); m_layout @@ -709,6 +709,7 @@ namespace bgfx m_vb = s_ctx->createTransientVertexBuffer(numBatchVertices*m_layout.m_stride, &m_layout); m_ib = s_ctx->createTransientIndexBuffer(numBatchIndices*2); + m_scale = bx::max(scale, 1); } void TextVideoMemBlitter::shutdown() @@ -789,7 +790,8 @@ namespace bgfx const float texelHeightHalf = RendererType::Direct3D9 == g_caps.rendererType ? texelHeight*0.5f : 0.0f; const float utop = (_mem.m_small ? 0.0f : 8.0f)*texelHeight + texelHeightHalf; const float ubottom = (_mem.m_small ? 8.0f : 24.0f)*texelHeight + texelHeightHalf; - const float fontHeight = (_mem.m_small ? 8.0f : 16.0f); + const float fontHeight = (_mem.m_small ? 8.0f : 16.0f)*_blitter.m_scale; + const float fontWidth = 8.0f * _blitter.m_scale; _renderCtx->blitSetup(_blitter); @@ -828,10 +830,10 @@ namespace bgfx Vertex vert[4] = { - { (xx )*8.0f, (yy )*fontHeight, 0.0f, fg, bg, (ch )*8.0f*texelWidth - texelWidthHalf, utop }, - { (xx+1)*8.0f, (yy )*fontHeight, 0.0f, fg, bg, (ch+1)*8.0f*texelWidth - texelWidthHalf, utop }, - { (xx+1)*8.0f, (yy+1)*fontHeight, 0.0f, fg, bg, (ch+1)*8.0f*texelWidth - texelWidthHalf, ubottom }, - { (xx )*8.0f, (yy+1)*fontHeight, 0.0f, fg, bg, (ch )*8.0f*texelWidth - texelWidthHalf, ubottom }, + { (xx )*fontWidth, (yy )*fontHeight, 0.0f, fg, bg, (ch )*8.0f*texelWidth - texelWidthHalf, utop }, + { (xx+1)*fontWidth, (yy )*fontHeight, 0.0f, fg, bg, (ch+1)*8.0f*texelWidth - texelWidthHalf, utop }, + { (xx+1)*fontWidth, (yy+1)*fontHeight, 0.0f, fg, bg, (ch+1)*8.0f*texelWidth - texelWidthHalf, ubottom }, + { (xx )*fontWidth, (yy+1)*fontHeight, 0.0f, fg, bg, (ch )*8.0f*texelWidth - texelWidthHalf, ubottom }, }; bx::memCopy(vertex, vert, sizeof(vert) ); @@ -1893,6 +1895,7 @@ namespace bgfx m_init.resolution.reset &= ~BGFX_RESET_INTERNAL_FORCE; m_init.resolution.numBackBuffers = bx::clamp(_init.resolution.numBackBuffers, 2, BGFX_CONFIG_MAX_BACK_BUFFERS); m_init.resolution.maxFrameLatency = bx::min(_init.resolution.maxFrameLatency, BGFX_CONFIG_MAX_FRAME_LATENCY); + m_init.resolution.scaleDebug = bx::clamp(_init.resolution.scaleDebug, 1, BGFX_CONFIG_MAX_SCALE_DEBUG); dump(m_init.resolution); if (true @@ -2029,7 +2032,7 @@ namespace bgfx dumpCaps(); - m_textVideoMemBlitter.init(); + m_textVideoMemBlitter.init(m_init.resolution.scaleDebug); m_clearQuad.init(); m_submit->m_transientVb = createTransientVertexBuffer(_init.limits.transientVbSize); @@ -3433,6 +3436,7 @@ namespace bgfx , reset(BGFX_RESET_NONE) , numBackBuffers(2) , maxFrameLatency(0) + , scaleDebug(0) { } diff --git a/src/bgfx_p.h b/src/bgfx_p.h index a1993f749..5a864de06 100644 --- a/src/bgfx_p.h +++ b/src/bgfx_p.h @@ -757,7 +757,7 @@ namespace bgfx struct TextVideoMemBlitter { - void init(); + void init(uint8_t scale); void shutdown(); TextureHandle m_texture; @@ -765,6 +765,7 @@ namespace bgfx TransientIndexBuffer* m_ib; VertexLayout m_layout; ProgramHandle m_program; + uint8_t m_scale; }; struct RendererContextI; @@ -3249,7 +3250,7 @@ namespace bgfx { BGFX_MUTEX_SCOPE(m_resourceApiLock); - m_submit->m_textVideoMem->resize(_small, (uint16_t)m_init.resolution.width, (uint16_t)m_init.resolution.height); + m_submit->m_textVideoMem->resize(_small, (uint16_t)m_init.resolution.width / m_init.resolution.scaleDebug , (uint16_t)m_init.resolution.height / m_init.resolution.scaleDebug ); m_submit->m_textVideoMem->clear(_attr); } diff --git a/src/config.h b/src/config.h index 9112fc981..8904e7b0b 100644 --- a/src/config.h +++ b/src/config.h @@ -381,6 +381,10 @@ BX_STATIC_ASSERT(bx::isPowerOf2(BGFX_CONFIG_MAX_VIEWS), "BGFX_CONFIG_MAX_VIEWS m # define BGFX_CONFIG_MAX_FRAME_LATENCY 3 #endif // BGFX_CONFIG_MAX_FRAME_LATENCY +#ifndef BGFX_CONFIG_MAX_SCALE_DEBUG +# define BGFX_CONFIG_MAX_SCALE_DEBUG 4 +#endif // BGFX_CONFIG_MAX_SCALE_DEBUG + #ifndef BGFX_CONFIG_PREFER_DISCRETE_GPU // On laptops with integrated and discrete GPU, prefer selection of discrete GPU. // nVidia and AMD, on Windows only.