x11: fix fallback to gl 3.0. fix crash when switching renderer.
Fallback to GL 3.1 when GL 4.3 isn't available was broken. Fallback to GL 3.0 instead of 3.1. Fix crash when switching renderer (per-pixel, per-triangle)
This commit is contained in:
parent
afcd7a08a3
commit
eb725f9e66
|
@ -98,6 +98,7 @@ TA_context* _pvrrc;
|
|||
void SetREP(TA_context* cntx);
|
||||
void killtex();
|
||||
bool render_output_framebuffer();
|
||||
static void rend_create_renderer();
|
||||
|
||||
void dump_frame(const char* file, TA_context* ctx, u8* vram, u8* vram_ref = NULL) {
|
||||
FILE* fw = fopen(file, "wb");
|
||||
|
@ -266,6 +267,13 @@ bool rend_frame(TA_context* ctx, bool draw_osd) {
|
|||
|
||||
bool rend_single_frame()
|
||||
{
|
||||
if (renderer_changed)
|
||||
{
|
||||
renderer_changed = false;
|
||||
rend_term_renderer();
|
||||
rend_create_renderer();
|
||||
rend_init_renderer();
|
||||
}
|
||||
//wait render start only if no frame pending
|
||||
do
|
||||
{
|
||||
|
@ -362,6 +370,7 @@ void rend_init_renderer()
|
|||
}
|
||||
printf("Selected renderer initialization failed. Falling back to default renderer.\n");
|
||||
renderer = fallback_renderer;
|
||||
fallback_renderer = NULL; // avoid double-free
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -377,7 +386,6 @@ void rend_term_renderer()
|
|||
delete fallback_renderer;
|
||||
fallback_renderer = NULL;
|
||||
}
|
||||
tactx_Term();
|
||||
}
|
||||
|
||||
void* rend_thread(void* p)
|
||||
|
@ -391,13 +399,6 @@ void* rend_thread(void* p)
|
|||
{
|
||||
if (rend_single_frame())
|
||||
renderer->Present();
|
||||
if (renderer_changed)
|
||||
{
|
||||
renderer_changed = false;
|
||||
rend_term_renderer();
|
||||
rend_create_renderer();
|
||||
rend_init_renderer();
|
||||
}
|
||||
}
|
||||
|
||||
rend_term_renderer();
|
||||
|
@ -538,6 +539,7 @@ void rend_end_render()
|
|||
void rend_stop_renderer()
|
||||
{
|
||||
renderer_enabled = false;
|
||||
tactx_Term();
|
||||
}
|
||||
|
||||
void rend_vblank()
|
||||
|
|
|
@ -361,6 +361,11 @@ void input_x11_init()
|
|||
printf("X11 Keyboard input disabled by config.\n");
|
||||
}
|
||||
|
||||
static int x11_error_handler(Display *, XErrorEvent *)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
void x11_window_create()
|
||||
{
|
||||
if (cfgLoadInt("pvr", "nox11", 0) == 0)
|
||||
|
@ -519,20 +524,22 @@ void x11_window_create()
|
|||
GLX_CONTEXT_PROFILE_MASK_ARB, GLX_CONTEXT_CORE_PROFILE_BIT_ARB,
|
||||
None
|
||||
};
|
||||
int (*old_handler)(Display *, XErrorEvent *) = XSetErrorHandler(&x11_error_handler);
|
||||
|
||||
x11_glc = glXCreateContextAttribsARB(x11Display, bestFbc, 0, True, context_attribs);
|
||||
if (!x11_glc)
|
||||
{
|
||||
printf("Open GL 4.3 not supported\n");
|
||||
// Try GL 3.1
|
||||
// Try GL 3.0
|
||||
context_attribs[1] = 3;
|
||||
context_attribs[3] = 1;
|
||||
context_attribs[3] = 0;
|
||||
x11_glc = glXCreateContextAttribsARB(x11Display, bestFbc, 0, True, context_attribs);
|
||||
if (!x11_glc)
|
||||
{
|
||||
die("Open GL 3.1 not supported\n");
|
||||
die("Open GL 3.0 not supported\n");
|
||||
}
|
||||
}
|
||||
XSetErrorHandler(old_handler);
|
||||
XSync(x11Display, False);
|
||||
|
||||
#endif
|
||||
|
|
Loading…
Reference in New Issue