android: use common rend_thread() instead of a specific one

fixes the swap pending issue (double swap) on android
This commit is contained in:
Flyinghead 2019-05-25 18:48:00 +02:00
parent 2c91ca96fc
commit 506756ea37
4 changed files with 20 additions and 32 deletions

View File

@ -78,8 +78,9 @@ u32 FrameCount=1;
Renderer* renderer;
static Renderer* fallback_renderer;
bool renderer_enabled = true; // Signals the renderer thread to exit
bool renderer_changed = false; // Signals the renderer thread to switch renderer
volatile bool renderer_enabled = true; // Signals the renderer thread to exit
volatile bool renderer_changed = false; // Signals the renderer thread to switch renderer
volatile bool renderer_reinit_requested = false; // Signals the renderer thread to reinit the renderer
#if !defined(TARGET_NO_THREADS)
cResetEvent rs, re;
@ -398,6 +399,8 @@ void rend_term_renderer()
void* rend_thread(void* p)
{
renderer_enabled = true;
rend_init_renderer();
//we don't know if this is true, so let's not speculate here
@ -416,10 +419,16 @@ void* rend_thread(void* p)
if (renderer_changed)
{
renderer_changed = false;
renderer_reinit_requested = false;
rend_term_renderer();
rend_create_renderer();
rend_init_renderer();
}
else if (renderer_reinit_requested)
{
renderer_reinit_requested = false;
rend_init_renderer();
}
}
rend_term_renderer();

View File

@ -14,6 +14,7 @@ void rend_end_render();
void rend_cancel_emu_wait();
bool rend_single_frame();
void rend_swap_frame();
void *rend_thread(void *);
void rend_set_fb_scale(float x,float y);
void rend_resize(int width, int height);
@ -52,8 +53,9 @@ struct Renderer
};
extern Renderer* renderer;
extern bool renderer_enabled; // Signals the renderer thread to exit
extern bool renderer_changed; // Signals the renderer thread to switch renderer
extern volatile bool renderer_enabled; // Signals the renderer thread to exit
extern volatile bool renderer_changed; // Signals the renderer thread to switch renderer
extern volatile bool renderer_reinit_requested; // Signals the renderer thread to reinit the renderer
Renderer* rend_GLES2();
#if !defined(GLES) && HOST_OS != OS_DARWIN

View File

@ -62,7 +62,6 @@ extern u32 mo_buttons;
extern f32 mo_x_delta;
extern f32 mo_y_delta;
extern f32 mo_wheel_delta;
extern bool renderer_changed;
int screen_dpi = 96;

View File

@ -401,36 +401,14 @@ JNIEXPORT jint JNICALL Java_com_reicast_emulator_emu_JNIdc_data(JNIEnv *env, job
return 0;
}
extern void gl_swap();
extern void egl_stealcntx();
volatile static bool render_running;
volatile static bool render_reinit;
void *render_thread_func(void *)
static void *render_thread_func(void *)
{
render_running = true;
rend_thread(NULL);
rend_init_renderer();
while (render_running) {
if (render_reinit)
{
render_reinit = false;
rend_init_renderer();
}
else
if (!egl_makecurrent())
break;;
bool ret = rend_single_frame();
if (ret)
gl_swap();
}
egl_makecurrent();
rend_term_renderer();
ANativeWindow_release(g_window);
ANativeWindow_release(g_window);
g_window = NULL;
render_running = false;
return NULL;
}
@ -443,11 +421,11 @@ JNIEXPORT void JNICALL Java_com_reicast_emulator_emu_JNIdc_rendinitNative(JNIEnv
{
if (surface == NULL)
{
render_running = false;
renderer_enabled = false;
render_thread.WaitToEnd();
}
else
render_reinit = true;
renderer_reinit_requested = true;
}
else if (surface != NULL)
{