1
0
mirror of https://github.com/FunkyFr3sh/cnc-ddraw.git synced 2025-03-22 16:46:16 +01:00
cnc-ddraw/src/debug.c

388 lines
8.9 KiB
C
Raw Normal View History

2017-11-26 08:49:30 +01:00
#include <windows.h>
#include <stdio.h>
2020-10-13 09:20:52 +02:00
#include "dd.h"
#include "ddraw.h"
#include "ddsurface.h"
#include "debug.h"
double g_dbg_frame_time = 0;
DWORD g_dbg_frame_count = 0;
static LONGLONG g_dbg_counter_start_time = 0;
static double g_dbg_counter_freq = 0.0;
void dbg_init()
{
static int stdout_open = 0;
if (!stdout_open)
{
freopen("cnc-ddraw.log", "w", stdout);
setvbuf(stdout, NULL, _IOLBF, 1024);
stdout_open = 1;
2017-11-26 08:49:30 +01:00
2020-10-13 09:20:52 +02:00
HKEY hkey;
LONG status =
RegOpenKeyExA(HKEY_LOCAL_MACHINE, "SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion", 0L, KEY_READ, &hkey);
2018-05-31 03:38:33 +02:00
2020-10-13 09:20:52 +02:00
if (status == ERROR_SUCCESS)
{
char name[256] = { 0 };
DWORD name_size = sizeof(name);
RegQueryValueExA(hkey, "ProductName", NULL, NULL, (PVOID)&name, &name_size);
2018-05-31 03:38:33 +02:00
2020-10-13 09:20:52 +02:00
char build[256] = { 0 };
DWORD build_size = sizeof(build);
RegQueryValueExA(hkey, "BuildLab", NULL, NULL, (PVOID)&build, &build_size);
dbg_printf("%s (%s)\n", name, build);
}
}
}
void dbg_counter_start()
2018-05-31 03:38:33 +02:00
{
LARGE_INTEGER li;
QueryPerformanceFrequency(&li);
2020-10-13 09:20:52 +02:00
g_dbg_counter_freq = (double)(li.QuadPart) / 1000.0;
2018-05-31 03:38:33 +02:00
QueryPerformanceCounter(&li);
2020-10-13 09:20:52 +02:00
g_dbg_counter_start_time = li.QuadPart;
2018-05-31 03:38:33 +02:00
}
2020-10-13 09:20:52 +02:00
double dbg_counter_stop()
2018-05-31 03:38:33 +02:00
{
LARGE_INTEGER li;
QueryPerformanceCounter(&li);
2020-10-13 09:20:52 +02:00
return (double)(li.QuadPart - g_dbg_counter_start_time) / g_dbg_counter_freq;
2018-05-31 03:38:33 +02:00
}
2020-10-13 09:20:52 +02:00
void dbg_debug_string(const char *format, ...)
2017-11-26 08:49:30 +01:00
{
2020-10-13 11:29:52 +02:00
va_list args;
va_start(args, format);
2020-10-13 09:20:52 +02:00
char buffer[512] = { 0 };
2020-10-13 11:29:52 +02:00
_vsnprintf(buffer, sizeof(buffer), format, args);
OutputDebugStringA(buffer);
2017-11-26 08:49:30 +01:00
}
2018-10-02 11:38:38 +02:00
2020-10-13 09:20:52 +02:00
int dbg_printf(const char *fmt, ...)
2019-04-14 07:28:06 +02:00
{
static CRITICAL_SECTION cs;
static BOOL initialized;
if (!initialized)
{
initialized = TRUE;
InitializeCriticalSection(&cs);
}
EnterCriticalSection(&cs);
va_list args;
int ret;
SYSTEMTIME st;
GetLocalTime(&st);
fprintf(stdout, "[%lu] %02d:%02d:%02d.%03d ", GetCurrentThreadId(), st.wHour, st.wMinute, st.wSecond, st.wMilliseconds);
va_start(args, fmt);
ret = vfprintf(stdout, fmt, args);
va_end(args);
LeaveCriticalSection(&cs);
return ret;
}
2020-10-13 09:20:52 +02:00
void dbg_draw_frame_info_start()
2018-10-02 11:38:38 +02:00
{
static DWORD tick_fps = 0;
2020-10-13 09:20:52 +02:00
static char debug_text[512] = { 0 };
2018-10-02 11:38:38 +02:00
2020-10-13 09:20:52 +02:00
RECT debugrc = { 0, 0, g_ddraw->width, g_ddraw->height };
2018-10-02 11:38:38 +02:00
2020-10-13 09:20:52 +02:00
if (g_ddraw->primary)
2018-10-27 07:43:47 +02:00
{
2020-10-13 09:20:52 +02:00
if (g_ddraw->primary->palette && g_ddraw->primary->palette->data_rgb)
SetDIBColorTable(g_ddraw->primary->hdc, 0, 256, g_ddraw->primary->palette->data_rgb);
2018-10-02 11:38:38 +02:00
2020-10-13 09:20:52 +02:00
DrawText(g_ddraw->primary->hdc, debug_text, -1, &debugrc, DT_NOCLIP);
2018-10-27 07:43:47 +02:00
}
2018-10-02 11:38:38 +02:00
DWORD tick_start = timeGetTime();
if (tick_start >= tick_fps)
{
_snprintf(
2020-10-13 09:20:52 +02:00
debug_text,
sizeof(debug_text)-1,
2018-10-02 11:38:38 +02:00
"FPS: %lu | Time: %2.2f ms ",
2020-10-13 09:20:52 +02:00
g_dbg_frame_count,
g_dbg_frame_time);
2018-10-02 11:38:38 +02:00
2020-10-13 09:20:52 +02:00
g_dbg_frame_count = 0;
2018-12-10 03:39:15 +01:00
tick_fps = tick_start + 1000;
2018-10-02 11:38:38 +02:00
2020-10-13 09:20:52 +02:00
dbg_counter_start();
2018-10-02 11:38:38 +02:00
}
2020-10-13 09:20:52 +02:00
g_dbg_frame_count++;
2018-10-02 11:38:38 +02:00
}
2020-10-13 09:20:52 +02:00
void dbg_draw_frame_info_end()
2018-10-02 11:38:38 +02:00
{
2020-10-13 09:20:52 +02:00
if (g_dbg_frame_count == 1)
g_dbg_frame_time = dbg_counter_stop();
}
void dbg_dump_dds_blt_flags(DWORD flags)
{
#ifdef _DEBUG_X
if (flags & DDBLT_ALPHADEST) {
dprintf(" DDBLT_ALPHADEST\n");
}
if (flags & DDBLT_ALPHADESTCONSTOVERRIDE) {
dprintf(" DDBLT_ALPHADESTCONSTOVERRIDE\n");
}
if (flags & DDBLT_ALPHADESTNEG) {
dprintf(" DDBLT_ALPHADESTNEG\n");
}
if (flags & DDBLT_ALPHADESTSURFACEOVERRIDE) {
dprintf(" DDBLT_ALPHADESTSURFACEOVERRIDE\n");
}
if (flags & DDBLT_ALPHAEDGEBLEND) {
dprintf(" DDBLT_ALPHAEDGEBLEND\n");
}
if (flags & DDBLT_ALPHASRC) {
dprintf(" DDBLT_ALPHASRC\n");
}
if (flags & DDBLT_ALPHASRCCONSTOVERRIDE) {
dprintf(" DDBLT_ALPHASRCCONSTOVERRIDE\n");
}
if (flags & DDBLT_ALPHASRCNEG) {
dprintf(" DDBLT_ALPHASRCNEG\n");
}
if (flags & DDBLT_ALPHASRCSURFACEOVERRIDE) {
dprintf(" DDBLT_ALPHASRCSURFACEOVERRIDE\n");
}
if (flags & DDBLT_ASYNC) {
dprintf(" DDBLT_ASYNC\n");
}
if (flags & DDBLT_COLORFILL) {
dprintf(" DDBLT_COLORFILL\n");
}
if (flags & DDBLT_DDFX) {
dprintf(" DDBLT_DDFX\n");
}
if (flags & DDBLT_DDROPS) {
dprintf(" DDBLT_DDROPS\n");
}
if (flags & DDBLT_KEYDEST) {
dprintf(" DDBLT_KEYDEST\n");
}
if (flags & DDBLT_KEYDESTOVERRIDE) {
dprintf(" DDBLT_KEYDESTOVERRIDE\n");
}
if (flags & DDBLT_KEYSRC) {
dprintf(" DDBLT_KEYSRC\n");
}
if (flags & DDBLT_KEYSRCOVERRIDE) {
dprintf(" DDBLT_KEYSRCOVERRIDE\n");
}
if (flags & DDBLT_ROP) {
dprintf(" DDBLT_ROP\n");
}
if (flags & DDBLT_ROTATIONANGLE) {
dprintf(" DDBLT_ROTATIONANGLE\n");
}
if (flags & DDBLT_ZBUFFER) {
dprintf(" DDBLT_ZBUFFER\n");
}
if (flags & DDBLT_ZBUFFERDESTCONSTOVERRIDE) {
dprintf(" DDBLT_ZBUFFERDESTCONSTOVERRIDE\n");
}
if (flags & DDBLT_ZBUFFERDESTOVERRIDE) {
dprintf(" DDBLT_ZBUFFERDESTOVERRIDE\n");
}
if (flags & DDBLT_ZBUFFERSRCCONSTOVERRIDE) {
dprintf(" DDBLT_ZBUFFERSRCCONSTOVERRIDE\n");
}
if (flags & DDBLT_ZBUFFERSRCOVERRIDE) {
dprintf(" DDBLT_ZBUFFERSRCOVERRIDE\n");
}
if (flags & DDBLT_WAIT) {
dprintf(" DDBLT_WAIT\n");
}
if (flags & DDBLT_DEPTHFILL) {
dprintf(" DDBLT_DEPTHFILL\n");
}
#endif
}
void dbg_dump_dds_caps(DWORD caps)
{
#ifdef _DEBUG_X
if (caps & DDSCAPS_ALPHA)
{
dprintf(" DDSCAPS_ALPHA\n");
}
if (caps & DDSCAPS_BACKBUFFER)
{
dprintf(" DDSCAPS_BACKBUFFER\n");
}
if (caps & DDSCAPS_FLIP)
{
dprintf(" DDSCAPS_FLIP\n");
}
if (caps & DDSCAPS_FRONTBUFFER)
{
dprintf(" DDSCAPS_FRONTBUFFER\n");
}
if (caps & DDSCAPS_PALETTE)
{
dprintf(" DDSCAPS_PALETTE\n");
}
if (caps & DDSCAPS_TEXTURE)
{
dprintf(" DDSCAPS_TEXTURE\n");
}
if (caps & DDSCAPS_PRIMARYSURFACE)
{
dprintf(" DDSCAPS_PRIMARYSURFACE\n");
}
if (caps & DDSCAPS_OFFSCREENPLAIN)
{
dprintf(" DDSCAPS_OFFSCREENPLAIN\n");
}
if (caps & DDSCAPS_VIDEOMEMORY)
{
dprintf(" DDSCAPS_VIDEOMEMORY\n");
}
if (caps & DDSCAPS_LOCALVIDMEM)
{
dprintf(" DDSCAPS_LOCALVIDMEM\n");
}
#endif
}
void dbg_dump_dds_flags(DWORD flags)
{
#ifdef _DEBUG_X
if (flags & DDSD_CAPS)
{
dprintf(" DDSD_CAPS\n");
}
if (flags & DDSD_HEIGHT)
{
dprintf(" DDSD_HEIGHT\n");
}
if (flags & DDSD_WIDTH)
{
dprintf(" DDSD_WIDTH\n");
}
if (flags & DDSD_PITCH)
{
dprintf(" DDSD_PITCH\n");
}
if (flags & DDSD_BACKBUFFERCOUNT)
{
dprintf(" DDSD_BACKBUFFERCOUNT\n");
}
if (flags & DDSD_ZBUFFERBITDEPTH)
{
dprintf(" DDSD_ZBUFFERBITDEPTH\n");
}
if (flags & DDSD_ALPHABITDEPTH)
{
dprintf(" DDSD_ALPHABITDEPTH\n");
}
if (flags & DDSD_LPSURFACE)
{
dprintf(" DDSD_LPSURFACE\n");
}
if (flags & DDSD_PIXELFORMAT)
{
dprintf(" DDSD_PIXELFORMAT\n");
}
if (flags & DDSD_CKDESTOVERLAY)
{
dprintf(" DDSD_CKDESTOVERLAY\n");
}
if (flags & DDSD_CKDESTBLT)
{
dprintf(" DDSD_CKDESTBLT\n");
}
if (flags & DDSD_CKSRCOVERLAY)
{
dprintf(" DDSD_CKSRCOVERLAY\n");
}
if (flags & DDSD_CKSRCBLT)
{
dprintf(" DDSD_CKSRCBLT\n");
}
if (flags & DDSD_MIPMAPCOUNT)
{
dprintf(" DDSD_MIPMAPCOUNT\n");
}
if (flags & DDSD_REFRESHRATE)
{
dprintf(" DDSD_REFRESHRATE\n");
}
if (flags & DDSD_LINEARSIZE)
{
dprintf(" DDSD_LINEARSIZE\n");
}
if (flags & DDSD_ALL)
{
dprintf(" DDSD_ALL\n");
}
#endif
}
void dbg_dump_dds_blt_fast_flags(DWORD flags)
{
#ifdef _DEBUG_X
if (flags & DDBLTFAST_NOCOLORKEY)
{
dprintf(" DDBLTFAST_NOCOLORKEY\n");
}
if (flags & DDBLTFAST_SRCCOLORKEY)
{
dprintf(" DDBLTFAST_SRCCOLORKEY\n");
}
if (flags & DDBLTFAST_DESTCOLORKEY)
{
dprintf(" DDBLTFAST_DESTCOLORKEY\n");
}
#endif
}
void dbg_dump_dds_lock_flags(DWORD flags)
{
#ifdef _DEBUG_X
if (flags & DDLOCK_SURFACEMEMORYPTR)
{
dprintf(" dwFlags: DDLOCK_SURFACEMEMORYPTR\n");
}
if (flags & DDLOCK_WAIT)
{
dprintf(" dwFlags: DDLOCK_WAIT\n");
}
if (flags & DDLOCK_EVENT)
{
dprintf(" dwFlags: DDLOCK_EVENT\n");
}
if (flags & DDLOCK_READONLY)
{
dprintf(" dwFlags: DDLOCK_READONLY\n");
}
if (flags & DDLOCK_WRITEONLY)
{
dprintf(" dwFlags: DDLOCK_WRITEONLY\n");
}
#endif
2018-10-02 11:38:38 +02:00
}