annotate libvo/vo_gl2.c @ 25317:7f3cb5408f28

Fixed VIDIX color bug that was introduced when Radeon VIDIX driver was synchronized with vidix.sf.net. The red color was saturating. Corrected value fixes the issue and restore the color to the level it used to have before synchronization. Meaning of the value remains unknow but was retrieved from register's value of a Radeon 9000 card, so it may need further testing. Patch by Guillaume Lecerf (foxcore at gmail dot com)
author ben
date Mon, 10 Dec 2007 19:27:46 +0000
parents c9e9ac2008c2
children 084619331d92
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 /*
2124
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
2 * video_out_gl.c, X11/OpenGL interface
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!
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
5 */
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
6
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
7 #include <stdio.h>
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
8 #include <stdlib.h>
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
9 #include <string.h>
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
10
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
11 #include "config.h"
11087
b427c796638b * clear window on fullscreen switch
attila
parents: 11000
diff changeset
12 #include "mp_msg.h"
16475
55b04cfc255c Allow disabling the glFinish call
reimar
parents: 16303
diff changeset
13 #include "subopt-helper.h"
2124
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
14 #include "video_out.h"
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
15 #include "video_out_internal.h"
8123
9fc45fe0d444 *HUGE* set of compiler warning fixes, unused variables removal
arpi
parents: 7964
diff changeset
16 #include "sub.h"
2124
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
17
18742
da5ceabe9a43 Make header include order more similar to vo_gl.c
reimar
parents: 18619
diff changeset
18 #include "gl_common.h"
da5ceabe9a43 Make header include order more similar to vo_gl.c
reimar
parents: 18619
diff changeset
19 #include "aspect.h"
12382
a830eebf6693 GUI support
reimar
parents: 12035
diff changeset
20 #ifdef HAVE_NEW_GUI
23077
17bf4f4b0715 Gui --> gui
diego
parents: 22248
diff changeset
21 #include "gui/interface.h"
12382
a830eebf6693 GUI support
reimar
parents: 12035
diff changeset
22 #endif
a830eebf6693 GUI support
reimar
parents: 12035
diff changeset
23
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
24 #undef TEXTUREFORMAT_ALWAYS
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
25 #ifdef SYS_DARWIN
12842
5ab2ea430653 use RGB32 textures on OS X
reimar
parents: 12762
diff changeset
26 #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
27 #endif
10143
fd3cbeb388f0 removed broken swscaler support, added runtime fullscreens switching ability, and some other general cleanup thingies
alex
parents: 8254
diff changeset
28
16594
7b30ec73e83e debugging/testing helpers: allow forcing a certain width/height for textures
reimar
parents: 16590
diff changeset
29 //! force texture height, useful for debugging
7b30ec73e83e debugging/testing helpers: allow forcing a certain width/height for textures
reimar
parents: 16590
diff changeset
30 #define TEXTURE_HEIGHT 128
7b30ec73e83e debugging/testing helpers: allow forcing a certain width/height for textures
reimar
parents: 16590
diff changeset
31 #undef TEXTURE_HEIGHT
7b30ec73e83e debugging/testing helpers: allow forcing a certain width/height for textures
reimar
parents: 16590
diff changeset
32 //! force texture width, useful for debugging
7b30ec73e83e debugging/testing helpers: allow forcing a certain width/height for textures
reimar
parents: 16590
diff changeset
33 #define TEXTURE_WIDTH 128
7b30ec73e83e debugging/testing helpers: allow forcing a certain width/height for textures
reimar
parents: 16590
diff changeset
34 #undef TEXTURE_WIDTH
7b30ec73e83e debugging/testing helpers: allow forcing a certain width/height for textures
reimar
parents: 16590
diff changeset
35
25216
3aee342be929 Make vo info structs const
reimar
parents: 24315
diff changeset
36 static const vo_info_t info =
2124
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
37 {
23651
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
38 "X11 (OpenGL) - multiple textures version",
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
39 "gl2",
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
40 "Arpad Gereoffy & Sven Goethel",
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
41 ""
2124
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
42 };
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
43
25220
c9e9ac2008c2 Mark the vo_functions_t definitions as const where possible.
reimar
parents: 25216
diff changeset
44 const LIBVO_EXTERN(gl2)
8148
5b39e79af5fe removed get_info, using the same sheme as in libmpcodecs instead
alex
parents: 8123
diff changeset
45
2124
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
46 /* local data */
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
47 static unsigned char *ImageData=NULL;
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
48
14142
f0c1ee83b216 Improving gl2 under windows, moving some functionality to gl_common
reimar
parents: 14090
diff changeset
49 #ifdef GL_WIN32
f0c1ee83b216 Improving gl2 under windows, moving some functionality to gl_common
reimar
parents: 14090
diff changeset
50 static int gl_vinfo = 0;
f0c1ee83b216 Improving gl2 under windows, moving some functionality to gl_common
reimar
parents: 14090
diff changeset
51 static HGLRC gl_context = 0;
21631
2d3fdf94a50c Fix compilation under MinGW with X11 enabled
reimar
parents: 18949
diff changeset
52 #define update_xinerama_info w32_update_xinerama_info
2d3fdf94a50c Fix compilation under MinGW with X11 enabled
reimar
parents: 18949
diff changeset
53 #define vo_init vo_w32_init
2d3fdf94a50c Fix compilation under MinGW with X11 enabled
reimar
parents: 18949
diff changeset
54 #define vo_window vo_w32_window
14142
f0c1ee83b216 Improving gl2 under windows, moving some functionality to gl_common
reimar
parents: 14090
diff changeset
55 #else
13871
8298dc8ca78b more fullscreen fixes and gl2 uses setGlWindow.
reimar
parents: 13787
diff changeset
56 static XVisualInfo *gl_vinfo = NULL;
8298dc8ca78b more fullscreen fixes and gl2 uses setGlWindow.
reimar
parents: 13787
diff changeset
57 static GLXContext gl_context = 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
58 #endif
2124
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
59
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
60 static uint32_t image_width;
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
61 static uint32_t image_height;
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
62 static uint32_t image_format;
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
63 static uint32_t image_bpp;
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
64 static uint32_t image_bytes;
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
65
10757
3aea64e0d6d9 Avoid flickering during resizes. Keep video contents even when paused. Fix by Tomas Simonaitis <haden@homelan.lt>
mosu
parents: 10604
diff changeset
66 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
67
2124
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
68 static uint32_t texture_width;
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
69 static uint32_t texture_height;
12448
180c2fb327d3 removing useless code, improving readability
reimar
parents: 12446
diff changeset
70 static int texnumx, texnumy, raw_line_len;
23649
404d35495770 Remove overly complex and unused per-subtexture "dirty" handling
reimar
parents: 23648
diff changeset
71 static int texdirty;
13540
02c0d4371573 fixed memleak, especially for fixed-vo.
reimar
parents: 12895
diff changeset
72 static struct TexSquare * texgrid = NULL;
16488
3191dcb27a12 hardware color-space conversion for vo_gl and vo_gl2
reimar
parents: 16475
diff changeset
73 static GLuint fragprog;
3191dcb27a12 hardware color-space conversion for vo_gl and vo_gl2
reimar
parents: 16475
diff changeset
74 static GLuint lookupTex;
2276
558a9397c250 improved gl, please check performance and correct display
sven
parents: 2249
diff changeset
75 static GLint gl_internal_format;
558a9397c250 improved gl, please check performance and correct display
sven
parents: 2249
diff changeset
76 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
77 static GLenum gl_bitmap_format;
a87c6cf3fe52 Fix texture format variable types. Internal format is GLint, others are GLenum
reimar
parents: 16282
diff changeset
78 static GLenum gl_bitmap_type;
2276
558a9397c250 improved gl, please check performance and correct display
sven
parents: 2249
diff changeset
79 static int isGL12 = GL_FALSE;
558a9397c250 improved gl, please check performance and correct display
sven
parents: 2249
diff changeset
80
558a9397c250 improved gl, please check performance and correct display
sven
parents: 2249
diff changeset
81 static int gl_bilinear=1;
558a9397c250 improved gl, please check performance and correct display
sven
parents: 2249
diff changeset
82 static int gl_antialias=0;
16488
3191dcb27a12 hardware color-space conversion for vo_gl and vo_gl2
reimar
parents: 16475
diff changeset
83 static int use_yuv;
16475
55b04cfc255c Allow disabling the glFinish call
reimar
parents: 16303
diff changeset
84 static int use_glFinish;
2276
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 void (*draw_alpha_fnc)
558a9397c250 improved gl, please check performance and correct display
sven
parents: 2249
diff changeset
87 (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
88
10757
3aea64e0d6d9 Avoid flickering during resizes. Keep video contents even when paused. Fix by Tomas Simonaitis <haden@homelan.lt>
mosu
parents: 10604
diff changeset
89
2124
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
90 /* The squares that are tiled to make up the game screen polygon */
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
91
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
92 struct TexSquare
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
93 {
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
94 GLubyte *texture;
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
95 GLuint texobj;
16488
3191dcb27a12 hardware color-space conversion for vo_gl and vo_gl2
reimar
parents: 16475
diff changeset
96 GLuint uvtexobjs[2];
16214
ede5b4afd262 Helper function for drawing texture and general cleanup of vo_gl2.c
reimar
parents: 16171
diff changeset
97 GLfloat fx, fy, fw, fh;
2124
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
98 };
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
99
17566
f580a7755ac5 Patch by Stefan Huehner / stefan % huehner ! org \
rathann
parents: 17220
diff changeset
100 static GLint getInternalFormat(void)
14090
e84643be7bd0 Move selection of internal texture format to appropriate place, should
reimar
parents: 14078
diff changeset
101 {
e84643be7bd0 Move selection of internal texture format to appropriate place, should
reimar
parents: 14078
diff changeset
102 #ifdef GL_WIN32
e84643be7bd0 Move selection of internal texture format to appropriate place, should
reimar
parents: 14078
diff changeset
103 PIXELFORMATDESCRIPTOR pfd;
24315
12f2487fb845 Fix compilation after patch to remove global vo_hdc
reimar
parents: 23655
diff changeset
104 HDC vo_hdc = GetDC(vo_window);
14090
e84643be7bd0 Move selection of internal texture format to appropriate place, should
reimar
parents: 14078
diff changeset
105 int pf = GetPixelFormat(vo_hdc);
e84643be7bd0 Move selection of internal texture format to appropriate place, should
reimar
parents: 14078
diff changeset
106 if (!DescribePixelFormat(vo_hdc, pf, sizeof pfd, &pfd)) {
e84643be7bd0 Move selection of internal texture format to appropriate place, should
reimar
parents: 14078
diff changeset
107 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
108 } else {
e84643be7bd0 Move selection of internal texture format to appropriate place, should
reimar
parents: 14078
diff changeset
109 r_sz = pfd.cRedBits;
e84643be7bd0 Move selection of internal texture format to appropriate place, should
reimar
parents: 14078
diff changeset
110 g_sz = pfd.cGreenBits;
e84643be7bd0 Move selection of internal texture format to appropriate place, should
reimar
parents: 14078
diff changeset
111 b_sz = pfd.cBlueBits;
e84643be7bd0 Move selection of internal texture format to appropriate place, should
reimar
parents: 14078
diff changeset
112 a_sz = pfd.cAlphaBits;
e84643be7bd0 Move selection of internal texture format to appropriate place, should
reimar
parents: 14078
diff changeset
113 }
24315
12f2487fb845 Fix compilation after patch to remove global vo_hdc
reimar
parents: 23655
diff changeset
114 ReleaseDC(vo_window, vo_hdc);
14090
e84643be7bd0 Move selection of internal texture format to appropriate place, should
reimar
parents: 14078
diff changeset
115 #else
e84643be7bd0 Move selection of internal texture format to appropriate place, should
reimar
parents: 14078
diff changeset
116 if (glXGetConfig(mDisplay, gl_vinfo, GLX_RED_SIZE, &r_sz) != 0) r_sz = 0;
e84643be7bd0 Move selection of internal texture format to appropriate place, should
reimar
parents: 14078
diff changeset
117 if (glXGetConfig(mDisplay, gl_vinfo, GLX_GREEN_SIZE, &g_sz) != 0) g_sz = 0;
e84643be7bd0 Move selection of internal texture format to appropriate place, should
reimar
parents: 14078
diff changeset
118 if (glXGetConfig(mDisplay, gl_vinfo, GLX_BLUE_SIZE, &b_sz) != 0) b_sz = 0;
e84643be7bd0 Move selection of internal texture format to appropriate place, should
reimar
parents: 14078
diff changeset
119 if (glXGetConfig(mDisplay, gl_vinfo, GLX_ALPHA_SIZE, &a_sz) != 0) a_sz = 0;
e84643be7bd0 Move selection of internal texture format to appropriate place, should
reimar
parents: 14078
diff changeset
120 #endif
e84643be7bd0 Move selection of internal texture format to appropriate place, should
reimar
parents: 14078
diff changeset
121
e84643be7bd0 Move selection of internal texture format to appropriate place, should
reimar
parents: 14078
diff changeset
122 rgb_sz=r_sz+g_sz+b_sz;
e84643be7bd0 Move selection of internal texture format to appropriate place, should
reimar
parents: 14078
diff changeset
123 if(rgb_sz<=0) rgb_sz=24;
e84643be7bd0 Move selection of internal texture format to appropriate place, should
reimar
parents: 14078
diff changeset
124
e84643be7bd0 Move selection of internal texture format to appropriate place, should
reimar
parents: 14078
diff changeset
125 #ifdef TEXTUREFORMAT_ALWAYS
e84643be7bd0 Move selection of internal texture format to appropriate place, should
reimar
parents: 14078
diff changeset
126 return TEXTUREFORMAT_ALWAYS;
e84643be7bd0 Move selection of internal texture format to appropriate place, should
reimar
parents: 14078
diff changeset
127 #else
e84643be7bd0 Move selection of internal texture format to appropriate place, should
reimar
parents: 14078
diff changeset
128 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
129 return GL_R3_G3_B2;
14090
e84643be7bd0 Move selection of internal texture format to appropriate place, should
reimar
parents: 14078
diff changeset
130 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
131 return GL_RGB4;
14090
e84643be7bd0 Move selection of internal texture format to appropriate place, should
reimar
parents: 14078
diff changeset
132 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
133 return GL_RGB5;
14090
e84643be7bd0 Move selection of internal texture format to appropriate place, should
reimar
parents: 14078
diff changeset
134 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
135 return GL_RGB8;
14090
e84643be7bd0 Move selection of internal texture format to appropriate place, should
reimar
parents: 14078
diff changeset
136 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
137 return GL_RGB10;
14090
e84643be7bd0 Move selection of internal texture format to appropriate place, should
reimar
parents: 14078
diff changeset
138 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
139 return GL_RGBA2;
14090
e84643be7bd0 Move selection of internal texture format to appropriate place, should
reimar
parents: 14078
diff changeset
140 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
141 return GL_RGBA4;
14090
e84643be7bd0 Move selection of internal texture format to appropriate place, should
reimar
parents: 14078
diff changeset
142 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
143 return GL_RGB5_A1;
14090
e84643be7bd0 Move selection of internal texture format to appropriate place, should
reimar
parents: 14078
diff changeset
144 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
145 return GL_RGBA8;
14090
e84643be7bd0 Move selection of internal texture format to appropriate place, should
reimar
parents: 14078
diff changeset
146 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
147 return GL_RGB10_A2;
14090
e84643be7bd0 Move selection of internal texture format to appropriate place, should
reimar
parents: 14078
diff changeset
148 #endif
e84643be7bd0 Move selection of internal texture format to appropriate place, should
reimar
parents: 14078
diff changeset
149 return GL_RGB;
e84643be7bd0 Move selection of internal texture format to appropriate place, should
reimar
parents: 14078
diff changeset
150 }
e84643be7bd0 Move selection of internal texture format to appropriate place, should
reimar
parents: 14078
diff changeset
151
17566
f580a7755ac5 Patch by Stefan Huehner / stefan % huehner ! org \
rathann
parents: 17220
diff changeset
152 static int initTextures(void)
2124
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
153 {
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
154 struct TexSquare *tsq=0;
16214
ede5b4afd262 Helper function for drawing texture and general cleanup of vo_gl2.c
reimar
parents: 16171
diff changeset
155 GLfloat texpercx, texpercy;
16221
a8063634ebd1 remove/move some unused headers/variables/code
reimar
parents: 16220
diff changeset
156 int s;
2124
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
157 int x=0, y=0;
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
158 GLint format=0;
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
159
16222
8683e4609f3f textures smaller 64x64 might not be supported
reimar
parents: 16221
diff changeset
160 // textures smaller than 64x64 might not be supported
8683e4609f3f textures smaller 64x64 might not be supported
reimar
parents: 16221
diff changeset
161 s=64;
16220
1effc23b2cb8 10l, texture_width/height initialization was removed, so use
reimar
parents: 16214
diff changeset
162 while (s<image_width)
16214
ede5b4afd262 Helper function for drawing texture and general cleanup of vo_gl2.c
reimar
parents: 16171
diff changeset
163 s*=2;
2124
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
164 texture_width=s;
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
165
16222
8683e4609f3f textures smaller 64x64 might not be supported
reimar
parents: 16221
diff changeset
166 s=64;
16220
1effc23b2cb8 10l, texture_width/height initialization was removed, so use
reimar
parents: 16214
diff changeset
167 while (s<image_height)
16214
ede5b4afd262 Helper function for drawing texture and general cleanup of vo_gl2.c
reimar
parents: 16171
diff changeset
168 s*=2;
2124
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
169 texture_height=s;
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
170
16488
3191dcb27a12 hardware color-space conversion for vo_gl and vo_gl2
reimar
parents: 16475
diff changeset
171 if (image_format != IMGFMT_YV12)
14090
e84643be7bd0 Move selection of internal texture format to appropriate place, should
reimar
parents: 14078
diff changeset
172 gl_internal_format = getInternalFormat();
2124
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
173
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
174 /* Test the max texture size */
23651
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
175 do {
2124
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
176 glTexImage2D (GL_PROXY_TEXTURE_2D, 0,
23651
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
177 gl_internal_format,
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
178 texture_width, texture_height,
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
179 0, gl_bitmap_format, gl_bitmap_type, NULL);
2124
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
180
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
181 glGetTexLevelParameteriv
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
182 (GL_PROXY_TEXTURE_2D, 0, GL_TEXTURE_INTERNAL_FORMAT, &format);
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
183
2276
558a9397c250 improved gl, please check performance and correct display
sven
parents: 2249
diff changeset
184 if (format != gl_internal_format)
2124
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
185 {
11988
ccb15c72f331 printf -> mp_msg
attila
parents: 11542
diff changeset
186 mp_msg (MSGT_VO, MSGL_V, "[gl2] Needed texture [%dx%d] too big, trying ",
23651
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
187 texture_height, texture_width);
2124
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
188
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
189 if (texture_width > texture_height)
16214
ede5b4afd262 Helper function for drawing texture and general cleanup of vo_gl2.c
reimar
parents: 16171
diff changeset
190 texture_width /= 2;
2124
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
191 else
16214
ede5b4afd262 Helper function for drawing texture and general cleanup of vo_gl2.c
reimar
parents: 16171
diff changeset
192 texture_height /= 2;
2124
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
193
11988
ccb15c72f331 printf -> mp_msg
attila
parents: 11542
diff changeset
194 mp_msg (MSGT_VO, MSGL_V, "[%dx%d] !\n", texture_height, texture_width);
2124
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
195
23651
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
196 if(texture_width < 64 || texture_height < 64) {
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
197 mp_msg (MSGT_VO, MSGL_FATAL, "[gl2] Give up .. usable texture size not avaiable, or texture config error !\n");
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
198 return -1;
2124
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
199 }
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
200 }
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
201 }
2276
558a9397c250 improved gl, please check performance and correct display
sven
parents: 2249
diff changeset
202 while (format != gl_internal_format && texture_width > 1 && texture_height > 1);
16594
7b30ec73e83e debugging/testing helpers: allow forcing a certain width/height for textures
reimar
parents: 16590
diff changeset
203 #ifdef TEXTURE_WIDTH
7b30ec73e83e debugging/testing helpers: allow forcing a certain width/height for textures
reimar
parents: 16590
diff changeset
204 texture_width = TEXTURE_WIDTH;
7b30ec73e83e debugging/testing helpers: allow forcing a certain width/height for textures
reimar
parents: 16590
diff changeset
205 #endif
7b30ec73e83e debugging/testing helpers: allow forcing a certain width/height for textures
reimar
parents: 16590
diff changeset
206 #ifdef TEXTURE_HEIGHT
7b30ec73e83e debugging/testing helpers: allow forcing a certain width/height for textures
reimar
parents: 16590
diff changeset
207 texture_height = TEXTURE_HEIGHT;
7b30ec73e83e debugging/testing helpers: allow forcing a certain width/height for textures
reimar
parents: 16590
diff changeset
208 #endif
2124
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
209
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
210 texnumx = image_width / texture_width;
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
211 if ((image_width % texture_width) > 0)
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
212 texnumx++;
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
213
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
214 texnumy = image_height / texture_height;
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
215 if ((image_height % texture_height) > 0)
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
216 texnumy++;
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
217
11988
ccb15c72f331 printf -> mp_msg
attila
parents: 11542
diff changeset
218 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
219 texnumx, texnumy, texture_width,texture_height);
2276
558a9397c250 improved gl, please check performance and correct display
sven
parents: 2249
diff changeset
220
2124
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
221 /* Allocate the texture memory */
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
222
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
223 texpercx = (GLfloat) texture_width / (GLfloat) image_width;
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
224 texpercy = (GLfloat) texture_height / (GLfloat) image_height;
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
225
13540
02c0d4371573 fixed memleak, especially for fixed-vo.
reimar
parents: 12895
diff changeset
226 if (texgrid)
02c0d4371573 fixed memleak, especially for fixed-vo.
reimar
parents: 12895
diff changeset
227 free(texgrid);
23647
ee915faa2a2e remove useless calloc cast
reimar
parents: 23645
diff changeset
228 texgrid = calloc (texnumx * texnumy, sizeof (struct TexSquare));
2124
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
229
12448
180c2fb327d3 removing useless code, improving readability
reimar
parents: 12446
diff changeset
230 raw_line_len = image_width * image_bytes;
2124
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_DBG2, "[gl2] texture-usage %d*width=%d, %d*height=%d\n",
23651
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
233 (int) texnumx, (int) texture_width, (int) texnumy,
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
234 (int) texture_height);
2124
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
235
16214
ede5b4afd262 Helper function for drawing texture and general cleanup of vo_gl2.c
reimar
parents: 16171
diff changeset
236 tsq = texgrid;
23651
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
237 for (y = 0; y < texnumy; y++) {
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
238 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
239 tsq->fx = x * texpercx;
ede5b4afd262 Helper function for drawing texture and general cleanup of vo_gl2.c
reimar
parents: 16171
diff changeset
240 tsq->fy = y * texpercy;
ede5b4afd262 Helper function for drawing texture and general cleanup of vo_gl2.c
reimar
parents: 16171
diff changeset
241 tsq->fw = texpercx;
ede5b4afd262 Helper function for drawing texture and general cleanup of vo_gl2.c
reimar
parents: 16171
diff changeset
242 tsq->fh = texpercy;
2124
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
243
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
244 tsq->texobj=0;
16488
3191dcb27a12 hardware color-space conversion for vo_gl and vo_gl2
reimar
parents: 16475
diff changeset
245 tsq->uvtexobjs[0] = tsq->uvtexobjs[1] = 0;
2124
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
246
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
247 glGenTextures (1, &(tsq->texobj));
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
248
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
249 glBindTexture (GL_TEXTURE_2D, tsq->texobj);
16488
3191dcb27a12 hardware color-space conversion for vo_gl and vo_gl2
reimar
parents: 16475
diff changeset
250 if (image_format == IMGFMT_YV12) {
3191dcb27a12 hardware color-space conversion for vo_gl and vo_gl2
reimar
parents: 16475
diff changeset
251 glGenTextures(2, tsq->uvtexobjs);
3191dcb27a12 hardware color-space conversion for vo_gl and vo_gl2
reimar
parents: 16475
diff changeset
252 ActiveTexture(GL_TEXTURE1);
3191dcb27a12 hardware color-space conversion for vo_gl and vo_gl2
reimar
parents: 16475
diff changeset
253 glBindTexture (GL_TEXTURE_2D, tsq->uvtexobjs[0]);
3191dcb27a12 hardware color-space conversion for vo_gl and vo_gl2
reimar
parents: 16475
diff changeset
254 ActiveTexture(GL_TEXTURE2);
3191dcb27a12 hardware color-space conversion for vo_gl and vo_gl2
reimar
parents: 16475
diff changeset
255 glBindTexture (GL_TEXTURE_2D, tsq->uvtexobjs[1]);
3191dcb27a12 hardware color-space conversion for vo_gl and vo_gl2
reimar
parents: 16475
diff changeset
256 ActiveTexture(GL_TEXTURE0);
3191dcb27a12 hardware color-space conversion for vo_gl and vo_gl2
reimar
parents: 16475
diff changeset
257 }
2124
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
258
16214
ede5b4afd262 Helper function for drawing texture and general cleanup of vo_gl2.c
reimar
parents: 16171
diff changeset
259 glCreateClearTex(GL_TEXTURE_2D, gl_internal_format, GL_LINEAR,
ede5b4afd262 Helper function for drawing texture and general cleanup of vo_gl2.c
reimar
parents: 16171
diff changeset
260 texture_width, texture_height, 0);
2124
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
261
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
262 glTexEnvf (GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
16488
3191dcb27a12 hardware color-space conversion for vo_gl and vo_gl2
reimar
parents: 16475
diff changeset
263 if (image_format == IMGFMT_YV12) {
3191dcb27a12 hardware color-space conversion for vo_gl and vo_gl2
reimar
parents: 16475
diff changeset
264 ActiveTexture(GL_TEXTURE1);
3191dcb27a12 hardware color-space conversion for vo_gl and vo_gl2
reimar
parents: 16475
diff changeset
265 glCreateClearTex(GL_TEXTURE_2D, gl_internal_format, GL_LINEAR,
16583
84356c6d997b Fix crashes and green border when using YV12 input format
reimar
parents: 16488
diff changeset
266 texture_width / 2, texture_height / 2, 128);
16488
3191dcb27a12 hardware color-space conversion for vo_gl and vo_gl2
reimar
parents: 16475
diff changeset
267 ActiveTexture(GL_TEXTURE2);
3191dcb27a12 hardware color-space conversion for vo_gl and vo_gl2
reimar
parents: 16475
diff changeset
268 glCreateClearTex(GL_TEXTURE_2D, gl_internal_format, GL_LINEAR,
16583
84356c6d997b Fix crashes and green border when using YV12 input format
reimar
parents: 16488
diff changeset
269 texture_width / 2, texture_height / 2, 128);
16488
3191dcb27a12 hardware color-space conversion for vo_gl and vo_gl2
reimar
parents: 16475
diff changeset
270 ActiveTexture(GL_TEXTURE0);
3191dcb27a12 hardware color-space conversion for vo_gl and vo_gl2
reimar
parents: 16475
diff changeset
271 }
2124
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
272
16214
ede5b4afd262 Helper function for drawing texture and general cleanup of vo_gl2.c
reimar
parents: 16171
diff changeset
273 tsq++;
23651
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
274 } /* for all texnumx */
2124
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
275 } /* for all texnumy */
23651
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
276
10604
alex
parents: 10143
diff changeset
277 return 0;
2124
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
278 }
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
279
2276
558a9397c250 improved gl, please check performance and correct display
sven
parents: 2249
diff changeset
280 static void resetTexturePointers(unsigned char *imageSource)
558a9397c250 improved gl, please check performance and correct display
sven
parents: 2249
diff changeset
281 {
12448
180c2fb327d3 removing useless code, improving readability
reimar
parents: 12446
diff changeset
282 unsigned char *texdata_start, *line_start;
180c2fb327d3 removing useless code, improving readability
reimar
parents: 12446
diff changeset
283 struct TexSquare *tsq = texgrid;
2276
558a9397c250 improved gl, please check performance and correct display
sven
parents: 2249
diff changeset
284 int x=0, y=0;
558a9397c250 improved gl, please check performance and correct display
sven
parents: 2249
diff changeset
285
12448
180c2fb327d3 removing useless code, improving readability
reimar
parents: 12446
diff changeset
286 line_start = (unsigned char *) imageSource;
2276
558a9397c250 improved gl, please check performance and correct display
sven
parents: 2249
diff changeset
287
23651
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
288 for (y = 0; y < texnumy; y++) {
12448
180c2fb327d3 removing useless code, improving readability
reimar
parents: 12446
diff changeset
289 texdata_start = line_start;
23651
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
290 for (x = 0; x < texnumx; x++) {
12448
180c2fb327d3 removing useless code, improving readability
reimar
parents: 12446
diff changeset
291 tsq->texture = texdata_start;
180c2fb327d3 removing useless code, improving readability
reimar
parents: 12446
diff changeset
292 texdata_start += texture_width * image_bytes;
180c2fb327d3 removing useless code, improving readability
reimar
parents: 12446
diff changeset
293 tsq++;
23651
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
294 } /* for all texnumx */
12448
180c2fb327d3 removing useless code, improving readability
reimar
parents: 12446
diff changeset
295 line_start += texture_height * raw_line_len;
2276
558a9397c250 improved gl, please check performance and correct display
sven
parents: 2249
diff changeset
296 } /* for all texnumy */
558a9397c250 improved gl, please check performance and correct display
sven
parents: 2249
diff changeset
297 }
558a9397c250 improved gl, please check performance and correct display
sven
parents: 2249
diff changeset
298
558a9397c250 improved gl, please check performance and correct display
sven
parents: 2249
diff changeset
299 static void gl_set_bilinear (int val)
558a9397c250 improved gl, please check performance and correct display
sven
parents: 2249
diff changeset
300 {
558a9397c250 improved gl, please check performance and correct display
sven
parents: 2249
diff changeset
301 int x, y;
558a9397c250 improved gl, please check performance and correct display
sven
parents: 2249
diff changeset
302
558a9397c250 improved gl, please check performance and correct display
sven
parents: 2249
diff changeset
303 if(val>=0)
23651
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
304 gl_bilinear = val;
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
305 else
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
306 gl_bilinear++;
2276
558a9397c250 improved gl, please check performance and correct display
sven
parents: 2249
diff changeset
307
558a9397c250 improved gl, please check performance and correct display
sven
parents: 2249
diff changeset
308 gl_bilinear=gl_bilinear%2;
558a9397c250 improved gl, please check performance and correct display
sven
parents: 2249
diff changeset
309 /* no mipmap yet .. */
558a9397c250 improved gl, please check performance and correct display
sven
parents: 2249
diff changeset
310
23651
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
311 for (y = 0; y < texnumy; y++) {
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
312 for (x = 0; x < texnumx; x++) {
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
313 glBindTexture (GL_TEXTURE_2D, texgrid[y * texnumx + x].texobj);
2276
558a9397c250 improved gl, please check performance and correct display
sven
parents: 2249
diff changeset
314
23651
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
315 switch (gl_bilinear) {
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
316 case 0:
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
317 glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
318 glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
319 mp_msg(MSGT_VO, MSGL_INFO, "[gl2] bilinear off\n");
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
320 break;
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
321 case 1:
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
322 glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
323 glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
324 mp_msg(MSGT_VO, MSGL_INFO, "[gl2] bilinear linear\n");
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
325 break;
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
326 case 2:
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
327 glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_NEAREST);
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
328 glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR_MIPMAP_NEAREST);
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
329 mp_msg(MSGT_VO, MSGL_INFO, "[gl2] bilinear mipmap nearest\n");
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
330 break;
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
331 case 3:
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
332 glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR);
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
333 glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR_MIPMAP_LINEAR);
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
334 mp_msg(MSGT_VO, MSGL_INFO, "[gl2] bilinear mipmap linear\n");
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
335 break;
2276
558a9397c250 improved gl, please check performance and correct display
sven
parents: 2249
diff changeset
336 }
23651
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
337 }
2276
558a9397c250 improved gl, please check performance and correct display
sven
parents: 2249
diff changeset
338 }
558a9397c250 improved gl, please check performance and correct display
sven
parents: 2249
diff changeset
339 }
558a9397c250 improved gl, please check performance and correct display
sven
parents: 2249
diff changeset
340
558a9397c250 improved gl, please check performance and correct display
sven
parents: 2249
diff changeset
341 static void gl_set_antialias (int val)
558a9397c250 improved gl, please check performance and correct display
sven
parents: 2249
diff changeset
342 {
558a9397c250 improved gl, please check performance and correct display
sven
parents: 2249
diff changeset
343 gl_antialias=val;
558a9397c250 improved gl, please check performance and correct display
sven
parents: 2249
diff changeset
344
23651
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
345 if (gl_antialias) {
2276
558a9397c250 improved gl, please check performance and correct display
sven
parents: 2249
diff changeset
346 glShadeModel (GL_SMOOTH);
558a9397c250 improved gl, please check performance and correct display
sven
parents: 2249
diff changeset
347 glEnable (GL_POLYGON_SMOOTH);
558a9397c250 improved gl, please check performance and correct display
sven
parents: 2249
diff changeset
348 glEnable (GL_LINE_SMOOTH);
558a9397c250 improved gl, please check performance and correct display
sven
parents: 2249
diff changeset
349 glEnable (GL_POINT_SMOOTH);
11988
ccb15c72f331 printf -> mp_msg
attila
parents: 11542
diff changeset
350 mp_msg(MSGT_VO, MSGL_INFO, "[gl2] antialiasing on\n");
23651
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
351 } else {
2276
558a9397c250 improved gl, please check performance and correct display
sven
parents: 2249
diff changeset
352 glShadeModel (GL_FLAT);
558a9397c250 improved gl, please check performance and correct display
sven
parents: 2249
diff changeset
353 glDisable (GL_POLYGON_SMOOTH);
558a9397c250 improved gl, please check performance and correct display
sven
parents: 2249
diff changeset
354 glDisable (GL_LINE_SMOOTH);
558a9397c250 improved gl, please check performance and correct display
sven
parents: 2249
diff changeset
355 glDisable (GL_POINT_SMOOTH);
11988
ccb15c72f331 printf -> mp_msg
attila
parents: 11542
diff changeset
356 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
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
17566
f580a7755ac5 Patch by Stefan Huehner / stefan % huehner ! org \
rathann
parents: 17220
diff changeset
361 static void drawTextureDisplay (void)
2124
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
362 {
16214
ede5b4afd262 Helper function for drawing texture and general cleanup of vo_gl2.c
reimar
parents: 16171
diff changeset
363 struct TexSquare *square = texgrid;
23645
6f2f38eb4e0a Remove some unused code and useless error checking that only clutters the code
reimar
parents: 23077
diff changeset
364 int x, y;
2124
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
365
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
366 glColor3f(1.0,1.0,1.0);
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
367
16488
3191dcb27a12 hardware color-space conversion for vo_gl and vo_gl2
reimar
parents: 16475
diff changeset
368 if (image_format == IMGFMT_YV12)
3191dcb27a12 hardware color-space conversion for vo_gl and vo_gl2
reimar
parents: 16475
diff changeset
369 glEnableYUVConversion(GL_TEXTURE_2D, use_yuv);
23651
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
370 for (y = 0; y < texnumy; y++) {
23649
404d35495770 Remove overly complex and unused per-subtexture "dirty" handling
reimar
parents: 23648
diff changeset
371 int thish = texture_height;
404d35495770 Remove overly complex and unused per-subtexture "dirty" handling
reimar
parents: 23648
diff changeset
372 if (y == texnumy - 1 && image_height % texture_height)
404d35495770 Remove overly complex and unused per-subtexture "dirty" handling
reimar
parents: 23648
diff changeset
373 thish = image_height % texture_height;
23651
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
374 for (x = 0; x < texnumx; x++) {
23649
404d35495770 Remove overly complex and unused per-subtexture "dirty" handling
reimar
parents: 23648
diff changeset
375 int thisw = texture_width;
404d35495770 Remove overly complex and unused per-subtexture "dirty" handling
reimar
parents: 23648
diff changeset
376 if (x == texnumx - 1 && image_width % texture_width)
404d35495770 Remove overly complex and unused per-subtexture "dirty" handling
reimar
parents: 23648
diff changeset
377 thisw = image_width % texture_width;
2124
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
378 glBindTexture (GL_TEXTURE_2D, square->texobj);
16488
3191dcb27a12 hardware color-space conversion for vo_gl and vo_gl2
reimar
parents: 16475
diff changeset
379 if (image_format == IMGFMT_YV12) {
3191dcb27a12 hardware color-space conversion for vo_gl and vo_gl2
reimar
parents: 16475
diff changeset
380 ActiveTexture(GL_TEXTURE1);
3191dcb27a12 hardware color-space conversion for vo_gl and vo_gl2
reimar
parents: 16475
diff changeset
381 glBindTexture (GL_TEXTURE_2D, square->uvtexobjs[0]);
3191dcb27a12 hardware color-space conversion for vo_gl and vo_gl2
reimar
parents: 16475
diff changeset
382 ActiveTexture(GL_TEXTURE2);
3191dcb27a12 hardware color-space conversion for vo_gl and vo_gl2
reimar
parents: 16475
diff changeset
383 glBindTexture (GL_TEXTURE_2D, square->uvtexobjs[1]);
3191dcb27a12 hardware color-space conversion for vo_gl and vo_gl2
reimar
parents: 16475
diff changeset
384 ActiveTexture(GL_TEXTURE0);
3191dcb27a12 hardware color-space conversion for vo_gl and vo_gl2
reimar
parents: 16475
diff changeset
385 }
2124
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
386
23649
404d35495770 Remove overly complex and unused per-subtexture "dirty" handling
reimar
parents: 23648
diff changeset
387 if (texdirty) {
23651
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
388 glUploadTex(GL_TEXTURE_2D, gl_bitmap_format, gl_bitmap_type,
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
389 square->texture, image_width * image_bytes,
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
390 0, 0, thisw, thish, 0);
2276
558a9397c250 improved gl, please check performance and correct display
sven
parents: 2249
diff changeset
391 }
2124
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
392
16214
ede5b4afd262 Helper function for drawing texture and general cleanup of vo_gl2.c
reimar
parents: 16171
diff changeset
393 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
394 0, 0, texture_width, texture_height,
17220
a27e52b838e3 support negative stride (flipping) in vo_gl.
reimar
parents: 17127
diff changeset
395 texture_width, texture_height,
a27e52b838e3 support negative stride (flipping) in vo_gl.
reimar
parents: 17127
diff changeset
396 0, image_format == IMGFMT_YV12, 0);
16214
ede5b4afd262 Helper function for drawing texture and general cleanup of vo_gl2.c
reimar
parents: 16171
diff changeset
397 square++;
2124
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
398 } /* for all texnumx */
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
399 } /* for all texnumy */
16488
3191dcb27a12 hardware color-space conversion for vo_gl and vo_gl2
reimar
parents: 16475
diff changeset
400 if (image_format == IMGFMT_YV12)
3191dcb27a12 hardware color-space conversion for vo_gl and vo_gl2
reimar
parents: 16475
diff changeset
401 glDisableYUVConversion(GL_TEXTURE_2D, use_yuv);
23649
404d35495770 Remove overly complex and unused per-subtexture "dirty" handling
reimar
parents: 23648
diff changeset
402 texdirty = 0;
2124
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
403 }
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
404
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
405
11087
b427c796638b * clear window on fullscreen switch
attila
parents: 11000
diff changeset
406 static void resize(int *x,int *y){
b427c796638b * clear window on fullscreen switch
attila
parents: 11000
diff changeset
407 mp_msg(MSGT_VO,MSGL_V,"[gl2] Resize: %dx%d\n",*x,*y);
23651
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
408 if( vo_fs ) {
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
409 glClear(GL_COLOR_BUFFER_BIT);
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
410 aspect(x, y, A_ZOOM);
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
411 panscan_calc();
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
412 *x += vo_panscan_x;
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
413 *y += vo_panscan_y;
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
414 glViewport( (vo_screenwidth-*x)/2, (vo_screenheight-*y)/2, *x, *y);
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
415 } else {
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
416 //aspect(x, y, A_NOZOOM);
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
417 if (WinID >= 0) {
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
418 int top = 0, left = 0, w = *x, h = *y;
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
419 geometry(&top, &left, &w, &h, vo_screenwidth, vo_screenheight);
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
420 glViewport(top, left, w, h);
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
421 } else
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
422 glViewport( 0, 0, *x, *y );
10905
f448dcd93e6d dont fix things at the wrong place
attila
parents: 10902
diff changeset
423 }
2124
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
424
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
425 glMatrixMode(GL_PROJECTION);
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
426 glLoadIdentity();
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
427 glOrtho (0, 1, 1, 0, -1.0, 1.0);
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
428
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
429 glMatrixMode(GL_MODELVIEW);
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
430 glLoadIdentity();
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
431 }
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
432
2276
558a9397c250 improved gl, please check performance and correct display
sven
parents: 2249
diff changeset
433 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
434 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
435 }
558a9397c250 improved gl, please check performance and correct display
sven
parents: 2249
diff changeset
436
558a9397c250 improved gl, please check performance and correct display
sven
parents: 2249
diff changeset
437 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
438 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
439 }
558a9397c250 improved gl, please check performance and correct display
sven
parents: 2249
diff changeset
440
558a9397c250 improved gl, please check performance and correct display
sven
parents: 2249
diff changeset
441 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
442 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
443 }
558a9397c250 improved gl, please check performance and correct display
sven
parents: 2249
diff changeset
444
558a9397c250 improved gl, please check performance and correct display
sven
parents: 2249
diff changeset
445 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
446 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
447 }
558a9397c250 improved gl, please check performance and correct display
sven
parents: 2249
diff changeset
448
558a9397c250 improved gl, please check performance and correct display
sven
parents: 2249
diff changeset
449 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
450 }
558a9397c250 improved gl, please check performance and correct display
sven
parents: 2249
diff changeset
451
10880
ba9557e864c0 vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents: 10757
diff changeset
452 #ifdef GL_WIN32
ba9557e864c0 vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents: 10757
diff changeset
453
ba9557e864c0 vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents: 10757
diff changeset
454 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
455 if (!vo_w32_config(d_width, d_height, flags))
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
456 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
457
23651
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
458 if (vo_fs)
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
459 aspect(&d_width, &d_height, A_ZOOM);
10880
ba9557e864c0 vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents: 10757
diff changeset
460
23651
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
461 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
462 }
ba9557e864c0 vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents: 10757
diff changeset
463
ba9557e864c0 vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents: 10757
diff changeset
464 #else
ba9557e864c0 vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents: 10757
diff changeset
465
7964
143d730908ae here is a somewhat generic equalizer implementation for the X11 vo drivers
arpi
parents: 7931
diff changeset
466 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
467 {
23651
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
468 XVisualInfo template, *vi_list;
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
469 int vi_num, i, best_i, best_weight;
12709
bd90b887fb13 avoid visuals with low color-depth.
reimar
parents: 12448
diff changeset
470
23651
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
471 template.screen = scr;
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
472 vi_list = XGetVisualInfo(dpy, VisualScreenMask, &template, &vi_num);
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
473 if (!vi_list) return -1;
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
474 best_weight = 1000000; best_i=0;
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
475 for (i = 0; i < vi_num; i++) {
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
476 int val, res, w = 0;
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
477 /* of course, the visual must support OpenGL rendering... */
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
478 res = glXGetConfig(dpy, vi_list + i, GLX_USE_GL, &val);
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
479 if (res || val == False) continue;
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
480 /* also it must be doublebuffered ... */
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
481 res = glXGetConfig(dpy, vi_list + i, GLX_DOUBLEBUFFER, &val);
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
482 if (res || val == False) continue;
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
483 /* furthermore it must be RGBA (not color indexed) ... */
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
484 res = glXGetConfig(dpy, vi_list + i, GLX_RGBA, &val);
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
485 if (res || val == False) continue;
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
486 /* prefer less depth buffer size, */
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
487 res = glXGetConfig(dpy, vi_list + i, GLX_DEPTH_SIZE, &val);
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
488 if (res) continue;
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
489 w += val*2;
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
490 /* stencil buffer size */
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
491 res = glXGetConfig(dpy, vi_list + i, GLX_STENCIL_SIZE, &val);
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
492 if (res) continue;
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
493 w += val*2;
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
494 /* and colorbuffer alpha size */
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
495 res = glXGetConfig(dpy, vi_list + i, GLX_ALPHA_SIZE, &val);
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
496 if (res) continue;
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
497 w += val;
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
498 /* and finally, prefer DirectColor-ed visuals to allow color corrections */
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
499 if (vi_list[i].class != DirectColor) w += 100;
12709
bd90b887fb13 avoid visuals with low color-depth.
reimar
parents: 12448
diff changeset
500
23651
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
501 // avoid bad-looking visual with less that 8bit per color
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
502 res = glXGetConfig(dpy, vi_list + i, GLX_RED_SIZE, &val);
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
503 if (res) continue;
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
504 if (val < 8) w += 50;
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
505 res = glXGetConfig(dpy, vi_list + i, GLX_GREEN_SIZE, &val);
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
506 if (res) continue;
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
507 if (val < 8) w += 70;
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
508 res = glXGetConfig(dpy, vi_list + i, GLX_BLUE_SIZE, &val);
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
509 if (res) continue;
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
510 if (val < 8) w += 50;
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
511
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
512 if (w < best_weight) {
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
513 best_weight = w;
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
514 best_i = i;
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
515 }
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
516 }
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
517 if (best_weight < 1000000) *res_vi = vi_list[best_i];
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
518 XFree(vi_list);
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
519 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
520 }
143d730908ae here is a somewhat generic equalizer implementation for the X11 vo drivers
arpi
parents: 7931
diff changeset
521
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
522 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
523 XVisualInfo *vinfo, vinfo_buf;
15748
f75ba7f7b7b2 support -wid
reimar
parents: 15595
diff changeset
524 if (WinID >= 0) {
f75ba7f7b7b2 support -wid
reimar
parents: 15595
diff changeset
525 vo_window = WinID ? (Window)WinID : mRootWin;
16239
87da68468e6d Get events from -wid window.
reimar
parents: 16224
diff changeset
526 vo_x11_selectinput_witherr(mDisplay, vo_window,
87da68468e6d Get events from -wid window.
reimar
parents: 16224
diff changeset
527 StructureNotifyMask | KeyPressMask | PointerMotionMask |
87da68468e6d Get events from -wid window.
reimar
parents: 16224
diff changeset
528 ButtonPressMask | ButtonReleaseMask | ExposureMask);
15748
f75ba7f7b7b2 support -wid
reimar
parents: 15595
diff changeset
529 return 0;
f75ba7f7b7b2 support -wid
reimar
parents: 15595
diff changeset
530 }
23651
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
531 vinfo = choose_glx_visual(mDisplay,mScreen,&vinfo_buf) < 0 ? NULL : &vinfo_buf;
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
532 if (vinfo == NULL) {
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
533 mp_msg(MSGT_VO, MSGL_FATAL, "[gl2] no GLX support present\n");
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
534 return -1;
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
535 }
2124
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
536
23655
00aa61cde84a Make X11 window creation and (with -fixed-vo) management simpler and more
reimar
parents: 23651
diff changeset
537 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
538 flags, vo_x11_create_colormap(vinfo), "gl2", title);
2124
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
539
23651
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
540 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
541 }
18949
51aeef9ada52 Improve windows gui support
reimar
parents: 18742
diff changeset
542 #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
543
12382
a830eebf6693 GUI support
reimar
parents: 12035
diff changeset
544 #ifdef HAVE_NEW_GUI
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
545 static int config_glx_gui(uint32_t d_width, uint32_t d_height) {
12382
a830eebf6693 GUI support
reimar
parents: 12035
diff changeset
546 guiGetEvent( guiSetShVideo,0 ); // the GUI will set up / resize the window
a830eebf6693 GUI support
reimar
parents: 12035
diff changeset
547 return 0;
a830eebf6693 GUI support
reimar
parents: 12035
diff changeset
548 }
a830eebf6693 GUI support
reimar
parents: 12035
diff changeset
549 #endif
a830eebf6693 GUI support
reimar
parents: 12035
diff changeset
550
10880
ba9557e864c0 vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents: 10757
diff changeset
551 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
552 {
16488
3191dcb27a12 hardware color-space conversion for vo_gl and vo_gl2
reimar
parents: 16475
diff changeset
553 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
554 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
555 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
556
23651
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
557 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
558 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
559 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
560 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
561 glEnable (GL_TEXTURE_2D);
16488
3191dcb27a12 hardware color-space conversion for vo_gl and vo_gl2
reimar
parents: 16475
diff changeset
562 if (image_format == IMGFMT_YV12) {
3191dcb27a12 hardware color-space conversion for vo_gl and vo_gl2
reimar
parents: 16475
diff changeset
563 switch (use_yuv) {
3191dcb27a12 hardware color-space conversion for vo_gl and vo_gl2
reimar
parents: 16475
diff changeset
564 case YUV_CONVERSION_FRAGMENT_LOOKUP:
3191dcb27a12 hardware color-space conversion for vo_gl and vo_gl2
reimar
parents: 16475
diff changeset
565 glGenTextures(1, &lookupTex);
3191dcb27a12 hardware color-space conversion for vo_gl and vo_gl2
reimar
parents: 16475
diff changeset
566 ActiveTexture(GL_TEXTURE3);
3191dcb27a12 hardware color-space conversion for vo_gl and vo_gl2
reimar
parents: 16475
diff changeset
567 glBindTexture(GL_TEXTURE_2D, lookupTex);
3191dcb27a12 hardware color-space conversion for vo_gl and vo_gl2
reimar
parents: 16475
diff changeset
568 ActiveTexture(GL_TEXTURE0);
3191dcb27a12 hardware color-space conversion for vo_gl and vo_gl2
reimar
parents: 16475
diff changeset
569 glBindTexture(GL_TEXTURE_2D, 0);
3191dcb27a12 hardware color-space conversion for vo_gl and vo_gl2
reimar
parents: 16475
diff changeset
570 case YUV_CONVERSION_FRAGMENT_POW:
3191dcb27a12 hardware color-space conversion for vo_gl and vo_gl2
reimar
parents: 16475
diff changeset
571 case YUV_CONVERSION_FRAGMENT:
18584
212999db0203 Avoid crash with e.g. -vo gl2:yuv=2 when no fragment program functions are available
reimar
parents: 18116
diff changeset
572 if (!GenPrograms || !BindProgram) {
212999db0203 Avoid crash with e.g. -vo gl2:yuv=2 when no fragment program functions are available
reimar
parents: 18116
diff changeset
573 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
574 break;
212999db0203 Avoid crash with e.g. -vo gl2:yuv=2 when no fragment program functions are available
reimar
parents: 18116
diff changeset
575 }
16488
3191dcb27a12 hardware color-space conversion for vo_gl and vo_gl2
reimar
parents: 16475
diff changeset
576 GenPrograms(1, &fragprog);
3191dcb27a12 hardware color-space conversion for vo_gl and vo_gl2
reimar
parents: 16475
diff changeset
577 BindProgram(GL_FRAGMENT_PROGRAM, fragprog);
3191dcb27a12 hardware color-space conversion for vo_gl and vo_gl2
reimar
parents: 16475
diff changeset
578 break;
3191dcb27a12 hardware color-space conversion for vo_gl and vo_gl2
reimar
parents: 16475
diff changeset
579 }
18619
106a0c366002 Reworked YUV2RGB fragment program setup in preparation for upcoming patches
reimar
parents: 18584
diff changeset
580 glSetupYUVConversion(GL_TEXTURE_2D, use_yuv, 0.0, 1.0, 0.0, 1.0, 1.0, 1.0, 1.0,
106a0c366002 Reworked YUV2RGB fragment program setup in preparation for upcoming patches
reimar
parents: 18584
diff changeset
581 texture_width, texture_height);
16488
3191dcb27a12 hardware color-space conversion for vo_gl and vo_gl2
reimar
parents: 16475
diff changeset
582 }
10880
ba9557e864c0 vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents: 10757
diff changeset
583
ba9557e864c0 vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents: 10757
diff changeset
584 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
585 gl_set_bilinear(1);
23651
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
586
14078
c4033dcb986f More similar code from gl and gl2 moved to gl_common
reimar
parents: 13926
diff changeset
587 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
588 image_bpp, image_bytes,
14078
c4033dcb986f More similar code from gl and gl2 moved to gl_common
reimar
parents: 13926
diff changeset
589 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
590 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
591
11087
b427c796638b * clear window on fullscreen switch
attila
parents: 11000
diff changeset
592 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
593
ba9557e864c0 vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents: 10757
diff changeset
594 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
595 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
596
13926
b7ba9bcd1916 Avoid drawing before transformation matrices are set up.
reimar
parents: 13877
diff changeset
597 drawTextureDisplay ();
b7ba9bcd1916 Avoid drawing before transformation matrices are set up.
reimar
parents: 13877
diff changeset
598
10880
ba9557e864c0 vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents: 10757
diff changeset
599 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
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
ba9557e864c0 vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents: 10757
diff changeset
602 /* 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
603 * 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
604 */
23651
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
605 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
606 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
607 {
23651
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
608 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
609
23651
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
610 image_height = height;
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
611 image_width = width;
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
612 image_format = format;
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
613
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
614 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
615
18949
51aeef9ada52 Improve windows gui support
reimar
parents: 18742
diff changeset
616 #ifdef HAVE_NEW_GUI
23651
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
617 if (use_gui) {
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
618 if (config_glx_gui(d_width, d_height) == -1)
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
619 return -1;
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
620 }
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
621 #ifndef GL_WIN32
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
622 else
18949
51aeef9ada52 Improve windows gui support
reimar
parents: 18742
diff changeset
623 #endif
12382
a830eebf6693 GUI support
reimar
parents: 12035
diff changeset
624 #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
625 #ifdef GL_WIN32
23651
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
626 if (config_w32(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
627 #else
23651
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
628 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
629 #endif
23651
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
630 return -1;
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
631
14142
f0c1ee83b216 Improving gl2 under windows, moving some functionality to gl_common
reimar
parents: 14090
diff changeset
632 setGlWindow(&gl_vinfo, &gl_context, vo_window);
f0c1ee83b216 Improving gl2 under windows, moving some functionality to gl_common
reimar
parents: 14090
diff changeset
633
2276
558a9397c250 improved gl, please check performance and correct display
sven
parents: 2249
diff changeset
634 glVersion = glGetString(GL_VERSION);
558a9397c250 improved gl, please check performance and correct display
sven
parents: 2249
diff changeset
635
11988
ccb15c72f331 printf -> mp_msg
attila
parents: 11542
diff changeset
636 mp_msg(MSGT_VO, MSGL_V, "[gl2] OpenGL Driver Information:\n");
23651
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
637 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
638 glGetString(GL_VENDOR), glGetString(GL_RENDERER), glVersion);
2276
558a9397c250 improved gl, please check performance and correct display
sven
parents: 2249
diff changeset
639
23651
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
640 if(glVersion[0]>'1' || (glVersion[0]=='1' && glVersion[2]>='2') )
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
641 isGL12 = GL_TRUE;
2276
558a9397c250 improved gl, please check performance and correct display
sven
parents: 2249
diff changeset
642 else
23651
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
643 isGL12 = GL_FALSE;
2124
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
644
23651
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
645 if(isGL12) {
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
646 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
647 } else {
23651
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
648 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
649 }
558a9397c250 improved gl, please check performance and correct display
sven
parents: 2249
diff changeset
650
16488
3191dcb27a12 hardware color-space conversion for vo_gl and vo_gl2
reimar
parents: 16475
diff changeset
651 glFindFormat(format, &image_bpp, &gl_internal_format, &gl_bitmap_format, &gl_bitmap_type);
2124
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
652
2276
558a9397c250 improved gl, please check performance and correct display
sven
parents: 2249
diff changeset
653 image_bytes=(image_bpp+7)/8;
558a9397c250 improved gl, please check performance and correct display
sven
parents: 2249
diff changeset
654
558a9397c250 improved gl, please check performance and correct display
sven
parents: 2249
diff changeset
655 draw_alpha_fnc=draw_alpha_null;
558a9397c250 improved gl, please check performance and correct display
sven
parents: 2249
diff changeset
656
23651
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
657 switch(image_bpp) {
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
658 case 15:
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
659 draw_alpha_fnc=draw_alpha_15; break;
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
660 case 16:
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
661 draw_alpha_fnc=draw_alpha_16; break;
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
662 case 24:
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
663 draw_alpha_fnc=draw_alpha_24; break;
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
664 case 32:
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
665 draw_alpha_fnc=draw_alpha_32; break;
2276
558a9397c250 improved gl, please check performance and correct display
sven
parents: 2249
diff changeset
666 }
558a9397c250 improved gl, please check performance and correct display
sven
parents: 2249
diff changeset
667
15748
f75ba7f7b7b2 support -wid
reimar
parents: 15595
diff changeset
668 if (initGl(vo_dwidth, vo_dheight) == -1)
23651
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
669 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
670 #ifndef GL_WIN32
23651
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
671 if (vo_ontop) vo_x11_setlayer(mDisplay,vo_window, vo_ontop);
10880
ba9557e864c0 vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents: 10757
diff changeset
672 #endif
2124
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
673
23651
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
674 return 0;
2124
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
675 }
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
676
2276
558a9397c250 improved gl, please check performance and correct display
sven
parents: 2249
diff changeset
677 static int gl_handlekey(int key)
558a9397c250 improved gl, please check performance and correct display
sven
parents: 2249
diff changeset
678 {
23651
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
679 if(key=='a'||key=='A') {
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
680 gl_set_antialias(!gl_antialias);
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
681 return 0;
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
682 } else if(key=='b'||key=='B') {
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
683 gl_set_bilinear(-1);
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
684 return 0;
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
685 }
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
686 return 1;
2276
558a9397c250 improved gl, please check performance and correct display
sven
parents: 2249
diff changeset
687 }
2124
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
688
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
689 static void check_events(void)
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
690 {
23651
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
691 int e;
17116
724353364790 Get rid of most #ifdefs
reimar
parents: 17006
diff changeset
692 #ifndef GL_WIN32
23651
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
693 XEvent Event;
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
694 char buf[100];
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
695 KeySym keySym;
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
696 int key;
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
697 static XComposeStatus stat;
2276
558a9397c250 improved gl, please check performance and correct display
sven
parents: 2249
diff changeset
698
23651
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
699 while ( XPending( mDisplay ) ) {
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
700 XNextEvent( mDisplay,&Event );
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
701 if( Event.type == KeyPress ) {
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
702 XLookupString( &Event.xkey,buf,sizeof(buf),&keySym,&stat );
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
703 key = (keySym&0xff00) != 0 ? (keySym&0x00ff) + 256 : keySym;
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
704 if(gl_handlekey(key))
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
705 XPutBackEvent(mDisplay, &Event);
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
706 break;
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
707 } else {
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
708 XPutBackEvent(mDisplay, &Event);
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
709 break;
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
710 }
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
711 }
17116
724353364790 Get rid of most #ifdefs
reimar
parents: 17006
diff changeset
712 #endif
23651
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
713 e=vo_check_events();
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
714 if(e&VO_EVENT_RESIZE) resize(&vo_dwidth, &vo_dheight);
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
715 if(e&VO_EVENT_EXPOSE && int_pause) flip_page();
2124
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
716 }
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
717
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
718 static void draw_osd(void)
12446
59cd81e2e1ef fixed memory leak and removed unnecessary static variable
reimar
parents: 12394
diff changeset
719 {
59cd81e2e1ef fixed memory leak and removed unnecessary static variable
reimar
parents: 12394
diff changeset
720 if (ImageData)
59cd81e2e1ef fixed memory leak and removed unnecessary static variable
reimar
parents: 12394
diff changeset
721 vo_draw_text(image_width,image_height,draw_alpha_fnc);
59cd81e2e1ef fixed memory leak and removed unnecessary static variable
reimar
parents: 12394
diff changeset
722 }
2124
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
723
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
724 static void
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
725 flip_page(void)
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
726 {
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
727 drawTextureDisplay();
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
728
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
729 // glFlush();
16475
55b04cfc255c Allow disabling the glFinish call
reimar
parents: 16303
diff changeset
730 if (use_glFinish)
2124
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
731 glFinish();
17116
724353364790 Get rid of most #ifdefs
reimar
parents: 17006
diff changeset
732 swapGlBuffers();
12394
b3ff1a576b8c clear buffer after (glX)SwapBuffers in fullscreen to avoid flickering borders
reimar
parents: 12382
diff changeset
733
b3ff1a576b8c clear buffer after (glX)SwapBuffers in fullscreen to avoid flickering borders
reimar
parents: 12382
diff changeset
734 if (vo_fs) // Avoid flickering borders in fullscreen mode
b3ff1a576b8c clear buffer after (glX)SwapBuffers in fullscreen to avoid flickering borders
reimar
parents: 12382
diff changeset
735 glClear (GL_COLOR_BUFFER_BIT);
2124
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
736 }
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
737
16171
fd51fd1ff231 Fix the return types of all (six) libvo API functions. Used to be uint32_t, but
ivo
parents: 15748
diff changeset
738 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
739 {
16583
84356c6d997b Fix crashes and green border when using YV12 input format
reimar
parents: 16488
diff changeset
740 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
741 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
742 int rem_h = h;
3191dcb27a12 hardware color-space conversion for vo_gl and vo_gl2
reimar
parents: 16475
diff changeset
743 struct TexSquare *texline = &texgrid[y / texture_height * texnumx];
3191dcb27a12 hardware color-space conversion for vo_gl and vo_gl2
reimar
parents: 16475
diff changeset
744 int subtex_y = y % texture_width;
3191dcb27a12 hardware color-space conversion for vo_gl and vo_gl2
reimar
parents: 16475
diff changeset
745 while (rem_h > 0) {
3191dcb27a12 hardware color-space conversion for vo_gl and vo_gl2
reimar
parents: 16475
diff changeset
746 int rem_w = w;
3191dcb27a12 hardware color-space conversion for vo_gl and vo_gl2
reimar
parents: 16475
diff changeset
747 struct TexSquare *tsq = &texline[x / texture_width];
3191dcb27a12 hardware color-space conversion for vo_gl and vo_gl2
reimar
parents: 16475
diff changeset
748 int subtex_x = x % texture_height;
3191dcb27a12 hardware color-space conversion for vo_gl and vo_gl2
reimar
parents: 16475
diff changeset
749 int subtex_h = rem_h;
3191dcb27a12 hardware color-space conversion for vo_gl and vo_gl2
reimar
parents: 16475
diff changeset
750 if (subtex_y + subtex_h > texture_height)
3191dcb27a12 hardware color-space conversion for vo_gl and vo_gl2
reimar
parents: 16475
diff changeset
751 subtex_h = texture_height - subtex_y;
3191dcb27a12 hardware color-space conversion for vo_gl and vo_gl2
reimar
parents: 16475
diff changeset
752 while (rem_w > 0) {
3191dcb27a12 hardware color-space conversion for vo_gl and vo_gl2
reimar
parents: 16475
diff changeset
753 int subtex_w = rem_w;
3191dcb27a12 hardware color-space conversion for vo_gl and vo_gl2
reimar
parents: 16475
diff changeset
754 if (subtex_x + subtex_w > texture_width)
3191dcb27a12 hardware color-space conversion for vo_gl and vo_gl2
reimar
parents: 16475
diff changeset
755 subtex_w = texture_width - subtex_x;
3191dcb27a12 hardware color-space conversion for vo_gl and vo_gl2
reimar
parents: 16475
diff changeset
756 ActiveTexture(GL_TEXTURE0);
3191dcb27a12 hardware color-space conversion for vo_gl and vo_gl2
reimar
parents: 16475
diff changeset
757 glBindTexture(GL_TEXTURE_2D, tsq->texobj);
3191dcb27a12 hardware color-space conversion for vo_gl and vo_gl2
reimar
parents: 16475
diff changeset
758 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
759 yptr, ystride, subtex_x, subtex_y,
16488
3191dcb27a12 hardware color-space conversion for vo_gl and vo_gl2
reimar
parents: 16475
diff changeset
760 subtex_w, subtex_h, 0);
3191dcb27a12 hardware color-space conversion for vo_gl and vo_gl2
reimar
parents: 16475
diff changeset
761 ActiveTexture(GL_TEXTURE1);
3191dcb27a12 hardware color-space conversion for vo_gl and vo_gl2
reimar
parents: 16475
diff changeset
762 glBindTexture(GL_TEXTURE_2D, tsq->uvtexobjs[0]);
3191dcb27a12 hardware color-space conversion for vo_gl and vo_gl2
reimar
parents: 16475
diff changeset
763 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
764 uptr, ustride, subtex_x / 2, subtex_y / 2,
16488
3191dcb27a12 hardware color-space conversion for vo_gl and vo_gl2
reimar
parents: 16475
diff changeset
765 subtex_w / 2, subtex_h / 2, 0);
3191dcb27a12 hardware color-space conversion for vo_gl and vo_gl2
reimar
parents: 16475
diff changeset
766 ActiveTexture(GL_TEXTURE2);
3191dcb27a12 hardware color-space conversion for vo_gl and vo_gl2
reimar
parents: 16475
diff changeset
767 glBindTexture(GL_TEXTURE_2D, tsq->uvtexobjs[1]);
3191dcb27a12 hardware color-space conversion for vo_gl and vo_gl2
reimar
parents: 16475
diff changeset
768 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
769 vptr, vstride, subtex_x / 2, subtex_y / 2,
16488
3191dcb27a12 hardware color-space conversion for vo_gl and vo_gl2
reimar
parents: 16475
diff changeset
770 subtex_w / 2, subtex_h / 2, 0);
3191dcb27a12 hardware color-space conversion for vo_gl and vo_gl2
reimar
parents: 16475
diff changeset
771 subtex_x = 0;
16583
84356c6d997b Fix crashes and green border when using YV12 input format
reimar
parents: 16488
diff changeset
772 yptr += subtex_w;
84356c6d997b Fix crashes and green border when using YV12 input format
reimar
parents: 16488
diff changeset
773 uptr += subtex_w / 2;
84356c6d997b Fix crashes and green border when using YV12 input format
reimar
parents: 16488
diff changeset
774 vptr += subtex_w / 2;
16488
3191dcb27a12 hardware color-space conversion for vo_gl and vo_gl2
reimar
parents: 16475
diff changeset
775 tsq++;
3191dcb27a12 hardware color-space conversion for vo_gl and vo_gl2
reimar
parents: 16475
diff changeset
776 rem_w -= subtex_w;
3191dcb27a12 hardware color-space conversion for vo_gl and vo_gl2
reimar
parents: 16475
diff changeset
777 }
3191dcb27a12 hardware color-space conversion for vo_gl and vo_gl2
reimar
parents: 16475
diff changeset
778 subtex_y = 0;
16583
84356c6d997b Fix crashes and green border when using YV12 input format
reimar
parents: 16488
diff changeset
779 yptr += subtex_h * ystride - w;
84356c6d997b Fix crashes and green border when using YV12 input format
reimar
parents: 16488
diff changeset
780 uptr += subtex_h / 2 * ustride - w / 2;
84356c6d997b Fix crashes and green border when using YV12 input format
reimar
parents: 16488
diff changeset
781 vptr += subtex_h / 2 * vstride - w / 2;
16488
3191dcb27a12 hardware color-space conversion for vo_gl and vo_gl2
reimar
parents: 16475
diff changeset
782 texline += texnumx;
3191dcb27a12 hardware color-space conversion for vo_gl and vo_gl2
reimar
parents: 16475
diff changeset
783 rem_h -= subtex_h;
3191dcb27a12 hardware color-space conversion for vo_gl and vo_gl2
reimar
parents: 16475
diff changeset
784 }
3191dcb27a12 hardware color-space conversion for vo_gl and vo_gl2
reimar
parents: 16475
diff changeset
785 ActiveTexture(GL_TEXTURE0);
2276
558a9397c250 improved gl, please check performance and correct display
sven
parents: 2249
diff changeset
786 return 0;
2124
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
787 }
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
788
16171
fd51fd1ff231 Fix the return types of all (six) libvo API functions. Used to be uint32_t, but
ivo
parents: 15748
diff changeset
789 static int
2124
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
790 draw_frame(uint8_t *src[])
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
791 {
16488
3191dcb27a12 hardware color-space conversion for vo_gl and vo_gl2
reimar
parents: 16475
diff changeset
792 if (image_format == IMGFMT_YV12) {
3191dcb27a12 hardware color-space conversion for vo_gl and vo_gl2
reimar
parents: 16475
diff changeset
793 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
794 return 0;
3191dcb27a12 hardware color-space conversion for vo_gl and vo_gl2
reimar
parents: 16475
diff changeset
795 }
16214
ede5b4afd262 Helper function for drawing texture and general cleanup of vo_gl2.c
reimar
parents: 16171
diff changeset
796 ImageData=(unsigned char *)src[0];
ede5b4afd262 Helper function for drawing texture and general cleanup of vo_gl2.c
reimar
parents: 16171
diff changeset
797 resetTexturePointers(ImageData);
23649
404d35495770 Remove overly complex and unused per-subtexture "dirty" handling
reimar
parents: 23648
diff changeset
798 texdirty = 1;
16214
ede5b4afd262 Helper function for drawing texture and general cleanup of vo_gl2.c
reimar
parents: 16171
diff changeset
799 return 0;
2124
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
800 }
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
801
16171
fd51fd1ff231 Fix the return types of all (six) libvo API functions. Used to be uint32_t, but
ivo
parents: 15748
diff changeset
802 static int
2124
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
803 query_format(uint32_t format)
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
804 {
23651
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
805 switch(format) {
16488
3191dcb27a12 hardware color-space conversion for vo_gl and vo_gl2
reimar
parents: 16475
diff changeset
806 case IMGFMT_YV12:
3191dcb27a12 hardware color-space conversion for vo_gl and vo_gl2
reimar
parents: 16475
diff changeset
807 if (use_yuv)
3191dcb27a12 hardware color-space conversion for vo_gl and vo_gl2
reimar
parents: 16475
diff changeset
808 return VFCAP_CSP_SUPPORTED | VFCAP_CSP_SUPPORTED_BY_HW | VFCAP_OSD |
3191dcb27a12 hardware color-space conversion for vo_gl and vo_gl2
reimar
parents: 16475
diff changeset
809 VFCAP_HWSCALE_UP | VFCAP_HWSCALE_DOWN | VFCAP_ACCEPT_STRIDE;
3191dcb27a12 hardware color-space conversion for vo_gl and vo_gl2
reimar
parents: 16475
diff changeset
810 break;
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
811 #ifdef SYS_DARWIN
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
812 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
813 #else
10143
fd3cbeb388f0 removed broken swscaler support, added runtime fullscreens switching ability, and some other general cleanup thingies
alex
parents: 8254
diff changeset
814 case IMGFMT_RGB24:
fd3cbeb388f0 removed broken swscaler support, added runtime fullscreens switching ability, and some other general cleanup thingies
alex
parents: 8254
diff changeset
815 case IMGFMT_BGR24:
fd3cbeb388f0 removed broken swscaler support, added runtime fullscreens switching ability, and some other general cleanup thingies
alex
parents: 8254
diff changeset
816 // case IMGFMT_RGB32:
fd3cbeb388f0 removed broken swscaler support, added runtime fullscreens switching ability, and some other general cleanup thingies
alex
parents: 8254
diff changeset
817 // 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
818 #endif
6212
2001affedb75 query_format revised
alex
parents: 6095
diff changeset
819 return VFCAP_CSP_SUPPORTED | VFCAP_CSP_SUPPORTED_BY_HW | VFCAP_OSD;
23651
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
820 }
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
821 return 0;
2124
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
822 }
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
823
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
824
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
825 static void
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
826 uninit(void)
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
827 {
6095
891cff8aba60 some cleanup, gl/gl2 updated to use vo_window
arpi
parents: 5651
diff changeset
828 if ( !vo_config_count ) return;
13871
8298dc8ca78b more fullscreen fixes and gl2 uses setGlWindow.
reimar
parents: 13787
diff changeset
829 releaseGlContext(&gl_vinfo, &gl_context);
13540
02c0d4371573 fixed memleak, especially for fixed-vo.
reimar
parents: 12895
diff changeset
830 if (texgrid) {
02c0d4371573 fixed memleak, especially for fixed-vo.
reimar
parents: 12895
diff changeset
831 free(texgrid);
02c0d4371573 fixed memleak, especially for fixed-vo.
reimar
parents: 12895
diff changeset
832 texgrid = NULL;
02c0d4371573 fixed memleak, especially for fixed-vo.
reimar
parents: 12895
diff changeset
833 }
17116
724353364790 Get rid of most #ifdefs
reimar
parents: 17006
diff changeset
834 vo_uninit();
2124
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
835 }
4352
ed5b85b713a3 Extensions for video accelerated architecture
nick
parents: 4017
diff changeset
836
16475
55b04cfc255c Allow disabling the glFinish call
reimar
parents: 16303
diff changeset
837 static opt_t subopts[] = {
16488
3191dcb27a12 hardware color-space conversion for vo_gl and vo_gl2
reimar
parents: 16475
diff changeset
838 {"yuv", OPT_ARG_INT, &use_yuv, (opt_test_f)int_non_neg},
16475
55b04cfc255c Allow disabling the glFinish call
reimar
parents: 16303
diff changeset
839 {"glfinish", OPT_ARG_BOOL, &use_glFinish, NULL},
55b04cfc255c Allow disabling the glFinish call
reimar
parents: 16303
diff changeset
840 {NULL}
55b04cfc255c Allow disabling the glFinish call
reimar
parents: 16303
diff changeset
841 };
55b04cfc255c Allow disabling the glFinish call
reimar
parents: 16303
diff changeset
842
16171
fd51fd1ff231 Fix the return types of all (six) libvo API functions. Used to be uint32_t, but
ivo
parents: 15748
diff changeset
843 static int preinit(const char *arg)
4352
ed5b85b713a3 Extensions for video accelerated architecture
nick
parents: 4017
diff changeset
844 {
16475
55b04cfc255c Allow disabling the glFinish call
reimar
parents: 16303
diff changeset
845 // set defaults
16488
3191dcb27a12 hardware color-space conversion for vo_gl and vo_gl2
reimar
parents: 16475
diff changeset
846 use_yuv = 0;
16475
55b04cfc255c Allow disabling the glFinish call
reimar
parents: 16303
diff changeset
847 use_glFinish = 1;
55b04cfc255c Allow disabling the glFinish call
reimar
parents: 16303
diff changeset
848 if (subopt_parse(arg, subopts) != 0) {
55b04cfc255c Allow disabling the glFinish call
reimar
parents: 16303
diff changeset
849 mp_msg(MSGT_VO, MSGL_FATAL,
55b04cfc255c Allow disabling the glFinish call
reimar
parents: 16303
diff changeset
850 "\n-vo gl2 command line help:\n"
55b04cfc255c Allow disabling the glFinish call
reimar
parents: 16303
diff changeset
851 "Example: mplayer -vo gl2:noglfinish\n"
55b04cfc255c Allow disabling the glFinish call
reimar
parents: 16303
diff changeset
852 "\nOptions:\n"
55b04cfc255c Allow disabling the glFinish call
reimar
parents: 16303
diff changeset
853 " noglfinish\n"
55b04cfc255c Allow disabling the glFinish call
reimar
parents: 16303
diff changeset
854 " 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
855 " yuv=<n>\n"
3191dcb27a12 hardware color-space conversion for vo_gl and vo_gl2
reimar
parents: 16475
diff changeset
856 " 0: use software YUV to RGB conversion.\n"
16626
b36b5bb95a9b documentation update.
reimar
parents: 16594
diff changeset
857 " 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
858 " 2: use fragment program.\n"
3191dcb27a12 hardware color-space conversion for vo_gl and vo_gl2
reimar
parents: 16475
diff changeset
859 " 3: use fragment program with gamma correction.\n"
3191dcb27a12 hardware color-space conversion for vo_gl and vo_gl2
reimar
parents: 16475
diff changeset
860 " 4: use fragment program with gamma correction via lookup.\n"
16626
b36b5bb95a9b documentation update.
reimar
parents: 16594
diff changeset
861 " 5: use ATI-specific method (for older cards).\n"
16475
55b04cfc255c Allow disabling the glFinish call
reimar
parents: 16303
diff changeset
862 "\n" );
55b04cfc255c Allow disabling the glFinish call
reimar
parents: 16303
diff changeset
863 return -1;
55b04cfc255c Allow disabling the glFinish call
reimar
parents: 16303
diff changeset
864 }
7931
48c71b6c7389 vo_init() moved to/fixed in preinit()
arpi
parents: 7763
diff changeset
865 if( !vo_init() ) return -1; // Can't open X11
4737
32e1f5042f65 I don't like such reports: '-vo dga:vidix or -vo x11:vidix works fine for me'
nick
parents: 4658
diff changeset
866 return 0;
4352
ed5b85b713a3 Extensions for video accelerated architecture
nick
parents: 4017
diff changeset
867 }
ed5b85b713a3 Extensions for video accelerated architecture
nick
parents: 4017
diff changeset
868
16171
fd51fd1ff231 Fix the return types of all (six) libvo API functions. Used to be uint32_t, but
ivo
parents: 15748
diff changeset
869 static int control(uint32_t request, void *data, ...)
4352
ed5b85b713a3 Extensions for video accelerated architecture
nick
parents: 4017
diff changeset
870 {
4592
5fbfd8545c3b query_ stuff replaced by new control() - patch by David Holm
arpi
parents: 4440
diff changeset
871 switch (request) {
23651
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
872 case VOCTRL_PAUSE: return (int_pause=1);
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
873 case VOCTRL_RESUME: return (int_pause=0);
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
874 case VOCTRL_QUERY_FORMAT:
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
875 return query_format(*((uint32_t*)data));
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
876 case VOCTRL_GUISUPPORT:
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
877 return VO_TRUE;
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
878 case VOCTRL_ONTOP:
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
879 vo_ontop();
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
880 return VO_TRUE;
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
881 case VOCTRL_FULLSCREEN:
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
882 vo_fullscreen();
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
883 if (setGlWindow(&gl_vinfo, &gl_context, vo_window) == SET_WINDOW_REINIT)
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
884 initGl(vo_dwidth, vo_dheight);
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
885 resize(&vo_dwidth, &vo_dheight);
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
886 return VO_TRUE;
17006
852499addaa8 Enable border toggling for gl and gl2 under windows.
reimar
parents: 16626
diff changeset
887 #ifdef GL_WIN32
23651
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
888 case VOCTRL_BORDER:
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
889 vo_w32_border();
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
890 return VO_TRUE;
17006
852499addaa8 Enable border toggling for gl and gl2 under windows.
reimar
parents: 16626
diff changeset
891 #endif
23651
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
892 case VOCTRL_GET_PANSCAN:
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
893 return VO_TRUE;
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
894 case VOCTRL_SET_PANSCAN:
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
895 resize (&vo_dwidth, &vo_dheight);
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
896 return VO_TRUE;
10880
ba9557e864c0 vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents: 10757
diff changeset
897 #ifndef GL_WIN32
23651
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
898 case VOCTRL_SET_EQUALIZER:
7964
143d730908ae here is a somewhat generic equalizer implementation for the X11 vo drivers
arpi
parents: 7931
diff changeset
899 {
143d730908ae here is a somewhat generic equalizer implementation for the X11 vo drivers
arpi
parents: 7931
diff changeset
900 va_list ap;
143d730908ae here is a somewhat generic equalizer implementation for the X11 vo drivers
arpi
parents: 7931
diff changeset
901 int value;
23651
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
902
7964
143d730908ae here is a somewhat generic equalizer implementation for the X11 vo drivers
arpi
parents: 7931
diff changeset
903 va_start(ap, data);
143d730908ae here is a somewhat generic equalizer implementation for the X11 vo drivers
arpi
parents: 7931
diff changeset
904 value = va_arg(ap, int);
143d730908ae here is a somewhat generic equalizer implementation for the X11 vo drivers
arpi
parents: 7931
diff changeset
905 va_end(ap);
143d730908ae here is a somewhat generic equalizer implementation for the X11 vo drivers
arpi
parents: 7931
diff changeset
906 return vo_x11_set_equalizer(data, value);
23651
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
907 }
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
908 case VOCTRL_GET_EQUALIZER:
7964
143d730908ae here is a somewhat generic equalizer implementation for the X11 vo drivers
arpi
parents: 7931
diff changeset
909 {
143d730908ae here is a somewhat generic equalizer implementation for the X11 vo drivers
arpi
parents: 7931
diff changeset
910 va_list ap;
143d730908ae here is a somewhat generic equalizer implementation for the X11 vo drivers
arpi
parents: 7931
diff changeset
911 int *value;
23651
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
912
7964
143d730908ae here is a somewhat generic equalizer implementation for the X11 vo drivers
arpi
parents: 7931
diff changeset
913 va_start(ap, data);
143d730908ae here is a somewhat generic equalizer implementation for the X11 vo drivers
arpi
parents: 7931
diff changeset
914 value = va_arg(ap, int *);
143d730908ae here is a somewhat generic equalizer implementation for the X11 vo drivers
arpi
parents: 7931
diff changeset
915 va_end(ap);
143d730908ae here is a somewhat generic equalizer implementation for the X11 vo drivers
arpi
parents: 7931
diff changeset
916 return vo_x11_get_equalizer(data, value);
143d730908ae here is a somewhat generic equalizer implementation for the X11 vo drivers
arpi
parents: 7931
diff changeset
917 }
10880
ba9557e864c0 vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents: 10757
diff changeset
918 #endif
23651
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
919 case VOCTRL_UPDATE_SCREENINFO:
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
920 update_xinerama_info();
604f56414432 Lots of cosmetics for gl2
reimar
parents: 23650
diff changeset
921 return VO_TRUE;
4592
5fbfd8545c3b query_ stuff replaced by new control() - patch by David Holm
arpi
parents: 4440
diff changeset
922 }
5fbfd8545c3b query_ stuff replaced by new control() - patch by David Holm
arpi
parents: 4440
diff changeset
923 return VO_NOTIMPL;
4352
ed5b85b713a3 Extensions for video accelerated architecture
nick
parents: 4017
diff changeset
924 }