diff options
author | reimar <reimar@b3059339-0415-0410-9bf9-f77b7e298cf2> | 2010-07-05 19:19:56 +0000 |
---|---|---|
committer | Uoti Urpala <uau@glyph.nonexistent.invalid> | 2010-11-02 04:14:20 +0200 |
commit | ccb6675fbd6a757790bbfa3212bcf28c240dd4d9 (patch) | |
tree | 4d3e78e489dd36b1f72fb492c418f401cb515d9f /libvo/gl_common.c | |
parent | a19ea9c9666a9299304118783291f7b4f27a72af (diff) | |
download | mpv-ccb6675fbd6a757790bbfa3212bcf28c240dd4d9.tar.bz2 mpv-ccb6675fbd6a757790bbfa3212bcf28c240dd4d9.tar.xz |
vo_gl: Add initial stereo support
git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@31633 b3059339-0415-0410-9bf9-f77b7e298cf2
Diffstat (limited to 'libvo/gl_common.c')
-rw-r--r-- | libvo/gl_common.c | 85 |
1 files changed, 85 insertions, 0 deletions
diff --git a/libvo/gl_common.c b/libvo/gl_common.c index c28632e0c0..e455acc213 100644 --- a/libvo/gl_common.c +++ b/libvo/gl_common.c @@ -93,6 +93,7 @@ void (GLAPIENTRY *mpglLightfv)(GLenum, GLenum, const GLfloat *); void (GLAPIENTRY *mpglColorMaterial)(GLenum, GLenum); void (GLAPIENTRY *mpglShadeModel)(GLenum); void (GLAPIENTRY *mpglGetIntegerv)(GLenum, GLint *); +void (GLAPIENTRY *mpglColorMask)(GLboolean, GLboolean, GLboolean, GLboolean); /** * \defgroup glextfunctions OpenGL extension functions @@ -437,6 +438,7 @@ static const extfunc_desc_t extfuncs[] = { DEF_FUNC_DESC(ColorMaterial), DEF_FUNC_DESC(ShadeModel), DEF_FUNC_DESC(GetIntegerv), + DEF_FUNC_DESC(ColorMask), // here start the real extensions {&mpglGenBuffers, NULL, {"glGenBuffers", "glGenBuffersARB", NULL}}, @@ -1543,6 +1545,89 @@ void glDisableYUVConversion(GLenum target, int type) { } } +void glEnable3DLeft(int type) { + GLint buffer; + switch (type) { + case GL_3D_RED_CYAN: + mpglColorMask(GL_TRUE, GL_FALSE, GL_FALSE, GL_FALSE); + break; + case GL_3D_GREEN_MAGENTA: + mpglColorMask(GL_FALSE, GL_TRUE, GL_FALSE, GL_FALSE); + break; + case GL_3D_QUADBUFFER: + mpglGetIntegerv(GL_DRAW_BUFFER, &buffer); + switch (buffer) { + case GL_FRONT: + case GL_FRONT_LEFT: + case GL_FRONT_RIGHT: + buffer = GL_FRONT_LEFT; + break; + case GL_BACK: + case GL_BACK_LEFT: + case GL_BACK_RIGHT: + buffer = GL_BACK_LEFT; + break; + } + mpglDrawBuffer(buffer); + break; + } +} + +void glEnable3DRight(int type) { + GLint buffer; + switch (type) { + case GL_3D_RED_CYAN: + mpglColorMask(GL_FALSE, GL_TRUE, GL_TRUE, GL_FALSE); + break; + case GL_3D_GREEN_MAGENTA: + mpglColorMask(GL_TRUE, GL_FALSE, GL_TRUE, GL_FALSE); + break; + case GL_3D_QUADBUFFER: + mpglGetIntegerv(GL_DRAW_BUFFER, &buffer); + switch (buffer) { + case GL_FRONT: + case GL_FRONT_LEFT: + case GL_FRONT_RIGHT: + buffer = GL_FRONT_RIGHT; + break; + case GL_BACK: + case GL_BACK_LEFT: + case GL_BACK_RIGHT: + buffer = GL_BACK_RIGHT; + break; + } + mpglDrawBuffer(buffer); + break; + } +} + +void glDisable3D(int type) { + GLint buffer; + switch (type) { + case GL_3D_RED_CYAN: + case GL_3D_GREEN_MAGENTA: + mpglColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE); + break; + case GL_3D_QUADBUFFER: + mpglDrawBuffer(vo_doublebuffering ? GL_BACK : GL_FRONT); + mpglGetIntegerv(GL_DRAW_BUFFER, &buffer); + switch (buffer) { + case GL_FRONT: + case GL_FRONT_LEFT: + case GL_FRONT_RIGHT: + buffer = GL_FRONT; + break; + case GL_BACK: + case GL_BACK_LEFT: + case GL_BACK_RIGHT: + buffer = GL_BACK; + break; + } + mpglDrawBuffer(buffer); + break; + } +} + /** * \brief draw a texture part at given 2D coordinates * \param x screen top coordinate |