Debug text & debug build options

use 'winedbg --gdb <file>' to start debugger
This commit is contained in:
Edgaru089 2024-03-05 14:17:53 +08:00
parent a802522eda
commit 4f9ea0a09a
9 changed files with 115 additions and 7 deletions

View File

@ -38,9 +38,9 @@ endif
export INCLUDEFLAGS := $(Platform_INCLUDEFLAGS) export INCLUDEFLAGS := $(Platform_INCLUDEFLAGS)
export CPPFLAGS = -DWIN32_LEAN_AND_MEAN export CPPFLAGS = -DWIN32_LEAN_AND_MEAN
export CFLAGS = $(INCLUDEFLAGS) $(BUILD_OPTIONS) -O2 -Wno-attributes -flto export CFLAGS = $(INCLUDEFLAGS) $(BUILD_OPTIONS) -Wno-attributes -g
export CXXFLAGS = $(INCLUDEFLAGS) -DHELOS $(BUILD_OPTIONS) $(Platform_CXXFLAGS) -O2 -Wno-unused-result -flto -std=c++17 export CXXFLAGS = $(INCLUDEFLAGS) -DHELOS $(BUILD_OPTIONS) $(Platform_CXXFLAGS) -Wno-unused-result -std=c++17 -g
export LDFLAGS = $(Platform_LDFLAGS) -s -O2 -flto export LDFLAGS = $(Platform_LDFLAGS) -g
export LDLIBS = $(Platform_LDLIBS) -lm -lstdc++ export LDLIBS = $(Platform_LDLIBS) -lm -lstdc++
# Pattern rule for FASM assembly # Pattern rule for FASM assembly

3
app.h
View File

@ -5,6 +5,7 @@
#include "player.h" #include "player.h"
#include "input.h" #include "input.h"
#include "types.h" #include "types.h"
#include "util/vector.h"
#ifdef __cplusplus #ifdef __cplusplus
extern "C" { extern "C" {
@ -26,6 +27,8 @@ void app_DeleteApp(App *app);
void app_Advance(App *app, Duration deltaTime); void app_Advance(App *app, Duration deltaTime);
void app_Render(App *app); void app_Render(App *app);
void app_DebugText(App *app, vector_Vector *vec_string);
#ifdef __cplusplus #ifdef __cplusplus
} }

30
app_debug.c Normal file
View File

@ -0,0 +1,30 @@
#include "app.h"
#include "util/vector.h"
#include <stdio.h>
#define PUSH_STRING(str) vector_Append(vec_string, str, strlen(str));
void app_DebugText(App *app, vector_Vector *vec_string) {
vector_Clear(vec_string);
char buf[256] = {};
Component_Player *player = app->player->player;
if (!player) {
PUSH_STRING("Player not available\n");
} else {
snprintf(
buf, sizeof(buf) - 1,
"Player:\n Pos: [%.4lf, %.4lf], Vec:[%.4lf, %.4lf]\n",
player->super->position->position.x,
player->super->position->position.y,
player->super->position->velocity.x,
player->super->position->velocity.y);
PUSH_STRING(buf);
}
char zero = '\0';
vector_Push(vec_string, &zero);
}

View File

@ -3,7 +3,10 @@
#include <stdio.h> #include <stdio.h>
#include "app.h" #include "app.h"
#include "easyx.h"
#include "types.h" #include "types.h"
#include "render_util.h"
#include "util/vector.h"
int main() { int main() {
@ -15,6 +18,9 @@ int main() {
HWND win = initgraph(1280, 720); HWND win = initgraph(1280, 720);
SetWindowTextA(win, "JacksEscape"); SetWindowTextA(win, "JacksEscape");
settextstyle(TEXTHEIGHT, 0, "Courier New");
vector_Vector *debugText = vector_Create(1);
App *app = app_NewApp(); App *app = app_NewApp();
while (!app->wantQuit) { while (!app->wantQuit) {
if (time_Since(frameCounter).microseconds >= 1000000) { // 1 sec if (time_Since(frameCounter).microseconds >= 1000000) { // 1 sec
@ -31,8 +37,13 @@ int main() {
BeginBatchDraw(); BeginBatchDraw();
cleardevice(); cleardevice();
app_Render(app); app_Render(app);
app_DebugText(app, debugText);
render_DrawText(10, 10, (const char *)vector_Data(debugText));
EndBatchDraw(); EndBatchDraw();
Duration toSleep = {.microseconds = 1000000 / 60 - time_Reset(&lastFrame).microseconds}; Duration toSleep = {.microseconds = 1000000 / 60 - time_Reset(&lastFrame).microseconds};
duration_Sleep(toSleep); duration_Sleep(toSleep);
} }

View File

@ -94,8 +94,8 @@ void physics_Advance(System_Physics *sys, Duration deltaTime) {
i = tree_Node_Next(i)) { i = tree_Node_Next(i)) {
Component_Position *pos = *((Component_Position **)i->data); Component_Position *pos = *((Component_Position **)i->data);
// if (pos->super->hitbox && !pos->super->hitbox->fixed) if (pos->super->hitbox && !pos->super->hitbox->fixed)
// pos->velocity.y += gravity * duration_Seconds(deltaTime); pos->velocity.y += gravity * duration_Seconds(deltaTime);
_physics_AdvanceEntity(sys, pos->super, deltaTime); _physics_AdvanceEntity(sys, pos->super, deltaTime);
} }

44
render_util.cpp Normal file
View File

@ -0,0 +1,44 @@
#include "render_util.h"
#include "easyx.h"
#include "util/vector.h"
#include <string.h>
#include <stdio.h>
extern "C" {
static vector_Vector *tbuf;
void render_DrawText(int x, int y, const char *str) {
if (!tbuf)
tbuf = vector_Create(1);
int cx = x, cy = y;
const char zero = 0;
vector_Clear(tbuf);
int len = strlen(str);
printf("%s, len=%d\n", str, len);
int i = 0;
while (i < len) {
if (str[i] == '\n') {
vector_Push(tbuf, &zero);
printf("outtext: \"%s\"\n", vector_Data(tbuf));
outtextxy(cx, cy, (LPCTSTR)vector_Data(tbuf));
cy += TEXTHEIGHT;
vector_Clear(tbuf);
} else
vector_Push(tbuf, &str[i]);
i++;
}
if (vector_Size(tbuf) > 0) {
vector_Push(tbuf, &zero);
outtextxy(cx, cy, (LPCTSTR)vector_Data(tbuf));
vector_Clear(tbuf);
}
}
}

20
render_util.h Normal file
View File

@ -0,0 +1,20 @@
#pragma once
#ifdef __cplusplus
extern "C" {
#endif
#define TEXTHEIGHT 18
// Draws text at the given on-screen position.
//
// unlike outtext(), this function takes consideration
// for newlines.
void render_DrawText(int x, int y, const char *str);
#ifdef __cplusplus
}
#endif

View File

@ -23,7 +23,7 @@ typedef struct {
} Vec2; } Vec2;
inline Vec2 vec2(double x, double y) { static inline Vec2 vec2(double x, double y) {
Vec2 v = {.x = x, .y = y}; Vec2 v = {.x = x, .y = y};
return v; return v;
} }

View File

@ -59,7 +59,7 @@ void vector_Append(vector_Vector *vec, const void *data, uintptr_t n) {
} }
void vector_Resize(vector_Vector *vec, uintptr_t size) { void vector_Resize(vector_Vector *vec, uintptr_t size) {
uintptr_t newsize = vec->size + size * vec->objectSize; uintptr_t newsize = size;
if (newsize > vec->cap) { if (newsize > vec->cap) {
// grow the buffer exponentially // grow the buffer exponentially
uint64_t newcap = vec->cap; uint64_t newcap = vec->cap;