Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Make maximum amount of text batches configurable via game.project. #8719

Merged
merged 1 commit into from
Mar 28, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -214,6 +214,10 @@ max_characters.type = number
max_characters.help = maximum number of characters (text) that can be displayed each frame
max_characters.default = 8192

max_font_batches.type = number
max_font_batches.help = maximum number of text batches
max_font_batches.default = 128

max_debug_vertices.type = number
max_debug_vertices.help = maximum number of debug vertices. Used for physics shape rendering among other things, 10000 by default
max_debug_vertices.default = 10000
Expand Down
5 changes: 5 additions & 0 deletions editor/resources/meta.edn
Original file line number Diff line number Diff line change
Expand Up @@ -276,6 +276,11 @@
"maximum number of characters (text) that can be displayed each frame",
:default 8192,
:path ["graphics" "max_characters"]}
{:type :integer,
:help
"maximum number of text that can be displayed each frame",
:default 128,
:path ["graphics" "max_font_batches"]}
{:type :integer,
:help
"maximum number of debug vertices, used for physics shape rendering among other things, 10000 by default",
Expand Down
1 change: 1 addition & 0 deletions editor/test/resources/save_data_project/game.project
Original file line number Diff line number Diff line change
Expand Up @@ -183,6 +183,7 @@ default_texture_min_filter = nearest
default_texture_mag_filter = nearest
max_draw_calls = 512
max_characters = 4096
max_font_batches = 128
max_debug_vertices = 8192
texture_profiles = /checked.texture_profiles
verify_graphics_calls = 0
Expand Down
1 change: 1 addition & 0 deletions engine/engine/src/engine.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1022,6 +1022,7 @@ namespace dmEngine
#else
render_params.m_MaxDebugVertexCount = 0;
#endif
render_params.m_MaxBatches = (uint32_t) dmConfigFile::GetInt(engine->m_Config, "graphics.max_font_batches", 128);
engine->m_RenderContext = dmRender::NewRenderContext(engine->m_GraphicsContext, render_params);

dmGameObject::Initialize(engine->m_Register, engine->m_GOScriptContext);
Expand Down
1 change: 1 addition & 0 deletions engine/gamesys/src/gamesys/test/fontview/fontview.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -152,6 +152,7 @@ namespace dmFontView
render_params.m_MaxRenderTypes = 10;
render_params.m_MaxInstances = 100;
render_params.m_MaxCharacters = 1024;
render_params.m_MaxBatches = 128;
context->m_RenderContext = dmRender::NewRenderContext(context->m_GraphicsContext, render_params);
dmRender::SetViewMatrix(context->m_RenderContext, Matrix4::identity());
dmRender::SetProjectionMatrix(context->m_RenderContext, Matrix4::identity());
Expand Down
1 change: 1 addition & 0 deletions engine/gamesys/src/gamesys/test/test_gamesys.h
Original file line number Diff line number Diff line change
Expand Up @@ -488,6 +488,7 @@ void GamesysTest<T>::SetUp()
render_params.m_MaxRenderTargets = 10;
render_params.m_ScriptContext = m_ScriptContext;
render_params.m_MaxCharacters = 256;
render_params.m_MaxBatches = 128;
m_RenderContext = dmRender::NewRenderContext(m_GraphicsContext, render_params);

dmInput::NewContextParams input_params;
Expand Down
6 changes: 2 additions & 4 deletions engine/render/src/render/font_renderer.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -398,7 +398,7 @@ namespace dmRender
return font_map->m_Material;
}

void InitializeTextContext(HRenderContext render_context, uint32_t max_characters)
void InitializeTextContext(HRenderContext render_context, uint32_t max_characters, uint32_t max_batches)
{
DM_STATIC_ASSERT(sizeof(GlyphVertex) % 16 == 0, Invalid_Struct_Size);
DM_STATIC_ASSERT( MAX_FONT_RENDER_CONSTANTS == MAX_TEXT_RENDER_CONSTANTS, Constant_Arrays_Must_Have_Same_Size );
Expand Down Expand Up @@ -434,8 +434,6 @@ namespace dmRender

dmGraphics::DeleteVertexStreamDeclaration(stream_declaration);

// Arbitrary number
const uint32_t max_batches = 128;
text_context.m_ConstantBuffers.SetCapacity(max_batches); // 1:1 index mapping with render object
text_context.m_RenderObjects.SetCapacity(max_batches);
text_context.m_RenderObjectIndex = 0;
Expand Down Expand Up @@ -1053,7 +1051,7 @@ namespace dmRender
GlyphVertex* vertices = (GlyphVertex*)text_context.m_ClientBuffer;

if (text_context.m_RenderObjectIndex >= text_context.m_RenderObjects.Size()) {
dmLogWarning("Fontrenderer: Render object count reached limit (%d)", text_context.m_RenderObjectIndex);
dmLogWarning("Fontrenderer: Render object count reached limit (%d). Increase the capacity with graphics.max_font_batches", text_context.m_RenderObjectIndex);
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

👍

return;
}

Expand Down
2 changes: 1 addition & 1 deletion engine/render/src/render/font_renderer.h
Original file line number Diff line number Diff line change
Expand Up @@ -174,7 +174,7 @@ namespace dmRender
*/
HMaterial GetFontMapMaterial(HFontMap font_map);

void InitializeTextContext(HRenderContext render_context, uint32_t max_characters);
void InitializeTextContext(HRenderContext render_context, uint32_t max_characters, uint32_t max_batches);
void FinalizeTextContext(HRenderContext render_context);

const int MAX_FONT_RENDER_CONSTANTS = 16;
Expand Down
2 changes: 1 addition & 1 deletion engine/render/src/render/render.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -124,7 +124,7 @@ namespace dmRender
InitializeDebugRenderer(context, params.m_MaxDebugVertexCount, params.m_VertexShaderDesc, params.m_VertexShaderDescSize, params.m_FragmentShaderDesc, params.m_FragmentShaderDescSize);
}

InitializeTextContext(context, params.m_MaxCharacters);
InitializeTextContext(context, params.m_MaxCharacters, params.m_MaxBatches);

context->m_OutOfResources = 0;

Expand Down
1 change: 1 addition & 0 deletions engine/render/src/render/render.h
Original file line number Diff line number Diff line change
Expand Up @@ -128,6 +128,7 @@ namespace dmRender
uint32_t m_VertexShaderDescSize;
uint32_t m_FragmentShaderDescSize;
uint32_t m_MaxCharacters;
uint32_t m_MaxBatches;
uint32_t m_CommandBufferSize;
/// Max debug vertex count
/// NOTE: This is per debug-type and not the total sum
Expand Down
1 change: 1 addition & 0 deletions engine/render/src/test/test_material.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -56,6 +56,7 @@ class dmRenderMaterialTest : public jc_test_base_class
m_GraphicsContext = dmGraphics::NewContext(graphics_context_params);
m_Params.m_ScriptContext = dmScript::NewContext(0, 0, true);
m_Params.m_MaxCharacters = 256;
m_Params.m_MaxBatches = 128;
m_RenderContext = dmRender::NewRenderContext(m_GraphicsContext, m_Params);
}
virtual void TearDown()
Expand Down
1 change: 1 addition & 0 deletions engine/render/src/test/test_render.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -69,6 +69,7 @@ class dmRenderTest : public jc_test_base_class
params.m_ScriptContext = m_ScriptContext;
params.m_MaxDebugVertexCount = 256;
params.m_MaxCharacters = 256;
params.m_MaxBatches = 128;
m_Context = dmRender::NewRenderContext(m_GraphicsContext, params);

dmRender::FontMapParams font_map_params;
Expand Down
1 change: 1 addition & 0 deletions engine/render/src/test/test_render_buffer.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,7 @@ class dmRenderBufferTest : public jc_test_base_class
m_GraphicsContext = dmGraphics::NewContext(graphics_context_params);
m_Params.m_ScriptContext = dmScript::NewContext(0, 0, true);
m_Params.m_MaxCharacters = 256;
m_Params.m_MaxBatches = 128;
m_RenderContext = dmRender::NewRenderContext(m_GraphicsContext, m_Params);

m_MultiBufferingRequired = m_RenderContext->m_MultiBufferingRequired;
Expand Down
1 change: 1 addition & 0 deletions engine/render/src/test/test_render_script.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -101,6 +101,7 @@ class dmRenderScriptTest : public jc_test_base_class
params.m_MaxRenderTargets = 1;
params.m_MaxInstances = 64;
params.m_MaxCharacters = 32;
params.m_MaxBatches = 128;
m_Context = dmRender::NewRenderContext(m_GraphicsContext, params);

dmGraphics::ShaderDesc::Shader shader_ddf;
Expand Down