# HG changeset patch # User John Tsiombikas # Date 1446178368 -7200 # Node ID 7eea82cea9d27e777b7e625e32a247a376193d59 # Parent ec6edfe7774c66ae8a6c6c0609145bf47317eafa added preliminary support for quad-buffer stereo fallback drawing diff -r ec6edfe7774c -r 7eea82cea9d2 src/vr.c --- a/src/vr.c Sun Apr 12 02:02:04 2015 +0300 +++ b/src/vr.c Fri Oct 30 06:12:48 2015 +0200 @@ -43,10 +43,15 @@ set_option_vec3f(defopt, VR_LEYE_OFFSET, -DEF_IPD * 0.5f, 0.0f, 0.0f); set_option_vec3f(defopt, VR_REYE_OFFSET, DEF_IPD * 0.5f, 0.0f, 0.0f); - if((env = getenv("VR_NULL_STEREO")) && atoi(env)) { - set_option_int(defopt, VR_NULL_STEREO, 1); + if((env = getenv("VR_NULL_STEREO_SBS")) && atoi(env)) { + set_option_int(defopt, VR_NULL_STEREO_SBS, 1); } else { - set_option_int(defopt, VR_NULL_STEREO, 0); + set_option_int(defopt, VR_NULL_STEREO_SBS, 0); + } + if((env = getenv("VR_NULL_STEREO_GL")) && atoi(env)) { + set_option_int(defopt, VR_NULL_STEREO_GL, 1); + } else { + set_option_int(defopt, VR_NULL_STEREO_GL, 0); } } @@ -364,7 +369,8 @@ static void fallback_present(void) { - int i, show_both = vr_geti(VR_NULL_STEREO); + int i, show_sbs = vr_geti(VR_NULL_STEREO_SBS); + int use_quadbuf = vr_geti(VR_NULL_STEREO_GL); glPushAttrib(GL_ENABLE_BIT | GL_TRANSFORM_BIT); @@ -386,7 +392,7 @@ for(i=0; i<2; i++) { float x0, x1; - if(show_both) { + if(show_sbs && !use_quadbuf) { x0 = i == 0 ? -1 : 0; x1 = i == 0 ? 0 : 1; } else { @@ -396,6 +402,10 @@ glBindTexture(GL_TEXTURE_2D, rtarg[i].tex); + if(use_quadbuf) { + glDrawBuffer(GL_BACK_LEFT + i); + } + glBegin(GL_QUADS); glTexCoord2f(rtarg[i].umin, rtarg[i].vmin); glVertex2f(x0, -1); @@ -407,7 +417,11 @@ glVertex2f(x0, 1); glEnd(); - if(!show_both) break; + if(!show_sbs && !use_quadbuf) break; + } + + if(use_quadbuf) { + glDrawBuffer(GL_BACK); } glPopMatrix(); diff -r ec6edfe7774c -r 7eea82cea9d2 src/vr.h --- a/src/vr.h Sun Apr 12 02:02:04 2015 +0300 +++ b/src/vr.h Fri Oct 30 06:12:48 2015 +0200 @@ -19,7 +19,8 @@ #define VR_LEYE_OFFSET "left-eye-offset" /* stereo offset from center of the head */ #define VR_REYE_OFFSET "right-eye-offset" /* stereo offset from center of the head */ /* misc options */ -#define VR_NULL_STEREO "null-stereo" /* bool, default 0 */ +#define VR_NULL_STEREO_SBS "null-stereo-sbs" /* bool, default 0: draw side-by-side */ +#define VR_NULL_STEREO_GL "null-stereo-gl" /* bool, default 0: use quad-buffer stereo */ enum { VR_EYE_LEFT,