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