Update test

This commit is contained in:
Abdelrahman Said 2025-05-18 21:17:07 +01:00
parent 7c79190a18
commit e812b36604
4 changed files with 21 additions and 28 deletions

View File

@ -1,6 +1,6 @@
CC = clang CC = clang
CFLAGS = -g -O3 -Iraylib/include -Iwapp/src CFLAGS = -g -O3 -Iraylib/include -Iwapp/src
LDFLAGS = '-Wl,-rpath,$$ORIGIN/raylib/lib' -Lraylib/lib -lraylib -lprofiler LDFLAGS = '-Wl,-rpath,$$ORIGIN/raylib/lib' -Lraylib/lib -lraylib
.PHONY: all raylib no_dod dod .PHONY: all raylib no_dod dod

View File

@ -10,7 +10,7 @@
#define BG_COLOR (Color){.r = 0xea, .g = 0xf2, .b = 0xe3, .a = 0xff} #define BG_COLOR (Color){.r = 0xea, .g = 0xf2, .b = 0xe3, .a = 0xff}
#define FG_COLOR (Color){.r = 0x42, .g = 0x4C, .b = 0x55, .a = 0xff} #define FG_COLOR (Color){.r = 0x42, .g = 0x4C, .b = 0x55, .a = 0xff}
#define ZONE_COLOR (Color){.r = 0xb4, .g = 0x65, .b = 0x4a, .a = 0xff} #define ZONE_COLOR (Color){.r = 0xb4, .g = 0x65, .b = 0x4a, .a = 0xff}
#define WANDERER_COUNT 300000 #define WANDERER_COUNT 500000
#define ZONE_COUNT 5 #define ZONE_COUNT 5
#define WANDERER_SLOWDOWN_FACTOR 0.5f #define WANDERER_SLOWDOWN_FACTOR 0.5f
#define WANDERER_SPEEDUP_FACTOR 2.0f #define WANDERER_SPEEDUP_FACTOR 2.0f

29
dod.c
View File

@ -61,8 +61,7 @@ void init_scale_wanderer(Scale *scale, XOR256State *state);
void init_scale_zone(Scale *scale, XOR256State *state); void init_scale_zone(Scale *scale, XOR256State *state);
void init_velocity(Velocity *velocity, XOR256State *state); void init_velocity(Velocity *velocity, XOR256State *state);
void zero_velocity(Velocity *velocity, XOR256State *state); void zero_velocity(Velocity *velocity, XOR256State *state);
void check_collisions(u8 *tags, Rect *rects, u64 count); void update_positions(u8 *tags, Rect *rects, Velocity *velocities, u64 count);
void update_positions(const u8 *tags, Rect *rects, Velocity *velocities, u64 count);
void render_entities(const u8 *tags, const Rect *rects, u64 count); void render_entities(const u8 *tags, const Rect *rects, u64 count);
u64 collides(const Rect *rect, const Rect *collider); u64 collides(const Rect *rect, const Rect *collider);
f32 get_random_float(XOR256State *state); f32 get_random_float(XOR256State *state);
@ -70,7 +69,7 @@ f32 get_random_float(XOR256State *state);
int main(void) { int main(void) {
SetTraceLogLevel(LOG_NONE); SetTraceLogLevel(LOG_NONE);
InitWindow(WIDTH, HEIGHT, "DOD test"); InitWindow(WIDTH, HEIGHT, "DOD test");
SetTargetFPS(120); // SetTargetFPS(120);
Allocator arena = wapp_mem_arena_allocator_init(MB(20)); Allocator arena = wapp_mem_arena_allocator_init(MB(20));
assert(!wapp_mem_allocator_invalid(&arena)); assert(!wapp_mem_allocator_invalid(&arena));
@ -100,15 +99,13 @@ int main(void) {
break; break;
} }
check_collisions(manager.tags, manager.rects, manager.count);
update_positions(manager.tags, manager.rects, manager.velocities, manager.count); update_positions(manager.tags, manager.rects, manager.velocities, manager.count);
BeginDrawing(); BeginDrawing();
ClearBackground(BG_COLOR); ClearBackground(BG_COLOR);
render_entities(manager.tags, manager.rects, manager.count); // render_entities(manager.tags, manager.rects, manager.count);
DrawFPS(10, 10); DrawFPS(10, 10);
@ -170,11 +167,17 @@ void zero_velocity(Velocity *velocity, XOR256State *state) {
velocity->y = 0.0f; velocity->y = 0.0f;
} }
void update_positions(const u8 *tags, Rect *rects, Velocity *velocities, u64 count) { void update_positions(u8 *tags, Rect *rects, Velocity *velocities, u64 count) {
u8 index = 0; u8 index = 0;
f32 multipliers[2] = {1.0f, 0.5f}; f32 multipliers[2] = {1.0f, 0.5f};
persistent u64 inside_zone_mask = 0x7;
for (u64 i = ZONE_COUNT; i < count; ++i) {
tags[i] &= inside_zone_mask;
for (u64 j = 0; j < ZONE_COUNT; ++j) {
tags[i] |= collides(&rects[i], &rects[j]) << 3;
}
for (u64 i = 0; i < count; ++i) {
index = (tags[i] & ENTITY_TAG_INSIDE_ZONE) == ENTITY_TAG_INSIDE_ZONE; index = (tags[i] & ENTITY_TAG_INSIDE_ZONE) == ENTITY_TAG_INSIDE_ZONE;
rects[i].position.x += velocities[i].x * multipliers[index]; rects[i].position.x += velocities[i].x * multipliers[index];
@ -195,16 +198,6 @@ void update_positions(const u8 *tags, Rect *rects, Velocity *velocities, u64 cou
} }
} }
void check_collisions(u8 *tags, Rect *rects, u64 count) {
persistent u64 inside_zone_mask = 0x7;
for (u64 i = ZONE_COUNT; i < count; ++i) {
tags[i] &= inside_zone_mask;
for (u64 j = 0; j < ZONE_COUNT; ++j) {
tags[i] |= collides(&rects[i], &rects[j]) << 3;
}
}
}
void render_entities(const u8 *tags, const Rect *rects, u64 count) { void render_entities(const u8 *tags, const Rect *rects, u64 count) {
persistent RaylibDrawRectFunc renderers[2] = {DrawRectangle, DrawRectangleLines}; persistent RaylibDrawRectFunc renderers[2] = {DrawRectangle, DrawRectangleLines};
persistent Color colors[2] = {FG_COLOR, ZONE_COLOR}; persistent Color colors[2] = {FG_COLOR, ZONE_COLOR};

View File

@ -51,7 +51,7 @@ f32 get_random_float(XOR256State *state);
int main(void) { int main(void) {
SetTraceLogLevel(LOG_NONE); SetTraceLogLevel(LOG_NONE);
InitWindow(WIDTH, HEIGHT, "No-DOD test"); InitWindow(WIDTH, HEIGHT, "No-DOD test");
SetTargetFPS(120); // SetTargetFPS(120);
Allocator arena = wapp_mem_arena_allocator_init(MB(20)); Allocator arena = wapp_mem_arena_allocator_init(MB(20));
XOR256State state = wapp_prng_xorshift_init_state(); XOR256State state = wapp_prng_xorshift_init_state();
@ -85,13 +85,13 @@ int main(void) {
ClearBackground(BG_COLOR); ClearBackground(BG_COLOR);
for (u64 i = 0; i < ZONE_COUNT; ++i) { // for (u64 i = 0; i < ZONE_COUNT; ++i) {
render_slow_zone(&(zones[i])); // render_slow_zone(&(zones[i]));
} // }
//
for (u64 i = 0; i < WANDERER_COUNT; ++i) { // for (u64 i = 0; i < WANDERER_COUNT; ++i) {
render_wanderer(&(wanderers[i])); // render_wanderer(&(wanderers[i]));
} // }
DrawFPS(10, 10); DrawFPS(10, 10);