add vertices draw limit after I accidentally removed it

This commit is contained in:
2026-02-23 00:27:51 +01:00
parent f5bb155b5c
commit 30b02c13ed
4 changed files with 31 additions and 18 deletions

View File

@ -48,7 +48,7 @@ constexpr int REPULSION_GRID_REFRESH = 5; // Grid rebuild freq
constexpr float VERTEX_SIZE = 0.5; constexpr float VERTEX_SIZE = 0.5;
constexpr Color VERTEX_COLOR = GREEN; constexpr Color VERTEX_COLOR = GREEN;
constexpr Color EDGE_COLOR = DARKGREEN; constexpr Color EDGE_COLOR = DARKGREEN;
constexpr int DRAW_VERTICES_LIMIT = 100000; constexpr int DRAW_VERTICES_LIMIT = 1000000;
// Klotski Drawing // Klotski Drawing
constexpr int BOARD_PADDING = 5; constexpr int BOARD_PADDING = 5;

View File

@ -89,6 +89,10 @@ public:
MassSpringSystem() { MassSpringSystem() {
#ifndef BARNES_HUT #ifndef BARNES_HUT
last_build = REPULSION_GRID_REFRESH; last_build = REPULSION_GRID_REFRESH;
std::cout << "Using uniform grid repulsion force calculation." << std::endl;
#else
std::cout << "Using Barnes-Hut + octree repulsion force calculation."
<< std::endl;
#endif #endif
#ifndef WEB #ifndef WEB

View File

@ -70,7 +70,11 @@ auto main(int argc, char *argv[]) -> int {
std::chrono::high_resolution_clock::now(); std::chrono::high_resolution_clock::now();
#endif #endif
while (timestep_accumulator > TIMESTEP) { // Do not try to catch up if we're falling behind. Frametimes would get
// larger, resulting in more catching up, resulting in even larger
// frametimes.
// while (timestep_accumulator > TIMESTEP) {
if (timestep_accumulator > TIMESTEP) {
mass_springs.ClearForces(); mass_springs.ClearForces();
mass_springs.CalculateSpringForces(); mass_springs.CalculateSpringForces();
mass_springs.CalculateRepulsionForces(); mass_springs.CalculateRepulsionForces();
@ -119,7 +123,8 @@ auto main(int argc, char *argv[]) -> int {
<< render_time_accumulator / loop_count << "." << std::endl; << render_time_accumulator / loop_count << "." << std::endl;
std::cout << " - Physics updates avg: " std::cout << " - Physics updates avg: "
<< static_cast<float>(update_accumulator) / loop_count << static_cast<float>(update_accumulator) / loop_count
<< "x per frame." << std::endl; << "x per frame (" << timestep_accumulator << "s remaining)."
<< std::endl;
last_print_time = GetTime(); last_print_time = GetTime();
physics_time_accumulator = std::chrono::duration<double, std::milli>(0); physics_time_accumulator = std::chrono::duration<double, std::milli>(0);
render_time_accumulator = std::chrono::duration<double, std::milli>(0); render_time_accumulator = std::chrono::duration<double, std::milli>(0);

View File

@ -68,6 +68,7 @@ auto Renderer::DrawMassSprings(const MassSpringSystem &mass_springs,
ZoneScoped; ZoneScoped;
// Prepare cube instancing // Prepare cube instancing
if (mass_springs.masses.size() < DRAW_VERTICES_LIMIT) {
if (transforms == nullptr) { if (transforms == nullptr) {
AllocateGraphInstancing(mass_springs); AllocateGraphInstancing(mass_springs);
} }
@ -79,6 +80,7 @@ auto Renderer::DrawMassSprings(const MassSpringSystem &mass_springs,
MatrixTranslate(mass.position.x, mass.position.y, mass.position.z); MatrixTranslate(mass.position.x, mass.position.y, mass.position.z);
++i; ++i;
} }
}
BeginTextureMode(render_target); BeginTextureMode(render_target);
ClearBackground(RAYWHITE); ClearBackground(RAYWHITE);
@ -97,12 +99,14 @@ auto Renderer::DrawMassSprings(const MassSpringSystem &mass_springs,
rlEnd(); rlEnd();
// Draw masses (instanced) // Draw masses (instanced)
if (mass_springs.masses.size() < DRAW_VERTICES_LIMIT) {
// NOTE: I don't know if drawing all this inside a shader would make it much // NOTE: I don't know if drawing all this inside a shader would make it much
// faster... // faster...
// The amount of data sent to the GPU would be reduced (just positions // The amount of data sent to the GPU would be reduced (just positions
// instead of matrices), but is this noticable for < 100000 cubes? // instead of matrices), but is this noticable for < 100000 cubes?
DrawMeshInstanced(cube_instance, vertex_mat, transforms, DrawMeshInstanced(cube_instance, vertex_mat, transforms,
mass_springs.masses.size()); mass_springs.masses.size());
}
// Mark winning states // Mark winning states
if (mark_solutions || connect_solutions) { if (mark_solutions || connect_solutions) {