mirror of
https://github.com/FunkyFr3sh/cnc-ddraw.git
synced 2025-03-15 06:04:49 +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"
|
||||
"void main()\n"
|
||||
"{\n"
|
||||
" vec4 myindex = texture2D(SurfaceTex, TexCoord0); \n"
|
||||
" vec4 texel = texture2D(PaletteTex, myindex.xy); \n"
|
||||
" vec4 index = texture2D(SurfaceTex, TexCoord0); \n"
|
||||
" vec4 texel = texture2D(PaletteTex, index.xy); \n"
|
||||
" gl_FragColor = texel;\n"
|
||||
"}\n";
|
||||
|
||||
@ -51,6 +51,8 @@ BOOL detect_cutscene();
|
||||
|
||||
DWORD WINAPI render_main(void)
|
||||
{
|
||||
Sleep(500);
|
||||
|
||||
HGLRC hRC = wglCreateContext(ddraw->render.hDC);
|
||||
wglMakeCurrent(ddraw->render.hDC, hRC);
|
||||
|
||||
@ -243,8 +245,6 @@ DWORD WINAPI render_main(void)
|
||||
if (tick_end - tick_start < frame_len)
|
||||
Sleep(frame_len - (tick_end - tick_start));
|
||||
}
|
||||
|
||||
SetEvent(ddraw->render.ev);
|
||||
}
|
||||
|
||||
HeapFree(GetProcessHeap(), 0, tex);
|
||||
|
@ -56,6 +56,8 @@ BOOL detect_cutscene()
|
||||
|
||||
DWORD WINAPI render_soft_main(void)
|
||||
{
|
||||
Sleep(500);
|
||||
|
||||
PBITMAPINFO bmi = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(BITMAPINFOHEADER) + sizeof(RGBQUAD) * 256);
|
||||
|
||||
bmi->bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
|
||||
|
@ -22,6 +22,7 @@
|
||||
|
||||
void dump_ddscaps(DWORD dwCaps);
|
||||
void dump_ddsd(DWORD dwFlags);
|
||||
DWORD WINAPI render_main(void);
|
||||
|
||||
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)
|
||||
{
|
||||
ReleaseSemaphore(ddraw->render.sem, 1, NULL);
|
||||
WaitForSingleObject(ddraw->render.ev, INFINITE);
|
||||
ResetEvent(ddraw->render.ev);
|
||||
if (ddraw->renderer != render_main)
|
||||
{
|
||||
WaitForSingleObject(ddraw->render.ev, INFINITE);
|
||||
ResetEvent(ddraw->render.ev);
|
||||
}
|
||||
else
|
||||
SwitchToThread();
|
||||
}
|
||||
|
||||
return DD_OK;
|
||||
@ -203,9 +209,14 @@ HRESULT __stdcall ddraw_surface_Flip(IDirectDrawSurfaceImpl *This, LPDIRECTDRAWS
|
||||
|
||||
if(This->caps & DDSCAPS_PRIMARYSURFACE && ddraw->render.run)
|
||||
{
|
||||
ResetEvent(ddraw->render.ev);
|
||||
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;
|
||||
|
Loading…
x
Reference in New Issue
Block a user