From 0ebd759151d54f74a9acc54b26636100fd9cd683 Mon Sep 17 00:00:00 2001 From: FunkyFr3sh Date: Wed, 28 Oct 2020 22:50:26 +0100 Subject: [PATCH] shader test --- src/render_ogl.c | 32 ++++++++++++++++++++++++++++---- src/wndproc.c | 20 ++++++++++++++++++++ 2 files changed, 48 insertions(+), 4 deletions(-) diff --git a/src/render_ogl.c b/src/render_ogl.c index a37ef07..ab2453a 100644 --- a/src/render_ogl.c +++ b/src/render_ogl.c @@ -187,6 +187,24 @@ static void ogl_build_programs() if (g_ogl.main_program) { + static WIN32_FIND_DATA findFileData; + static HANDLE hFind; + + if (!hFind) + { + hFind = FindFirstFile("Shaders\\*.glsl", &findFileData); + } + else if (hFind != INVALID_HANDLE_VALUE) + { + FindNextFile(hFind, &findFileData); + } + + if (hFind != INVALID_HANDLE_VALUE) + { + strcpy(g_ddraw->shader, "Shaders\\"); + strcat(g_ddraw->shader, findFileData.cFileName); + } + g_ogl.scale_program = oglu_build_program_from_file(g_ddraw->shader); } else @@ -595,9 +613,17 @@ static void ogl_render() while (g_ogl.use_opengl && g_ddraw->render.run && (g_ddraw->render.minfps < 0 || WaitForSingleObject(g_ddraw->render.sem, timeout) != WAIT_FAILED)) { -#if _DEBUG dbg_draw_frame_info_start(); -#endif + + RECT debugrc = { 0, 0, g_ddraw->width, g_ddraw->height }; + + if (g_ddraw->primary) + { + if (g_ddraw->primary->palette && g_ddraw->primary->palette->data_rgb) + SetDIBColorTable(g_ddraw->primary->hdc, 0, 256, g_ddraw->primary->palette->data_rgb); + + DrawText(g_ddraw->primary->hdc, g_ddraw->shader, -1, &debugrc, DT_NOCLIP | DT_RIGHT); + } g_ogl.scale_w = (float)g_ddraw->width / g_ogl.surface_tex_width; g_ogl.scale_h = (float)g_ddraw->height / g_ogl.surface_tex_height; @@ -832,9 +858,7 @@ static void ogl_render() SwapBuffers(g_ddraw->render.hdc); -#if _DEBUG dbg_draw_frame_info_end(); -#endif if (g_ddraw->fps_limiter.tick_length > 0) { diff --git a/src/wndproc.c b/src/wndproc.c index 3cbc95c..68c0e9e 100644 --- a/src/wndproc.c +++ b/src/wndproc.c @@ -487,6 +487,26 @@ LRESULT CALLBACK fake_WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam } case WM_KEYDOWN: { + if (wParam == VK_F11) + { + if (g_ddraw->render.thread) + { + EnterCriticalSection(&g_ddraw->cs); + g_ddraw->render.run = FALSE; + ReleaseSemaphore(g_ddraw->render.sem, 1, NULL); + LeaveCriticalSection(&g_ddraw->cs); + WaitForSingleObject(g_ddraw->render.thread, INFINITE); + + InterlockedExchange(&g_ddraw->render.palette_updated, TRUE); + InterlockedExchange(&g_ddraw->render.surface_updated, TRUE); + ReleaseSemaphore(g_ddraw->render.sem, 1, NULL); + g_ddraw->render.run = TRUE; + g_ddraw->render.thread = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)g_ddraw->renderer, NULL, 0, NULL); + } + + return 0; + } + if (wParam == VK_CONTROL || wParam == VK_TAB) { if (GetAsyncKeyState(VK_CONTROL) & 0x8000 && GetAsyncKeyState(VK_TAB) & 0x8000)