android: use common rend_thread() instead of a specific one
fixes the swap pending issue (double swap) on android
This commit is contained in:
parent
2c91ca96fc
commit
506756ea37
|
@ -78,8 +78,9 @@ u32 FrameCount=1;
|
||||||
|
|
||||||
Renderer* renderer;
|
Renderer* renderer;
|
||||||
static Renderer* fallback_renderer;
|
static Renderer* fallback_renderer;
|
||||||
bool renderer_enabled = true; // Signals the renderer thread to exit
|
volatile bool renderer_enabled = true; // Signals the renderer thread to exit
|
||||||
bool renderer_changed = false; // Signals the renderer thread to switch renderer
|
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)
|
#if !defined(TARGET_NO_THREADS)
|
||||||
cResetEvent rs, re;
|
cResetEvent rs, re;
|
||||||
|
@ -398,6 +399,8 @@ void rend_term_renderer()
|
||||||
|
|
||||||
void* rend_thread(void* p)
|
void* rend_thread(void* p)
|
||||||
{
|
{
|
||||||
|
renderer_enabled = true;
|
||||||
|
|
||||||
rend_init_renderer();
|
rend_init_renderer();
|
||||||
|
|
||||||
//we don't know if this is true, so let's not speculate here
|
//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)
|
if (renderer_changed)
|
||||||
{
|
{
|
||||||
renderer_changed = false;
|
renderer_changed = false;
|
||||||
|
renderer_reinit_requested = false;
|
||||||
rend_term_renderer();
|
rend_term_renderer();
|
||||||
rend_create_renderer();
|
rend_create_renderer();
|
||||||
rend_init_renderer();
|
rend_init_renderer();
|
||||||
}
|
}
|
||||||
|
else if (renderer_reinit_requested)
|
||||||
|
{
|
||||||
|
renderer_reinit_requested = false;
|
||||||
|
rend_init_renderer();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
rend_term_renderer();
|
rend_term_renderer();
|
||||||
|
|
|
@ -14,6 +14,7 @@ void rend_end_render();
|
||||||
void rend_cancel_emu_wait();
|
void rend_cancel_emu_wait();
|
||||||
bool rend_single_frame();
|
bool rend_single_frame();
|
||||||
void rend_swap_frame();
|
void rend_swap_frame();
|
||||||
|
void *rend_thread(void *);
|
||||||
|
|
||||||
void rend_set_fb_scale(float x,float y);
|
void rend_set_fb_scale(float x,float y);
|
||||||
void rend_resize(int width, int height);
|
void rend_resize(int width, int height);
|
||||||
|
@ -52,8 +53,9 @@ struct Renderer
|
||||||
};
|
};
|
||||||
|
|
||||||
extern Renderer* renderer;
|
extern Renderer* renderer;
|
||||||
extern bool renderer_enabled; // Signals the renderer thread to exit
|
extern volatile bool renderer_enabled; // Signals the renderer thread to exit
|
||||||
extern bool renderer_changed; // Signals the renderer thread to switch renderer
|
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();
|
Renderer* rend_GLES2();
|
||||||
#if !defined(GLES) && HOST_OS != OS_DARWIN
|
#if !defined(GLES) && HOST_OS != OS_DARWIN
|
||||||
|
|
|
@ -62,7 +62,6 @@ extern u32 mo_buttons;
|
||||||
extern f32 mo_x_delta;
|
extern f32 mo_x_delta;
|
||||||
extern f32 mo_y_delta;
|
extern f32 mo_y_delta;
|
||||||
extern f32 mo_wheel_delta;
|
extern f32 mo_wheel_delta;
|
||||||
extern bool renderer_changed;
|
|
||||||
|
|
||||||
int screen_dpi = 96;
|
int screen_dpi = 96;
|
||||||
|
|
||||||
|
|
|
@ -401,36 +401,14 @@ JNIEXPORT jint JNICALL Java_com_reicast_emulator_emu_JNIdc_data(JNIEnv *env, job
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
extern void gl_swap();
|
|
||||||
extern void egl_stealcntx();
|
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();
|
ANativeWindow_release(g_window);
|
||||||
|
|
||||||
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);
|
|
||||||
g_window = NULL;
|
g_window = NULL;
|
||||||
render_running = false;
|
|
||||||
|
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
@ -443,11 +421,11 @@ JNIEXPORT void JNICALL Java_com_reicast_emulator_emu_JNIdc_rendinitNative(JNIEnv
|
||||||
{
|
{
|
||||||
if (surface == NULL)
|
if (surface == NULL)
|
||||||
{
|
{
|
||||||
render_running = false;
|
renderer_enabled = false;
|
||||||
render_thread.WaitToEnd();
|
render_thread.WaitToEnd();
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
render_reinit = true;
|
renderer_reinit_requested = true;
|
||||||
}
|
}
|
||||||
else if (surface != NULL)
|
else if (surface != NULL)
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in New Issue