mirror of
https://github.com/FunkyFr3sh/cnc-ddraw.git
synced 2025-03-24 17:49:52 +01:00
prevent GPU from blocking main thread
This commit is contained in:
parent
09ada60736
commit
d1fb484e80
@ -41,8 +41,8 @@ const GLchar *PaletteFragShaderSrc =
|
|||||||
"\n"
|
"\n"
|
||||||
"void main()\n"
|
"void main()\n"
|
||||||
"{\n"
|
"{\n"
|
||||||
" vec4 myindex = texture2D(SurfaceTex, TexCoord0); \n"
|
" vec4 index = texture2D(SurfaceTex, TexCoord0); \n"
|
||||||
" vec4 texel = texture2D(PaletteTex, myindex.xy); \n"
|
" vec4 texel = texture2D(PaletteTex, index.xy); \n"
|
||||||
" gl_FragColor = texel;\n"
|
" gl_FragColor = texel;\n"
|
||||||
"}\n";
|
"}\n";
|
||||||
|
|
||||||
@ -51,6 +51,8 @@ BOOL detect_cutscene();
|
|||||||
|
|
||||||
DWORD WINAPI render_main(void)
|
DWORD WINAPI render_main(void)
|
||||||
{
|
{
|
||||||
|
Sleep(500);
|
||||||
|
|
||||||
HGLRC hRC = wglCreateContext(ddraw->render.hDC);
|
HGLRC hRC = wglCreateContext(ddraw->render.hDC);
|
||||||
wglMakeCurrent(ddraw->render.hDC, hRC);
|
wglMakeCurrent(ddraw->render.hDC, hRC);
|
||||||
|
|
||||||
@ -243,8 +245,6 @@ DWORD WINAPI render_main(void)
|
|||||||
if (tick_end - tick_start < frame_len)
|
if (tick_end - tick_start < frame_len)
|
||||||
Sleep(frame_len - (tick_end - tick_start));
|
Sleep(frame_len - (tick_end - tick_start));
|
||||||
}
|
}
|
||||||
|
|
||||||
SetEvent(ddraw->render.ev);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
HeapFree(GetProcessHeap(), 0, tex);
|
HeapFree(GetProcessHeap(), 0, tex);
|
||||||
|
@ -56,6 +56,8 @@ BOOL detect_cutscene()
|
|||||||
|
|
||||||
DWORD WINAPI render_soft_main(void)
|
DWORD WINAPI render_soft_main(void)
|
||||||
{
|
{
|
||||||
|
Sleep(500);
|
||||||
|
|
||||||
PBITMAPINFO bmi = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(BITMAPINFOHEADER) + sizeof(RGBQUAD) * 256);
|
PBITMAPINFO bmi = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(BITMAPINFOHEADER) + sizeof(RGBQUAD) * 256);
|
||||||
|
|
||||||
bmi->bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
|
bmi->bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
|
||||||
|
@ -22,6 +22,7 @@
|
|||||||
|
|
||||||
void dump_ddscaps(DWORD dwCaps);
|
void dump_ddscaps(DWORD dwCaps);
|
||||||
void dump_ddsd(DWORD dwFlags);
|
void dump_ddsd(DWORD dwFlags);
|
||||||
|
DWORD WINAPI render_main(void);
|
||||||
|
|
||||||
HRESULT __stdcall ddraw_surface_QueryInterface(IDirectDrawSurfaceImpl *This, REFIID riid, void **obj)
|
HRESULT __stdcall ddraw_surface_QueryInterface(IDirectDrawSurfaceImpl *This, REFIID riid, void **obj)
|
||||||
{
|
{
|
||||||
@ -123,8 +124,13 @@ HRESULT __stdcall ddraw_surface_Blt(IDirectDrawSurfaceImpl *This, LPRECT lpDestR
|
|||||||
if(This->caps & DDSCAPS_PRIMARYSURFACE && !(This->flags & DDSD_BACKBUFFERCOUNT) && ddraw->render.run)
|
if(This->caps & DDSCAPS_PRIMARYSURFACE && !(This->flags & DDSD_BACKBUFFERCOUNT) && ddraw->render.run)
|
||||||
{
|
{
|
||||||
ReleaseSemaphore(ddraw->render.sem, 1, NULL);
|
ReleaseSemaphore(ddraw->render.sem, 1, NULL);
|
||||||
WaitForSingleObject(ddraw->render.ev, INFINITE);
|
if (ddraw->renderer != render_main)
|
||||||
ResetEvent(ddraw->render.ev);
|
{
|
||||||
|
WaitForSingleObject(ddraw->render.ev, INFINITE);
|
||||||
|
ResetEvent(ddraw->render.ev);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
SwitchToThread();
|
||||||
}
|
}
|
||||||
|
|
||||||
return DD_OK;
|
return DD_OK;
|
||||||
@ -203,9 +209,14 @@ HRESULT __stdcall ddraw_surface_Flip(IDirectDrawSurfaceImpl *This, LPDIRECTDRAWS
|
|||||||
|
|
||||||
if(This->caps & DDSCAPS_PRIMARYSURFACE && ddraw->render.run)
|
if(This->caps & DDSCAPS_PRIMARYSURFACE && ddraw->render.run)
|
||||||
{
|
{
|
||||||
ResetEvent(ddraw->render.ev);
|
|
||||||
ReleaseSemaphore(ddraw->render.sem, 1, NULL);
|
ReleaseSemaphore(ddraw->render.sem, 1, NULL);
|
||||||
WaitForSingleObject(ddraw->render.ev, INFINITE);
|
if (ddraw->renderer != render_main)
|
||||||
|
{
|
||||||
|
ResetEvent(ddraw->render.ev);
|
||||||
|
WaitForSingleObject(ddraw->render.ev, INFINITE);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
SwitchToThread();
|
||||||
}
|
}
|
||||||
|
|
||||||
return DD_OK;
|
return DD_OK;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user