annotate libvo/vo_gl2.c @ 34634:0ef7177a063b

Fix linking after FFmpeg merge. Protocols that are available only when librtmp is present are no longer disabled in the code, so we have to remove them in our configure.
author iive
date Tue, 14 Feb 2012 16:50:42 +0000
parents f8c523d09e5e
children 5e29e950d918
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
23651
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
1 /*
28446
7681eab10aea Add standard license headers, unify header formatting.
diego
parents: 27927
diff changeset
2 * X11/OpenGL interface
2124
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
3 * based on video_out_x11 by Aaron Holtzman,
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
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
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
21 */
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
22
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
23 #include <stdio.h>
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
24 #include <stdlib.h>
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
25 #include <string.h>
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
26
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
27 #include "config.h"
11087
b427c796638b * clear window on fullscreen switch
attila
parents: 11000
diff changeset
28 #include "mp_msg.h"
16475
55b04cfc255c Allow disabling the glFinish call
reimar
parents: 16303
diff changeset
29 #include "subopt-helper.h"
2124
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
30 #include "video_out.h"
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
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
fbe5c829c69b Move libvo/sub.[ch] from libvo to sub.
cigaes
parents: 31834
diff changeset
33 #include "sub/sub.h"
2124
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
34
18742
da5ceabe9a43 Make header include order more similar to vo_gl.c
reimar
parents: 18619
diff changeset
35 #include "gl_common.h"
da5ceabe9a43 Make header include order more similar to vo_gl.c
reimar
parents: 18619
diff changeset
36 #include "aspect.h"
12382
a830eebf6693 GUI support
reimar
parents: 12035
diff changeset
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
5ab2ea430653 use RGB32 textures on OS X
reimar
parents: 12762
diff changeset
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
3aee342be929 Make vo info structs const
reimar
parents: 24315
diff changeset
50 static const vo_info_t info =
2124
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
51 {
23651
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
52 "X11 (OpenGL) - multiple textures version",
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
53 "gl2",
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
54 "Arpad Gereoffy & Sven Goethel",
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
55 ""
2124
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
56 };
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
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
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
60 /* local data */
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
61 static unsigned char *ImageData=NULL;
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
62
29938
eb6c70e2cbea Very preliminary code to allow selecting the OpenGL backend at runtime.
reimar
parents: 29904
diff changeset
63 static MPGLContext glctx;
2124
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
64
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
65 static uint32_t image_width;
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
66 static uint32_t image_height;
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
67 static uint32_t image_format;
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
68 static uint32_t image_bpp;
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
69 static uint32_t image_bytes;
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
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
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
73 static uint32_t texture_width;
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
74 static uint32_t texture_height;
12448
180c2fb327d3 removing useless code, improving readability
reimar
parents: 12446
diff changeset
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
02c0d4371573 fixed memleak, especially for fixed-vo.
reimar
parents: 12895
diff changeset
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
9d724e6def3e Support all planar YUV formats in OpenGL vos.
reimar
parents: 30023
diff changeset
89 static int is_yuv;
16475
55b04cfc255c Allow disabling the glFinish call
reimar
parents: 16303
diff changeset
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
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
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
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
96 /* The squares that are tiled to make up the game screen polygon */
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
97
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
98 struct TexSquare
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
99 {
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
100 GLubyte *texture;
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
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
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
104 };
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
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
b7a703cf9178 Rename GL_* defines to CONFIG_GL_*
reimar
parents: 30021
diff changeset
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
b7a703cf9178 Rename GL_* defines to CONFIG_GL_*
reimar
parents: 30021
diff changeset
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
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
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
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
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
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
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
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
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
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
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
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
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
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
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
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
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
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
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
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
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
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
168 {
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
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
a8063634ebd1 remove/move some unused headers/variables/code
reimar
parents: 16220
diff changeset
171 int s;
2124
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
172 int x=0, y=0;
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
173
16222
8683e4609f3f textures smaller 64x64 might not be supported
reimar
parents: 16221
diff changeset
174 // textures smaller than 64x64 might not be supported
8683e4609f3f textures smaller 64x64 might not be supported
reimar
parents: 16221
diff changeset
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
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
178 texture_width=s;
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
179
16222
8683e4609f3f textures smaller 64x64 might not be supported
reimar
parents: 16221
diff changeset
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
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
183 texture_height=s;
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
184
30097
9d724e6def3e Support all planar YUV formats in OpenGL vos.
reimar
parents: 30023
diff changeset
185 if (!is_yuv)
30970
600d1bbaf62b Cosmetics/reindent.
reimar
parents: 30969
diff changeset
186 gl_internal_format = getInternalFormat();
2124
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
187
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
188 /* Test the max texture size */
23651
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
189 do {
30971
9d024ceb45e3 Check texture dimensions instead of internal format in max texture
reimar
parents: 30970
diff changeset
190 GLint w;
2124
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
191 glTexImage2D (GL_PROXY_TEXTURE_2D, 0,
23651
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
192 gl_internal_format,
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
193 texture_width, texture_height,
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
194 0, gl_bitmap_format, gl_bitmap_type, NULL);
2124
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
195
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
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
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
198
30971
9d024ceb45e3 Check texture dimensions instead of internal format in max texture
reimar
parents: 30970
diff changeset
199 if (w >= texture_width)
30969
8a443793daef Avoid duplicating a condition.
reimar
parents: 30968
diff changeset
200 break;
8a443793daef Avoid duplicating a condition.
reimar
parents: 30968
diff changeset
201
30970
600d1bbaf62b Cosmetics/reindent.
reimar
parents: 30969
diff changeset
202 mp_msg (MSGT_VO, MSGL_V, "[gl2] Needed texture [%dx%d] too big, trying ",
600d1bbaf62b Cosmetics/reindent.
reimar
parents: 30969
diff changeset
203 texture_width, texture_height);
2124
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
204
30970
600d1bbaf62b Cosmetics/reindent.
reimar
parents: 30969
diff changeset
205 if (texture_width > texture_height)
600d1bbaf62b Cosmetics/reindent.
reimar
parents: 30969
diff changeset
206 texture_width /= 2;
600d1bbaf62b Cosmetics/reindent.
reimar
parents: 30969
diff changeset
207 else
600d1bbaf62b Cosmetics/reindent.
reimar
parents: 30969
diff changeset
208 texture_height /= 2;
2124
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
209
30970
600d1bbaf62b Cosmetics/reindent.
reimar
parents: 30969
diff changeset
210 mp_msg (MSGT_VO, MSGL_V, "[%dx%d] !\n", texture_width, texture_height);
2124
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
211
30970
600d1bbaf62b Cosmetics/reindent.
reimar
parents: 30969
diff changeset
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
600d1bbaf62b Cosmetics/reindent.
reimar
parents: 30969
diff changeset
214 return -1;
600d1bbaf62b Cosmetics/reindent.
reimar
parents: 30969
diff changeset
215 }
600d1bbaf62b Cosmetics/reindent.
reimar
parents: 30969
diff changeset
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
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
223
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
224 texnumx = image_width / texture_width;
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
225 if ((image_width % texture_width) > 0)
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
226 texnumx++;
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
227
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
228 texnumy = image_height / texture_height;
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
229 if ((image_height % texture_height) > 0)
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
230 texnumy++;
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
231
11988
ccb15c72f331 printf -> mp_msg
attila
parents: 11542
diff changeset
232 mp_msg(MSGT_VO, MSGL_V, "[gl2] Creating %dx%d textures of size %dx%d ...\n",
23651
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
233 texnumx, texnumy, texture_width,texture_height);
2276
558a9397c250 improved gl, please check performance and correct display
sven
parents: 2249
diff changeset
234
2124
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
235 /* Allocate the texture memory */
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
236
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
237 texpercx = (GLfloat) texture_width / (GLfloat) image_width;
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
238 texpercy = (GLfloat) texture_height / (GLfloat) image_height;
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
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
ee915faa2a2e remove useless calloc cast
reimar
parents: 23645
diff changeset
241 texgrid = calloc (texnumx * texnumy, sizeof (struct TexSquare));
2124
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
242
12448
180c2fb327d3 removing useless code, improving readability
reimar
parents: 12446
diff changeset
243 raw_line_len = image_width * image_bytes;
2124
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
244
11988
ccb15c72f331 printf -> mp_msg
attila
parents: 11542
diff changeset
245 mp_msg (MSGT_VO, MSGL_DBG2, "[gl2] texture-usage %d*width=%d, %d*height=%d\n",
23651
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
246 (int) texnumx, (int) texture_width, (int) texnumy,
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
247 (int) texture_height);
2124
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
248
16214
ede5b4afd262 Helper function for drawing texture and general cleanup of vo_gl2.c
reimar
parents: 16171
diff changeset
249 tsq = texgrid;
23651
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
250 for (y = 0; y < texnumy; y++) {
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
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
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
256
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
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
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
259
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
260 glGenTextures (1, &(tsq->texobj));
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
261
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
262 glBindTexture (GL_TEXTURE_2D, tsq->texobj);
30097
9d724e6def3e Support all planar YUV formats in OpenGL vos.
reimar
parents: 30023
diff changeset
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
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
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
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
274
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
275 glTexEnvf (GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
30097
9d724e6def3e Support all planar YUV formats in OpenGL vos.
reimar
parents: 30023
diff changeset
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
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
291
16214
ede5b4afd262 Helper function for drawing texture and general cleanup of vo_gl2.c
reimar
parents: 16171
diff changeset
292 tsq++;
23651
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
293 } /* for all texnumx */
2124
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
294 } /* for all texnumy */
23651
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
295
10604
alex
parents: 10143
diff changeset
296 return 0;
2124
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
297 }
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
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
180c2fb327d3 removing useless code, improving readability
reimar
parents: 12446
diff changeset
301 unsigned char *texdata_start, *line_start;
180c2fb327d3 removing useless code, improving readability
reimar
parents: 12446
diff changeset
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
180c2fb327d3 removing useless code, improving readability
reimar
parents: 12446
diff changeset
305 line_start = (unsigned char *) imageSource;
2276
558a9397c250 improved gl, please check performance and correct display
sven
parents: 2249
diff changeset
306
23651
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
307 for (y = 0; y < texnumy; y++) {
12448
180c2fb327d3 removing useless code, improving readability
reimar
parents: 12446
diff changeset
308 texdata_start = line_start;
23651
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
309 for (x = 0; x < texnumx; x++) {
12448
180c2fb327d3 removing useless code, improving readability
reimar
parents: 12446
diff changeset
310 tsq->texture = texdata_start;
180c2fb327d3 removing useless code, improving readability
reimar
parents: 12446
diff changeset
311 texdata_start += texture_width * image_bytes;
180c2fb327d3 removing useless code, improving readability
reimar
parents: 12446
diff changeset
312 tsq++;
23651
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
313 } /* for all texnumx */
12448
180c2fb327d3 removing useless code, improving readability
reimar
parents: 12446
diff changeset
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
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
323 gl_bilinear = val;
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
324 else
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
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
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
330 for (y = 0; y < texnumy; y++) {
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
331 for (x = 0; x < texnumx; x++) {
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
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
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
334 switch (gl_bilinear) {
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
335 case 0:
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
336 glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
337 glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
338 mp_msg(MSGT_VO, MSGL_INFO, "[gl2] bilinear off\n");
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
339 break;
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
340 case 1:
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
341 glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
342 glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
343 mp_msg(MSGT_VO, MSGL_INFO, "[gl2] bilinear linear\n");
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
344 break;
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
345 case 2:
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
346 glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_NEAREST);
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
347 glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR_MIPMAP_NEAREST);
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
348 mp_msg(MSGT_VO, MSGL_INFO, "[gl2] bilinear mipmap nearest\n");
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
349 break;
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
350 case 3:
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
351 glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR);
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
352 glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR_MIPMAP_LINEAR);
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
353 mp_msg(MSGT_VO, MSGL_INFO, "[gl2] bilinear mipmap linear\n");
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
354 break;
2276
558a9397c250 improved gl, please check performance and correct display
sven
parents: 2249
diff changeset
355 }
23651
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
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
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
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
ccb15c72f331 printf -> mp_msg
attila
parents: 11542
diff changeset
369 mp_msg(MSGT_VO, MSGL_INFO, "[gl2] antialiasing on\n");
23651
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
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
ccb15c72f331 printf -> mp_msg
attila
parents: 11542
diff changeset
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
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
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
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
384
34061
fe03e0d5c7d0 Remove usage of glColor3f, there is not really a point in it.
reimar
parents: 33416
diff changeset
385 glColor4f(1.0,1.0,1.0,1.0);
2124
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
386
30097
9d724e6def3e Support all planar YUV formats in OpenGL vos.
reimar
parents: 30023
diff changeset
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
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
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
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
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
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
397 glBindTexture (GL_TEXTURE_2D, square->texobj);
30097
9d724e6def3e Support all planar YUV formats in OpenGL vos.
reimar
parents: 30023
diff changeset
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
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
405
23649
404d35495770 Remove overly complex and unused per-subtexture "dirty" handling
reimar
parents: 23648
diff changeset
406 if (texdirty) {
23651
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
407 glUploadTex(GL_TEXTURE_2D, gl_bitmap_format, gl_bitmap_type,
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
408 square->texture, image_width * image_bytes,
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
409 0, 0, thisw, thish, 0);
2276
558a9397c250 improved gl, please check performance and correct display
sven
parents: 2249
diff changeset
410 }
2124
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
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
a27e52b838e3 support negative stride (flipping) in vo_gl.
reimar
parents: 17127
diff changeset
414 texture_width, texture_height,
30097
9d724e6def3e Support all planar YUV formats in OpenGL vos.
reimar
parents: 30023
diff changeset
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
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
417 } /* for all texnumx */
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
418 } /* for all texnumy */
30097
9d724e6def3e Support all planar YUV formats in OpenGL vos.
reimar
parents: 30023
diff changeset
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
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
422 }
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
423
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
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){
34337
f8c523d09e5e Use glLoadMatrixf. This makes it easier to support OpenGL ES.
reimar
parents: 34061
diff changeset
426 // simple orthogonal projection for 0-1;0-1
f8c523d09e5e Use glLoadMatrixf. This makes it easier to support OpenGL ES.
reimar
parents: 34061
diff changeset
427 static const float matrix[16] = {
f8c523d09e5e Use glLoadMatrixf. This makes it easier to support OpenGL ES.
reimar
parents: 34061
diff changeset
428 2, 0, 0, 0,
f8c523d09e5e Use glLoadMatrixf. This makes it easier to support OpenGL ES.
reimar
parents: 34061
diff changeset
429 0, -2, 0, 0,
f8c523d09e5e Use glLoadMatrixf. This makes it easier to support OpenGL ES.
reimar
parents: 34061
diff changeset
430 0, 0, 0, 0,
f8c523d09e5e Use glLoadMatrixf. This makes it easier to support OpenGL ES.
reimar
parents: 34061
diff changeset
431 -1, 1, 0, 1,
f8c523d09e5e Use glLoadMatrixf. This makes it easier to support OpenGL ES.
reimar
parents: 34061
diff changeset
432 };
29522
26ca161275d6 -vo gl2 resize does not need to modify its arguments, so pass int instead of int *.
reimar
parents: 29520
diff changeset
433 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
434 if(aspect_scaling()) {
23651
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
435 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
436 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
437 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
438 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
439 y += vo_panscan_y;
29523
00f8d4ca123f Fix video placement with -vo gl2 -fs -wid.
reimar
parents: 29522
diff changeset
440 glViewport( (vo_dwidth-x)/2, (vo_dheight-y)/2, x, y);
23651
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
441 } else {
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
442 //aspect(x, y, A_NOZOOM);
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
443 if (WinID >= 0) {
31684
6547d064bded Use identical code to -vo gl for -wid mode in gl2.
reimar
parents: 31315
diff changeset
444 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
445 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
446 top = y - h - top;
6547d064bded Use identical code to -vo gl for -wid mode in gl2.
reimar
parents: 31315
diff changeset
447 glViewport(left, top, w, h);
23651
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
448 } else
29522
26ca161275d6 -vo gl2 resize does not need to modify its arguments, so pass int instead of int *.
reimar
parents: 29520
diff changeset
449 glViewport( 0, 0, x, y );
10905
f448dcd93e6d dont fix things at the wrong place
attila
parents: 10902
diff changeset
450 }
2124
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
451
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
452 glMatrixMode(GL_PROJECTION);
34337
f8c523d09e5e Use glLoadMatrixf. This makes it easier to support OpenGL ES.
reimar
parents: 34061
diff changeset
453 glLoadMatrixf(matrix);
2124
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
454
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
455 glMatrixMode(GL_MODELVIEW);
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
456 glLoadIdentity();
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
457 }
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
458
2276
558a9397c250 improved gl, please check performance and correct display
sven
parents: 2249
diff changeset
459 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
460 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
461 }
558a9397c250 improved gl, please check performance and correct display
sven
parents: 2249
diff changeset
462
558a9397c250 improved gl, please check performance and correct display
sven
parents: 2249
diff changeset
463 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
464 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
465 }
558a9397c250 improved gl, please check performance and correct display
sven
parents: 2249
diff changeset
466
558a9397c250 improved gl, please check performance and correct display
sven
parents: 2249
diff changeset
467 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
468 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
469 }
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 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
472 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
473 }
558a9397c250 improved gl, please check performance and correct display
sven
parents: 2249
diff changeset
474
558a9397c250 improved gl, please check performance and correct display
sven
parents: 2249
diff changeset
475 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
476 }
558a9397c250 improved gl, please check performance and correct display
sven
parents: 2249
diff changeset
477
30023
b7a703cf9178 Rename GL_* defines to CONFIG_GL_*
reimar
parents: 30021
diff changeset
478 #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
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 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
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
481 if (!vo_w32_config(d_width, d_height, flags))
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
482 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
483
23651
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
484 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
485 }
ba9557e864c0 vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents: 10757
diff changeset
486
31027
bbe66cf05445 Slightly more correct ifdefs for vo_gl2.
reimar
parents: 30971
diff changeset
487 #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
488
31027
bbe66cf05445 Slightly more correct ifdefs for vo_gl2.
reimar
parents: 30971
diff changeset
489 #ifdef CONFIG_GL_X11
7964
143d730908ae here is a somewhat generic equalizer implementation for the X11 vo drivers
arpi
parents: 7931
diff changeset
490 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
491 {
23651
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
492 XVisualInfo template, *vi_list;
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
493 int vi_num, i, best_i, best_weight;
12709
bd90b887fb13 avoid visuals with low color-depth.
reimar
parents: 12448
diff changeset
494
23651
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
495 template.screen = scr;
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
496 vi_list = XGetVisualInfo(dpy, VisualScreenMask, &template, &vi_num);
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
497 if (!vi_list) return -1;
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
498 best_weight = 1000000; best_i=0;
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
499 for (i = 0; i < vi_num; i++) {
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
500 int val, res, w = 0;
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
501 /* of course, the visual must support OpenGL rendering... */
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
502 res = glXGetConfig(dpy, vi_list + i, GLX_USE_GL, &val);
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
503 if (res || val == False) continue;
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
504 /* also it must be doublebuffered ... */
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
505 res = glXGetConfig(dpy, vi_list + i, GLX_DOUBLEBUFFER, &val);
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
506 if (res || val == False) continue;
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
507 /* furthermore it must be RGBA (not color indexed) ... */
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
508 res = glXGetConfig(dpy, vi_list + i, GLX_RGBA, &val);
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
509 if (res || val == False) continue;
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
510 /* prefer less depth buffer size, */
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
511 res = glXGetConfig(dpy, vi_list + i, GLX_DEPTH_SIZE, &val);
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
512 if (res) continue;
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
513 w += val*2;
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
514 /* stencil buffer size */
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
515 res = glXGetConfig(dpy, vi_list + i, GLX_STENCIL_SIZE, &val);
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
516 if (res) continue;
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
517 w += val*2;
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
518 /* and colorbuffer alpha size */
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
519 res = glXGetConfig(dpy, vi_list + i, GLX_ALPHA_SIZE, &val);
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
520 if (res) continue;
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
521 w += val;
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
522 /* and finally, prefer DirectColor-ed visuals to allow color corrections */
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
523 if (vi_list[i].class != DirectColor) w += 100;
12709
bd90b887fb13 avoid visuals with low color-depth.
reimar
parents: 12448
diff changeset
524
23651
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
525 // avoid bad-looking visual with less that 8bit per color
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
526 res = glXGetConfig(dpy, vi_list + i, GLX_RED_SIZE, &val);
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
527 if (res) continue;
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
528 if (val < 8) w += 50;
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
529 res = glXGetConfig(dpy, vi_list + i, GLX_GREEN_SIZE, &val);
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
530 if (res) continue;
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
531 if (val < 8) w += 70;
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
532 res = glXGetConfig(dpy, vi_list + i, GLX_BLUE_SIZE, &val);
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
533 if (res) continue;
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
534 if (val < 8) w += 50;
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
535
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
536 if (w < best_weight) {
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
537 best_weight = w;
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
538 best_i = i;
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
539 }
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
540 }
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
541 if (best_weight < 1000000) *res_vi = vi_list[best_i];
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
542 XFree(vi_list);
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
543 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
544 }
143d730908ae here is a somewhat generic equalizer implementation for the X11 vo drivers
arpi
parents: 7931
diff changeset
545
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
546 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
547 XVisualInfo *vinfo, vinfo_buf;
23651
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
548 vinfo = choose_glx_visual(mDisplay,mScreen,&vinfo_buf) < 0 ? NULL : &vinfo_buf;
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
549 if (vinfo == NULL) {
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
550 mp_msg(MSGT_VO, MSGL_FATAL, "[gl2] no GLX support present\n");
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
551 return -1;
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
552 }
2124
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
553
23655
00aa61cde84a Make X11 window creation and (with -fixed-vo) management simpler and more
reimar
parents: 23651
diff changeset
554 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
555 flags, vo_x11_create_colormap(vinfo), "gl2", title);
2124
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
556
23651
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
557 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
558 }
18949
51aeef9ada52 Improve windows gui support
reimar
parents: 18742
diff changeset
559 #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
560
ba9557e864c0 vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents: 10757
diff changeset
561 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
562 {
16488
3191dcb27a12 hardware color-space conversion for vo_gl and vo_gl2
reimar
parents: 16475
diff changeset
563 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
564 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
565 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
566
23651
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
567 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
568 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
569 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
570 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
571 glEnable (GL_TEXTURE_2D);
30097
9d724e6def3e Support all planar YUV formats in OpenGL vos.
reimar
parents: 30023
diff changeset
572 if (is_yuv) {
33414
9bc9e1851a13 Support 9- and 10-bit YUV input for OpenGL vos.
reimar
parents: 33365
diff changeset
573 int xs, ys, depth;
26834
aadfce1c25c8 Use a struct instead of a huge and further growing argument list.
reimar
parents: 26823
diff changeset
574 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
575 {-1, -1, 0.0, 1.0, 0.0, 1.0, 1.0, 1.0, 1.0},
30097
9d724e6def3e Support all planar YUV formats in OpenGL vos.
reimar
parents: 30023
diff changeset
576 texture_width, texture_height, 0, 0, 0};
16488
3191dcb27a12 hardware color-space conversion for vo_gl and vo_gl2
reimar
parents: 16475
diff changeset
577 switch (use_yuv) {
3191dcb27a12 hardware color-space conversion for vo_gl and vo_gl2
reimar
parents: 16475
diff changeset
578 case YUV_CONVERSION_FRAGMENT_LOOKUP:
3191dcb27a12 hardware color-space conversion for vo_gl and vo_gl2
reimar
parents: 16475
diff changeset
579 glGenTextures(1, &lookupTex);
30945
55917a674d7d Add mpgl prefix to all OpenGL-related function pointers.
reimar
parents: 30711
diff changeset
580 mpglActiveTexture(GL_TEXTURE3);
16488
3191dcb27a12 hardware color-space conversion for vo_gl and vo_gl2
reimar
parents: 16475
diff changeset
581 glBindTexture(GL_TEXTURE_2D, lookupTex);
30945
55917a674d7d Add mpgl prefix to all OpenGL-related function pointers.
reimar
parents: 30711
diff changeset
582 mpglActiveTexture(GL_TEXTURE0);
16488
3191dcb27a12 hardware color-space conversion for vo_gl and vo_gl2
reimar
parents: 16475
diff changeset
583 glBindTexture(GL_TEXTURE_2D, 0);
3191dcb27a12 hardware color-space conversion for vo_gl and vo_gl2
reimar
parents: 16475
diff changeset
584 case YUV_CONVERSION_FRAGMENT_POW:
3191dcb27a12 hardware color-space conversion for vo_gl and vo_gl2
reimar
parents: 16475
diff changeset
585 case YUV_CONVERSION_FRAGMENT:
30945
55917a674d7d Add mpgl prefix to all OpenGL-related function pointers.
reimar
parents: 30711
diff changeset
586 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
587 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
588 break;
212999db0203 Avoid crash with e.g. -vo gl2:yuv=2 when no fragment program functions are available
reimar
parents: 18116
diff changeset
589 }
30945
55917a674d7d Add mpgl prefix to all OpenGL-related function pointers.
reimar
parents: 30711
diff changeset
590 mpglGenPrograms(1, &fragprog);
55917a674d7d Add mpgl prefix to all OpenGL-related function pointers.
reimar
parents: 30711
diff changeset
591 mpglBindProgram(GL_FRAGMENT_PROGRAM, fragprog);
16488
3191dcb27a12 hardware color-space conversion for vo_gl and vo_gl2
reimar
parents: 16475
diff changeset
592 break;
3191dcb27a12 hardware color-space conversion for vo_gl and vo_gl2
reimar
parents: 16475
diff changeset
593 }
33414
9bc9e1851a13 Support 9- and 10-bit YUV input for OpenGL vos.
reimar
parents: 33365
diff changeset
594 mp_get_chroma_shift(image_format, &xs, &ys, &depth);
30097
9d724e6def3e Support all planar YUV formats in OpenGL vos.
reimar
parents: 30023
diff changeset
595 params.chrom_texw = params.texw >> xs;
9d724e6def3e Support all planar YUV formats in OpenGL vos.
reimar
parents: 30023
diff changeset
596 params.chrom_texh = params.texh >> ys;
33414
9bc9e1851a13 Support 9- and 10-bit YUV input for OpenGL vos.
reimar
parents: 33365
diff changeset
597 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
598 glSetupYUVConversion(&params);
16488
3191dcb27a12 hardware color-space conversion for vo_gl and vo_gl2
reimar
parents: 16475
diff changeset
599 }
10880
ba9557e864c0 vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents: 10757
diff changeset
600
ba9557e864c0 vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents: 10757
diff changeset
601 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
602 gl_set_bilinear(1);
23651
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
603
14078
c4033dcb986f More similar code from gl and gl2 moved to gl_common
reimar
parents: 13926
diff changeset
604 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
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
605 image_bpp, image_bytes,
14078
c4033dcb986f More similar code from gl and gl2 moved to gl_common
reimar
parents: 13926
diff changeset
606 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
607 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
608
29522
26ca161275d6 -vo gl2 resize does not need to modify its arguments, so pass int instead of int *.
reimar
parents: 29520
diff changeset
609 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
610
ba9557e864c0 vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents: 10757
diff changeset
611 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
612 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
613
13926
b7ba9bcd1916 Avoid drawing before transformation matrices are set up.
reimar
parents: 13877
diff changeset
614 drawTextureDisplay ();
b7ba9bcd1916 Avoid drawing before transformation matrices are set up.
reimar
parents: 13877
diff changeset
615
10880
ba9557e864c0 vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents: 10757
diff changeset
616 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
617 }
ba9557e864c0 vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents: 10757
diff changeset
618
ba9557e864c0 vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents: 10757
diff changeset
619 /* 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
620 * 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
621 */
23651
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
622 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
623 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
624 {
30097
9d724e6def3e Support all planar YUV formats in OpenGL vos.
reimar
parents: 30023
diff changeset
625 int xs, ys;
23651
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
626 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
627
23651
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
628 image_height = height;
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
629 image_width = width;
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
630 image_format = format;
33365
706871635af7 Make mp_get_chroma_shift simpler/more generic and add an argument
reimar
parents: 33305
diff changeset
631 is_yuv = mp_get_chroma_shift(image_format, &xs, &ys, NULL) > 0;
30097
9d724e6def3e Support all planar YUV formats in OpenGL vos.
reimar
parents: 30023
diff changeset
632 is_yuv |= (xs << 8) | (ys << 16);
23651
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
633
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
634 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
635
30023
b7a703cf9178 Rename GL_* defines to CONFIG_GL_*
reimar
parents: 30021
diff changeset
636 #ifdef CONFIG_GL_WIN32
23651
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
637 if (config_w32(width, height, d_width, d_height, flags, title, format) == -1)
31027
bbe66cf05445 Slightly more correct ifdefs for vo_gl2.
reimar
parents: 30971
diff changeset
638 #endif
bbe66cf05445 Slightly more correct ifdefs for vo_gl2.
reimar
parents: 30971
diff changeset
639 #ifdef CONFIG_GL_X11
23651
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
640 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
641 #endif
23651
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
642 return -1;
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
643
29938
eb6c70e2cbea Very preliminary code to allow selecting the OpenGL backend at runtime.
reimar
parents: 29904
diff changeset
644 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
645 return -1;
14142
f0c1ee83b216 Improving gl2 under windows, moving some functionality to gl_common
reimar
parents: 14090
diff changeset
646
2276
558a9397c250 improved gl, please check performance and correct display
sven
parents: 2249
diff changeset
647 glVersion = glGetString(GL_VERSION);
558a9397c250 improved gl, please check performance and correct display
sven
parents: 2249
diff changeset
648
11988
ccb15c72f331 printf -> mp_msg
attila
parents: 11542
diff changeset
649 mp_msg(MSGT_VO, MSGL_V, "[gl2] OpenGL Driver Information:\n");
23651
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
650 mp_msg(MSGT_VO, MSGL_V, "\tvendor: %s,\n\trenderer %s,\n\tversion %s\n",
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
651 glGetString(GL_VENDOR), glGetString(GL_RENDERER), glVersion);
2276
558a9397c250 improved gl, please check performance and correct display
sven
parents: 2249
diff changeset
652
23651
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
653 if(glVersion[0]>'1' || (glVersion[0]=='1' && glVersion[2]>='2') )
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
654 isGL12 = GL_TRUE;
2276
558a9397c250 improved gl, please check performance and correct display
sven
parents: 2249
diff changeset
655 else
23651
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
656 isGL12 = GL_FALSE;
2124
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
657
23651
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
658 if(isGL12) {
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
659 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
660 } else {
23651
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
661 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
662 }
558a9397c250 improved gl, please check performance and correct display
sven
parents: 2249
diff changeset
663
16488
3191dcb27a12 hardware color-space conversion for vo_gl and vo_gl2
reimar
parents: 16475
diff changeset
664 glFindFormat(format, &image_bpp, &gl_internal_format, &gl_bitmap_format, &gl_bitmap_type);
2124
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
665
2276
558a9397c250 improved gl, please check performance and correct display
sven
parents: 2249
diff changeset
666 image_bytes=(image_bpp+7)/8;
558a9397c250 improved gl, please check performance and correct display
sven
parents: 2249
diff changeset
667
558a9397c250 improved gl, please check performance and correct display
sven
parents: 2249
diff changeset
668 draw_alpha_fnc=draw_alpha_null;
558a9397c250 improved gl, please check performance and correct display
sven
parents: 2249
diff changeset
669
23651
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
670 switch(image_bpp) {
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
671 case 15:
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
672 draw_alpha_fnc=draw_alpha_15; break;
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
673 case 16:
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
674 draw_alpha_fnc=draw_alpha_16; break;
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
675 case 24:
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
676 draw_alpha_fnc=draw_alpha_24; break;
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
677 case 32:
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
678 draw_alpha_fnc=draw_alpha_32; break;
2276
558a9397c250 improved gl, please check performance and correct display
sven
parents: 2249
diff changeset
679 }
558a9397c250 improved gl, please check performance and correct display
sven
parents: 2249
diff changeset
680
15748
f75ba7f7b7b2 support -wid
reimar
parents: 15595
diff changeset
681 if (initGl(vo_dwidth, vo_dheight) == -1)
23651
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
682 return -1;
2124
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
683
23651
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
684 return 0;
2124
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
685 }
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
686
31027
bbe66cf05445 Slightly more correct ifdefs for vo_gl2.
reimar
parents: 30971
diff changeset
687 #ifdef CONFIG_GL_X11
2276
558a9397c250 improved gl, please check performance and correct display
sven
parents: 2249
diff changeset
688 static int gl_handlekey(int key)
558a9397c250 improved gl, please check performance and correct display
sven
parents: 2249
diff changeset
689 {
23651
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
690 if(key=='a'||key=='A') {
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
691 gl_set_antialias(!gl_antialias);
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
692 return 0;
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
693 } else if(key=='b'||key=='B') {
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
694 gl_set_bilinear(-1);
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
695 return 0;
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
696 }
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
697 return 1;
2276
558a9397c250 improved gl, please check performance and correct display
sven
parents: 2249
diff changeset
698 }
27720
66d7ea3f5a78 Surround conditionally used function with corresponding #ifdef, fixes:
diego
parents: 27621
diff changeset
699 #endif
2124
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
700
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
701 static void check_events(void)
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
702 {
23651
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
703 int e;
31027
bbe66cf05445 Slightly more correct ifdefs for vo_gl2.
reimar
parents: 30971
diff changeset
704 #ifdef CONFIG_GL_X11
23651
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
705 XEvent Event;
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
706 char buf[100];
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
707 KeySym keySym;
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
708 int key;
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
709 static XComposeStatus stat;
2276
558a9397c250 improved gl, please check performance and correct display
sven
parents: 2249
diff changeset
710
23651
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
711 while ( XPending( mDisplay ) ) {
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
712 XNextEvent( mDisplay,&Event );
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
713 if( Event.type == KeyPress ) {
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
714 XLookupString( &Event.xkey,buf,sizeof(buf),&keySym,&stat );
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
715 key = (keySym&0xff00) != 0 ? (keySym&0x00ff) + 256 : keySym;
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
716 if(gl_handlekey(key))
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
717 XPutBackEvent(mDisplay, &Event);
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
718 break;
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
719 } else {
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
720 XPutBackEvent(mDisplay, &Event);
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
721 break;
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
722 }
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
723 }
17116
724353364790 Get rid of most #ifdefs
reimar
parents: 17006
diff changeset
724 #endif
29938
eb6c70e2cbea Very preliminary code to allow selecting the OpenGL backend at runtime.
reimar
parents: 29904
diff changeset
725 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
726 if(e&VO_EVENT_RESIZE) resize(vo_dwidth, vo_dheight);
23651
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
727 if(e&VO_EVENT_EXPOSE && int_pause) flip_page();
2124
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
728 }
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
729
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
730 static void draw_osd(void)
12446
59cd81e2e1ef fixed memory leak and removed unnecessary static variable
reimar
parents: 12394
diff changeset
731 {
59cd81e2e1ef fixed memory leak and removed unnecessary static variable
reimar
parents: 12394
diff changeset
732 if (ImageData)
59cd81e2e1ef fixed memory leak and removed unnecessary static variable
reimar
parents: 12394
diff changeset
733 vo_draw_text(image_width,image_height,draw_alpha_fnc);
59cd81e2e1ef fixed memory leak and removed unnecessary static variable
reimar
parents: 12394
diff changeset
734 }
2124
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
735
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
736 static void
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
737 flip_page(void)
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
738 {
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
739 drawTextureDisplay();
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
740
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
741 // glFlush();
16475
55b04cfc255c Allow disabling the glFinish call
reimar
parents: 16303
diff changeset
742 if (use_glFinish)
2124
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
743 glFinish();
29938
eb6c70e2cbea Very preliminary code to allow selecting the OpenGL backend at runtime.
reimar
parents: 29904
diff changeset
744 glctx.swapGlBuffers(&glctx);
12394
b3ff1a576b8c clear buffer after (glX)SwapBuffers in fullscreen to avoid flickering borders
reimar
parents: 12382
diff changeset
745
29525
41ac62d6f913 Make gl2 code capable of windowed aspect and panscan (no user option to enable it yet though).
reimar
parents: 29523
diff changeset
746 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
747 glClear (GL_COLOR_BUFFER_BIT);
2124
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
748 }
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
749
16171
fd51fd1ff231 Fix the return types of all (six) libvo API functions. Used to be uint32_t, but
ivo
parents: 15748
diff changeset
750 static int draw_slice(uint8_t *src[], int stride[], int w,int h,int x,int y)
2124
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
751 {
16583
84356c6d997b Fix crashes and green border when using YV12 input format
reimar
parents: 16488
diff changeset
752 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
753 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
754 int rem_h = h;
3191dcb27a12 hardware color-space conversion for vo_gl and vo_gl2
reimar
parents: 16475
diff changeset
755 struct TexSquare *texline = &texgrid[y / texture_height * texnumx];
3191dcb27a12 hardware color-space conversion for vo_gl and vo_gl2
reimar
parents: 16475
diff changeset
756 int subtex_y = y % texture_width;
30097
9d724e6def3e Support all planar YUV formats in OpenGL vos.
reimar
parents: 30023
diff changeset
757 int xs, ys;
33365
706871635af7 Make mp_get_chroma_shift simpler/more generic and add an argument
reimar
parents: 33305
diff changeset
758 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
759 while (rem_h > 0) {
3191dcb27a12 hardware color-space conversion for vo_gl and vo_gl2
reimar
parents: 16475
diff changeset
760 int rem_w = w;
3191dcb27a12 hardware color-space conversion for vo_gl and vo_gl2
reimar
parents: 16475
diff changeset
761 struct TexSquare *tsq = &texline[x / texture_width];
3191dcb27a12 hardware color-space conversion for vo_gl and vo_gl2
reimar
parents: 16475
diff changeset
762 int subtex_x = x % texture_height;
3191dcb27a12 hardware color-space conversion for vo_gl and vo_gl2
reimar
parents: 16475
diff changeset
763 int subtex_h = rem_h;
3191dcb27a12 hardware color-space conversion for vo_gl and vo_gl2
reimar
parents: 16475
diff changeset
764 if (subtex_y + subtex_h > texture_height)
3191dcb27a12 hardware color-space conversion for vo_gl and vo_gl2
reimar
parents: 16475
diff changeset
765 subtex_h = texture_height - subtex_y;
3191dcb27a12 hardware color-space conversion for vo_gl and vo_gl2
reimar
parents: 16475
diff changeset
766 while (rem_w > 0) {
3191dcb27a12 hardware color-space conversion for vo_gl and vo_gl2
reimar
parents: 16475
diff changeset
767 int subtex_w = rem_w;
3191dcb27a12 hardware color-space conversion for vo_gl and vo_gl2
reimar
parents: 16475
diff changeset
768 if (subtex_x + subtex_w > texture_width)
3191dcb27a12 hardware color-space conversion for vo_gl and vo_gl2
reimar
parents: 16475
diff changeset
769 subtex_w = texture_width - subtex_x;
30945
55917a674d7d Add mpgl prefix to all OpenGL-related function pointers.
reimar
parents: 30711
diff changeset
770 mpglActiveTexture(GL_TEXTURE0);
16488
3191dcb27a12 hardware color-space conversion for vo_gl and vo_gl2
reimar
parents: 16475
diff changeset
771 glBindTexture(GL_TEXTURE_2D, tsq->texobj);
3191dcb27a12 hardware color-space conversion for vo_gl and vo_gl2
reimar
parents: 16475
diff changeset
772 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
773 yptr, ystride, subtex_x, subtex_y,
16488
3191dcb27a12 hardware color-space conversion for vo_gl and vo_gl2
reimar
parents: 16475
diff changeset
774 subtex_w, subtex_h, 0);
30945
55917a674d7d Add mpgl prefix to all OpenGL-related function pointers.
reimar
parents: 30711
diff changeset
775 mpglActiveTexture(GL_TEXTURE1);
16488
3191dcb27a12 hardware color-space conversion for vo_gl and vo_gl2
reimar
parents: 16475
diff changeset
776 glBindTexture(GL_TEXTURE_2D, tsq->uvtexobjs[0]);
3191dcb27a12 hardware color-space conversion for vo_gl and vo_gl2
reimar
parents: 16475
diff changeset
777 glUploadTex(GL_TEXTURE_2D, gl_bitmap_format, gl_bitmap_type,
30097
9d724e6def3e Support all planar YUV formats in OpenGL vos.
reimar
parents: 30023
diff changeset
778 uptr, ustride, subtex_x >> xs, subtex_y >> ys,
9d724e6def3e Support all planar YUV formats in OpenGL vos.
reimar
parents: 30023
diff changeset
779 subtex_w >> xs, subtex_h >> ys, 0);
30945
55917a674d7d Add mpgl prefix to all OpenGL-related function pointers.
reimar
parents: 30711
diff changeset
780 mpglActiveTexture(GL_TEXTURE2);
16488
3191dcb27a12 hardware color-space conversion for vo_gl and vo_gl2
reimar
parents: 16475
diff changeset
781 glBindTexture(GL_TEXTURE_2D, tsq->uvtexobjs[1]);
3191dcb27a12 hardware color-space conversion for vo_gl and vo_gl2
reimar
parents: 16475
diff changeset
782 glUploadTex(GL_TEXTURE_2D, gl_bitmap_format, gl_bitmap_type,
30097
9d724e6def3e Support all planar YUV formats in OpenGL vos.
reimar
parents: 30023
diff changeset
783 vptr, vstride, subtex_x >> xs, subtex_y >> ys,
9d724e6def3e Support all planar YUV formats in OpenGL vos.
reimar
parents: 30023
diff changeset
784 subtex_w >> xs, subtex_h >> ys, 0);
16488
3191dcb27a12 hardware color-space conversion for vo_gl and vo_gl2
reimar
parents: 16475
diff changeset
785 subtex_x = 0;
16583
84356c6d997b Fix crashes and green border when using YV12 input format
reimar
parents: 16488
diff changeset
786 yptr += subtex_w;
30097
9d724e6def3e Support all planar YUV formats in OpenGL vos.
reimar
parents: 30023
diff changeset
787 uptr += subtex_w >> xs;
9d724e6def3e Support all planar YUV formats in OpenGL vos.
reimar
parents: 30023
diff changeset
788 vptr += subtex_w >> xs;
16488
3191dcb27a12 hardware color-space conversion for vo_gl and vo_gl2
reimar
parents: 16475
diff changeset
789 tsq++;
3191dcb27a12 hardware color-space conversion for vo_gl and vo_gl2
reimar
parents: 16475
diff changeset
790 rem_w -= subtex_w;
3191dcb27a12 hardware color-space conversion for vo_gl and vo_gl2
reimar
parents: 16475
diff changeset
791 }
3191dcb27a12 hardware color-space conversion for vo_gl and vo_gl2
reimar
parents: 16475
diff changeset
792 subtex_y = 0;
16583
84356c6d997b Fix crashes and green border when using YV12 input format
reimar
parents: 16488
diff changeset
793 yptr += subtex_h * ystride - w;
30097
9d724e6def3e Support all planar YUV formats in OpenGL vos.
reimar
parents: 30023
diff changeset
794 uptr += (subtex_h >> ys) * ustride - (w >> xs);
9d724e6def3e Support all planar YUV formats in OpenGL vos.
reimar
parents: 30023
diff changeset
795 vptr += (subtex_h >> ys) * vstride - (w >> xs);
16488
3191dcb27a12 hardware color-space conversion for vo_gl and vo_gl2
reimar
parents: 16475
diff changeset
796 texline += texnumx;
3191dcb27a12 hardware color-space conversion for vo_gl and vo_gl2
reimar
parents: 16475
diff changeset
797 rem_h -= subtex_h;
3191dcb27a12 hardware color-space conversion for vo_gl and vo_gl2
reimar
parents: 16475
diff changeset
798 }
30945
55917a674d7d Add mpgl prefix to all OpenGL-related function pointers.
reimar
parents: 30711
diff changeset
799 mpglActiveTexture(GL_TEXTURE0);
2276
558a9397c250 improved gl, please check performance and correct display
sven
parents: 2249
diff changeset
800 return 0;
2124
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
801 }
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
802
16171
fd51fd1ff231 Fix the return types of all (six) libvo API functions. Used to be uint32_t, but
ivo
parents: 15748
diff changeset
803 static int
2124
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
804 draw_frame(uint8_t *src[])
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
805 {
30097
9d724e6def3e Support all planar YUV formats in OpenGL vos.
reimar
parents: 30023
diff changeset
806 if (is_yuv) {
16488
3191dcb27a12 hardware color-space conversion for vo_gl and vo_gl2
reimar
parents: 16475
diff changeset
807 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
808 return 0;
3191dcb27a12 hardware color-space conversion for vo_gl and vo_gl2
reimar
parents: 16475
diff changeset
809 }
16214
ede5b4afd262 Helper function for drawing texture and general cleanup of vo_gl2.c
reimar
parents: 16171
diff changeset
810 ImageData=(unsigned char *)src[0];
ede5b4afd262 Helper function for drawing texture and general cleanup of vo_gl2.c
reimar
parents: 16171
diff changeset
811 resetTexturePointers(ImageData);
23649
404d35495770 Remove overly complex and unused per-subtexture "dirty" handling
reimar
parents: 23648
diff changeset
812 texdirty = 1;
16214
ede5b4afd262 Helper function for drawing texture and general cleanup of vo_gl2.c
reimar
parents: 16171
diff changeset
813 return 0;
2124
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
814 }
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
815
16171
fd51fd1ff231 Fix the return types of all (six) libvo API functions. Used to be uint32_t, but
ivo
parents: 15748
diff changeset
816 static int
2124
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
817 query_format(uint32_t format)
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
818 {
33365
706871635af7 Make mp_get_chroma_shift simpler/more generic and add an argument
reimar
parents: 33305
diff changeset
819 int depth;
706871635af7 Make mp_get_chroma_shift simpler/more generic and add an argument
reimar
parents: 33305
diff changeset
820 if (use_yuv && mp_get_chroma_shift(format, NULL, NULL, &depth) &&
33414
9bc9e1851a13 Support 9- and 10-bit YUV input for OpenGL vos.
reimar
parents: 33365
diff changeset
821 (depth == 8 || depth == 16 || glYUVLargeRange(use_yuv)) &&
30110
19414a605695 Add support for 16-bit per component YUV formats.
reimar
parents: 30109
diff changeset
822 (IMGFMT_IS_YUVP16_NE(format) || !IMGFMT_IS_YUVP16(format)))
30097
9d724e6def3e Support all planar YUV formats in OpenGL vos.
reimar
parents: 30023
diff changeset
823 return VFCAP_CSP_SUPPORTED | VFCAP_CSP_SUPPORTED_BY_HW | VFCAP_OSD |
9d724e6def3e Support all planar YUV formats in OpenGL vos.
reimar
parents: 30023
diff changeset
824 VFCAP_HWSCALE_UP | VFCAP_HWSCALE_DOWN | VFCAP_ACCEPT_STRIDE;
23651
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
825 switch(format) {
25397
084619331d92 Replace some more broken SYS_DARWIN preprocessor conditionals with __APPLE__.
diego
parents: 25220
diff changeset
826 #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
827 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
828 #else
10143
fd3cbeb388f0 removed broken swscaler support, added runtime fullscreens switching ability, and some other general cleanup thingies
alex
parents: 8254
diff changeset
829 case IMGFMT_RGB24:
fd3cbeb388f0 removed broken swscaler support, added runtime fullscreens switching ability, and some other general cleanup thingies
alex
parents: 8254
diff changeset
830 case IMGFMT_BGR24:
fd3cbeb388f0 removed broken swscaler support, added runtime fullscreens switching ability, and some other general cleanup thingies
alex
parents: 8254
diff changeset
831 // case IMGFMT_RGB32:
fd3cbeb388f0 removed broken swscaler support, added runtime fullscreens switching ability, and some other general cleanup thingies
alex
parents: 8254
diff changeset
832 // 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
833 #endif
6212
2001affedb75 query_format revised
alex
parents: 6095
diff changeset
834 return VFCAP_CSP_SUPPORTED | VFCAP_CSP_SUPPORTED_BY_HW | VFCAP_OSD;
23651
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
835 }
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
836 return 0;
2124
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
837 }
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
838
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
839
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
840 static void
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
841 uninit(void)
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
842 {
6095
891cff8aba60 some cleanup, gl/gl2 updated to use vo_window
arpi
parents: 5651
diff changeset
843 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
844 free(texgrid);
8fa2f43cb760 Remove most of the NULL pointer check before free all over the code
cboesch
parents: 32467
diff changeset
845 texgrid = NULL;
29938
eb6c70e2cbea Very preliminary code to allow selecting the OpenGL backend at runtime.
reimar
parents: 29904
diff changeset
846 uninit_mpglcontext(&glctx);
2124
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
847 }
4352
ed5b85b713a3 Extensions for video accelerated architecture
nick
parents: 4017
diff changeset
848
28828
56eee6ffba9b Make data related to suboption parsing const in libvo
reimar
parents: 28446
diff changeset
849 static const opt_t subopts[] = {
30122
1772a5171ac7 Fix function declarations to avoid casting function pointers.
reimar
parents: 30110
diff changeset
850 {"yuv", OPT_ARG_INT, &use_yuv, int_non_neg},
16475
55b04cfc255c Allow disabling the glFinish call
reimar
parents: 16303
diff changeset
851 {"glfinish", OPT_ARG_BOOL, &use_glFinish, NULL},
55b04cfc255c Allow disabling the glFinish call
reimar
parents: 16303
diff changeset
852 {NULL}
55b04cfc255c Allow disabling the glFinish call
reimar
parents: 16303
diff changeset
853 };
55b04cfc255c Allow disabling the glFinish call
reimar
parents: 16303
diff changeset
854
16171
fd51fd1ff231 Fix the return types of all (six) libvo API functions. Used to be uint32_t, but
ivo
parents: 15748
diff changeset
855 static int preinit(const char *arg)
4352
ed5b85b713a3 Extensions for video accelerated architecture
nick
parents: 4017
diff changeset
856 {
29938
eb6c70e2cbea Very preliminary code to allow selecting the OpenGL backend at runtime.
reimar
parents: 29904
diff changeset
857 enum MPGLType gltype = GLTYPE_X11;
16475
55b04cfc255c Allow disabling the glFinish call
reimar
parents: 16303
diff changeset
858 // set defaults
30023
b7a703cf9178 Rename GL_* defines to CONFIG_GL_*
reimar
parents: 30021
diff changeset
859 #ifdef CONFIG_GL_WIN32
29938
eb6c70e2cbea Very preliminary code to allow selecting the OpenGL backend at runtime.
reimar
parents: 29904
diff changeset
860 gltype = GLTYPE_W32;
eb6c70e2cbea Very preliminary code to allow selecting the OpenGL backend at runtime.
reimar
parents: 29904
diff changeset
861 #endif
30711
d68d26ab8e64 Port yuv=... auto-detection from gl to gl2.
reimar
parents: 30293
diff changeset
862 use_yuv = -1;
16475
55b04cfc255c Allow disabling the glFinish call
reimar
parents: 16303
diff changeset
863 use_glFinish = 1;
55b04cfc255c Allow disabling the glFinish call
reimar
parents: 16303
diff changeset
864 if (subopt_parse(arg, subopts) != 0) {
55b04cfc255c Allow disabling the glFinish call
reimar
parents: 16303
diff changeset
865 mp_msg(MSGT_VO, MSGL_FATAL,
55b04cfc255c Allow disabling the glFinish call
reimar
parents: 16303
diff changeset
866 "\n-vo gl2 command line help:\n"
55b04cfc255c Allow disabling the glFinish call
reimar
parents: 16303
diff changeset
867 "Example: mplayer -vo gl2:noglfinish\n"
55b04cfc255c Allow disabling the glFinish call
reimar
parents: 16303
diff changeset
868 "\nOptions:\n"
55b04cfc255c Allow disabling the glFinish call
reimar
parents: 16303
diff changeset
869 " noglfinish\n"
55b04cfc255c Allow disabling the glFinish call
reimar
parents: 16303
diff changeset
870 " 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
871 " yuv=<n>\n"
3191dcb27a12 hardware color-space conversion for vo_gl and vo_gl2
reimar
parents: 16475
diff changeset
872 " 0: use software YUV to RGB conversion.\n"
16626
b36b5bb95a9b documentation update.
reimar
parents: 16594
diff changeset
873 " 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
874 " 2: use fragment program.\n"
3191dcb27a12 hardware color-space conversion for vo_gl and vo_gl2
reimar
parents: 16475
diff changeset
875 " 3: use fragment program with gamma correction.\n"
3191dcb27a12 hardware color-space conversion for vo_gl and vo_gl2
reimar
parents: 16475
diff changeset
876 " 4: use fragment program with gamma correction via lookup.\n"
16626
b36b5bb95a9b documentation update.
reimar
parents: 16594
diff changeset
877 " 5: use ATI-specific method (for older cards).\n"
16475
55b04cfc255c Allow disabling the glFinish call
reimar
parents: 16303
diff changeset
878 "\n" );
55b04cfc255c Allow disabling the glFinish call
reimar
parents: 16303
diff changeset
879 return -1;
55b04cfc255c Allow disabling the glFinish call
reimar
parents: 16303
diff changeset
880 }
30711
d68d26ab8e64 Port yuv=... auto-detection from gl to gl2.
reimar
parents: 30293
diff changeset
881 if(!init_mpglcontext(&glctx, gltype)) goto err_out;
d68d26ab8e64 Port yuv=... auto-detection from gl to gl2.
reimar
parents: 30293
diff changeset
882 if (use_yuv == -1) {
d68d26ab8e64 Port yuv=... auto-detection from gl to gl2.
reimar
parents: 30293
diff changeset
883 #ifdef CONFIG_GL_WIN32
d68d26ab8e64 Port yuv=... auto-detection from gl to gl2.
reimar
parents: 30293
diff changeset
884 if (config_w32(320, 200, 320, 200, VOFLAG_HIDDEN, "", 0) == -1)
31027
bbe66cf05445 Slightly more correct ifdefs for vo_gl2.
reimar
parents: 30971
diff changeset
885 #endif
bbe66cf05445 Slightly more correct ifdefs for vo_gl2.
reimar
parents: 30971
diff changeset
886 #ifdef CONFIG_GL_X11
30711
d68d26ab8e64 Port yuv=... auto-detection from gl to gl2.
reimar
parents: 30293
diff changeset
887 if (config_glx(320, 200, 320, 200, VOFLAG_HIDDEN, "", 0) == -1)
d68d26ab8e64 Port yuv=... auto-detection from gl to gl2.
reimar
parents: 30293
diff changeset
888 #endif
d68d26ab8e64 Port yuv=... auto-detection from gl to gl2.
reimar
parents: 30293
diff changeset
889 goto err_out;
d68d26ab8e64 Port yuv=... auto-detection from gl to gl2.
reimar
parents: 30293
diff changeset
890 if (glctx.setGlWindow(&glctx) == SET_WINDOW_FAILED)
d68d26ab8e64 Port yuv=... auto-detection from gl to gl2.
reimar
parents: 30293
diff changeset
891 goto err_out;
30964
a5c6b37b3af6 Factor out the YUV->RGB conversion auto-selection and also
reimar
parents: 30945
diff changeset
892 use_yuv = glAutodetectYUVConversion();
30711
d68d26ab8e64 Port yuv=... auto-detection from gl to gl2.
reimar
parents: 30293
diff changeset
893 }
4737
32e1f5042f65 I don't like such reports: '-vo dga:vidix or -vo x11:vidix works fine for me'
nick
parents: 4658
diff changeset
894 return 0;
30711
d68d26ab8e64 Port yuv=... auto-detection from gl to gl2.
reimar
parents: 30293
diff changeset
895
d68d26ab8e64 Port yuv=... auto-detection from gl to gl2.
reimar
parents: 30293
diff changeset
896 err_out:
d68d26ab8e64 Port yuv=... auto-detection from gl to gl2.
reimar
parents: 30293
diff changeset
897 uninit();
d68d26ab8e64 Port yuv=... auto-detection from gl to gl2.
reimar
parents: 30293
diff changeset
898 return -1;
4352
ed5b85b713a3 Extensions for video accelerated architecture
nick
parents: 4017
diff changeset
899 }
ed5b85b713a3 Extensions for video accelerated architecture
nick
parents: 4017
diff changeset
900
33305
ddb45e9443ec Remove the variable arguments from the libvo control() functions.
iive
parents: 33301
diff changeset
901 static int control(uint32_t request, void *data)
4352
ed5b85b713a3 Extensions for video accelerated architecture
nick
parents: 4017
diff changeset
902 {
4592
5fbfd8545c3b query_ stuff replaced by new control() - patch by David Holm
arpi
parents: 4440
diff changeset
903 switch (request) {
26823
a9aae3d4721d Saner handling of VOCTRL_PAUSE/VOCTRL_RESUME
reimar
parents: 26755
diff changeset
904 case VOCTRL_PAUSE:
a9aae3d4721d Saner handling of VOCTRL_PAUSE/VOCTRL_RESUME
reimar
parents: 26755
diff changeset
905 case VOCTRL_RESUME:
a9aae3d4721d Saner handling of VOCTRL_PAUSE/VOCTRL_RESUME
reimar
parents: 26755
diff changeset
906 int_pause = (request == VOCTRL_PAUSE);
a9aae3d4721d Saner handling of VOCTRL_PAUSE/VOCTRL_RESUME
reimar
parents: 26755
diff changeset
907 return VO_TRUE;
23651
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
908 case VOCTRL_QUERY_FORMAT:
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
909 return query_format(*((uint32_t*)data));
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
910 case VOCTRL_GUISUPPORT:
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
911 return VO_TRUE;
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
912 case VOCTRL_ONTOP:
29938
eb6c70e2cbea Very preliminary code to allow selecting the OpenGL backend at runtime.
reimar
parents: 29904
diff changeset
913 glctx.ontop();
23651
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
914 return VO_TRUE;
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
915 case VOCTRL_FULLSCREEN:
29938
eb6c70e2cbea Very preliminary code to allow selecting the OpenGL backend at runtime.
reimar
parents: 29904
diff changeset
916 glctx.fullscreen();
eb6c70e2cbea Very preliminary code to allow selecting the OpenGL backend at runtime.
reimar
parents: 29904
diff changeset
917 if (glctx.setGlWindow(&glctx) == SET_WINDOW_REINIT)
23651
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
918 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
919 resize(vo_dwidth, vo_dheight);
23651
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
920 return VO_TRUE;
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
921 case VOCTRL_BORDER:
29938
eb6c70e2cbea Very preliminary code to allow selecting the OpenGL backend at runtime.
reimar
parents: 29904
diff changeset
922 glctx.border();
23651
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
923 return VO_TRUE;
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
924 case VOCTRL_GET_PANSCAN:
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
925 return VO_TRUE;
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
926 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
927 resize(vo_dwidth, vo_dheight);
23651
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
928 return VO_TRUE;
31027
bbe66cf05445 Slightly more correct ifdefs for vo_gl2.
reimar
parents: 30971
diff changeset
929 #ifdef CONFIG_GL_X11
23651
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
930 case VOCTRL_SET_EQUALIZER:
7964
143d730908ae here is a somewhat generic equalizer implementation for the X11 vo drivers
arpi
parents: 7931
diff changeset
931 {
33301
899d817e56fc Implement control() VOCTRL_SET/GET_EQUALIZER using a vf_equalize struct,
iive
parents: 32537
diff changeset
932 vf_equalizer_t *eq=data;
899d817e56fc Implement control() VOCTRL_SET/GET_EQUALIZER using a vf_equalize struct,
iive
parents: 32537
diff changeset
933 return vo_x11_set_equalizer(eq->item, eq->value);
23651
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
934 }
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
935 case VOCTRL_GET_EQUALIZER:
7964
143d730908ae here is a somewhat generic equalizer implementation for the X11 vo drivers
arpi
parents: 7931
diff changeset
936 {
33301
899d817e56fc Implement control() VOCTRL_SET/GET_EQUALIZER using a vf_equalize struct,
iive
parents: 32537
diff changeset
937 vf_equalizer_t *eq=data;
899d817e56fc Implement control() VOCTRL_SET/GET_EQUALIZER using a vf_equalize struct,
iive
parents: 32537
diff changeset
938 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
939 }
10880
ba9557e864c0 vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents: 10757
diff changeset
940 #endif
23651
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
941 case VOCTRL_UPDATE_SCREENINFO:
29938
eb6c70e2cbea Very preliminary code to allow selecting the OpenGL backend at runtime.
reimar
parents: 29904
diff changeset
942 glctx.update_xinerama_info();
23651
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
943 return VO_TRUE;
4592
5fbfd8545c3b query_ stuff replaced by new control() - patch by David Holm
arpi
parents: 4440
diff changeset
944 }
5fbfd8545c3b query_ stuff replaced by new control() - patch by David Holm
arpi
parents: 4440
diff changeset
945 return VO_NOTIMPL;
4352
ed5b85b713a3 Extensions for video accelerated architecture
nick
parents: 4017
diff changeset
946 }