You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
88 lines
1.7 KiB
C
88 lines
1.7 KiB
C
#include "types.h"
|
|
#include "buildsettings.h"
|
|
|
|
#ifdef DEBUG_RENDERING
|
|
#include "sokol_gfx.h"
|
|
#include "sokol_gp.h"
|
|
#endif
|
|
|
|
#define MAX_COMMANDS 64
|
|
|
|
typedef struct Command
|
|
{
|
|
enum
|
|
{
|
|
rect,
|
|
line
|
|
} type;
|
|
union
|
|
{
|
|
// rect
|
|
cpVect center;
|
|
|
|
// line
|
|
struct
|
|
{
|
|
cpVect from;
|
|
cpVect to;
|
|
};
|
|
};
|
|
} Command;
|
|
|
|
// thread local variables so debug drawing in server thread
|
|
// doesn't fuck up main thread
|
|
|
|
|
|
static THREADLOCAL Command commands[MAX_COMMANDS] = {0};
|
|
static THREADLOCAL int command_i = 0;
|
|
|
|
void dbg_drawall()
|
|
{
|
|
#ifdef DEBUG_RENDERING
|
|
sgp_set_color(0.4f, 0.8f, 0.2f, 0.8f);
|
|
for (int i = 0; i < command_i; i++)
|
|
{
|
|
const double size = 0.05;
|
|
switch (commands[i].type)
|
|
{
|
|
case rect:
|
|
{
|
|
cpVect center = commands[i].center;
|
|
cpVect upper_left = cpvadd(center, (cpVect){.x = -size / 2.0, .y = -size / 2.0});
|
|
sgp_draw_filled_rect((float)upper_left.x, (float)upper_left.y, (float)size, (float)size);
|
|
break;
|
|
}
|
|
case line:
|
|
{
|
|
cpVect from = commands[i].from;
|
|
cpVect to = commands[i].to;
|
|
sgp_draw_line((float)from.x, (float)from.y, (float)to.x, (float)to.y);
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
#endif
|
|
command_i = 0;
|
|
}
|
|
|
|
void dbg_line(cpVect from, cpVect to)
|
|
{
|
|
commands[command_i] = (Command){
|
|
.type = line,
|
|
.from = from,
|
|
.to = to,
|
|
};
|
|
command_i++;
|
|
command_i %= MAX_COMMANDS;
|
|
}
|
|
|
|
void dbg_rect(cpVect center)
|
|
{
|
|
commands[command_i] = (Command){
|
|
.type = rect,
|
|
.center = center,
|
|
};
|
|
command_i++;
|
|
command_i %= MAX_COMMANDS;
|
|
}
|