Mercurial > mplayer.hg
annotate libvo/vo_gl2.c @ 33672:e576232a39d5
Prevent balance from hopping.
Only recalculate the balance if the balance has changed, not if just
the volume has changed.
Because (at least with my soundcard) not all volume values can be
stored, but seem to be mapped onto a discrete value set, recalculation
the balance from the volume isn't accurate enough.
author | ib |
---|---|
date | Tue, 28 Jun 2011 18:16:06 +0000 |
parents | b7b169f5abda |
children | fe03e0d5c7d0 |
rev | line source |
---|---|
23651 | 1 /* |
28446
7681eab10aea
Add standard license headers, unify header formatting.
diego
parents:
27927
diff
changeset
|
2 * X11/OpenGL interface |
2124 | 3 * based on video_out_x11 by Aaron Holtzman, |
4 * and WS opengl window manager by Pontscho/Fresh! | |
28446
7681eab10aea
Add standard license headers, unify header formatting.
diego
parents:
27927
diff
changeset
|
5 * |
7681eab10aea
Add standard license headers, unify header formatting.
diego
parents:
27927
diff
changeset
|
6 * This file is part of MPlayer. |
7681eab10aea
Add standard license headers, unify header formatting.
diego
parents:
27927
diff
changeset
|
7 * |
7681eab10aea
Add standard license headers, unify header formatting.
diego
parents:
27927
diff
changeset
|
8 * MPlayer is free software; you can redistribute it and/or modify |
7681eab10aea
Add standard license headers, unify header formatting.
diego
parents:
27927
diff
changeset
|
9 * it under the terms of the GNU General Public License as published by |
7681eab10aea
Add standard license headers, unify header formatting.
diego
parents:
27927
diff
changeset
|
10 * the Free Software Foundation; either version 2 of the License, or |
7681eab10aea
Add standard license headers, unify header formatting.
diego
parents:
27927
diff
changeset
|
11 * (at your option) any later version. |
7681eab10aea
Add standard license headers, unify header formatting.
diego
parents:
27927
diff
changeset
|
12 * |
7681eab10aea
Add standard license headers, unify header formatting.
diego
parents:
27927
diff
changeset
|
13 * MPlayer is distributed in the hope that it will be useful, |
7681eab10aea
Add standard license headers, unify header formatting.
diego
parents:
27927
diff
changeset
|
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of |
7681eab10aea
Add standard license headers, unify header formatting.
diego
parents:
27927
diff
changeset
|
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
7681eab10aea
Add standard license headers, unify header formatting.
diego
parents:
27927
diff
changeset
|
16 * GNU General Public License for more details. |
7681eab10aea
Add standard license headers, unify header formatting.
diego
parents:
27927
diff
changeset
|
17 * |
7681eab10aea
Add standard license headers, unify header formatting.
diego
parents:
27927
diff
changeset
|
18 * You should have received a copy of the GNU General Public License along |
7681eab10aea
Add standard license headers, unify header formatting.
diego
parents:
27927
diff
changeset
|
19 * with MPlayer; if not, write to the Free Software Foundation, Inc., |
7681eab10aea
Add standard license headers, unify header formatting.
diego
parents:
27927
diff
changeset
|
20 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. |
2124 | 21 */ |
22 | |
23 #include <stdio.h> | |
24 #include <stdlib.h> | |
25 #include <string.h> | |
26 | |
27 #include "config.h" | |
11087 | 28 #include "mp_msg.h" |
16475 | 29 #include "subopt-helper.h" |
2124 | 30 #include "video_out.h" |
31 #include "video_out_internal.h" | |
33301
899d817e56fc
Implement control() VOCTRL_SET/GET_EQUALIZER using a vf_equalize struct,
iive
parents:
32537
diff
changeset
|
32 #include "libmpcodecs/vf.h" |
32467 | 33 #include "sub/sub.h" |
2124 | 34 |
18742 | 35 #include "gl_common.h" |
36 #include "aspect.h" | |
12382 | 37 |
12750
38c660174053
removed XFlush() before XSync(), made config_glx return-type signed, force 32bit on Darwin, idea from a patch by Marc Hoffman (mmh <at> pleasantst.com).
reimar
parents:
12709
diff
changeset
|
38 #undef TEXTUREFORMAT_ALWAYS |
25397
084619331d92
Replace some more broken SYS_DARWIN preprocessor conditionals with __APPLE__.
diego
parents:
25220
diff
changeset
|
39 #ifdef __APPLE__ |
12842 | 40 #define TEXTUREFORMAT_ALWAYS GL_RGBA8 |
12750
38c660174053
removed XFlush() before XSync(), made config_glx return-type signed, force 32bit on Darwin, idea from a patch by Marc Hoffman (mmh <at> pleasantst.com).
reimar
parents:
12709
diff
changeset
|
41 #endif |
10143
fd3cbeb388f0
removed broken swscaler support, added runtime fullscreens switching ability, and some other general cleanup thingies
alex
parents:
8254
diff
changeset
|
42 |
16594
7b30ec73e83e
debugging/testing helpers: allow forcing a certain width/height for textures
reimar
parents:
16590
diff
changeset
|
43 //! force texture height, useful for debugging |
7b30ec73e83e
debugging/testing helpers: allow forcing a certain width/height for textures
reimar
parents:
16590
diff
changeset
|
44 #define TEXTURE_HEIGHT 128 |
7b30ec73e83e
debugging/testing helpers: allow forcing a certain width/height for textures
reimar
parents:
16590
diff
changeset
|
45 #undef TEXTURE_HEIGHT |
7b30ec73e83e
debugging/testing helpers: allow forcing a certain width/height for textures
reimar
parents:
16590
diff
changeset
|
46 //! force texture width, useful for debugging |
7b30ec73e83e
debugging/testing helpers: allow forcing a certain width/height for textures
reimar
parents:
16590
diff
changeset
|
47 #define TEXTURE_WIDTH 128 |
7b30ec73e83e
debugging/testing helpers: allow forcing a certain width/height for textures
reimar
parents:
16590
diff
changeset
|
48 #undef TEXTURE_WIDTH |
7b30ec73e83e
debugging/testing helpers: allow forcing a certain width/height for textures
reimar
parents:
16590
diff
changeset
|
49 |
25216 | 50 static const vo_info_t info = |
2124 | 51 { |
23651 | 52 "X11 (OpenGL) - multiple textures version", |
53 "gl2", | |
54 "Arpad Gereoffy & Sven Goethel", | |
55 "" | |
2124 | 56 }; |
57 | |
25220
c9e9ac2008c2
Mark the vo_functions_t definitions as const where possible.
reimar
parents:
25216
diff
changeset
|
58 const LIBVO_EXTERN(gl2) |
8148
5b39e79af5fe
removed get_info, using the same sheme as in libmpcodecs instead
alex
parents:
8123
diff
changeset
|
59 |
2124 | 60 /* local data */ |
61 static unsigned char *ImageData=NULL; | |
62 | |
29938
eb6c70e2cbea
Very preliminary code to allow selecting the OpenGL backend at runtime.
reimar
parents:
29904
diff
changeset
|
63 static MPGLContext glctx; |
2124 | 64 |
65 static uint32_t image_width; | |
66 static uint32_t image_height; | |
67 static uint32_t image_format; | |
68 static uint32_t image_bpp; | |
69 static uint32_t image_bytes; | |
70 | |
10757
3aea64e0d6d9
Avoid flickering during resizes. Keep video contents even when paused. Fix by Tomas Simonaitis <haden@homelan.lt>
mosu
parents:
10604
diff
changeset
|
71 static int int_pause; |
3aea64e0d6d9
Avoid flickering during resizes. Keep video contents even when paused. Fix by Tomas Simonaitis <haden@homelan.lt>
mosu
parents:
10604
diff
changeset
|
72 |
2124 | 73 static uint32_t texture_width; |
74 static uint32_t texture_height; | |
12448 | 75 static int texnumx, texnumy, raw_line_len; |
23649
404d35495770
Remove overly complex and unused per-subtexture "dirty" handling
reimar
parents:
23648
diff
changeset
|
76 static int texdirty; |
13540 | 77 static struct TexSquare * texgrid = NULL; |
16488
3191dcb27a12
hardware color-space conversion for vo_gl and vo_gl2
reimar
parents:
16475
diff
changeset
|
78 static GLuint fragprog; |
3191dcb27a12
hardware color-space conversion for vo_gl and vo_gl2
reimar
parents:
16475
diff
changeset
|
79 static GLuint lookupTex; |
2276
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
80 static GLint gl_internal_format; |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
81 static int rgb_sz, r_sz, g_sz, b_sz, a_sz; |
16303
a87c6cf3fe52
Fix texture format variable types. Internal format is GLint, others are GLenum
reimar
parents:
16282
diff
changeset
|
82 static GLenum gl_bitmap_format; |
a87c6cf3fe52
Fix texture format variable types. Internal format is GLint, others are GLenum
reimar
parents:
16282
diff
changeset
|
83 static GLenum gl_bitmap_type; |
2276
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
84 static int isGL12 = GL_FALSE; |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
85 |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
86 static int gl_bilinear=1; |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
87 static int gl_antialias=0; |
16488
3191dcb27a12
hardware color-space conversion for vo_gl and vo_gl2
reimar
parents:
16475
diff
changeset
|
88 static int use_yuv; |
30097 | 89 static int is_yuv; |
16475 | 90 static int use_glFinish; |
2276
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
91 |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
92 static void (*draw_alpha_fnc) |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
93 (int x0,int y0, int w,int h, unsigned char* src, unsigned char *srca, int stride); |
2124 | 94 |
10757
3aea64e0d6d9
Avoid flickering during resizes. Keep video contents even when paused. Fix by Tomas Simonaitis <haden@homelan.lt>
mosu
parents:
10604
diff
changeset
|
95 |
2124 | 96 /* The squares that are tiled to make up the game screen polygon */ |
97 | |
98 struct TexSquare | |
99 { | |
100 GLubyte *texture; | |
101 GLuint texobj; | |
16488
3191dcb27a12
hardware color-space conversion for vo_gl and vo_gl2
reimar
parents:
16475
diff
changeset
|
102 GLuint uvtexobjs[2]; |
16214
ede5b4afd262
Helper function for drawing texture and general cleanup of vo_gl2.c
reimar
parents:
16171
diff
changeset
|
103 GLfloat fx, fy, fw, fh; |
2124 | 104 }; |
105 | |
17566
f580a7755ac5
Patch by Stefan Huehner / stefan % huehner ! org \
rathann
parents:
17220
diff
changeset
|
106 static GLint getInternalFormat(void) |
14090
e84643be7bd0
Move selection of internal texture format to appropriate place, should
reimar
parents:
14078
diff
changeset
|
107 { |
29938
eb6c70e2cbea
Very preliminary code to allow selecting the OpenGL backend at runtime.
reimar
parents:
29904
diff
changeset
|
108 switch (glctx.type) { |
30023 | 109 #ifdef CONFIG_GL_WIN32 |
29938
eb6c70e2cbea
Very preliminary code to allow selecting the OpenGL backend at runtime.
reimar
parents:
29904
diff
changeset
|
110 case GLTYPE_W32: |
eb6c70e2cbea
Very preliminary code to allow selecting the OpenGL backend at runtime.
reimar
parents:
29904
diff
changeset
|
111 { |
14090
e84643be7bd0
Move selection of internal texture format to appropriate place, should
reimar
parents:
14078
diff
changeset
|
112 PIXELFORMATDESCRIPTOR pfd; |
29904
f529a2bb299d
Add support for Windows OpenGL rendering onto a device instead of into a window.
reimar
parents:
29647
diff
changeset
|
113 HDC vo_hdc = vo_w32_get_dc(vo_w32_window); |
14090
e84643be7bd0
Move selection of internal texture format to appropriate place, should
reimar
parents:
14078
diff
changeset
|
114 int pf = GetPixelFormat(vo_hdc); |
e84643be7bd0
Move selection of internal texture format to appropriate place, should
reimar
parents:
14078
diff
changeset
|
115 if (!DescribePixelFormat(vo_hdc, pf, sizeof pfd, &pfd)) { |
e84643be7bd0
Move selection of internal texture format to appropriate place, should
reimar
parents:
14078
diff
changeset
|
116 r_sz = g_sz = b_sz = a_sz = 0; |
e84643be7bd0
Move selection of internal texture format to appropriate place, should
reimar
parents:
14078
diff
changeset
|
117 } else { |
e84643be7bd0
Move selection of internal texture format to appropriate place, should
reimar
parents:
14078
diff
changeset
|
118 r_sz = pfd.cRedBits; |
e84643be7bd0
Move selection of internal texture format to appropriate place, should
reimar
parents:
14078
diff
changeset
|
119 g_sz = pfd.cGreenBits; |
e84643be7bd0
Move selection of internal texture format to appropriate place, should
reimar
parents:
14078
diff
changeset
|
120 b_sz = pfd.cBlueBits; |
e84643be7bd0
Move selection of internal texture format to appropriate place, should
reimar
parents:
14078
diff
changeset
|
121 a_sz = pfd.cAlphaBits; |
e84643be7bd0
Move selection of internal texture format to appropriate place, should
reimar
parents:
14078
diff
changeset
|
122 } |
29904
f529a2bb299d
Add support for Windows OpenGL rendering onto a device instead of into a window.
reimar
parents:
29647
diff
changeset
|
123 vo_w32_release_dc(vo_w32_window, vo_hdc); |
29938
eb6c70e2cbea
Very preliminary code to allow selecting the OpenGL backend at runtime.
reimar
parents:
29904
diff
changeset
|
124 } |
eb6c70e2cbea
Very preliminary code to allow selecting the OpenGL backend at runtime.
reimar
parents:
29904
diff
changeset
|
125 break; |
14090
e84643be7bd0
Move selection of internal texture format to appropriate place, should
reimar
parents:
14078
diff
changeset
|
126 #endif |
30023 | 127 #ifdef CONFIG_GL_X11 |
29938
eb6c70e2cbea
Very preliminary code to allow selecting the OpenGL backend at runtime.
reimar
parents:
29904
diff
changeset
|
128 case GLTYPE_X11: |
eb6c70e2cbea
Very preliminary code to allow selecting the OpenGL backend at runtime.
reimar
parents:
29904
diff
changeset
|
129 if (glXGetConfig(mDisplay, glctx.vinfo.x11, GLX_RED_SIZE, &r_sz) != 0) r_sz = 0; |
eb6c70e2cbea
Very preliminary code to allow selecting the OpenGL backend at runtime.
reimar
parents:
29904
diff
changeset
|
130 if (glXGetConfig(mDisplay, glctx.vinfo.x11, GLX_GREEN_SIZE, &g_sz) != 0) g_sz = 0; |
eb6c70e2cbea
Very preliminary code to allow selecting the OpenGL backend at runtime.
reimar
parents:
29904
diff
changeset
|
131 if (glXGetConfig(mDisplay, glctx.vinfo.x11, GLX_BLUE_SIZE, &b_sz) != 0) b_sz = 0; |
eb6c70e2cbea
Very preliminary code to allow selecting the OpenGL backend at runtime.
reimar
parents:
29904
diff
changeset
|
132 if (glXGetConfig(mDisplay, glctx.vinfo.x11, GLX_ALPHA_SIZE, &a_sz) != 0) a_sz = 0; |
eb6c70e2cbea
Very preliminary code to allow selecting the OpenGL backend at runtime.
reimar
parents:
29904
diff
changeset
|
133 break; |
eb6c70e2cbea
Very preliminary code to allow selecting the OpenGL backend at runtime.
reimar
parents:
29904
diff
changeset
|
134 #endif |
eb6c70e2cbea
Very preliminary code to allow selecting the OpenGL backend at runtime.
reimar
parents:
29904
diff
changeset
|
135 } |
14090
e84643be7bd0
Move selection of internal texture format to appropriate place, should
reimar
parents:
14078
diff
changeset
|
136 |
e84643be7bd0
Move selection of internal texture format to appropriate place, should
reimar
parents:
14078
diff
changeset
|
137 rgb_sz=r_sz+g_sz+b_sz; |
e84643be7bd0
Move selection of internal texture format to appropriate place, should
reimar
parents:
14078
diff
changeset
|
138 if(rgb_sz<=0) rgb_sz=24; |
e84643be7bd0
Move selection of internal texture format to appropriate place, should
reimar
parents:
14078
diff
changeset
|
139 |
e84643be7bd0
Move selection of internal texture format to appropriate place, should
reimar
parents:
14078
diff
changeset
|
140 #ifdef TEXTUREFORMAT_ALWAYS |
e84643be7bd0
Move selection of internal texture format to appropriate place, should
reimar
parents:
14078
diff
changeset
|
141 return TEXTUREFORMAT_ALWAYS; |
e84643be7bd0
Move selection of internal texture format to appropriate place, should
reimar
parents:
14078
diff
changeset
|
142 #else |
e84643be7bd0
Move selection of internal texture format to appropriate place, should
reimar
parents:
14078
diff
changeset
|
143 if(r_sz==3 && g_sz==3 && b_sz==2 && a_sz==0) |
23651 | 144 return GL_R3_G3_B2; |
14090
e84643be7bd0
Move selection of internal texture format to appropriate place, should
reimar
parents:
14078
diff
changeset
|
145 if(r_sz==4 && g_sz==4 && b_sz==4 && a_sz==0) |
23651 | 146 return GL_RGB4; |
14090
e84643be7bd0
Move selection of internal texture format to appropriate place, should
reimar
parents:
14078
diff
changeset
|
147 if(r_sz==5 && g_sz==5 && b_sz==5 && a_sz==0) |
23651 | 148 return GL_RGB5; |
14090
e84643be7bd0
Move selection of internal texture format to appropriate place, should
reimar
parents:
14078
diff
changeset
|
149 if(r_sz==8 && g_sz==8 && b_sz==8 && a_sz==0) |
23651 | 150 return GL_RGB8; |
14090
e84643be7bd0
Move selection of internal texture format to appropriate place, should
reimar
parents:
14078
diff
changeset
|
151 if(r_sz==10 && g_sz==10 && b_sz==10 && a_sz==0) |
23651 | 152 return GL_RGB10; |
14090
e84643be7bd0
Move selection of internal texture format to appropriate place, should
reimar
parents:
14078
diff
changeset
|
153 if(r_sz==2 && g_sz==2 && b_sz==2 && a_sz==2) |
23651 | 154 return GL_RGBA2; |
14090
e84643be7bd0
Move selection of internal texture format to appropriate place, should
reimar
parents:
14078
diff
changeset
|
155 if(r_sz==4 && g_sz==4 && b_sz==4 && a_sz==4) |
23651 | 156 return GL_RGBA4; |
14090
e84643be7bd0
Move selection of internal texture format to appropriate place, should
reimar
parents:
14078
diff
changeset
|
157 if(r_sz==5 && g_sz==5 && b_sz==5 && a_sz==1) |
23651 | 158 return GL_RGB5_A1; |
14090
e84643be7bd0
Move selection of internal texture format to appropriate place, should
reimar
parents:
14078
diff
changeset
|
159 if(r_sz==8 && g_sz==8 && b_sz==8 && a_sz==8) |
23651 | 160 return GL_RGBA8; |
14090
e84643be7bd0
Move selection of internal texture format to appropriate place, should
reimar
parents:
14078
diff
changeset
|
161 if(r_sz==10 && g_sz==10 && b_sz==10 && a_sz==2) |
23651 | 162 return GL_RGB10_A2; |
14090
e84643be7bd0
Move selection of internal texture format to appropriate place, should
reimar
parents:
14078
diff
changeset
|
163 #endif |
e84643be7bd0
Move selection of internal texture format to appropriate place, should
reimar
parents:
14078
diff
changeset
|
164 return GL_RGB; |
e84643be7bd0
Move selection of internal texture format to appropriate place, should
reimar
parents:
14078
diff
changeset
|
165 } |
e84643be7bd0
Move selection of internal texture format to appropriate place, should
reimar
parents:
14078
diff
changeset
|
166 |
17566
f580a7755ac5
Patch by Stefan Huehner / stefan % huehner ! org \
rathann
parents:
17220
diff
changeset
|
167 static int initTextures(void) |
2124 | 168 { |
169 struct TexSquare *tsq=0; | |
16214
ede5b4afd262
Helper function for drawing texture and general cleanup of vo_gl2.c
reimar
parents:
16171
diff
changeset
|
170 GLfloat texpercx, texpercy; |
16221 | 171 int s; |
2124 | 172 int x=0, y=0; |
173 | |
16222 | 174 // textures smaller than 64x64 might not be supported |
175 s=64; | |
16220
1effc23b2cb8
10l, texture_width/height initialization was removed, so use
reimar
parents:
16214
diff
changeset
|
176 while (s<image_width) |
16214
ede5b4afd262
Helper function for drawing texture and general cleanup of vo_gl2.c
reimar
parents:
16171
diff
changeset
|
177 s*=2; |
2124 | 178 texture_width=s; |
179 | |
16222 | 180 s=64; |
16220
1effc23b2cb8
10l, texture_width/height initialization was removed, so use
reimar
parents:
16214
diff
changeset
|
181 while (s<image_height) |
16214
ede5b4afd262
Helper function for drawing texture and general cleanup of vo_gl2.c
reimar
parents:
16171
diff
changeset
|
182 s*=2; |
2124 | 183 texture_height=s; |
184 | |
30097 | 185 if (!is_yuv) |
30970 | 186 gl_internal_format = getInternalFormat(); |
2124 | 187 |
188 /* Test the max texture size */ | |
23651 | 189 do { |
30971
9d024ceb45e3
Check texture dimensions instead of internal format in max texture
reimar
parents:
30970
diff
changeset
|
190 GLint w; |
2124 | 191 glTexImage2D (GL_PROXY_TEXTURE_2D, 0, |
23651 | 192 gl_internal_format, |
193 texture_width, texture_height, | |
194 0, gl_bitmap_format, gl_bitmap_type, NULL); | |
2124 | 195 |
196 glGetTexLevelParameteriv | |
30971
9d024ceb45e3
Check texture dimensions instead of internal format in max texture
reimar
parents:
30970
diff
changeset
|
197 (GL_PROXY_TEXTURE_2D, 0, GL_TEXTURE_WIDTH, &w); |
2124 | 198 |
30971
9d024ceb45e3
Check texture dimensions instead of internal format in max texture
reimar
parents:
30970
diff
changeset
|
199 if (w >= texture_width) |
30969 | 200 break; |
201 | |
30970 | 202 mp_msg (MSGT_VO, MSGL_V, "[gl2] Needed texture [%dx%d] too big, trying ", |
203 texture_width, texture_height); | |
2124 | 204 |
30970 | 205 if (texture_width > texture_height) |
206 texture_width /= 2; | |
207 else | |
208 texture_height /= 2; | |
2124 | 209 |
30970 | 210 mp_msg (MSGT_VO, MSGL_V, "[%dx%d] !\n", texture_width, texture_height); |
2124 | 211 |
30970 | 212 if(texture_width < 64 || texture_height < 64) { |
31834
64ba1daa147a
various spelling fixes, found by the Debian QA tool 'lintian'
siretart
parents:
31684
diff
changeset
|
213 mp_msg (MSGT_VO, MSGL_FATAL, "[gl2] Give up .. usable texture size not available, or texture config error !\n"); |
30970 | 214 return -1; |
215 } | |
216 } while (texture_width > 1 && texture_height > 1); | |
16594
7b30ec73e83e
debugging/testing helpers: allow forcing a certain width/height for textures
reimar
parents:
16590
diff
changeset
|
217 #ifdef TEXTURE_WIDTH |
7b30ec73e83e
debugging/testing helpers: allow forcing a certain width/height for textures
reimar
parents:
16590
diff
changeset
|
218 texture_width = TEXTURE_WIDTH; |
7b30ec73e83e
debugging/testing helpers: allow forcing a certain width/height for textures
reimar
parents:
16590
diff
changeset
|
219 #endif |
7b30ec73e83e
debugging/testing helpers: allow forcing a certain width/height for textures
reimar
parents:
16590
diff
changeset
|
220 #ifdef TEXTURE_HEIGHT |
7b30ec73e83e
debugging/testing helpers: allow forcing a certain width/height for textures
reimar
parents:
16590
diff
changeset
|
221 texture_height = TEXTURE_HEIGHT; |
7b30ec73e83e
debugging/testing helpers: allow forcing a certain width/height for textures
reimar
parents:
16590
diff
changeset
|
222 #endif |
2124 | 223 |
224 texnumx = image_width / texture_width; | |
225 if ((image_width % texture_width) > 0) | |
226 texnumx++; | |
227 | |
228 texnumy = image_height / texture_height; | |
229 if ((image_height % texture_height) > 0) | |
230 texnumy++; | |
231 | |
11988 | 232 mp_msg(MSGT_VO, MSGL_V, "[gl2] Creating %dx%d textures of size %dx%d ...\n", |
23651 | 233 texnumx, texnumy, texture_width,texture_height); |
2276
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
234 |
2124 | 235 /* Allocate the texture memory */ |
236 | |
237 texpercx = (GLfloat) texture_width / (GLfloat) image_width; | |
238 texpercy = (GLfloat) texture_height / (GLfloat) image_height; | |
239 | |
32537
8fa2f43cb760
Remove most of the NULL pointer check before free all over the code
cboesch
parents:
32467
diff
changeset
|
240 free(texgrid); |
23647 | 241 texgrid = calloc (texnumx * texnumy, sizeof (struct TexSquare)); |
2124 | 242 |
12448 | 243 raw_line_len = image_width * image_bytes; |
2124 | 244 |
11988 | 245 mp_msg (MSGT_VO, MSGL_DBG2, "[gl2] texture-usage %d*width=%d, %d*height=%d\n", |
23651 | 246 (int) texnumx, (int) texture_width, (int) texnumy, |
247 (int) texture_height); | |
2124 | 248 |
16214
ede5b4afd262
Helper function for drawing texture and general cleanup of vo_gl2.c
reimar
parents:
16171
diff
changeset
|
249 tsq = texgrid; |
23651 | 250 for (y = 0; y < texnumy; y++) { |
251 for (x = 0; x < texnumx; x++) { | |
16214
ede5b4afd262
Helper function for drawing texture and general cleanup of vo_gl2.c
reimar
parents:
16171
diff
changeset
|
252 tsq->fx = x * texpercx; |
ede5b4afd262
Helper function for drawing texture and general cleanup of vo_gl2.c
reimar
parents:
16171
diff
changeset
|
253 tsq->fy = y * texpercy; |
ede5b4afd262
Helper function for drawing texture and general cleanup of vo_gl2.c
reimar
parents:
16171
diff
changeset
|
254 tsq->fw = texpercx; |
ede5b4afd262
Helper function for drawing texture and general cleanup of vo_gl2.c
reimar
parents:
16171
diff
changeset
|
255 tsq->fh = texpercy; |
2124 | 256 |
257 tsq->texobj=0; | |
16488
3191dcb27a12
hardware color-space conversion for vo_gl and vo_gl2
reimar
parents:
16475
diff
changeset
|
258 tsq->uvtexobjs[0] = tsq->uvtexobjs[1] = 0; |
2124 | 259 |
260 glGenTextures (1, &(tsq->texobj)); | |
261 | |
262 glBindTexture (GL_TEXTURE_2D, tsq->texobj); | |
30097 | 263 if (is_yuv) { |
16488
3191dcb27a12
hardware color-space conversion for vo_gl and vo_gl2
reimar
parents:
16475
diff
changeset
|
264 glGenTextures(2, tsq->uvtexobjs); |
30945
55917a674d7d
Add mpgl prefix to all OpenGL-related function pointers.
reimar
parents:
30711
diff
changeset
|
265 mpglActiveTexture(GL_TEXTURE1); |
16488
3191dcb27a12
hardware color-space conversion for vo_gl and vo_gl2
reimar
parents:
16475
diff
changeset
|
266 glBindTexture (GL_TEXTURE_2D, tsq->uvtexobjs[0]); |
30945
55917a674d7d
Add mpgl prefix to all OpenGL-related function pointers.
reimar
parents:
30711
diff
changeset
|
267 mpglActiveTexture(GL_TEXTURE2); |
16488
3191dcb27a12
hardware color-space conversion for vo_gl and vo_gl2
reimar
parents:
16475
diff
changeset
|
268 glBindTexture (GL_TEXTURE_2D, tsq->uvtexobjs[1]); |
30945
55917a674d7d
Add mpgl prefix to all OpenGL-related function pointers.
reimar
parents:
30711
diff
changeset
|
269 mpglActiveTexture(GL_TEXTURE0); |
16488
3191dcb27a12
hardware color-space conversion for vo_gl and vo_gl2
reimar
parents:
16475
diff
changeset
|
270 } |
2124 | 271 |
27621
53b5cf466361
Change glCreateClearTex to use the same host data format as later uploads.
reimar
parents:
27343
diff
changeset
|
272 glCreateClearTex(GL_TEXTURE_2D, gl_internal_format, gl_bitmap_format, gl_bitmap_type, GL_LINEAR, |
16214
ede5b4afd262
Helper function for drawing texture and general cleanup of vo_gl2.c
reimar
parents:
16171
diff
changeset
|
273 texture_width, texture_height, 0); |
2124 | 274 |
275 glTexEnvf (GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); | |
30097 | 276 if (is_yuv) { |
33416
b7b169f5abda
Fix clear/border color of chroma texture for 9- and 10-bit formats.
reimar
parents:
33414
diff
changeset
|
277 int xs, ys, depth; |
b7b169f5abda
Fix clear/border color of chroma texture for 9- and 10-bit formats.
reimar
parents:
33414
diff
changeset
|
278 int chroma_clear_val = 128; |
b7b169f5abda
Fix clear/border color of chroma texture for 9- and 10-bit formats.
reimar
parents:
33414
diff
changeset
|
279 mp_get_chroma_shift(image_format, &xs, &ys, &depth); |
b7b169f5abda
Fix clear/border color of chroma texture for 9- and 10-bit formats.
reimar
parents:
33414
diff
changeset
|
280 chroma_clear_val >>= -depth & 7; |
30945
55917a674d7d
Add mpgl prefix to all OpenGL-related function pointers.
reimar
parents:
30711
diff
changeset
|
281 mpglActiveTexture(GL_TEXTURE1); |
27621
53b5cf466361
Change glCreateClearTex to use the same host data format as later uploads.
reimar
parents:
27343
diff
changeset
|
282 glCreateClearTex(GL_TEXTURE_2D, gl_internal_format, gl_bitmap_format, gl_bitmap_type, GL_LINEAR, |
33416
b7b169f5abda
Fix clear/border color of chroma texture for 9- and 10-bit formats.
reimar
parents:
33414
diff
changeset
|
283 texture_width >> xs, texture_height >> ys, |
b7b169f5abda
Fix clear/border color of chroma texture for 9- and 10-bit formats.
reimar
parents:
33414
diff
changeset
|
284 chroma_clear_val); |
30945
55917a674d7d
Add mpgl prefix to all OpenGL-related function pointers.
reimar
parents:
30711
diff
changeset
|
285 mpglActiveTexture(GL_TEXTURE2); |
27621
53b5cf466361
Change glCreateClearTex to use the same host data format as later uploads.
reimar
parents:
27343
diff
changeset
|
286 glCreateClearTex(GL_TEXTURE_2D, gl_internal_format, gl_bitmap_format, gl_bitmap_type, GL_LINEAR, |
33416
b7b169f5abda
Fix clear/border color of chroma texture for 9- and 10-bit formats.
reimar
parents:
33414
diff
changeset
|
287 texture_width >> xs, texture_height >> ys, |
b7b169f5abda
Fix clear/border color of chroma texture for 9- and 10-bit formats.
reimar
parents:
33414
diff
changeset
|
288 chroma_clear_val); |
30945
55917a674d7d
Add mpgl prefix to all OpenGL-related function pointers.
reimar
parents:
30711
diff
changeset
|
289 mpglActiveTexture(GL_TEXTURE0); |
16488
3191dcb27a12
hardware color-space conversion for vo_gl and vo_gl2
reimar
parents:
16475
diff
changeset
|
290 } |
2124 | 291 |
16214
ede5b4afd262
Helper function for drawing texture and general cleanup of vo_gl2.c
reimar
parents:
16171
diff
changeset
|
292 tsq++; |
23651 | 293 } /* for all texnumx */ |
2124 | 294 } /* for all texnumy */ |
23651 | 295 |
10604 | 296 return 0; |
2124 | 297 } |
298 | |
2276
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
299 static void resetTexturePointers(unsigned char *imageSource) |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
300 { |
12448 | 301 unsigned char *texdata_start, *line_start; |
302 struct TexSquare *tsq = texgrid; | |
2276
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
303 int x=0, y=0; |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
304 |
12448 | 305 line_start = (unsigned char *) imageSource; |
2276
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
306 |
23651 | 307 for (y = 0; y < texnumy; y++) { |
12448 | 308 texdata_start = line_start; |
23651 | 309 for (x = 0; x < texnumx; x++) { |
12448 | 310 tsq->texture = texdata_start; |
311 texdata_start += texture_width * image_bytes; | |
312 tsq++; | |
23651 | 313 } /* for all texnumx */ |
12448 | 314 line_start += texture_height * raw_line_len; |
2276
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
315 } /* for all texnumy */ |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
316 } |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
317 |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
318 static void gl_set_bilinear (int val) |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
319 { |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
320 int x, y; |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
321 |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
322 if(val>=0) |
23651 | 323 gl_bilinear = val; |
324 else | |
325 gl_bilinear++; | |
2276
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
326 |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
327 gl_bilinear=gl_bilinear%2; |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
328 /* no mipmap yet .. */ |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
329 |
23651 | 330 for (y = 0; y < texnumy; y++) { |
331 for (x = 0; x < texnumx; x++) { | |
332 glBindTexture (GL_TEXTURE_2D, texgrid[y * texnumx + x].texobj); | |
2276
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
333 |
23651 | 334 switch (gl_bilinear) { |
335 case 0: | |
336 glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); | |
337 glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); | |
338 mp_msg(MSGT_VO, MSGL_INFO, "[gl2] bilinear off\n"); | |
339 break; | |
340 case 1: | |
341 glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); | |
342 glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); | |
343 mp_msg(MSGT_VO, MSGL_INFO, "[gl2] bilinear linear\n"); | |
344 break; | |
345 case 2: | |
346 glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_NEAREST); | |
347 glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR_MIPMAP_NEAREST); | |
348 mp_msg(MSGT_VO, MSGL_INFO, "[gl2] bilinear mipmap nearest\n"); | |
349 break; | |
350 case 3: | |
351 glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR); | |
352 glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR_MIPMAP_LINEAR); | |
353 mp_msg(MSGT_VO, MSGL_INFO, "[gl2] bilinear mipmap linear\n"); | |
354 break; | |
2276
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
355 } |
23651 | 356 } |
2276
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
357 } |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
358 } |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
359 |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
360 static void gl_set_antialias (int val) |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
361 { |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
362 gl_antialias=val; |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
363 |
23651 | 364 if (gl_antialias) { |
2276
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
365 glShadeModel (GL_SMOOTH); |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
366 glEnable (GL_POLYGON_SMOOTH); |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
367 glEnable (GL_LINE_SMOOTH); |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
368 glEnable (GL_POINT_SMOOTH); |
11988 | 369 mp_msg(MSGT_VO, MSGL_INFO, "[gl2] antialiasing on\n"); |
23651 | 370 } else { |
2276
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
371 glShadeModel (GL_FLAT); |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
372 glDisable (GL_POLYGON_SMOOTH); |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
373 glDisable (GL_LINE_SMOOTH); |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
374 glDisable (GL_POINT_SMOOTH); |
11988 | 375 mp_msg(MSGT_VO, MSGL_INFO, "[gl2] antialiasing off\n"); |
2276
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
376 } |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
377 } |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
378 |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
379 |
17566
f580a7755ac5
Patch by Stefan Huehner / stefan % huehner ! org \
rathann
parents:
17220
diff
changeset
|
380 static void drawTextureDisplay (void) |
2124 | 381 { |
16214
ede5b4afd262
Helper function for drawing texture and general cleanup of vo_gl2.c
reimar
parents:
16171
diff
changeset
|
382 struct TexSquare *square = texgrid; |
23645
6f2f38eb4e0a
Remove some unused code and useless error checking that only clutters the code
reimar
parents:
23077
diff
changeset
|
383 int x, y; |
2124 | 384 |
385 glColor3f(1.0,1.0,1.0); | |
386 | |
30097 | 387 if (is_yuv) |
16488
3191dcb27a12
hardware color-space conversion for vo_gl and vo_gl2
reimar
parents:
16475
diff
changeset
|
388 glEnableYUVConversion(GL_TEXTURE_2D, use_yuv); |
23651 | 389 for (y = 0; y < texnumy; y++) { |
23649
404d35495770
Remove overly complex and unused per-subtexture "dirty" handling
reimar
parents:
23648
diff
changeset
|
390 int thish = texture_height; |
404d35495770
Remove overly complex and unused per-subtexture "dirty" handling
reimar
parents:
23648
diff
changeset
|
391 if (y == texnumy - 1 && image_height % texture_height) |
404d35495770
Remove overly complex and unused per-subtexture "dirty" handling
reimar
parents:
23648
diff
changeset
|
392 thish = image_height % texture_height; |
23651 | 393 for (x = 0; x < texnumx; x++) { |
23649
404d35495770
Remove overly complex and unused per-subtexture "dirty" handling
reimar
parents:
23648
diff
changeset
|
394 int thisw = texture_width; |
404d35495770
Remove overly complex and unused per-subtexture "dirty" handling
reimar
parents:
23648
diff
changeset
|
395 if (x == texnumx - 1 && image_width % texture_width) |
404d35495770
Remove overly complex and unused per-subtexture "dirty" handling
reimar
parents:
23648
diff
changeset
|
396 thisw = image_width % texture_width; |
2124 | 397 glBindTexture (GL_TEXTURE_2D, square->texobj); |
30097 | 398 if (is_yuv) { |
30945
55917a674d7d
Add mpgl prefix to all OpenGL-related function pointers.
reimar
parents:
30711
diff
changeset
|
399 mpglActiveTexture(GL_TEXTURE1); |
16488
3191dcb27a12
hardware color-space conversion for vo_gl and vo_gl2
reimar
parents:
16475
diff
changeset
|
400 glBindTexture (GL_TEXTURE_2D, square->uvtexobjs[0]); |
30945
55917a674d7d
Add mpgl prefix to all OpenGL-related function pointers.
reimar
parents:
30711
diff
changeset
|
401 mpglActiveTexture(GL_TEXTURE2); |
16488
3191dcb27a12
hardware color-space conversion for vo_gl and vo_gl2
reimar
parents:
16475
diff
changeset
|
402 glBindTexture (GL_TEXTURE_2D, square->uvtexobjs[1]); |
30945
55917a674d7d
Add mpgl prefix to all OpenGL-related function pointers.
reimar
parents:
30711
diff
changeset
|
403 mpglActiveTexture(GL_TEXTURE0); |
16488
3191dcb27a12
hardware color-space conversion for vo_gl and vo_gl2
reimar
parents:
16475
diff
changeset
|
404 } |
2124 | 405 |
23649
404d35495770
Remove overly complex and unused per-subtexture "dirty" handling
reimar
parents:
23648
diff
changeset
|
406 if (texdirty) { |
23651 | 407 glUploadTex(GL_TEXTURE_2D, gl_bitmap_format, gl_bitmap_type, |
408 square->texture, image_width * image_bytes, | |
409 0, 0, thisw, thish, 0); | |
2276
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
410 } |
2124 | 411 |
16214
ede5b4afd262
Helper function for drawing texture and general cleanup of vo_gl2.c
reimar
parents:
16171
diff
changeset
|
412 glDrawTex(square->fx, square->fy, square->fw, square->fh, |
ede5b4afd262
Helper function for drawing texture and general cleanup of vo_gl2.c
reimar
parents:
16171
diff
changeset
|
413 0, 0, texture_width, texture_height, |
17220 | 414 texture_width, texture_height, |
30097 | 415 0, is_yuv, 0); |
16214
ede5b4afd262
Helper function for drawing texture and general cleanup of vo_gl2.c
reimar
parents:
16171
diff
changeset
|
416 square++; |
2124 | 417 } /* for all texnumx */ |
418 } /* for all texnumy */ | |
30097 | 419 if (is_yuv) |
16488
3191dcb27a12
hardware color-space conversion for vo_gl and vo_gl2
reimar
parents:
16475
diff
changeset
|
420 glDisableYUVConversion(GL_TEXTURE_2D, use_yuv); |
23649
404d35495770
Remove overly complex and unused per-subtexture "dirty" handling
reimar
parents:
23648
diff
changeset
|
421 texdirty = 0; |
2124 | 422 } |
423 | |
424 | |
29522
26ca161275d6
-vo gl2 resize does not need to modify its arguments, so pass int instead of int *.
reimar
parents:
29520
diff
changeset
|
425 static void resize(int x,int y){ |
26ca161275d6
-vo gl2 resize does not need to modify its arguments, so pass int instead of int *.
reimar
parents:
29520
diff
changeset
|
426 mp_msg(MSGT_VO,MSGL_V,"[gl2] Resize: %dx%d\n",x,y); |
29525
41ac62d6f913
Make gl2 code capable of windowed aspect and panscan (no user option to enable it yet though).
reimar
parents:
29523
diff
changeset
|
427 if(aspect_scaling()) { |
23651 | 428 glClear(GL_COLOR_BUFFER_BIT); |
29525
41ac62d6f913
Make gl2 code capable of windowed aspect and panscan (no user option to enable it yet though).
reimar
parents:
29523
diff
changeset
|
429 aspect(&x, &y, A_WINZOOM); |
41ac62d6f913
Make gl2 code capable of windowed aspect and panscan (no user option to enable it yet though).
reimar
parents:
29523
diff
changeset
|
430 panscan_calc_windowed(); |
29522
26ca161275d6
-vo gl2 resize does not need to modify its arguments, so pass int instead of int *.
reimar
parents:
29520
diff
changeset
|
431 x += vo_panscan_x; |
26ca161275d6
-vo gl2 resize does not need to modify its arguments, so pass int instead of int *.
reimar
parents:
29520
diff
changeset
|
432 y += vo_panscan_y; |
29523 | 433 glViewport( (vo_dwidth-x)/2, (vo_dheight-y)/2, x, y); |
23651 | 434 } else { |
435 //aspect(x, y, A_NOZOOM); | |
436 if (WinID >= 0) { | |
31684
6547d064bded
Use identical code to -vo gl for -wid mode in gl2.
reimar
parents:
31315
diff
changeset
|
437 int left = 0, top = 0, w = x, h = y; |
6547d064bded
Use identical code to -vo gl for -wid mode in gl2.
reimar
parents:
31315
diff
changeset
|
438 geometry(&left, &top, &w, &h, vo_dwidth, vo_dheight); |
6547d064bded
Use identical code to -vo gl for -wid mode in gl2.
reimar
parents:
31315
diff
changeset
|
439 top = y - h - top; |
6547d064bded
Use identical code to -vo gl for -wid mode in gl2.
reimar
parents:
31315
diff
changeset
|
440 glViewport(left, top, w, h); |
23651 | 441 } else |
29522
26ca161275d6
-vo gl2 resize does not need to modify its arguments, so pass int instead of int *.
reimar
parents:
29520
diff
changeset
|
442 glViewport( 0, 0, x, y ); |
10905 | 443 } |
2124 | 444 |
445 glMatrixMode(GL_PROJECTION); | |
446 glLoadIdentity(); | |
447 glOrtho (0, 1, 1, 0, -1.0, 1.0); | |
448 | |
449 glMatrixMode(GL_MODELVIEW); | |
450 glLoadIdentity(); | |
451 } | |
452 | |
2276
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
453 static void draw_alpha_32(int x0,int y0, int w,int h, unsigned char* src, unsigned char *srca, int stride){ |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
454 vo_draw_alpha_rgb32(w,h,src,srca,stride,ImageData+4*(y0*image_width+x0),4*image_width); |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
455 } |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
456 |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
457 static void draw_alpha_24(int x0,int y0, int w,int h, unsigned char* src, unsigned char *srca, int stride){ |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
458 vo_draw_alpha_rgb24(w,h,src,srca,stride,ImageData+3*(y0*image_width+x0),3*image_width); |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
459 } |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
460 |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
461 static void draw_alpha_16(int x0,int y0, int w,int h, unsigned char* src, unsigned char *srca, int stride){ |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
462 vo_draw_alpha_rgb16(w,h,src,srca,stride,ImageData+2*(y0*image_width+x0),2*image_width); |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
463 } |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
464 |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
465 static void draw_alpha_15(int x0,int y0, int w,int h, unsigned char* src, unsigned char *srca, int stride){ |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
466 vo_draw_alpha_rgb15(w,h,src,srca,stride,ImageData+2*(y0*image_width+x0),2*image_width); |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
467 } |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
468 |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
469 static void draw_alpha_null(int x0,int y0, int w,int h, unsigned char* src, unsigned char *srca, int stride){ |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
470 } |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
471 |
30023 | 472 #ifdef CONFIG_GL_WIN32 |
10880
ba9557e864c0
vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
10757
diff
changeset
|
473 |
ba9557e864c0
vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
10757
diff
changeset
|
474 static int config_w32(uint32_t width, uint32_t height, uint32_t d_width, uint32_t d_height, uint32_t flags, char *title, uint32_t format) { |
23651 | 475 if (!vo_w32_config(d_width, d_height, flags)) |
476 return -1; | |
10880
ba9557e864c0
vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
10757
diff
changeset
|
477 |
23651 | 478 return 0; |
10880
ba9557e864c0
vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
10757
diff
changeset
|
479 } |
ba9557e864c0
vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
10757
diff
changeset
|
480 |
31027 | 481 #endif |
10880
ba9557e864c0
vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
10757
diff
changeset
|
482 |
31027 | 483 #ifdef CONFIG_GL_X11 |
7964
143d730908ae
here is a somewhat generic equalizer implementation for the X11 vo drivers
arpi
parents:
7931
diff
changeset
|
484 static int choose_glx_visual(Display *dpy, int scr, XVisualInfo *res_vi) |
143d730908ae
here is a somewhat generic equalizer implementation for the X11 vo drivers
arpi
parents:
7931
diff
changeset
|
485 { |
23651 | 486 XVisualInfo template, *vi_list; |
487 int vi_num, i, best_i, best_weight; | |
12709 | 488 |
23651 | 489 template.screen = scr; |
490 vi_list = XGetVisualInfo(dpy, VisualScreenMask, &template, &vi_num); | |
491 if (!vi_list) return -1; | |
492 best_weight = 1000000; best_i=0; | |
493 for (i = 0; i < vi_num; i++) { | |
494 int val, res, w = 0; | |
495 /* of course, the visual must support OpenGL rendering... */ | |
496 res = glXGetConfig(dpy, vi_list + i, GLX_USE_GL, &val); | |
497 if (res || val == False) continue; | |
498 /* also it must be doublebuffered ... */ | |
499 res = glXGetConfig(dpy, vi_list + i, GLX_DOUBLEBUFFER, &val); | |
500 if (res || val == False) continue; | |
501 /* furthermore it must be RGBA (not color indexed) ... */ | |
502 res = glXGetConfig(dpy, vi_list + i, GLX_RGBA, &val); | |
503 if (res || val == False) continue; | |
504 /* prefer less depth buffer size, */ | |
505 res = glXGetConfig(dpy, vi_list + i, GLX_DEPTH_SIZE, &val); | |
506 if (res) continue; | |
507 w += val*2; | |
508 /* stencil buffer size */ | |
509 res = glXGetConfig(dpy, vi_list + i, GLX_STENCIL_SIZE, &val); | |
510 if (res) continue; | |
511 w += val*2; | |
512 /* and colorbuffer alpha size */ | |
513 res = glXGetConfig(dpy, vi_list + i, GLX_ALPHA_SIZE, &val); | |
514 if (res) continue; | |
515 w += val; | |
516 /* and finally, prefer DirectColor-ed visuals to allow color corrections */ | |
517 if (vi_list[i].class != DirectColor) w += 100; | |
12709 | 518 |
23651 | 519 // avoid bad-looking visual with less that 8bit per color |
520 res = glXGetConfig(dpy, vi_list + i, GLX_RED_SIZE, &val); | |
521 if (res) continue; | |
522 if (val < 8) w += 50; | |
523 res = glXGetConfig(dpy, vi_list + i, GLX_GREEN_SIZE, &val); | |
524 if (res) continue; | |
525 if (val < 8) w += 70; | |
526 res = glXGetConfig(dpy, vi_list + i, GLX_BLUE_SIZE, &val); | |
527 if (res) continue; | |
528 if (val < 8) w += 50; | |
529 | |
530 if (w < best_weight) { | |
531 best_weight = w; | |
532 best_i = i; | |
533 } | |
534 } | |
535 if (best_weight < 1000000) *res_vi = vi_list[best_i]; | |
536 XFree(vi_list); | |
537 return (best_weight < 1000000) ? 0 : -1; | |
7964
143d730908ae
here is a somewhat generic equalizer implementation for the X11 vo drivers
arpi
parents:
7931
diff
changeset
|
538 } |
143d730908ae
here is a somewhat generic equalizer implementation for the X11 vo drivers
arpi
parents:
7931
diff
changeset
|
539 |
12750
38c660174053
removed XFlush() before XSync(), made config_glx return-type signed, force 32bit on Darwin, idea from a patch by Marc Hoffman (mmh <at> pleasantst.com).
reimar
parents:
12709
diff
changeset
|
540 static int config_glx(uint32_t width, uint32_t height, uint32_t d_width, uint32_t d_height, uint32_t flags, char *title, uint32_t format) { |
23655
00aa61cde84a
Make X11 window creation and (with -fixed-vo) management simpler and more
reimar
parents:
23651
diff
changeset
|
541 XVisualInfo *vinfo, vinfo_buf; |
23651 | 542 vinfo = choose_glx_visual(mDisplay,mScreen,&vinfo_buf) < 0 ? NULL : &vinfo_buf; |
543 if (vinfo == NULL) { | |
544 mp_msg(MSGT_VO, MSGL_FATAL, "[gl2] no GLX support present\n"); | |
545 return -1; | |
546 } | |
2124 | 547 |
23655
00aa61cde84a
Make X11 window creation and (with -fixed-vo) management simpler and more
reimar
parents:
23651
diff
changeset
|
548 vo_x11_create_vo_window(vinfo, vo_dx, vo_dy, d_width, d_height, |
00aa61cde84a
Make X11 window creation and (with -fixed-vo) management simpler and more
reimar
parents:
23651
diff
changeset
|
549 flags, vo_x11_create_colormap(vinfo), "gl2", title); |
2124 | 550 |
23651 | 551 return 0; |
10880
ba9557e864c0
vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
10757
diff
changeset
|
552 } |
18949 | 553 #endif |
10880
ba9557e864c0
vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
10757
diff
changeset
|
554 |
ba9557e864c0
vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
10757
diff
changeset
|
555 static int initGl(uint32_t d_width, uint32_t d_height) |
ba9557e864c0
vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
10757
diff
changeset
|
556 { |
16488
3191dcb27a12
hardware color-space conversion for vo_gl and vo_gl2
reimar
parents:
16475
diff
changeset
|
557 fragprog = lookupTex = 0; |
10880
ba9557e864c0
vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
10757
diff
changeset
|
558 if (initTextures() < 0) |
ba9557e864c0
vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
10757
diff
changeset
|
559 return -1; |
ba9557e864c0
vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
10757
diff
changeset
|
560 |
23651 | 561 glDisable(GL_BLEND); |
10880
ba9557e864c0
vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
10757
diff
changeset
|
562 glDisable(GL_DEPTH_TEST); |
ba9557e864c0
vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
10757
diff
changeset
|
563 glDepthMask(GL_FALSE); |
ba9557e864c0
vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
10757
diff
changeset
|
564 glDisable(GL_CULL_FACE); |
ba9557e864c0
vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
10757
diff
changeset
|
565 glEnable (GL_TEXTURE_2D); |
30097 | 566 if (is_yuv) { |
33414 | 567 int xs, ys, depth; |
26834
aadfce1c25c8
Use a struct instead of a huge and further growing argument list.
reimar
parents:
26823
diff
changeset
|
568 gl_conversion_params_t params = {GL_TEXTURE_2D, use_yuv, |
30293
aeab18b1923d
Add support for adjustable TV <-> PC level conversion.
reimar
parents:
30122
diff
changeset
|
569 {-1, -1, 0.0, 1.0, 0.0, 1.0, 1.0, 1.0, 1.0}, |
30097 | 570 texture_width, texture_height, 0, 0, 0}; |
16488
3191dcb27a12
hardware color-space conversion for vo_gl and vo_gl2
reimar
parents:
16475
diff
changeset
|
571 switch (use_yuv) { |
3191dcb27a12
hardware color-space conversion for vo_gl and vo_gl2
reimar
parents:
16475
diff
changeset
|
572 case YUV_CONVERSION_FRAGMENT_LOOKUP: |
3191dcb27a12
hardware color-space conversion for vo_gl and vo_gl2
reimar
parents:
16475
diff
changeset
|
573 glGenTextures(1, &lookupTex); |
30945
55917a674d7d
Add mpgl prefix to all OpenGL-related function pointers.
reimar
parents:
30711
diff
changeset
|
574 mpglActiveTexture(GL_TEXTURE3); |
16488
3191dcb27a12
hardware color-space conversion for vo_gl and vo_gl2
reimar
parents:
16475
diff
changeset
|
575 glBindTexture(GL_TEXTURE_2D, lookupTex); |
30945
55917a674d7d
Add mpgl prefix to all OpenGL-related function pointers.
reimar
parents:
30711
diff
changeset
|
576 mpglActiveTexture(GL_TEXTURE0); |
16488
3191dcb27a12
hardware color-space conversion for vo_gl and vo_gl2
reimar
parents:
16475
diff
changeset
|
577 glBindTexture(GL_TEXTURE_2D, 0); |
3191dcb27a12
hardware color-space conversion for vo_gl and vo_gl2
reimar
parents:
16475
diff
changeset
|
578 case YUV_CONVERSION_FRAGMENT_POW: |
3191dcb27a12
hardware color-space conversion for vo_gl and vo_gl2
reimar
parents:
16475
diff
changeset
|
579 case YUV_CONVERSION_FRAGMENT: |
30945
55917a674d7d
Add mpgl prefix to all OpenGL-related function pointers.
reimar
parents:
30711
diff
changeset
|
580 if (!mpglGenPrograms || !mpglBindProgram) { |
18584
212999db0203
Avoid crash with e.g. -vo gl2:yuv=2 when no fragment program functions are available
reimar
parents:
18116
diff
changeset
|
581 mp_msg(MSGT_VO, MSGL_ERR, "[gl] fragment program functions missing!\n"); |
212999db0203
Avoid crash with e.g. -vo gl2:yuv=2 when no fragment program functions are available
reimar
parents:
18116
diff
changeset
|
582 break; |
212999db0203
Avoid crash with e.g. -vo gl2:yuv=2 when no fragment program functions are available
reimar
parents:
18116
diff
changeset
|
583 } |
30945
55917a674d7d
Add mpgl prefix to all OpenGL-related function pointers.
reimar
parents:
30711
diff
changeset
|
584 mpglGenPrograms(1, &fragprog); |
55917a674d7d
Add mpgl prefix to all OpenGL-related function pointers.
reimar
parents:
30711
diff
changeset
|
585 mpglBindProgram(GL_FRAGMENT_PROGRAM, fragprog); |
16488
3191dcb27a12
hardware color-space conversion for vo_gl and vo_gl2
reimar
parents:
16475
diff
changeset
|
586 break; |
3191dcb27a12
hardware color-space conversion for vo_gl and vo_gl2
reimar
parents:
16475
diff
changeset
|
587 } |
33414 | 588 mp_get_chroma_shift(image_format, &xs, &ys, &depth); |
30097 | 589 params.chrom_texw = params.texw >> xs; |
590 params.chrom_texh = params.texh >> ys; | |
33414 | 591 params.csp_params.input_shift = -depth & 7; |
26834
aadfce1c25c8
Use a struct instead of a huge and further growing argument list.
reimar
parents:
26823
diff
changeset
|
592 glSetupYUVConversion(¶ms); |
16488
3191dcb27a12
hardware color-space conversion for vo_gl and vo_gl2
reimar
parents:
16475
diff
changeset
|
593 } |
10880
ba9557e864c0
vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
10757
diff
changeset
|
594 |
ba9557e864c0
vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
10757
diff
changeset
|
595 gl_set_antialias(0); |
ba9557e864c0
vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
10757
diff
changeset
|
596 gl_set_bilinear(1); |
23651 | 597 |
14078
c4033dcb986f
More similar code from gl and gl2 moved to gl_common
reimar
parents:
13926
diff
changeset
|
598 mp_msg(MSGT_VO, MSGL_V, "[gl2] Using image_bpp=%d, image_bytes=%d, \n\tgl_bitmap_format=%s, gl_bitmap_type=%s, \n\trgb_size=%d (%d,%d,%d), a_sz=%d, \n\tgl_internal_format=%s\n", |
23651 | 599 image_bpp, image_bytes, |
14078
c4033dcb986f
More similar code from gl and gl2 moved to gl_common
reimar
parents:
13926
diff
changeset
|
600 glValName(gl_bitmap_format), glValName(gl_bitmap_type), |
c4033dcb986f
More similar code from gl and gl2 moved to gl_common
reimar
parents:
13926
diff
changeset
|
601 rgb_sz, r_sz, g_sz, b_sz, a_sz, glValName(gl_internal_format)); |
10880
ba9557e864c0
vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
10757
diff
changeset
|
602 |
29522
26ca161275d6
-vo gl2 resize does not need to modify its arguments, so pass int instead of int *.
reimar
parents:
29520
diff
changeset
|
603 resize(d_width, d_height); |
10880
ba9557e864c0
vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
10757
diff
changeset
|
604 |
ba9557e864c0
vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
10757
diff
changeset
|
605 glClearColor( 0.0f,0.0f,0.0f,0.0f ); |
ba9557e864c0
vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
10757
diff
changeset
|
606 glClear( GL_COLOR_BUFFER_BIT ); |
ba9557e864c0
vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
10757
diff
changeset
|
607 |
13926
b7ba9bcd1916
Avoid drawing before transformation matrices are set up.
reimar
parents:
13877
diff
changeset
|
608 drawTextureDisplay (); |
b7ba9bcd1916
Avoid drawing before transformation matrices are set up.
reimar
parents:
13877
diff
changeset
|
609 |
10880
ba9557e864c0
vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
10757
diff
changeset
|
610 return 0; |
ba9557e864c0
vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
10757
diff
changeset
|
611 } |
ba9557e864c0
vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
10757
diff
changeset
|
612 |
ba9557e864c0
vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
10757
diff
changeset
|
613 /* connect to server, create and map window, |
ba9557e864c0
vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
10757
diff
changeset
|
614 * allocate colors and (shared) memory |
ba9557e864c0
vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
10757
diff
changeset
|
615 */ |
23651 | 616 static int |
10880
ba9557e864c0
vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
10757
diff
changeset
|
617 config(uint32_t width, uint32_t height, uint32_t d_width, uint32_t d_height, uint32_t flags, char *title, uint32_t format) |
ba9557e864c0
vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
10757
diff
changeset
|
618 { |
30097 | 619 int xs, ys; |
23651 | 620 const unsigned char * glVersion; |
10880
ba9557e864c0
vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
10757
diff
changeset
|
621 |
23651 | 622 image_height = height; |
623 image_width = width; | |
624 image_format = format; | |
33365
706871635af7
Make mp_get_chroma_shift simpler/more generic and add an argument
reimar
parents:
33305
diff
changeset
|
625 is_yuv = mp_get_chroma_shift(image_format, &xs, &ys, NULL) > 0; |
30097 | 626 is_yuv |= (xs << 8) | (ys << 16); |
23651 | 627 |
628 int_pause = 0; | |
10880
ba9557e864c0
vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
10757
diff
changeset
|
629 |
30023 | 630 #ifdef CONFIG_GL_WIN32 |
23651 | 631 if (config_w32(width, height, d_width, d_height, flags, title, format) == -1) |
31027 | 632 #endif |
633 #ifdef CONFIG_GL_X11 | |
23651 | 634 if (config_glx(width, height, d_width, d_height, flags, title, format) == -1) |
10880
ba9557e864c0
vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
10757
diff
changeset
|
635 #endif |
23651 | 636 return -1; |
637 | |
29938
eb6c70e2cbea
Very preliminary code to allow selecting the OpenGL backend at runtime.
reimar
parents:
29904
diff
changeset
|
638 if (glctx.setGlWindow(&glctx) == SET_WINDOW_FAILED) |
29570
eb2567b65311
Check setGlWindow return value to fail properly instead of crashing if e.g.
reimar
parents:
29525
diff
changeset
|
639 return -1; |
14142
f0c1ee83b216
Improving gl2 under windows, moving some functionality to gl_common
reimar
parents:
14090
diff
changeset
|
640 |
2276
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
641 glVersion = glGetString(GL_VERSION); |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
642 |
11988 | 643 mp_msg(MSGT_VO, MSGL_V, "[gl2] OpenGL Driver Information:\n"); |
23651 | 644 mp_msg(MSGT_VO, MSGL_V, "\tvendor: %s,\n\trenderer %s,\n\tversion %s\n", |
645 glGetString(GL_VENDOR), glGetString(GL_RENDERER), glVersion); | |
2276
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
646 |
23651 | 647 if(glVersion[0]>'1' || (glVersion[0]=='1' && glVersion[2]>='2') ) |
648 isGL12 = GL_TRUE; | |
2276
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
649 else |
23651 | 650 isGL12 = GL_FALSE; |
2124 | 651 |
23651 | 652 if(isGL12) { |
653 mp_msg(MSGT_VO, MSGL_INFO, "[gl2] You have OpenGL >= 1.2 capable drivers, GOOD (16bpp and BGR is ok!)\n"); | |
2276
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
654 } else { |
23651 | 655 mp_msg(MSGT_VO, MSGL_INFO, "[gl2] You have OpenGL < 1.2 drivers, BAD (16bpp and BGR may be damaged!)\n"); |
2276
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
656 } |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
657 |
16488
3191dcb27a12
hardware color-space conversion for vo_gl and vo_gl2
reimar
parents:
16475
diff
changeset
|
658 glFindFormat(format, &image_bpp, &gl_internal_format, &gl_bitmap_format, &gl_bitmap_type); |
2124 | 659 |
2276
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
660 image_bytes=(image_bpp+7)/8; |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
661 |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
662 draw_alpha_fnc=draw_alpha_null; |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
663 |
23651 | 664 switch(image_bpp) { |
665 case 15: | |
666 draw_alpha_fnc=draw_alpha_15; break; | |
667 case 16: | |
668 draw_alpha_fnc=draw_alpha_16; break; | |
669 case 24: | |
670 draw_alpha_fnc=draw_alpha_24; break; | |
671 case 32: | |
672 draw_alpha_fnc=draw_alpha_32; break; | |
2276
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
673 } |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
674 |
15748 | 675 if (initGl(vo_dwidth, vo_dheight) == -1) |
23651 | 676 return -1; |
2124 | 677 |
23651 | 678 return 0; |
2124 | 679 } |
680 | |
31027 | 681 #ifdef CONFIG_GL_X11 |
2276
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
682 static int gl_handlekey(int key) |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
683 { |
23651 | 684 if(key=='a'||key=='A') { |
685 gl_set_antialias(!gl_antialias); | |
686 return 0; | |
687 } else if(key=='b'||key=='B') { | |
688 gl_set_bilinear(-1); | |
689 return 0; | |
690 } | |
691 return 1; | |
2276
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
692 } |
27720
66d7ea3f5a78
Surround conditionally used function with corresponding #ifdef, fixes:
diego
parents:
27621
diff
changeset
|
693 #endif |
2124 | 694 |
695 static void check_events(void) | |
696 { | |
23651 | 697 int e; |
31027 | 698 #ifdef CONFIG_GL_X11 |
23651 | 699 XEvent Event; |
700 char buf[100]; | |
701 KeySym keySym; | |
702 int key; | |
703 static XComposeStatus stat; | |
2276
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
704 |
23651 | 705 while ( XPending( mDisplay ) ) { |
706 XNextEvent( mDisplay,&Event ); | |
707 if( Event.type == KeyPress ) { | |
708 XLookupString( &Event.xkey,buf,sizeof(buf),&keySym,&stat ); | |
709 key = (keySym&0xff00) != 0 ? (keySym&0x00ff) + 256 : keySym; | |
710 if(gl_handlekey(key)) | |
711 XPutBackEvent(mDisplay, &Event); | |
712 break; | |
713 } else { | |
714 XPutBackEvent(mDisplay, &Event); | |
715 break; | |
716 } | |
717 } | |
17116 | 718 #endif |
29938
eb6c70e2cbea
Very preliminary code to allow selecting the OpenGL backend at runtime.
reimar
parents:
29904
diff
changeset
|
719 e=glctx.check_events(); |
29522
26ca161275d6
-vo gl2 resize does not need to modify its arguments, so pass int instead of int *.
reimar
parents:
29520
diff
changeset
|
720 if(e&VO_EVENT_RESIZE) resize(vo_dwidth, vo_dheight); |
23651 | 721 if(e&VO_EVENT_EXPOSE && int_pause) flip_page(); |
2124 | 722 } |
723 | |
724 static void draw_osd(void) | |
12446
59cd81e2e1ef
fixed memory leak and removed unnecessary static variable
reimar
parents:
12394
diff
changeset
|
725 { |
59cd81e2e1ef
fixed memory leak and removed unnecessary static variable
reimar
parents:
12394
diff
changeset
|
726 if (ImageData) |
59cd81e2e1ef
fixed memory leak and removed unnecessary static variable
reimar
parents:
12394
diff
changeset
|
727 vo_draw_text(image_width,image_height,draw_alpha_fnc); |
59cd81e2e1ef
fixed memory leak and removed unnecessary static variable
reimar
parents:
12394
diff
changeset
|
728 } |
2124 | 729 |
730 static void | |
731 flip_page(void) | |
732 { | |
733 drawTextureDisplay(); | |
734 | |
735 // glFlush(); | |
16475 | 736 if (use_glFinish) |
2124 | 737 glFinish(); |
29938
eb6c70e2cbea
Very preliminary code to allow selecting the OpenGL backend at runtime.
reimar
parents:
29904
diff
changeset
|
738 glctx.swapGlBuffers(&glctx); |
12394
b3ff1a576b8c
clear buffer after (glX)SwapBuffers in fullscreen to avoid flickering borders
reimar
parents:
12382
diff
changeset
|
739 |
29525
41ac62d6f913
Make gl2 code capable of windowed aspect and panscan (no user option to enable it yet though).
reimar
parents:
29523
diff
changeset
|
740 if (aspect_scaling()) // Avoid flickering borders in fullscreen mode |
12394
b3ff1a576b8c
clear buffer after (glX)SwapBuffers in fullscreen to avoid flickering borders
reimar
parents:
12382
diff
changeset
|
741 glClear (GL_COLOR_BUFFER_BIT); |
2124 | 742 } |
743 | |
16171
fd51fd1ff231
Fix the return types of all (six) libvo API functions. Used to be uint32_t, but
ivo
parents:
15748
diff
changeset
|
744 static int draw_slice(uint8_t *src[], int stride[], int w,int h,int x,int y) |
2124 | 745 { |
16583
84356c6d997b
Fix crashes and green border when using YV12 input format
reimar
parents:
16488
diff
changeset
|
746 uint8_t *yptr = src[0], *uptr = src[1], *vptr = src[2]; |
84356c6d997b
Fix crashes and green border when using YV12 input format
reimar
parents:
16488
diff
changeset
|
747 int ystride = stride[0], ustride = stride[1], vstride = stride[2]; |
16488
3191dcb27a12
hardware color-space conversion for vo_gl and vo_gl2
reimar
parents:
16475
diff
changeset
|
748 int rem_h = h; |
3191dcb27a12
hardware color-space conversion for vo_gl and vo_gl2
reimar
parents:
16475
diff
changeset
|
749 struct TexSquare *texline = &texgrid[y / texture_height * texnumx]; |
3191dcb27a12
hardware color-space conversion for vo_gl and vo_gl2
reimar
parents:
16475
diff
changeset
|
750 int subtex_y = y % texture_width; |
30097 | 751 int xs, ys; |
33365
706871635af7
Make mp_get_chroma_shift simpler/more generic and add an argument
reimar
parents:
33305
diff
changeset
|
752 mp_get_chroma_shift(image_format, &xs, &ys, NULL); |
16488
3191dcb27a12
hardware color-space conversion for vo_gl and vo_gl2
reimar
parents:
16475
diff
changeset
|
753 while (rem_h > 0) { |
3191dcb27a12
hardware color-space conversion for vo_gl and vo_gl2
reimar
parents:
16475
diff
changeset
|
754 int rem_w = w; |
3191dcb27a12
hardware color-space conversion for vo_gl and vo_gl2
reimar
parents:
16475
diff
changeset
|
755 struct TexSquare *tsq = &texline[x / texture_width]; |
3191dcb27a12
hardware color-space conversion for vo_gl and vo_gl2
reimar
parents:
16475
diff
changeset
|
756 int subtex_x = x % texture_height; |
3191dcb27a12
hardware color-space conversion for vo_gl and vo_gl2
reimar
parents:
16475
diff
changeset
|
757 int subtex_h = rem_h; |
3191dcb27a12
hardware color-space conversion for vo_gl and vo_gl2
reimar
parents:
16475
diff
changeset
|
758 if (subtex_y + subtex_h > texture_height) |
3191dcb27a12
hardware color-space conversion for vo_gl and vo_gl2
reimar
parents:
16475
diff
changeset
|
759 subtex_h = texture_height - subtex_y; |
3191dcb27a12
hardware color-space conversion for vo_gl and vo_gl2
reimar
parents:
16475
diff
changeset
|
760 while (rem_w > 0) { |
3191dcb27a12
hardware color-space conversion for vo_gl and vo_gl2
reimar
parents:
16475
diff
changeset
|
761 int subtex_w = rem_w; |
3191dcb27a12
hardware color-space conversion for vo_gl and vo_gl2
reimar
parents:
16475
diff
changeset
|
762 if (subtex_x + subtex_w > texture_width) |
3191dcb27a12
hardware color-space conversion for vo_gl and vo_gl2
reimar
parents:
16475
diff
changeset
|
763 subtex_w = texture_width - subtex_x; |
30945
55917a674d7d
Add mpgl prefix to all OpenGL-related function pointers.
reimar
parents:
30711
diff
changeset
|
764 mpglActiveTexture(GL_TEXTURE0); |
16488
3191dcb27a12
hardware color-space conversion for vo_gl and vo_gl2
reimar
parents:
16475
diff
changeset
|
765 glBindTexture(GL_TEXTURE_2D, tsq->texobj); |
3191dcb27a12
hardware color-space conversion for vo_gl and vo_gl2
reimar
parents:
16475
diff
changeset
|
766 glUploadTex(GL_TEXTURE_2D, gl_bitmap_format, gl_bitmap_type, |
16583
84356c6d997b
Fix crashes and green border when using YV12 input format
reimar
parents:
16488
diff
changeset
|
767 yptr, ystride, subtex_x, subtex_y, |
16488
3191dcb27a12
hardware color-space conversion for vo_gl and vo_gl2
reimar
parents:
16475
diff
changeset
|
768 subtex_w, subtex_h, 0); |
30945
55917a674d7d
Add mpgl prefix to all OpenGL-related function pointers.
reimar
parents:
30711
diff
changeset
|
769 mpglActiveTexture(GL_TEXTURE1); |
16488
3191dcb27a12
hardware color-space conversion for vo_gl and vo_gl2
reimar
parents:
16475
diff
changeset
|
770 glBindTexture(GL_TEXTURE_2D, tsq->uvtexobjs[0]); |
3191dcb27a12
hardware color-space conversion for vo_gl and vo_gl2
reimar
parents:
16475
diff
changeset
|
771 glUploadTex(GL_TEXTURE_2D, gl_bitmap_format, gl_bitmap_type, |
30097 | 772 uptr, ustride, subtex_x >> xs, subtex_y >> ys, |
773 subtex_w >> xs, subtex_h >> ys, 0); | |
30945
55917a674d7d
Add mpgl prefix to all OpenGL-related function pointers.
reimar
parents:
30711
diff
changeset
|
774 mpglActiveTexture(GL_TEXTURE2); |
16488
3191dcb27a12
hardware color-space conversion for vo_gl and vo_gl2
reimar
parents:
16475
diff
changeset
|
775 glBindTexture(GL_TEXTURE_2D, tsq->uvtexobjs[1]); |
3191dcb27a12
hardware color-space conversion for vo_gl and vo_gl2
reimar
parents:
16475
diff
changeset
|
776 glUploadTex(GL_TEXTURE_2D, gl_bitmap_format, gl_bitmap_type, |
30097 | 777 vptr, vstride, subtex_x >> xs, subtex_y >> ys, |
778 subtex_w >> xs, subtex_h >> ys, 0); | |
16488
3191dcb27a12
hardware color-space conversion for vo_gl and vo_gl2
reimar
parents:
16475
diff
changeset
|
779 subtex_x = 0; |
16583
84356c6d997b
Fix crashes and green border when using YV12 input format
reimar
parents:
16488
diff
changeset
|
780 yptr += subtex_w; |
30097 | 781 uptr += subtex_w >> xs; |
782 vptr += subtex_w >> xs; | |
16488
3191dcb27a12
hardware color-space conversion for vo_gl and vo_gl2
reimar
parents:
16475
diff
changeset
|
783 tsq++; |
3191dcb27a12
hardware color-space conversion for vo_gl and vo_gl2
reimar
parents:
16475
diff
changeset
|
784 rem_w -= subtex_w; |
3191dcb27a12
hardware color-space conversion for vo_gl and vo_gl2
reimar
parents:
16475
diff
changeset
|
785 } |
3191dcb27a12
hardware color-space conversion for vo_gl and vo_gl2
reimar
parents:
16475
diff
changeset
|
786 subtex_y = 0; |
16583
84356c6d997b
Fix crashes and green border when using YV12 input format
reimar
parents:
16488
diff
changeset
|
787 yptr += subtex_h * ystride - w; |
30097 | 788 uptr += (subtex_h >> ys) * ustride - (w >> xs); |
789 vptr += (subtex_h >> ys) * vstride - (w >> xs); | |
16488
3191dcb27a12
hardware color-space conversion for vo_gl and vo_gl2
reimar
parents:
16475
diff
changeset
|
790 texline += texnumx; |
3191dcb27a12
hardware color-space conversion for vo_gl and vo_gl2
reimar
parents:
16475
diff
changeset
|
791 rem_h -= subtex_h; |
3191dcb27a12
hardware color-space conversion for vo_gl and vo_gl2
reimar
parents:
16475
diff
changeset
|
792 } |
30945
55917a674d7d
Add mpgl prefix to all OpenGL-related function pointers.
reimar
parents:
30711
diff
changeset
|
793 mpglActiveTexture(GL_TEXTURE0); |
2276
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
794 return 0; |
2124 | 795 } |
796 | |
16171
fd51fd1ff231
Fix the return types of all (six) libvo API functions. Used to be uint32_t, but
ivo
parents:
15748
diff
changeset
|
797 static int |
2124 | 798 draw_frame(uint8_t *src[]) |
799 { | |
30097 | 800 if (is_yuv) { |
16488
3191dcb27a12
hardware color-space conversion for vo_gl and vo_gl2
reimar
parents:
16475
diff
changeset
|
801 mp_msg(MSGT_VO, MSGL_ERR, "[gl2] error: draw_frame called for YV12!\n"); |
3191dcb27a12
hardware color-space conversion for vo_gl and vo_gl2
reimar
parents:
16475
diff
changeset
|
802 return 0; |
3191dcb27a12
hardware color-space conversion for vo_gl and vo_gl2
reimar
parents:
16475
diff
changeset
|
803 } |
16214
ede5b4afd262
Helper function for drawing texture and general cleanup of vo_gl2.c
reimar
parents:
16171
diff
changeset
|
804 ImageData=(unsigned char *)src[0]; |
ede5b4afd262
Helper function for drawing texture and general cleanup of vo_gl2.c
reimar
parents:
16171
diff
changeset
|
805 resetTexturePointers(ImageData); |
23649
404d35495770
Remove overly complex and unused per-subtexture "dirty" handling
reimar
parents:
23648
diff
changeset
|
806 texdirty = 1; |
16214
ede5b4afd262
Helper function for drawing texture and general cleanup of vo_gl2.c
reimar
parents:
16171
diff
changeset
|
807 return 0; |
2124 | 808 } |
809 | |
16171
fd51fd1ff231
Fix the return types of all (six) libvo API functions. Used to be uint32_t, but
ivo
parents:
15748
diff
changeset
|
810 static int |
2124 | 811 query_format(uint32_t format) |
812 { | |
33365
706871635af7
Make mp_get_chroma_shift simpler/more generic and add an argument
reimar
parents:
33305
diff
changeset
|
813 int depth; |
706871635af7
Make mp_get_chroma_shift simpler/more generic and add an argument
reimar
parents:
33305
diff
changeset
|
814 if (use_yuv && mp_get_chroma_shift(format, NULL, NULL, &depth) && |
33414 | 815 (depth == 8 || depth == 16 || glYUVLargeRange(use_yuv)) && |
30110 | 816 (IMGFMT_IS_YUVP16_NE(format) || !IMGFMT_IS_YUVP16(format))) |
30097 | 817 return VFCAP_CSP_SUPPORTED | VFCAP_CSP_SUPPORTED_BY_HW | VFCAP_OSD | |
818 VFCAP_HWSCALE_UP | VFCAP_HWSCALE_DOWN | VFCAP_ACCEPT_STRIDE; | |
23651 | 819 switch(format) { |
25397
084619331d92
Replace some more broken SYS_DARWIN preprocessor conditionals with __APPLE__.
diego
parents:
25220
diff
changeset
|
820 #ifdef __APPLE__ |
12750
38c660174053
removed XFlush() before XSync(), made config_glx return-type signed, force 32bit on Darwin, idea from a patch by Marc Hoffman (mmh <at> pleasantst.com).
reimar
parents:
12709
diff
changeset
|
821 case IMGFMT_RGB32: |
38c660174053
removed XFlush() before XSync(), made config_glx return-type signed, force 32bit on Darwin, idea from a patch by Marc Hoffman (mmh <at> pleasantst.com).
reimar
parents:
12709
diff
changeset
|
822 #else |
10143
fd3cbeb388f0
removed broken swscaler support, added runtime fullscreens switching ability, and some other general cleanup thingies
alex
parents:
8254
diff
changeset
|
823 case IMGFMT_RGB24: |
fd3cbeb388f0
removed broken swscaler support, added runtime fullscreens switching ability, and some other general cleanup thingies
alex
parents:
8254
diff
changeset
|
824 case IMGFMT_BGR24: |
fd3cbeb388f0
removed broken swscaler support, added runtime fullscreens switching ability, and some other general cleanup thingies
alex
parents:
8254
diff
changeset
|
825 // case IMGFMT_RGB32: |
fd3cbeb388f0
removed broken swscaler support, added runtime fullscreens switching ability, and some other general cleanup thingies
alex
parents:
8254
diff
changeset
|
826 // case IMGFMT_BGR32: |
12750
38c660174053
removed XFlush() before XSync(), made config_glx return-type signed, force 32bit on Darwin, idea from a patch by Marc Hoffman (mmh <at> pleasantst.com).
reimar
parents:
12709
diff
changeset
|
827 #endif |
6212 | 828 return VFCAP_CSP_SUPPORTED | VFCAP_CSP_SUPPORTED_BY_HW | VFCAP_OSD; |
23651 | 829 } |
830 return 0; | |
2124 | 831 } |
832 | |
833 | |
834 static void | |
835 uninit(void) | |
836 { | |
6095 | 837 if ( !vo_config_count ) return; |
32537
8fa2f43cb760
Remove most of the NULL pointer check before free all over the code
cboesch
parents:
32467
diff
changeset
|
838 free(texgrid); |
8fa2f43cb760
Remove most of the NULL pointer check before free all over the code
cboesch
parents:
32467
diff
changeset
|
839 texgrid = NULL; |
29938
eb6c70e2cbea
Very preliminary code to allow selecting the OpenGL backend at runtime.
reimar
parents:
29904
diff
changeset
|
840 uninit_mpglcontext(&glctx); |
2124 | 841 } |
4352 | 842 |
28828
56eee6ffba9b
Make data related to suboption parsing const in libvo
reimar
parents:
28446
diff
changeset
|
843 static const opt_t subopts[] = { |
30122
1772a5171ac7
Fix function declarations to avoid casting function pointers.
reimar
parents:
30110
diff
changeset
|
844 {"yuv", OPT_ARG_INT, &use_yuv, int_non_neg}, |
16475 | 845 {"glfinish", OPT_ARG_BOOL, &use_glFinish, NULL}, |
846 {NULL} | |
847 }; | |
848 | |
16171
fd51fd1ff231
Fix the return types of all (six) libvo API functions. Used to be uint32_t, but
ivo
parents:
15748
diff
changeset
|
849 static int preinit(const char *arg) |
4352 | 850 { |
29938
eb6c70e2cbea
Very preliminary code to allow selecting the OpenGL backend at runtime.
reimar
parents:
29904
diff
changeset
|
851 enum MPGLType gltype = GLTYPE_X11; |
16475 | 852 // set defaults |
30023 | 853 #ifdef CONFIG_GL_WIN32 |
29938
eb6c70e2cbea
Very preliminary code to allow selecting the OpenGL backend at runtime.
reimar
parents:
29904
diff
changeset
|
854 gltype = GLTYPE_W32; |
eb6c70e2cbea
Very preliminary code to allow selecting the OpenGL backend at runtime.
reimar
parents:
29904
diff
changeset
|
855 #endif |
30711 | 856 use_yuv = -1; |
16475 | 857 use_glFinish = 1; |
858 if (subopt_parse(arg, subopts) != 0) { | |
859 mp_msg(MSGT_VO, MSGL_FATAL, | |
860 "\n-vo gl2 command line help:\n" | |
861 "Example: mplayer -vo gl2:noglfinish\n" | |
862 "\nOptions:\n" | |
863 " noglfinish\n" | |
864 " Do not call glFinish() before swapping buffers\n" | |
16488
3191dcb27a12
hardware color-space conversion for vo_gl and vo_gl2
reimar
parents:
16475
diff
changeset
|
865 " yuv=<n>\n" |
3191dcb27a12
hardware color-space conversion for vo_gl and vo_gl2
reimar
parents:
16475
diff
changeset
|
866 " 0: use software YUV to RGB conversion.\n" |
16626 | 867 " 1: use register combiners (nVidia only, for older cards).\n" |
16488
3191dcb27a12
hardware color-space conversion for vo_gl and vo_gl2
reimar
parents:
16475
diff
changeset
|
868 " 2: use fragment program.\n" |
3191dcb27a12
hardware color-space conversion for vo_gl and vo_gl2
reimar
parents:
16475
diff
changeset
|
869 " 3: use fragment program with gamma correction.\n" |
3191dcb27a12
hardware color-space conversion for vo_gl and vo_gl2
reimar
parents:
16475
diff
changeset
|
870 " 4: use fragment program with gamma correction via lookup.\n" |
16626 | 871 " 5: use ATI-specific method (for older cards).\n" |
16475 | 872 "\n" ); |
873 return -1; | |
874 } | |
30711 | 875 if(!init_mpglcontext(&glctx, gltype)) goto err_out; |
876 if (use_yuv == -1) { | |
877 #ifdef CONFIG_GL_WIN32 | |
878 if (config_w32(320, 200, 320, 200, VOFLAG_HIDDEN, "", 0) == -1) | |
31027 | 879 #endif |
880 #ifdef CONFIG_GL_X11 | |
30711 | 881 if (config_glx(320, 200, 320, 200, VOFLAG_HIDDEN, "", 0) == -1) |
882 #endif | |
883 goto err_out; | |
884 if (glctx.setGlWindow(&glctx) == SET_WINDOW_FAILED) | |
885 goto err_out; | |
30964
a5c6b37b3af6
Factor out the YUV->RGB conversion auto-selection and also
reimar
parents:
30945
diff
changeset
|
886 use_yuv = glAutodetectYUVConversion(); |
30711 | 887 } |
4737
32e1f5042f65
I don't like such reports: '-vo dga:vidix or -vo x11:vidix works fine for me'
nick
parents:
4658
diff
changeset
|
888 return 0; |
30711 | 889 |
890 err_out: | |
891 uninit(); | |
892 return -1; | |
4352 | 893 } |
894 | |
33305
ddb45e9443ec
Remove the variable arguments from the libvo control() functions.
iive
parents:
33301
diff
changeset
|
895 static int control(uint32_t request, void *data) |
4352 | 896 { |
4592
5fbfd8545c3b
query_ stuff replaced by new control() - patch by David Holm
arpi
parents:
4440
diff
changeset
|
897 switch (request) { |
26823 | 898 case VOCTRL_PAUSE: |
899 case VOCTRL_RESUME: | |
900 int_pause = (request == VOCTRL_PAUSE); | |
901 return VO_TRUE; | |
23651 | 902 case VOCTRL_QUERY_FORMAT: |
903 return query_format(*((uint32_t*)data)); | |
904 case VOCTRL_GUISUPPORT: | |
905 return VO_TRUE; | |
906 case VOCTRL_ONTOP: | |
29938
eb6c70e2cbea
Very preliminary code to allow selecting the OpenGL backend at runtime.
reimar
parents:
29904
diff
changeset
|
907 glctx.ontop(); |
23651 | 908 return VO_TRUE; |
909 case VOCTRL_FULLSCREEN: | |
29938
eb6c70e2cbea
Very preliminary code to allow selecting the OpenGL backend at runtime.
reimar
parents:
29904
diff
changeset
|
910 glctx.fullscreen(); |
eb6c70e2cbea
Very preliminary code to allow selecting the OpenGL backend at runtime.
reimar
parents:
29904
diff
changeset
|
911 if (glctx.setGlWindow(&glctx) == SET_WINDOW_REINIT) |
23651 | 912 initGl(vo_dwidth, vo_dheight); |
29522
26ca161275d6
-vo gl2 resize does not need to modify its arguments, so pass int instead of int *.
reimar
parents:
29520
diff
changeset
|
913 resize(vo_dwidth, vo_dheight); |
23651 | 914 return VO_TRUE; |
915 case VOCTRL_BORDER: | |
29938
eb6c70e2cbea
Very preliminary code to allow selecting the OpenGL backend at runtime.
reimar
parents:
29904
diff
changeset
|
916 glctx.border(); |
23651 | 917 return VO_TRUE; |
918 case VOCTRL_GET_PANSCAN: | |
919 return VO_TRUE; | |
920 case VOCTRL_SET_PANSCAN: | |
29522
26ca161275d6
-vo gl2 resize does not need to modify its arguments, so pass int instead of int *.
reimar
parents:
29520
diff
changeset
|
921 resize(vo_dwidth, vo_dheight); |
23651 | 922 return VO_TRUE; |
31027 | 923 #ifdef CONFIG_GL_X11 |
23651 | 924 case VOCTRL_SET_EQUALIZER: |
7964
143d730908ae
here is a somewhat generic equalizer implementation for the X11 vo drivers
arpi
parents:
7931
diff
changeset
|
925 { |
33301
899d817e56fc
Implement control() VOCTRL_SET/GET_EQUALIZER using a vf_equalize struct,
iive
parents:
32537
diff
changeset
|
926 vf_equalizer_t *eq=data; |
899d817e56fc
Implement control() VOCTRL_SET/GET_EQUALIZER using a vf_equalize struct,
iive
parents:
32537
diff
changeset
|
927 return vo_x11_set_equalizer(eq->item, eq->value); |
23651 | 928 } |
929 case VOCTRL_GET_EQUALIZER: | |
7964
143d730908ae
here is a somewhat generic equalizer implementation for the X11 vo drivers
arpi
parents:
7931
diff
changeset
|
930 { |
33301
899d817e56fc
Implement control() VOCTRL_SET/GET_EQUALIZER using a vf_equalize struct,
iive
parents:
32537
diff
changeset
|
931 vf_equalizer_t *eq=data; |
899d817e56fc
Implement control() VOCTRL_SET/GET_EQUALIZER using a vf_equalize struct,
iive
parents:
32537
diff
changeset
|
932 return vo_x11_get_equalizer(eq->item, &eq->value); |
7964
143d730908ae
here is a somewhat generic equalizer implementation for the X11 vo drivers
arpi
parents:
7931
diff
changeset
|
933 } |
10880
ba9557e864c0
vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
10757
diff
changeset
|
934 #endif |
23651 | 935 case VOCTRL_UPDATE_SCREENINFO: |
29938
eb6c70e2cbea
Very preliminary code to allow selecting the OpenGL backend at runtime.
reimar
parents:
29904
diff
changeset
|
936 glctx.update_xinerama_info(); |
23651 | 937 return VO_TRUE; |
4592
5fbfd8545c3b
query_ stuff replaced by new control() - patch by David Holm
arpi
parents:
4440
diff
changeset
|
938 } |
5fbfd8545c3b
query_ stuff replaced by new control() - patch by David Holm
arpi
parents:
4440
diff
changeset
|
939 return VO_NOTIMPL; |
4352 | 940 } |