win_opengl: Protect resize_info with mutex.
This commit is contained in:
@@ -105,9 +105,10 @@ static volatile struct
|
|||||||
/**
|
/**
|
||||||
* @brief Resize event parameters.
|
* @brief Resize event parameters.
|
||||||
*/
|
*/
|
||||||
static volatile struct
|
static struct
|
||||||
{
|
{
|
||||||
int width, height, fullscreen, scaling_mode;
|
int width, height, fullscreen, scaling_mode;
|
||||||
|
mutex_t* mutex;
|
||||||
} resize_info = { 0 };
|
} resize_info = { 0 };
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -461,6 +462,8 @@ static void opengl_main(void* param)
|
|||||||
}
|
}
|
||||||
else if (sync_event == sync_objects.resize)
|
else if (sync_event == sync_objects.resize)
|
||||||
{
|
{
|
||||||
|
thread_wait_mutex(resize_info.mutex);
|
||||||
|
|
||||||
if (fullscreen != resize_info.fullscreen)
|
if (fullscreen != resize_info.fullscreen)
|
||||||
{
|
{
|
||||||
fullscreen = resize_info.fullscreen;
|
fullscreen = resize_info.fullscreen;
|
||||||
@@ -529,6 +532,8 @@ static void opengl_main(void* param)
|
|||||||
if (gl.output_size != -1)
|
if (gl.output_size != -1)
|
||||||
glUniform2f(gl.output_size, resize_info.width, resize_info.height);
|
glUniform2f(gl.output_size, resize_info.width, resize_info.height);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
thread_release_mutex(resize_info.mutex);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -568,6 +573,9 @@ static void opengl_blit(int x, int y, int y1, int y2, int w, int h)
|
|||||||
|
|
||||||
int opengl_init(HWND hwnd)
|
int opengl_init(HWND hwnd)
|
||||||
{
|
{
|
||||||
|
if (thread != NULL)
|
||||||
|
return 0;
|
||||||
|
|
||||||
for (int i = 0; i < sizeof(sync_objects) / sizeof(HANDLE); i++)
|
for (int i = 0; i < sizeof(sync_objects) / sizeof(HANDLE); i++)
|
||||||
sync_objects.asArray[i] = CreateEvent(NULL, FALSE, FALSE, NULL);
|
sync_objects.asArray[i] = CreateEvent(NULL, FALSE, FALSE, NULL);
|
||||||
|
|
||||||
@@ -583,6 +591,7 @@ int opengl_init(HWND hwnd)
|
|||||||
resize_info.height = parent_size.bottom - parent_size.top;
|
resize_info.height = parent_size.bottom - parent_size.top;
|
||||||
resize_info.fullscreen = video_fullscreen & 1;
|
resize_info.fullscreen = video_fullscreen & 1;
|
||||||
resize_info.scaling_mode = video_fullscreen_scale;
|
resize_info.scaling_mode = video_fullscreen_scale;
|
||||||
|
resize_info.mutex = thread_create_mutex();
|
||||||
|
|
||||||
options.vsync = video_vsync;
|
options.vsync = video_vsync;
|
||||||
options.frametime = -1;
|
options.frametime = -1;
|
||||||
@@ -613,6 +622,8 @@ void opengl_close(void)
|
|||||||
|
|
||||||
memset((void*)&blit_info, 0, sizeof(blit_info));
|
memset((void*)&blit_info, 0, sizeof(blit_info));
|
||||||
|
|
||||||
|
thread_close_mutex(resize_info.mutex);
|
||||||
|
|
||||||
SetEvent(blit_done);
|
SetEvent(blit_done);
|
||||||
|
|
||||||
thread = NULL;
|
thread = NULL;
|
||||||
@@ -633,9 +644,13 @@ void opengl_set_fs(int fs)
|
|||||||
if (thread == NULL)
|
if (thread == NULL)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
thread_wait_mutex(resize_info.mutex);
|
||||||
|
|
||||||
resize_info.fullscreen = fs;
|
resize_info.fullscreen = fs;
|
||||||
resize_info.scaling_mode = video_fullscreen_scale;
|
resize_info.scaling_mode = video_fullscreen_scale;
|
||||||
|
|
||||||
|
thread_release_mutex(resize_info.mutex);
|
||||||
|
|
||||||
SetEvent(sync_objects.resize);
|
SetEvent(sync_objects.resize);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -644,10 +659,14 @@ void opengl_resize(int w, int h)
|
|||||||
if (thread == NULL)
|
if (thread == NULL)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
thread_wait_mutex(resize_info.mutex);
|
||||||
|
|
||||||
resize_info.width = w;
|
resize_info.width = w;
|
||||||
resize_info.height = h;
|
resize_info.height = h;
|
||||||
resize_info.scaling_mode = video_fullscreen_scale;
|
resize_info.scaling_mode = video_fullscreen_scale;
|
||||||
|
|
||||||
|
thread_release_mutex(resize_info.mutex);
|
||||||
|
|
||||||
SetEvent(sync_objects.resize);
|
SetEvent(sync_objects.resize);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user