diff options
author | reimar <reimar@b3059339-0415-0410-9bf9-f77b7e298cf2> | 2005-08-19 09:31:02 +0000 |
---|---|---|
committer | reimar <reimar@b3059339-0415-0410-9bf9-f77b7e298cf2> | 2005-08-19 09:31:02 +0000 |
commit | 0a194447967ddccfc82163bf9ba08034fc2aa95f (patch) | |
tree | c32254c5786b67dbe26c4cb4c26fb1cce5a5f6ae /libvo | |
parent | 872024d3fed1c0ebfb1de57e773615ab207ff005 (diff) | |
download | mpv-0a194447967ddccfc82163bf9ba08034fc2aa95f.tar.bz2 mpv-0a194447967ddccfc82163bf9ba08034fc2aa95f.tar.xz |
automatic vsync enabling for vo_gl.
git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@16269 b3059339-0415-0410-9bf9-f77b7e298cf2
Diffstat (limited to 'libvo')
-rw-r--r-- | libvo/gl_common.c | 12 | ||||
-rw-r--r-- | libvo/gl_common.h | 1 | ||||
-rw-r--r-- | libvo/vo_gl.c | 9 |
3 files changed, 22 insertions, 0 deletions
diff --git a/libvo/gl_common.c b/libvo/gl_common.c index 4139bd9de0..2ea61d7079 100644 --- a/libvo/gl_common.c +++ b/libvo/gl_common.c @@ -22,6 +22,7 @@ void (APIENTRY *BindProgram)(GLenum, GLuint); void (APIENTRY *ProgramString)(GLenum, GLenum, GLsizei, const GLvoid *); void (APIENTRY *ProgramEnvParameter4f)(GLenum, GLuint, GLfloat, GLfloat, GLfloat, GLfloat); +int (*SwapInterval)(int); /** * \brief adjusts the GL_UNPACK_ALGNMENT to fit the stride. @@ -259,6 +260,17 @@ static void getFunctions() { ProgramEnvParameter4f = getProcAddress("glProgramEnvParameter4fARB"); if (!ProgramEnvParameter4f) ProgramEnvParameter4f = getProcAddress("glProgramEnvParameter4fNV"); + SwapInterval = getProcAddress("glXSwapInterval"); + if (!SwapInterval) + SwapInterval = getProcAddress("glXSwapIntervalEXT"); + if (!SwapInterval) + SwapInterval = getProcAddress("glXSwapIntervalSGI"); + if (!SwapInterval) + SwapInterval = getProcAddress("wglSwapInterval"); + if (!SwapInterval) + SwapInterval = getProcAddress("wglSwapIntervalEXT"); + if (!SwapInterval) + SwapInterval = getProcAddress("wglSwapIntervalSGI"); } /** diff --git a/libvo/gl_common.h b/libvo/gl_common.h index 32b8ea8a27..0022379623 100644 --- a/libvo/gl_common.h +++ b/libvo/gl_common.h @@ -108,5 +108,6 @@ extern void (APIENTRY *BindProgram)(GLenum, GLuint); extern void (APIENTRY *ProgramString)(GLenum, GLenum, GLsizei, const GLvoid *); extern void (APIENTRY *ProgramEnvParameter4f)(GLenum, GLuint, GLfloat, GLfloat, GLfloat, GLfloat); +extern int (*SwapInterval)(int); #endif diff --git a/libvo/vo_gl.c b/libvo/vo_gl.c index 79add98e76..657f548718 100644 --- a/libvo/vo_gl.c +++ b/libvo/vo_gl.c @@ -62,6 +62,7 @@ static uint32_t image_width; static uint32_t image_height; static int many_fmts; static int use_glFinish; +static int swap_interval; static GLenum gl_target; static GLenum gl_texfmt; static GLenum gl_format; @@ -149,6 +150,8 @@ static int initGl(uint32_t d_width, uint32_t d_height) { glClearColor( 0.0f,0.0f,0.0f,0.0f ); glClear( GL_COLOR_BUFFER_BIT ); + if (SwapInterval) + SwapInterval(swap_interval); gl_buffer = 0; gl_buffersize = 0; err_shown = 0; @@ -519,6 +522,7 @@ static opt_t subopts[] = { {"slice-height", OPT_ARG_INT, &slice_height, (opt_test_f)int_non_neg}, {"rectangle", OPT_ARG_INT, &use_rectangle,(opt_test_f)int_non_neg}, {"glfinish", OPT_ARG_BOOL, &use_glFinish, NULL}, + {"swapinterval", OPT_ARG_INT, &swap_interval,NULL}, {NULL} }; @@ -531,6 +535,7 @@ static int preinit(const char *arg) use_aspect = 1; use_rectangle = 0; use_glFinish = 0; + swap_interval = 1; slice_height = 4; if (subopt_parse(arg, subopts) != 0) { mp_msg(MSGT_VO, MSGL_FATAL, @@ -551,6 +556,10 @@ static int preinit(const char *arg) " 2: use texture_non_power_of_two\n" " glfinish\n" " Call glFinish() before swapping buffers\n" + " swapinterval=<n>\n" + " Interval in displayed frames between to buffer swaps.\n" + " 1 is equivalent to enable VSYNC, 0 to disable VSYNC.\n" + " Requires GLX_SGI_swap_control support to work.\n" "\n" ); return -1; } |