summaryrefslogtreecommitdiffstats
path: root/libvo/gl_common.c
diff options
context:
space:
mode:
authorreimar <reimar@b3059339-0415-0410-9bf9-f77b7e298cf2>2010-07-05 19:19:56 +0000
committerUoti Urpala <uau@glyph.nonexistent.invalid>2010-11-02 04:14:20 +0200
commitccb6675fbd6a757790bbfa3212bcf28c240dd4d9 (patch)
tree4d3e78e489dd36b1f72fb492c418f401cb515d9f /libvo/gl_common.c
parenta19ea9c9666a9299304118783291f7b4f27a72af (diff)
downloadmpv-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.c85
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