From a4898ff3ecfdf03224af3b07deddd4bde4de577d Mon Sep 17 00:00:00 2001 From: bsp2 Date: Sat, 3 Nov 2018 14:05:33 +0100 Subject: [PATCH] fix resize crash / add LGLW_CONTEXT_ALLOW_USE_AFTER_FREE build option --- dep/lglw/lglw_linux.c | 8 ++++++++ setenv_linux.sh | 9 ++++++++- 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/dep/lglw/lglw_linux.c b/dep/lglw/lglw_linux.c index 659812b3..700f59c6 100644 --- a/dep/lglw/lglw_linux.c +++ b/dep/lglw/lglw_linux.c @@ -1297,8 +1297,16 @@ lglw_bool_t lglw_window_resize (lglw_t _lglw, int32_t _w, int32_t _h) { if(0 != lglw->hidden.xwnd) { XResizeWindow(lglw->xdsp, lglw->hidden.xwnd, _w, _h); + +#ifdef LGLW_CONTEXT_ALLOW_USE_AFTER_FREE + // (note) [bsp] destroying the GL context also destroys all GL objects attached to it + // (_if_ the GL driver is implemented correctly). + // IOW, if we destroy the context here, we'd have to re-create all the textures, + // buffer objects, framebuffer objects, shaders, .. before they can be used again. + // Apparently this works with certain GL drivers on Linux but it still is an application error. loc_destroy_gl(lglw); loc_create_gl(lglw); +#endif // LGLW_CONTEXT_ALLOW_USE_AFTER_FREE } if(0 != lglw->win.xwnd) diff --git a/setenv_linux.sh b/setenv_linux.sh index b5de2aa8..062e94a9 100644 --- a/setenv_linux.sh +++ b/setenv_linux.sh @@ -25,9 +25,16 @@ CPU_ARCH="-march=athlon-fx" fi # Extra compiler flags (C and C++) +#EXTRA_FLAGS="" #EXTRA_FLAGS=-DUSE_LOG_PRINTF EXTRA_FLAGS="-DUSE_BEGIN_REDRAW_FXN -I${VSVR_BASE_DIR}/dep/lglw" -#EXTRA_FLAGS="" + +# (note) see dep/lglw/lglw_linux.c for an important note re: LGLW_CONTEXT_ALLOW_USE_AFTER_FREE +#EXTRA_FLAGS="${EXTRA_FLAGS} -DLGLW_CONTEXT_ALLOW_USE_AFTER_FREE" + +if [ "${USER}" = "cameron" ]; then +EXTRA_FLAGS="${EXTRA_FLAGS} -DLGLW_CONTEXT_ALLOW_USE_AFTER_FREE" +fi # Extra C compiler flags export EXTRA_CFLAGS="${CPU_ARCH} ${EXTRA_FLAGS}"