Mercurial > mplayer.hg
annotate libvo/vo_gl2.c @ 13981:3e82594ec231
correct encoding
author | diego |
---|---|
date | Fri, 19 Nov 2004 18:34:33 +0000 |
parents | b7ba9bcd1916 |
children | c4033dcb986f |
rev | line source |
---|---|
2124 | 1 /* |
2 * video_out_gl.c, X11/OpenGL interface | |
3 * based on video_out_x11 by Aaron Holtzman, | |
4 * and WS opengl window manager by Pontscho/Fresh! | |
5 */ | |
6 | |
7 #include <stdio.h> | |
8 #include <stdlib.h> | |
9 #include <string.h> | |
10 #include <math.h> | |
4737
32e1f5042f65
I don't like such reports: '-vo dga:vidix or -vo x11:vidix works fine for me'
nick
parents:
4658
diff
changeset
|
11 #include <errno.h> |
2124 | 12 |
13 #include "config.h" | |
11087 | 14 #include "mp_msg.h" |
2124 | 15 #include "video_out.h" |
16 #include "video_out_internal.h" | |
8123
9fc45fe0d444
*HUGE* set of compiler warning fixes, unused variables removal
arpi
parents:
7964
diff
changeset
|
17 #include "sub.h" |
2124 | 18 |
12382 | 19 #ifdef HAVE_NEW_GUI |
13787
e047e70a9767
Handle "xxx.h" vs "../xxx.h" include paths in a consistent way.
diego
parents:
13653
diff
changeset
|
20 #include "Gui/interface.h" |
12382 | 21 #endif |
22 | |
10880
ba9557e864c0
vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
10757
diff
changeset
|
23 #include <GL/gl.h> |
ba9557e864c0
vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
10757
diff
changeset
|
24 #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
|
25 #include <windows.h> |
ba9557e864c0
vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
10757
diff
changeset
|
26 #include <GL/glext.h> |
ba9557e864c0
vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
10757
diff
changeset
|
27 #else |
ba9557e864c0
vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
10757
diff
changeset
|
28 #include <X11/Xlib.h> |
ba9557e864c0
vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
10757
diff
changeset
|
29 #include <X11/Xutil.h> |
ba9557e864c0
vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
10757
diff
changeset
|
30 #include <GL/glx.h> |
ba9557e864c0
vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
10757
diff
changeset
|
31 #endif |
2124 | 32 #include <errno.h> |
33 | |
13653
799f81d3cb19
added gl_common for code used by both vo_gl.c and vo_gl2.c.
reimar
parents:
13575
diff
changeset
|
34 #include "gl_common.h" |
10880
ba9557e864c0
vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
10757
diff
changeset
|
35 #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
|
36 #include "w32_common.h" |
ba9557e864c0
vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
10757
diff
changeset
|
37 #else |
ba9557e864c0
vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
10757
diff
changeset
|
38 #include "x11_common.h" |
ba9557e864c0
vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
10757
diff
changeset
|
39 #endif |
2124 | 40 #include "aspect.h" |
41 | |
42 #define NDEBUG | |
2276
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
43 //#undef NDEBUG |
2124 | 44 |
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
|
45 #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
|
46 #undef TEXTUREFORMAT_ALWAYS_S |
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
|
47 #ifdef SYS_DARWIN |
12842 | 48 #define TEXTUREFORMAT_ALWAYS GL_RGBA8 |
49 #define TEXTUREFORMAT_ALWAYS_S "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
|
50 #endif |
10143
fd3cbeb388f0
removed broken swscaler support, added runtime fullscreens switching ability, and some other general cleanup thingies
alex
parents:
8254
diff
changeset
|
51 |
8148
5b39e79af5fe
removed get_info, using the same sheme as in libmpcodecs instead
alex
parents:
8123
diff
changeset
|
52 static vo_info_t info = |
2124 | 53 { |
2126 | 54 "X11 (OpenGL) - multiple textures version", |
2124 | 55 "gl2", |
2126 | 56 "Arpad Gereoffy & Sven Goethel", |
2124 | 57 "" |
58 }; | |
59 | |
8148
5b39e79af5fe
removed get_info, using the same sheme as in libmpcodecs instead
alex
parents:
8123
diff
changeset
|
60 LIBVO_EXTERN(gl2) |
5b39e79af5fe
removed get_info, using the same sheme as in libmpcodecs instead
alex
parents:
8123
diff
changeset
|
61 |
2124 | 62 /* private prototypes */ |
63 | |
10143
fd3cbeb388f0
removed broken swscaler support, added runtime fullscreens switching ability, and some other general cleanup thingies
alex
parents:
8254
diff
changeset
|
64 #define MODE_BGR 1 |
fd3cbeb388f0
removed broken swscaler support, added runtime fullscreens switching ability, and some other general cleanup thingies
alex
parents:
8254
diff
changeset
|
65 #define MODE_RGB 0 |
2455 | 66 |
2124 | 67 /* local data */ |
68 static unsigned char *ImageData=NULL; | |
69 | |
70 /* X11 related variables */ | |
6095 | 71 //static Window vo_window; |
2124 | 72 |
73 //static int texture_id=1; | |
74 | |
10880
ba9557e864c0
vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
10757
diff
changeset
|
75 #ifndef GL_WIN32 |
13871 | 76 static XVisualInfo *gl_vinfo = NULL; |
77 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
|
78 #endif |
2124 | 79 |
80 static uint32_t image_width; | |
81 static uint32_t image_height; | |
82 static uint32_t image_format; | |
83 static uint32_t image_bpp; | |
2276
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
84 static int image_mode; |
2124 | 85 static uint32_t image_bytes; |
86 | |
10757
3aea64e0d6d9
Avoid flickering during resizes. Keep video contents even when paused. Fix by Tomas Simonaitis <haden@homelan.lt>
mosu
parents:
10604
diff
changeset
|
87 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
|
88 |
2124 | 89 static uint32_t texture_width; |
90 static uint32_t texture_height; | |
12448 | 91 static int texnumx, texnumy, raw_line_len; |
2124 | 92 static GLfloat texpercx, texpercy; |
13540 | 93 static struct TexSquare * texgrid = NULL; |
2276
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
94 static GLint gl_internal_format; |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
95 static char * gl_internal_format_s; |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
96 static int rgb_sz, r_sz, g_sz, b_sz, a_sz; |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
97 static GLint gl_bitmap_format; |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
98 static char * gl_bitmap_format_s; |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
99 static GLint gl_bitmap_type; |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
100 static char * gl_bitmap_type_s; |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
101 static int isGL12 = GL_FALSE; |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
102 |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
103 static int gl_bilinear=1; |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
104 static int gl_antialias=0; |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
105 |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
106 static void (*draw_alpha_fnc) |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
107 (int x0,int y0, int w,int h, unsigned char* src, unsigned char *srca, int stride); |
2124 | 108 |
10757
3aea64e0d6d9
Avoid flickering during resizes. Keep video contents even when paused. Fix by Tomas Simonaitis <haden@homelan.lt>
mosu
parents:
10604
diff
changeset
|
109 |
2124 | 110 /* The squares that are tiled to make up the game screen polygon */ |
111 | |
112 struct TexSquare | |
113 { | |
114 GLubyte *texture; | |
115 GLuint texobj; | |
116 int isTexture; | |
117 GLfloat fx1, fy1, fx2, fy2, fx3, fy3, fx4, fy4; | |
118 GLfloat xcov, ycov; | |
2276
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
119 int isDirty; |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
120 int dirtyXoff, dirtyYoff, dirtyWidth, dirtyHeight; |
2124 | 121 }; |
122 | |
12448 | 123 static void resetTexturePointers(unsigned char *imageSource); |
124 | |
2124 | 125 static void CalcFlatPoint(int x,int y,GLfloat *px,GLfloat *py) |
126 { | |
127 *px=(float)x*texpercx; | |
128 if(*px>1.0) *px=1.0; | |
129 *py=(float)y*texpercy; | |
130 if(*py>1.0) *py=1.0; | |
131 } | |
132 | |
10604 | 133 static int initTextures() |
2124 | 134 { |
135 struct TexSquare *tsq=0; | |
136 int e_x, e_y, s, i=0; | |
137 int x=0, y=0; | |
138 GLint format=0; | |
139 GLenum err; | |
140 | |
141 /* achieve the 2**e_x:=texture_width, 2**e_y:=texture_height */ | |
142 e_x=0; s=1; | |
143 while (s<texture_width) | |
144 { s*=2; e_x++; } | |
145 texture_width=s; | |
146 | |
147 e_y=0; s=1; | |
148 while (s<texture_height) | |
149 { s*=2; e_y++; } | |
150 texture_height=s; | |
151 | |
152 | |
153 /* Test the max texture size */ | |
154 do | |
155 { | |
156 glTexImage2D (GL_PROXY_TEXTURE_2D, 0, | |
2276
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
157 gl_internal_format, |
2124 | 158 texture_width, texture_height, |
2276
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
159 0, gl_bitmap_format, gl_bitmap_type, NULL); |
2124 | 160 |
161 glGetTexLevelParameteriv | |
162 (GL_PROXY_TEXTURE_2D, 0, GL_TEXTURE_INTERNAL_FORMAT, &format); | |
163 | |
2276
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
164 if (format != gl_internal_format) |
2124 | 165 { |
11988 | 166 mp_msg (MSGT_VO, MSGL_V, "[gl2] Needed texture [%dx%d] too big, trying ", |
2124 | 167 texture_height, texture_width); |
168 | |
169 if (texture_width > texture_height) | |
170 { | |
171 e_x--; | |
172 texture_width = 1; | |
173 for (i = e_x; i > 0; i--) | |
174 texture_width *= 2; | |
175 } | |
176 else | |
177 { | |
178 e_y--; | |
179 texture_height = 1; | |
180 for (i = e_y; i > 0; i--) | |
181 texture_height *= 2; | |
182 } | |
183 | |
11988 | 184 mp_msg (MSGT_VO, MSGL_V, "[%dx%d] !\n", texture_height, texture_width); |
2124 | 185 |
186 if(texture_width < 64 || texture_height < 64) | |
187 { | |
11988 | 188 mp_msg (MSGT_VO, MSGL_FATAL, "[gl2] Give up .. usable texture size not avaiable, or texture config error !\n"); |
10604 | 189 return -1; |
2124 | 190 } |
191 } | |
192 } | |
2276
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
193 while (format != gl_internal_format && texture_width > 1 && texture_height > 1); |
2124 | 194 |
195 texnumx = image_width / texture_width; | |
196 if ((image_width % texture_width) > 0) | |
197 texnumx++; | |
198 | |
199 texnumy = image_height / texture_height; | |
200 if ((image_height % texture_height) > 0) | |
201 texnumy++; | |
202 | |
11988 | 203 mp_msg(MSGT_VO, MSGL_V, "[gl2] Creating %dx%d textures of size %dx%d ...\n", |
3564 | 204 texnumx, texnumy, texture_width,texture_height); |
2276
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
205 |
2124 | 206 /* Allocate the texture memory */ |
207 | |
208 texpercx = (GLfloat) texture_width / (GLfloat) image_width; | |
209 if (texpercx > 1.0) | |
210 texpercx = 1.0; | |
211 | |
212 texpercy = (GLfloat) texture_height / (GLfloat) image_height; | |
213 if (texpercy > 1.0) | |
214 texpercy = 1.0; | |
215 | |
13540 | 216 if (texgrid) |
217 free(texgrid); | |
2124 | 218 texgrid = (struct TexSquare *) |
219 calloc (texnumx * texnumy, sizeof (struct TexSquare)); | |
220 | |
12448 | 221 raw_line_len = image_width * image_bytes; |
2124 | 222 |
11988 | 223 mp_msg (MSGT_VO, MSGL_DBG2, "[gl2] texture-usage %d*width=%d, %d*height=%d\n", |
2124 | 224 (int) texnumx, (int) texture_width, (int) texnumy, |
225 (int) texture_height); | |
226 | |
227 for (y = 0; y < texnumy; y++) | |
228 { | |
229 for (x = 0; x < texnumx; x++) | |
230 { | |
231 tsq = texgrid + y * texnumx + x; | |
232 | |
233 if (x == texnumx - 1 && image_width % texture_width) | |
234 tsq->xcov = | |
235 (GLfloat) (image_width % texture_width) / (GLfloat) texture_width; | |
236 else | |
237 tsq->xcov = 1.0; | |
238 | |
239 if (y == texnumy - 1 && image_height % texture_height) | |
240 tsq->ycov = | |
241 (GLfloat) (image_height % texture_height) / (GLfloat) texture_height; | |
242 else | |
243 tsq->ycov = 1.0; | |
244 | |
245 CalcFlatPoint (x, y, &(tsq->fx1), &(tsq->fy1)); | |
246 CalcFlatPoint (x + 1, y, &(tsq->fx2), &(tsq->fy2)); | |
247 CalcFlatPoint (x + 1, y + 1, &(tsq->fx3), &(tsq->fy3)); | |
248 CalcFlatPoint (x, y + 1, &(tsq->fx4), &(tsq->fy4)); | |
249 | |
2276
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
250 tsq->isDirty=GL_TRUE; |
2124 | 251 tsq->isTexture=GL_FALSE; |
252 tsq->texobj=0; | |
2276
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
253 tsq->dirtyXoff=0; tsq->dirtyYoff=0; tsq->dirtyWidth=-1; tsq->dirtyHeight=-1; |
2124 | 254 |
255 glGenTextures (1, &(tsq->texobj)); | |
256 | |
257 glBindTexture (GL_TEXTURE_2D, tsq->texobj); | |
258 err = glGetError (); | |
259 if(err==GL_INVALID_ENUM) | |
260 { | |
11988 | 261 mp_msg (MSGT_VO, MSGL_ERR, "GLERROR glBindTexture (glGenText) := GL_INVALID_ENUM, texnum x=%d, y=%d, texture=%d\n", x, y, tsq->texobj); |
2124 | 262 } |
263 | |
264 if(glIsTexture(tsq->texobj) == GL_FALSE) | |
265 { | |
11988 | 266 mp_msg (MSGT_VO, MSGL_ERR, "GLERROR ain't a texture (glGenText): texnum x=%d, y=%d, texture=%d\n", |
2124 | 267 x, y, tsq->texobj); |
268 } else { | |
269 tsq->isTexture=GL_TRUE; | |
270 } | |
271 | |
272 glTexImage2D (GL_TEXTURE_2D, 0, | |
2276
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
273 gl_internal_format, |
2124 | 274 texture_width, texture_height, |
2276
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
275 0, gl_bitmap_format, gl_bitmap_type, NULL); |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
276 |
2124 | 277 glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_PRIORITY, 1.0); |
278 | |
279 glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); | |
280 glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); | |
281 | |
282 glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP); | |
283 glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP); | |
284 | |
285 glTexEnvf (GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); | |
286 | |
287 } /* for all texnumx */ | |
288 } /* for all texnumy */ | |
12448 | 289 resetTexturePointers (ImageData); |
10604 | 290 |
291 return 0; | |
2124 | 292 } |
293 | |
2276
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
294 static void resetTexturePointers(unsigned char *imageSource) |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
295 { |
12448 | 296 unsigned char *texdata_start, *line_start; |
297 struct TexSquare *tsq = texgrid; | |
2276
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
298 int x=0, y=0; |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
299 |
12448 | 300 line_start = (unsigned char *) imageSource; |
2276
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
301 |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
302 for (y = 0; y < texnumy; y++) |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
303 { |
12448 | 304 texdata_start = line_start; |
2276
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
305 for (x = 0; x < texnumx; x++) |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
306 { |
12448 | 307 tsq->texture = texdata_start; |
308 texdata_start += texture_width * image_bytes; | |
309 tsq++; | |
2276
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
310 } /* for all texnumx */ |
12448 | 311 line_start += texture_height * raw_line_len; |
2276
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
312 } /* for all texnumy */ |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
313 } |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
314 |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
315 static void setupTextureDirtyArea(int x, int y, int w,int h) |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
316 { |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
317 struct TexSquare *square; |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
318 int xi, yi, wd, ht, wh, hh; |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
319 int wdecr, hdecr, xh, yh; |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
320 |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
321 wdecr=w; hdecr=h; xh=x; yh=y; |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
322 |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
323 for (yi = 0; hdecr>0 && yi < texnumy; yi++) |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
324 { |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
325 if (yi < texnumy - 1) |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
326 ht = texture_height; |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
327 else |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
328 ht = image_height - texture_height * yi; |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
329 |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
330 xh =x; |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
331 wdecr =w; |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
332 |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
333 for (xi = 0; wdecr>0 && xi < texnumx; xi++) |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
334 { |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
335 square = texgrid + yi * texnumx + xi; |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
336 |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
337 if (xi < texnumx - 1) |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
338 wd = texture_width; |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
339 else |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
340 wd = image_width - texture_width * xi; |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
341 |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
342 if( 0 <= xh && xh < wd && |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
343 0 <= yh && yh < ht |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
344 ) |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
345 { |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
346 square->isDirty=GL_TRUE; |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
347 |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
348 wh=(wdecr<wd)?wdecr:wd-xh; |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
349 if(wh<0) wh=0; |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
350 |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
351 hh=(hdecr<ht)?hdecr:ht-yh; |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
352 if(hh<0) hh=0; |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
353 |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
354 /* |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
355 #ifndef NDEBUG |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
356 printf("\t %dx%d, %d/%d (%dx%d): %d/%d (%dx%d)\n", |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
357 xi, yi, xh, yh, wdecr, hdecr, xh, yh, wh, hh); |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
358 #endif |
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 |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
361 if(xh<square->dirtyXoff) |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
362 square->dirtyXoff=xh; |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
363 |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
364 if(yh<square->dirtyYoff) |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
365 square->dirtyYoff=yh; |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
366 |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
367 square->dirtyWidth = wd-square->dirtyXoff; |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
368 square->dirtyHeight = ht-square->dirtyYoff; |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
369 |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
370 wdecr-=wh; |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
371 |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
372 if ( xi == texnumx - 1 ) |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
373 hdecr-=hh; |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
374 } |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
375 |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
376 xh-=wd; |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
377 if(xh<0) xh=0; |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
378 } |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
379 yh-=ht; |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
380 if(yh<0) yh=0; |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
381 } |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
382 } |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
383 |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
384 static void gl_set_bilinear (int val) |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
385 { |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
386 int x, y; |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
387 |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
388 if(val>=0) |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
389 gl_bilinear = val; |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
390 else |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
391 gl_bilinear++; |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
392 |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
393 gl_bilinear=gl_bilinear%2; |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
394 /* no mipmap yet .. */ |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
395 |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
396 for (y = 0; y < texnumy; y++) |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
397 { |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
398 for (x = 0; x < texnumx; x++) |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
399 { |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
400 glBindTexture (GL_TEXTURE_2D, texgrid[y * texnumx + x].texobj); |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
401 |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
402 switch (gl_bilinear) |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
403 { |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
404 case 0: |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
405 glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
406 GL_NEAREST); |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
407 glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
408 GL_NEAREST); |
11988 | 409 mp_msg(MSGT_VO, MSGL_INFO, "[gl2] bilinear off\n"); |
2276
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
410 break; |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
411 case 1: |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
412 glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
413 GL_LINEAR); |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
414 glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
415 GL_LINEAR); |
11988 | 416 mp_msg(MSGT_VO, MSGL_INFO, "[gl2] bilinear linear\n"); |
2276
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
417 break; |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
418 case 2: |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
419 glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
420 GL_LINEAR_MIPMAP_NEAREST); |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
421 glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
422 GL_LINEAR_MIPMAP_NEAREST); |
11988 | 423 mp_msg(MSGT_VO, MSGL_INFO, "[gl2] bilinear mipmap nearest\n"); |
2276
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
424 break; |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
425 case 3: |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
426 glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
427 GL_LINEAR_MIPMAP_LINEAR); |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
428 glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
429 GL_LINEAR_MIPMAP_LINEAR); |
11988 | 430 mp_msg(MSGT_VO, MSGL_INFO, "[gl2] bilinear mipmap linear\n"); |
2276
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
431 break; |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
432 } |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
433 } |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
434 } |
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 gl_set_antialias (int val) |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
438 { |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
439 gl_antialias=val; |
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 if (gl_antialias) |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
442 { |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
443 glShadeModel (GL_SMOOTH); |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
444 glEnable (GL_POLYGON_SMOOTH); |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
445 glEnable (GL_LINE_SMOOTH); |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
446 glEnable (GL_POINT_SMOOTH); |
11988 | 447 mp_msg(MSGT_VO, MSGL_INFO, "[gl2] antialiasing on\n"); |
2276
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 else |
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 glShadeModel (GL_FLAT); |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
452 glDisable (GL_POLYGON_SMOOTH); |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
453 glDisable (GL_LINE_SMOOTH); |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
454 glDisable (GL_POINT_SMOOTH); |
11988 | 455 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
|
456 } |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
457 } |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
458 |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
459 |
2124 | 460 static void drawTextureDisplay () |
461 { | |
462 struct TexSquare *square; | |
8254
772d6d27fd66
warning patch by (Dominik Mierzejewski <dominik at rangers dot eu dot org>)
michael
parents:
8148
diff
changeset
|
463 int x, y/*, xoff=0, yoff=0, wd, ht*/; |
2124 | 464 GLenum err; |
465 | |
466 glColor3f(1.0,1.0,1.0); | |
467 | |
468 for (y = 0; y < texnumy; y++) | |
469 { | |
470 for (x = 0; x < texnumx; x++) | |
471 { | |
472 square = texgrid + y * texnumx + x; | |
473 | |
474 if(square->isTexture==GL_FALSE) | |
475 { | |
11988 | 476 mp_msg (MSGT_VO, MSGL_V, "[gl2] ain't a texture(update): texnum x=%d, y=%d, texture=%d\n", |
2124 | 477 x, y, square->texobj); |
478 continue; | |
479 } | |
480 | |
481 glBindTexture (GL_TEXTURE_2D, square->texobj); | |
482 err = glGetError (); | |
483 if(err==GL_INVALID_ENUM) | |
484 { | |
11988 | 485 mp_msg (MSGT_VO, MSGL_ERR, "GLERROR glBindTexture := GL_INVALID_ENUM, texnum x=%d, y=%d, texture=%d\n", x, y, square->texobj); |
2124 | 486 } |
487 else if(err==GL_INVALID_OPERATION) { | |
11988 | 488 mp_msg (MSGT_VO, MSGL_V, "GLERROR glBindTexture := GL_INVALID_OPERATION, texnum x=%d, y=%d, texture=%d\n", x, y, square->texobj); |
2124 | 489 } |
490 | |
491 if(glIsTexture(square->texobj) == GL_FALSE) | |
492 { | |
493 square->isTexture=GL_FALSE; | |
11988 | 494 mp_msg (MSGT_VO, MSGL_ERR, "GLERROR ain't a texture(update): texnum x=%d, y=%d, texture=%d\n", |
2124 | 495 x, y, square->texobj); |
496 } | |
497 | |
2276
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
498 if(square->isDirty) |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
499 { |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
500 glTexSubImage2D (GL_TEXTURE_2D, 0, |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
501 square->dirtyXoff, square->dirtyYoff, |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
502 square->dirtyWidth, square->dirtyHeight, |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
503 gl_bitmap_format, gl_bitmap_type, square->texture); |
2124 | 504 |
2276
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
505 square->isDirty=GL_FALSE; |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
506 square->dirtyXoff=0; square->dirtyYoff=0; square->dirtyWidth=-1; square->dirtyHeight=-1; |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
507 } |
2124 | 508 |
11988 | 509 mp_msg (MSGT_VO, MSGL_DBG2, "[gl2] glTexSubImage2D texnum x=%d, y=%d, %d/%d - %d/%d\n", |
2276
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
510 x, y, square->dirtyXoff, square->dirtyYoff, square->dirtyWidth, square->dirtyHeight); |
2124 | 511 |
512 glBegin(GL_QUADS); | |
513 | |
514 glTexCoord2f (0, 0); | |
515 glVertex2f (square->fx1, square->fy1); | |
516 | |
517 glTexCoord2f (0, square->ycov); | |
518 glVertex2f (square->fx4, square->fy4); | |
519 | |
520 glTexCoord2f (square->xcov, square->ycov); | |
521 glVertex2f (square->fx3, square->fy3); | |
522 | |
523 glTexCoord2f (square->xcov, 0); | |
524 glVertex2f (square->fx2, square->fy2); | |
525 | |
2276
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
526 glEnd(); |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
527 /* |
2124 | 528 #ifndef NDEBUG |
2276
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
529 fprintf (stdout, "[gl2] GL_QUADS texnum x=%d, y=%d, %f/%f %f/%f %f/%f %f/%f\n\n", x, y, square->fx1, square->fy1, square->fx4, square->fy4, |
2124 | 530 square->fx3, square->fy3, square->fx2, square->fy2); |
531 #endif | |
2276
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
532 */ |
2124 | 533 } /* for all texnumx */ |
534 } /* for all texnumy */ | |
535 | |
11000 | 536 /* YES - let's catch this error ... |
2124 | 537 */ |
538 (void) glGetError (); | |
539 } | |
540 | |
541 | |
11087 | 542 static void resize(int *x,int *y){ |
543 mp_msg(MSGT_VO,MSGL_V,"[gl2] Resize: %dx%d\n",*x,*y); | |
10880
ba9557e864c0
vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
10757
diff
changeset
|
544 if( vo_fs ) |
10905 | 545 { |
11087 | 546 glClear(GL_COLOR_BUFFER_BIT); |
547 aspect(x, y, A_ZOOM); | |
548 glViewport( (vo_screenwidth-*x)/2, (vo_screenheight-*y)/2, *x, *y); | |
10905 | 549 } else { |
11087 | 550 //aspect(x, y, A_NOZOOM); |
551 glViewport( 0, 0, *x, *y ); | |
10905 | 552 } |
2124 | 553 |
554 glMatrixMode(GL_PROJECTION); | |
555 glLoadIdentity(); | |
556 glOrtho (0, 1, 1, 0, -1.0, 1.0); | |
557 | |
558 glMatrixMode(GL_MODELVIEW); | |
559 glLoadIdentity(); | |
560 } | |
561 | |
2276
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
562 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
|
563 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
|
564 } |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
565 |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
566 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
|
567 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
|
568 } |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
569 |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
570 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
|
571 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
|
572 } |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
573 |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
574 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
|
575 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
|
576 } |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
577 |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
578 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
|
579 } |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
580 |
10880
ba9557e864c0
vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
10757
diff
changeset
|
581 #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
|
582 |
ba9557e864c0
vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
10757
diff
changeset
|
583 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) { |
ba9557e864c0
vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
10757
diff
changeset
|
584 PIXELFORMATDESCRIPTOR pfd; |
ba9557e864c0
vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
10757
diff
changeset
|
585 int pf; |
ba9557e864c0
vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
10757
diff
changeset
|
586 |
ba9557e864c0
vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
10757
diff
changeset
|
587 o_dwidth = d_width; |
ba9557e864c0
vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
10757
diff
changeset
|
588 o_dheight = 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
|
589 vo_fs = flags & VOFLAG_FULLSCREEN; |
ba9557e864c0
vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
10757
diff
changeset
|
590 vo_vm = flags & VOFLAG_MODESWITCHING; |
ba9557e864c0
vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
10757
diff
changeset
|
591 |
ba9557e864c0
vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
10757
diff
changeset
|
592 vo_dwidth = d_width; |
ba9557e864c0
vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
10757
diff
changeset
|
593 vo_dheight = 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
|
594 |
ba9557e864c0
vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
10757
diff
changeset
|
595 destroyRenderingContext(); |
ba9557e864c0
vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
10757
diff
changeset
|
596 if (!createRenderingContext()) |
ba9557e864c0
vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
10757
diff
changeset
|
597 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
|
598 |
ba9557e864c0
vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
10757
diff
changeset
|
599 if (vo_fs) |
ba9557e864c0
vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
10757
diff
changeset
|
600 aspect(&d_width, &d_height, A_ZOOM); |
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 pf = GetPixelFormat(vo_hdc); |
ba9557e864c0
vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
10757
diff
changeset
|
603 if (!DescribePixelFormat(vo_hdc, pf, sizeof pfd, &pfd)) { |
ba9557e864c0
vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
10757
diff
changeset
|
604 r_sz = g_sz = b_sz = a_sz = 0; |
ba9557e864c0
vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
10757
diff
changeset
|
605 } else { |
ba9557e864c0
vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
10757
diff
changeset
|
606 r_sz = pfd.cRedBits; |
ba9557e864c0
vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
10757
diff
changeset
|
607 g_sz = pfd.cGreenBits; |
ba9557e864c0
vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
10757
diff
changeset
|
608 b_sz = pfd.cBlueBits; |
ba9557e864c0
vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
10757
diff
changeset
|
609 a_sz = pfd.cAlphaBits; |
ba9557e864c0
vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
10757
diff
changeset
|
610 } |
ba9557e864c0
vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
10757
diff
changeset
|
611 |
ba9557e864c0
vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
10757
diff
changeset
|
612 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
|
613 } |
ba9557e864c0
vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
10757
diff
changeset
|
614 |
ba9557e864c0
vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
10757
diff
changeset
|
615 #else |
ba9557e864c0
vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
10757
diff
changeset
|
616 |
7964
143d730908ae
here is a somewhat generic equalizer implementation for the X11 vo drivers
arpi
parents:
7931
diff
changeset
|
617 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
|
618 { |
143d730908ae
here is a somewhat generic equalizer implementation for the X11 vo drivers
arpi
parents:
7931
diff
changeset
|
619 XVisualInfo template, *vi_list; |
143d730908ae
here is a somewhat generic equalizer implementation for the X11 vo drivers
arpi
parents:
7931
diff
changeset
|
620 int vi_num, i, best_i, best_weight; |
143d730908ae
here is a somewhat generic equalizer implementation for the X11 vo drivers
arpi
parents:
7931
diff
changeset
|
621 |
143d730908ae
here is a somewhat generic equalizer implementation for the X11 vo drivers
arpi
parents:
7931
diff
changeset
|
622 template.screen = scr; |
143d730908ae
here is a somewhat generic equalizer implementation for the X11 vo drivers
arpi
parents:
7931
diff
changeset
|
623 vi_list = XGetVisualInfo(dpy, VisualScreenMask, &template, &vi_num); |
143d730908ae
here is a somewhat generic equalizer implementation for the X11 vo drivers
arpi
parents:
7931
diff
changeset
|
624 if (!vi_list) return -1; |
8123
9fc45fe0d444
*HUGE* set of compiler warning fixes, unused variables removal
arpi
parents:
7964
diff
changeset
|
625 best_weight = 1000000; best_i=0; |
7964
143d730908ae
here is a somewhat generic equalizer implementation for the X11 vo drivers
arpi
parents:
7931
diff
changeset
|
626 for (i = 0; i < vi_num; i++) { |
143d730908ae
here is a somewhat generic equalizer implementation for the X11 vo drivers
arpi
parents:
7931
diff
changeset
|
627 int val, res, w = 0; |
143d730908ae
here is a somewhat generic equalizer implementation for the X11 vo drivers
arpi
parents:
7931
diff
changeset
|
628 /* of course, the visual must support OpenGL rendering... */ |
143d730908ae
here is a somewhat generic equalizer implementation for the X11 vo drivers
arpi
parents:
7931
diff
changeset
|
629 res = glXGetConfig(dpy, vi_list + i, GLX_USE_GL, &val); |
143d730908ae
here is a somewhat generic equalizer implementation for the X11 vo drivers
arpi
parents:
7931
diff
changeset
|
630 if (res || val == False) continue; |
143d730908ae
here is a somewhat generic equalizer implementation for the X11 vo drivers
arpi
parents:
7931
diff
changeset
|
631 /* also it must be doublebuffered ... */ |
143d730908ae
here is a somewhat generic equalizer implementation for the X11 vo drivers
arpi
parents:
7931
diff
changeset
|
632 res = glXGetConfig(dpy, vi_list + i, GLX_DOUBLEBUFFER, &val); |
143d730908ae
here is a somewhat generic equalizer implementation for the X11 vo drivers
arpi
parents:
7931
diff
changeset
|
633 if (res || val == False) continue; |
143d730908ae
here is a somewhat generic equalizer implementation for the X11 vo drivers
arpi
parents:
7931
diff
changeset
|
634 /* furthermore it must be RGBA (not color indexed) ... */ |
143d730908ae
here is a somewhat generic equalizer implementation for the X11 vo drivers
arpi
parents:
7931
diff
changeset
|
635 res = glXGetConfig(dpy, vi_list + i, GLX_RGBA, &val); |
143d730908ae
here is a somewhat generic equalizer implementation for the X11 vo drivers
arpi
parents:
7931
diff
changeset
|
636 if (res || val == False) continue; |
143d730908ae
here is a somewhat generic equalizer implementation for the X11 vo drivers
arpi
parents:
7931
diff
changeset
|
637 /* prefer less depth buffer size, */ |
143d730908ae
here is a somewhat generic equalizer implementation for the X11 vo drivers
arpi
parents:
7931
diff
changeset
|
638 res = glXGetConfig(dpy, vi_list + i, GLX_DEPTH_SIZE, &val); |
143d730908ae
here is a somewhat generic equalizer implementation for the X11 vo drivers
arpi
parents:
7931
diff
changeset
|
639 if (res) continue; |
143d730908ae
here is a somewhat generic equalizer implementation for the X11 vo drivers
arpi
parents:
7931
diff
changeset
|
640 w += val*2; |
143d730908ae
here is a somewhat generic equalizer implementation for the X11 vo drivers
arpi
parents:
7931
diff
changeset
|
641 /* stencil buffer size */ |
143d730908ae
here is a somewhat generic equalizer implementation for the X11 vo drivers
arpi
parents:
7931
diff
changeset
|
642 res = glXGetConfig(dpy, vi_list + i, GLX_STENCIL_SIZE, &val); |
143d730908ae
here is a somewhat generic equalizer implementation for the X11 vo drivers
arpi
parents:
7931
diff
changeset
|
643 if (res) continue; |
143d730908ae
here is a somewhat generic equalizer implementation for the X11 vo drivers
arpi
parents:
7931
diff
changeset
|
644 w += val*2; |
143d730908ae
here is a somewhat generic equalizer implementation for the X11 vo drivers
arpi
parents:
7931
diff
changeset
|
645 /* and colorbuffer alpha size */ |
143d730908ae
here is a somewhat generic equalizer implementation for the X11 vo drivers
arpi
parents:
7931
diff
changeset
|
646 res = glXGetConfig(dpy, vi_list + i, GLX_ALPHA_SIZE, &val); |
143d730908ae
here is a somewhat generic equalizer implementation for the X11 vo drivers
arpi
parents:
7931
diff
changeset
|
647 if (res) continue; |
143d730908ae
here is a somewhat generic equalizer implementation for the X11 vo drivers
arpi
parents:
7931
diff
changeset
|
648 w += val; |
143d730908ae
here is a somewhat generic equalizer implementation for the X11 vo drivers
arpi
parents:
7931
diff
changeset
|
649 /* and finally, prefer DirectColor-ed visuals to allow color corrections */ |
143d730908ae
here is a somewhat generic equalizer implementation for the X11 vo drivers
arpi
parents:
7931
diff
changeset
|
650 if (vi_list[i].class != DirectColor) w += 100; |
12709 | 651 |
652 // avoid bad-looking visual with less that 8bit per color | |
653 res = glXGetConfig(dpy, vi_list + i, GLX_RED_SIZE, &val); | |
654 if (res) continue; | |
655 if (val < 8) w += 50; | |
656 res = glXGetConfig(dpy, vi_list + i, GLX_GREEN_SIZE, &val); | |
657 if (res) continue; | |
658 if (val < 8) w += 70; | |
659 res = glXGetConfig(dpy, vi_list + i, GLX_BLUE_SIZE, &val); | |
660 if (res) continue; | |
661 if (val < 8) w += 50; | |
662 | |
7964
143d730908ae
here is a somewhat generic equalizer implementation for the X11 vo drivers
arpi
parents:
7931
diff
changeset
|
663 if (w < best_weight) { |
143d730908ae
here is a somewhat generic equalizer implementation for the X11 vo drivers
arpi
parents:
7931
diff
changeset
|
664 best_weight = w; |
143d730908ae
here is a somewhat generic equalizer implementation for the X11 vo drivers
arpi
parents:
7931
diff
changeset
|
665 best_i = i; |
143d730908ae
here is a somewhat generic equalizer implementation for the X11 vo drivers
arpi
parents:
7931
diff
changeset
|
666 } |
143d730908ae
here is a somewhat generic equalizer implementation for the X11 vo drivers
arpi
parents:
7931
diff
changeset
|
667 } |
143d730908ae
here is a somewhat generic equalizer implementation for the X11 vo drivers
arpi
parents:
7931
diff
changeset
|
668 if (best_weight < 1000000) *res_vi = vi_list[best_i]; |
143d730908ae
here is a somewhat generic equalizer implementation for the X11 vo drivers
arpi
parents:
7931
diff
changeset
|
669 XFree(vi_list); |
143d730908ae
here is a somewhat generic equalizer implementation for the X11 vo drivers
arpi
parents:
7931
diff
changeset
|
670 return (best_weight < 1000000) ? 0 : -1; |
143d730908ae
here is a somewhat generic equalizer implementation for the X11 vo drivers
arpi
parents:
7931
diff
changeset
|
671 } |
143d730908ae
here is a somewhat generic equalizer implementation for the X11 vo drivers
arpi
parents:
7931
diff
changeset
|
672 |
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
|
673 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) { |
13871 | 674 if ( vo_window == None ) |
675 { | |
2124 | 676 XSizeHints hint; |
7964
143d730908ae
here is a somewhat generic equalizer implementation for the X11 vo drivers
arpi
parents:
7931
diff
changeset
|
677 XVisualInfo *vinfo, vinfo_buf; |
2124 | 678 XEvent xev; |
679 | |
2276
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
680 hint.x = 0; |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
681 hint.y = 0; |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
682 hint.width = d_width; |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
683 hint.height = d_height; |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
684 hint.flags = PPosition | PSize; |
2124 | 685 |
686 /* Make the window */ | |
687 | |
688 // XGetWindowAttributes(mDisplay, DefaultRootWindow(mDisplay), &attribs); | |
689 | |
690 // XMatchVisualInfo(mDisplay, screen, depth, TrueColor, &vinfo); | |
7964
143d730908ae
here is a somewhat generic equalizer implementation for the X11 vo drivers
arpi
parents:
7931
diff
changeset
|
691 vinfo = choose_glx_visual(mDisplay,mScreen,&vinfo_buf) < 0 ? NULL : &vinfo_buf; |
2124 | 692 if (vinfo == NULL) |
693 { | |
11988 | 694 mp_msg(MSGT_VO, MSGL_FATAL, "[gl2] no GLX support present\n"); |
2124 | 695 return -1; |
696 } | |
697 | |
12035
b3512c7b26ce
corrected problems with switching to and from fullscreen mode esp. with fixed-vo
reimar
parents:
11988
diff
changeset
|
698 vo_fs = VO_FALSE; |
10757
3aea64e0d6d9
Avoid flickering during resizes. Keep video contents even when paused. Fix by Tomas Simonaitis <haden@homelan.lt>
mosu
parents:
10604
diff
changeset
|
699 vo_window = vo_x11_create_smooth_window(mDisplay, RootWindow(mDisplay,mScreen), |
3aea64e0d6d9
Avoid flickering during resizes. Keep video contents even when paused. Fix by Tomas Simonaitis <haden@homelan.lt>
mosu
parents:
10604
diff
changeset
|
700 vinfo->visual, hint.x, hint.y, hint.width, hint.height, vinfo->depth, vo_x11_create_colormap(vinfo)); |
2124 | 701 |
6095 | 702 XSelectInput(mDisplay, vo_window, StructureNotifyMask); |
2124 | 703 |
704 /* Tell other applications about this window */ | |
705 | |
10143
fd3cbeb388f0
removed broken swscaler support, added runtime fullscreens switching ability, and some other general cleanup thingies
alex
parents:
8254
diff
changeset
|
706 XSetStandardProperties(mDisplay, vo_window, title, title, None, NULL, 0, &hint); |
2124 | 707 |
708 /* Map window. */ | |
6095 | 709 XMapWindow(mDisplay, vo_window); |
4017 | 710 #ifdef HAVE_XINERAMA |
6095 | 711 vo_x11_xinerama_move(mDisplay,vo_window); |
4017 | 712 #endif |
11087 | 713 vo_x11_sizehint( hint.x, hint.y, hint.width, hint.height,0 ); |
6095 | 714 XClearWindow(mDisplay,vo_window); |
2124 | 715 |
716 /* Wait for map. */ | |
717 do | |
718 { | |
719 XNextEvent(mDisplay, &xev); | |
720 } | |
6095 | 721 while (xev.type != MapNotify || xev.xmap.event != vo_window); |
12035
b3512c7b26ce
corrected problems with switching to and from fullscreen mode esp. with fixed-vo
reimar
parents:
11988
diff
changeset
|
722 |
7763 | 723 vo_x11_classhint( mDisplay,vo_window,"gl2" ); |
724 vo_hidecursor(mDisplay,vo_window); | |
725 | |
2124 | 726 XSync(mDisplay, False); |
727 | |
6095 | 728 //XSelectInput(mDisplay, vo_window, StructureNotifyMask); // !!!! |
6953
ce67cc1f0beb
ignore BadAccess error at XSelectInput() (grabbing mouse etc) with warning
arpi
parents:
6212
diff
changeset
|
729 vo_x11_selectinput_witherr(mDisplay, vo_window, StructureNotifyMask | KeyPressMask | PointerMotionMask |
10757
3aea64e0d6d9
Avoid flickering during resizes. Keep video contents even when paused. Fix by Tomas Simonaitis <haden@homelan.lt>
mosu
parents:
10604
diff
changeset
|
730 | ButtonPressMask | ButtonReleaseMask | ExposureMask |
4658 | 731 ); |
13871 | 732 } |
733 vo_x11_nofs_sizepos(0, 0, d_width, d_height); | |
734 if (vo_fs ^ (flags & VOFLAG_FULLSCREEN)) | |
735 vo_x11_fullscreen(); | |
2124 | 736 |
13871 | 737 setGlWindow(&gl_vinfo, &gl_context, vo_window); |
738 | |
739 if(glXGetConfig(mDisplay,gl_vinfo,GLX_RED_SIZE, &r_sz)!=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
|
740 r_sz=0; |
13871 | 741 if(glXGetConfig(mDisplay,gl_vinfo,GLX_GREEN_SIZE, &g_sz)!=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
|
742 g_sz=0; |
13871 | 743 if(glXGetConfig(mDisplay,gl_vinfo,GLX_BLUE_SIZE, &b_sz)!=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
|
744 b_sz=0; |
13871 | 745 if(glXGetConfig(mDisplay,gl_vinfo,GLX_ALPHA_SIZE, &a_sz)!=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
|
746 a_sz=0; |
ba9557e864c0
vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
10757
diff
changeset
|
747 |
ba9557e864c0
vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
10757
diff
changeset
|
748 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
|
749 } |
ba9557e864c0
vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
10757
diff
changeset
|
750 |
12382 | 751 #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
|
752 static int config_glx_gui(uint32_t d_width, uint32_t d_height) { |
12382 | 753 vo_dwidth = d_width; |
754 vo_dheight = d_height; | |
755 guiGetEvent( guiSetShVideo,0 ); // the GUI will set up / resize the window | |
13871 | 756 setGlWindow(&gl_vinfo, &gl_context, vo_window); |
12382 | 757 |
13871 | 758 if (glXGetConfig(mDisplay,gl_vinfo,GLX_RED_SIZE, &r_sz) != 0) r_sz = 0; |
759 if (glXGetConfig(mDisplay,gl_vinfo,GLX_GREEN_SIZE, &g_sz) != 0) g_sz = 0; | |
760 if (glXGetConfig(mDisplay,gl_vinfo,GLX_BLUE_SIZE, &b_sz) != 0) b_sz = 0; | |
761 if (glXGetConfig(mDisplay,gl_vinfo,GLX_ALPHA_SIZE, &a_sz) != 0) a_sz = 0; | |
12382 | 762 return 0; |
763 } | |
764 #endif | |
765 | |
10880
ba9557e864c0
vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
10757
diff
changeset
|
766 #endif |
ba9557e864c0
vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
10757
diff
changeset
|
767 |
ba9557e864c0
vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
10757
diff
changeset
|
768 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
|
769 { |
12446
59cd81e2e1ef
fixed memory leak and removed unnecessary static variable
reimar
parents:
12394
diff
changeset
|
770 ImageData=malloc(image_width*image_height*image_bytes); |
59cd81e2e1ef
fixed memory leak and removed unnecessary static variable
reimar
parents:
12394
diff
changeset
|
771 memset(ImageData,128,image_width*image_height*image_bytes); |
10880
ba9557e864c0
vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
10757
diff
changeset
|
772 |
ba9557e864c0
vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
10757
diff
changeset
|
773 texture_width=image_width; |
ba9557e864c0
vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
10757
diff
changeset
|
774 texture_height=image_height; |
ba9557e864c0
vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
10757
diff
changeset
|
775 |
ba9557e864c0
vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
10757
diff
changeset
|
776 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
|
777 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
|
778 |
ba9557e864c0
vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
10757
diff
changeset
|
779 glDisable(GL_BLEND); |
ba9557e864c0
vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
10757
diff
changeset
|
780 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
|
781 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
|
782 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
|
783 |
12448 | 784 glPixelStorei (GL_UNPACK_ROW_LENGTH, image_width); |
10880
ba9557e864c0
vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
10757
diff
changeset
|
785 |
ba9557e864c0
vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
10757
diff
changeset
|
786 /** |
ba9557e864c0
vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
10757
diff
changeset
|
787 * may give a little speed up for a kinda burst read .. |
13575 | 788 * Also, the default of 4 will break some files. |
10880
ba9557e864c0
vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
10757
diff
changeset
|
789 */ |
13653
799f81d3cb19
added gl_common for code used by both vo_gl.c and vo_gl2.c.
reimar
parents:
13575
diff
changeset
|
790 glAdjustAlignment(image_width*image_bytes); |
10880
ba9557e864c0
vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
10757
diff
changeset
|
791 |
ba9557e864c0
vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
10757
diff
changeset
|
792 glEnable (GL_TEXTURE_2D); |
ba9557e864c0
vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
10757
diff
changeset
|
793 |
ba9557e864c0
vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
10757
diff
changeset
|
794 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
|
795 gl_set_bilinear(1); |
ba9557e864c0
vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
10757
diff
changeset
|
796 |
13653
799f81d3cb19
added gl_common for code used by both vo_gl.c and vo_gl2.c.
reimar
parents:
13575
diff
changeset
|
797 mp_msg(MSGT_VO, MSGL_V, "[gl2] Using image_bpp=%d, image_bytes=%d, isBGR=%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", |
10880
ba9557e864c0
vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
10757
diff
changeset
|
798 image_bpp, image_bytes, image_mode==MODE_BGR, |
13653
799f81d3cb19
added gl_common for code used by both vo_gl.c and vo_gl2.c.
reimar
parents:
13575
diff
changeset
|
799 gl_bitmap_format_s, gl_bitmap_type_s, |
10880
ba9557e864c0
vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
10757
diff
changeset
|
800 rgb_sz, r_sz, g_sz, b_sz, a_sz, gl_internal_format_s); |
ba9557e864c0
vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
10757
diff
changeset
|
801 |
11087 | 802 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
|
803 |
ba9557e864c0
vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
10757
diff
changeset
|
804 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
|
805 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
|
806 |
13926
b7ba9bcd1916
Avoid drawing before transformation matrices are set up.
reimar
parents:
13877
diff
changeset
|
807 drawTextureDisplay (); |
b7ba9bcd1916
Avoid drawing before transformation matrices are set up.
reimar
parents:
13877
diff
changeset
|
808 |
b7ba9bcd1916
Avoid drawing before transformation matrices are set up.
reimar
parents:
13877
diff
changeset
|
809 free (ImageData); |
b7ba9bcd1916
Avoid drawing before transformation matrices are set up.
reimar
parents:
13877
diff
changeset
|
810 ImageData = NULL; |
b7ba9bcd1916
Avoid drawing before transformation matrices are set up.
reimar
parents:
13877
diff
changeset
|
811 |
10880
ba9557e864c0
vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
10757
diff
changeset
|
812 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
|
813 } |
ba9557e864c0
vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
10757
diff
changeset
|
814 |
ba9557e864c0
vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
10757
diff
changeset
|
815 /* 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
|
816 * 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
|
817 */ |
ba9557e864c0
vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
10757
diff
changeset
|
818 static uint32_t |
ba9557e864c0
vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
10757
diff
changeset
|
819 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
|
820 { |
ba9557e864c0
vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
10757
diff
changeset
|
821 const unsigned char * glVersion; |
ba9557e864c0
vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
10757
diff
changeset
|
822 |
ba9557e864c0
vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
10757
diff
changeset
|
823 image_height = height; |
ba9557e864c0
vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
10757
diff
changeset
|
824 image_width = width; |
ba9557e864c0
vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
10757
diff
changeset
|
825 image_format = format; |
ba9557e864c0
vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
10757
diff
changeset
|
826 |
ba9557e864c0
vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
10757
diff
changeset
|
827 int_pause = 0; |
ba9557e864c0
vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
10757
diff
changeset
|
828 |
ba9557e864c0
vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
10757
diff
changeset
|
829 aspect_save_orig(width,height); |
ba9557e864c0
vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
10757
diff
changeset
|
830 aspect_save_prescale(d_width,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
|
831 aspect_save_screenres(vo_screenwidth,vo_screenheight); |
ba9557e864c0
vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
10757
diff
changeset
|
832 |
ba9557e864c0
vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
10757
diff
changeset
|
833 aspect(&d_width,&d_height,A_NOZOOM); |
ba9557e864c0
vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
10757
diff
changeset
|
834 |
12885
010a28a43c9f
fix for people experimenting with GUI under windows
reimar
parents:
12842
diff
changeset
|
835 #if defined(HAVE_NEW_GUI) && !defined(GL_WIN32) |
12382 | 836 if (use_gui) { |
837 if (config_glx_gui(d_width, d_height) == -1) | |
838 return -1; | |
839 } else | |
840 #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
|
841 #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
|
842 if (config_w32(width, height, d_width, d_height, flags, title, format) == -1) |
ba9557e864c0
vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
10757
diff
changeset
|
843 #else |
ba9557e864c0
vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
10757
diff
changeset
|
844 if (config_glx(width, height, d_width, d_height, flags, title, format) == -1) |
ba9557e864c0
vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
10757
diff
changeset
|
845 #endif |
ba9557e864c0
vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
10757
diff
changeset
|
846 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
|
847 |
2276
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
848 glVersion = glGetString(GL_VERSION); |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
849 |
11988 | 850 mp_msg(MSGT_VO, MSGL_V, "[gl2] OpenGL Driver Information:\n"); |
851 mp_msg(MSGT_VO, MSGL_V, "\tvendor: %s,\n\trenderer %s,\n\tversion %s\n", | |
2276
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
852 glGetString(GL_VENDOR), |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
853 glGetString(GL_RENDERER), |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
854 glVersion); |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
855 |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
856 if(glVersion[0]>'1' || |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
857 (glVersion[0]=='1' && glVersion[2]>='2') ) |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
858 isGL12 = GL_TRUE; |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
859 else |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
860 isGL12 = GL_FALSE; |
2124 | 861 |
2276
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
862 if(isGL12) |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
863 { |
11988 | 864 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
|
865 } else { |
11988 | 866 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
|
867 } |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
868 |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
869 rgb_sz=r_sz+g_sz+b_sz; |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
870 if(rgb_sz<=0) rgb_sz=24; |
2124 | 871 |
2276
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
872 if(r_sz==3 && g_sz==3 && b_sz==2 && a_sz==0) { |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
873 gl_internal_format=GL_R3_G3_B2; |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
874 gl_internal_format_s="GL_R3_G3_B2"; |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
875 } else if(r_sz==4 && g_sz==4 && b_sz==4 && a_sz==0) { |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
876 gl_internal_format=GL_RGB4; |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
877 gl_internal_format_s="GL_RGB4"; |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
878 } else if(r_sz==5 && g_sz==5 && b_sz==5 && a_sz==0) { |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
879 gl_internal_format=GL_RGB5; |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
880 gl_internal_format_s="GL_RGB5"; |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
881 } else if(r_sz==8 && g_sz==8 && b_sz==8 && a_sz==0) { |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
882 gl_internal_format=GL_RGB8; |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
883 gl_internal_format_s="GL_RGB8"; |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
884 } else if(r_sz==10 && g_sz==10 && b_sz==10 && a_sz==0) { |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
885 gl_internal_format=GL_RGB10; |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
886 gl_internal_format_s="GL_RGB10"; |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
887 } else if(r_sz==2 && g_sz==2 && b_sz==2 && a_sz==2) { |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
888 gl_internal_format=GL_RGBA2; |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
889 gl_internal_format_s="GL_RGBA2"; |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
890 } else if(r_sz==4 && g_sz==4 && b_sz==4 && a_sz==4) { |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
891 gl_internal_format=GL_RGBA4; |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
892 gl_internal_format_s="GL_RGBA4"; |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
893 } else if(r_sz==5 && g_sz==5 && b_sz==5 && a_sz==1) { |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
894 gl_internal_format=GL_RGB5_A1; |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
895 gl_internal_format_s="GL_RGB5_A1"; |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
896 } else if(r_sz==8 && g_sz==8 && b_sz==8 && a_sz==8) { |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
897 gl_internal_format=GL_RGBA8; |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
898 gl_internal_format_s="GL_RGBA8"; |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
899 } else if(r_sz==10 && g_sz==10 && b_sz==10 && a_sz==2) { |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
900 gl_internal_format=GL_RGB10_A2; |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
901 gl_internal_format_s="GL_RGB10_A2"; |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
902 } else { |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
903 gl_internal_format=GL_RGB; |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
904 gl_internal_format_s="GL_RGB"; |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
905 } |
2124 | 906 |
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
|
907 #ifdef TEXTUREFORMAT_ALWAYS |
12762
cf8979836dc5
100l, OSX compile fix, patch by Steven Schulz (sms (at) 2BSD (dot) com)
reimar
parents:
12750
diff
changeset
|
908 gl_internal_format=TEXTUREFORMAT_ALWAYS; |
cf8979836dc5
100l, OSX compile fix, patch by Steven Schulz (sms (at) 2BSD (dot) com)
reimar
parents:
12750
diff
changeset
|
909 gl_internal_format_s=TEXTUREFORMAT_ALWAYS_S; |
10143
fd3cbeb388f0
removed broken swscaler support, added runtime fullscreens switching ability, and some other general cleanup thingies
alex
parents:
8254
diff
changeset
|
910 #endif |
fd3cbeb388f0
removed broken swscaler support, added runtime fullscreens switching ability, and some other general cleanup thingies
alex
parents:
8254
diff
changeset
|
911 |
fd3cbeb388f0
removed broken swscaler support, added runtime fullscreens switching ability, and some other general cleanup thingies
alex
parents:
8254
diff
changeset
|
912 if (IMGFMT_IS_BGR(format)) |
2276
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
913 { |
10143
fd3cbeb388f0
removed broken swscaler support, added runtime fullscreens switching ability, and some other general cleanup thingies
alex
parents:
8254
diff
changeset
|
914 image_mode=MODE_BGR; |
fd3cbeb388f0
removed broken swscaler support, added runtime fullscreens switching ability, and some other general cleanup thingies
alex
parents:
8254
diff
changeset
|
915 image_bpp=IMGFMT_BGR_DEPTH(format); |
fd3cbeb388f0
removed broken swscaler support, added runtime fullscreens switching ability, and some other general cleanup thingies
alex
parents:
8254
diff
changeset
|
916 } |
fd3cbeb388f0
removed broken swscaler support, added runtime fullscreens switching ability, and some other general cleanup thingies
alex
parents:
8254
diff
changeset
|
917 else |
fd3cbeb388f0
removed broken swscaler support, added runtime fullscreens switching ability, and some other general cleanup thingies
alex
parents:
8254
diff
changeset
|
918 { |
fd3cbeb388f0
removed broken swscaler support, added runtime fullscreens switching ability, and some other general cleanup thingies
alex
parents:
8254
diff
changeset
|
919 image_mode=MODE_RGB; |
fd3cbeb388f0
removed broken swscaler support, added runtime fullscreens switching ability, and some other general cleanup thingies
alex
parents:
8254
diff
changeset
|
920 image_bpp=IMGFMT_RGB_DEPTH(format); |
2124 | 921 } |
922 | |
2276
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
923 image_bytes=(image_bpp+7)/8; |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
924 |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
925 draw_alpha_fnc=draw_alpha_null; |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
926 |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
927 switch(image_bpp) |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
928 { |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
929 case 15: |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
930 case 16: |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
931 if(image_mode!=MODE_BGR) |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
932 { |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
933 gl_bitmap_format = GL_RGB; |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
934 gl_bitmap_format_s ="GL_RGB"; |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
935 gl_bitmap_type = GL_UNSIGNED_SHORT_5_6_5; |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
936 gl_bitmap_type_s ="GL_UNSIGNED_SHORT_5_6_5"; |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
937 } else { |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
938 gl_bitmap_format = GL_BGR; |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
939 gl_bitmap_format_s ="GL_BGR"; |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
940 gl_bitmap_type = GL_UNSIGNED_SHORT_5_6_5; |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
941 gl_bitmap_type_s ="GL_UNSIGNED_SHORT_5_6_5"; |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
942 } |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
943 |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
944 if (image_bpp==15) |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
945 draw_alpha_fnc=draw_alpha_15; |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
946 else |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
947 draw_alpha_fnc=draw_alpha_16; |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
948 |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
949 break; |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
950 case 24: |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
951 if(image_mode!=MODE_BGR) |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
952 { |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
953 /* RGB888 */ |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
954 gl_bitmap_format = GL_RGB; |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
955 gl_bitmap_format_s ="GL_RGB"; |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
956 } else { |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
957 /* BGR888 */ |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
958 gl_bitmap_format = GL_BGR; |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
959 gl_bitmap_format_s ="GL_BGR"; |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
960 } |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
961 gl_bitmap_type = GL_UNSIGNED_BYTE; |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
962 gl_bitmap_type_s ="GL_UNSIGNED_BYTE"; |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
963 |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
964 draw_alpha_fnc=draw_alpha_24; break; |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
965 break; |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
966 case 32: |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
967 /* RGBA8888 */ |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
968 gl_bitmap_format = GL_BGRA; |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
969 gl_bitmap_format_s ="GL_BGRA"; |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
970 |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
971 if(image_mode!=MODE_BGR) |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
972 { |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
973 gl_bitmap_type = GL_UNSIGNED_INT_8_8_8_8_REV; |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
974 gl_bitmap_type_s ="GL_UNSIGNED_INT_8_8_8_8_REV"; |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
975 } else { |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
976 gl_bitmap_type = GL_UNSIGNED_INT_8_8_8_8; |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
977 gl_bitmap_type_s ="GL_UNSIGNED_INT_8_8_8_8"; |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
978 } |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
979 |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
980 draw_alpha_fnc=draw_alpha_32; break; |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
981 break; |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
982 } |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
983 |
10880
ba9557e864c0
vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
10757
diff
changeset
|
984 if (initGl(d_width, d_height) == -1) |
ba9557e864c0
vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
10757
diff
changeset
|
985 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
|
986 #ifndef GL_WIN32 |
11542 | 987 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
|
988 #endif |
2124 | 989 |
990 return 0; | |
991 } | |
992 | |
2276
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
993 static int gl_handlekey(int key) |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
994 { |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
995 if(key=='a'||key=='A') |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
996 { |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
997 gl_set_antialias(!gl_antialias); |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
998 return 0; |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
999 } |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
1000 else if(key=='b'||key=='B') |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
1001 { |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
1002 gl_set_bilinear(-1); |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
1003 return 0; |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
1004 } |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
1005 return 1; |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
1006 } |
2124 | 1007 |
10880
ba9557e864c0
vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
10757
diff
changeset
|
1008 #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
|
1009 |
ba9557e864c0
vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
10757
diff
changeset
|
1010 static void check_events(void) { |
ba9557e864c0
vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
10757
diff
changeset
|
1011 int e=vo_w32_check_events(); |
11087 | 1012 if(e&VO_EVENT_RESIZE) resize(&vo_dwidth, &vo_dheight); |
10880
ba9557e864c0
vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
10757
diff
changeset
|
1013 if(e&VO_EVENT_EXPOSE && int_pause) flip_page(); |
ba9557e864c0
vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
10757
diff
changeset
|
1014 } |
ba9557e864c0
vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
10757
diff
changeset
|
1015 |
ba9557e864c0
vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
10757
diff
changeset
|
1016 #else |
ba9557e864c0
vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
10757
diff
changeset
|
1017 |
2124 | 1018 static void check_events(void) |
1019 { | |
2276
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
1020 XEvent Event; |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
1021 char buf[100]; |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
1022 KeySym keySym; |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
1023 int key; |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
1024 static XComposeStatus stat; |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
1025 int e; |
10757
3aea64e0d6d9
Avoid flickering during resizes. Keep video contents even when paused. Fix by Tomas Simonaitis <haden@homelan.lt>
mosu
parents:
10604
diff
changeset
|
1026 |
2276
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
1027 while ( XPending( mDisplay ) ) |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
1028 { |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
1029 XNextEvent( mDisplay,&Event ); |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
1030 if( Event.type == KeyPress ) |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
1031 { |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
1032 |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
1033 XLookupString( &Event.xkey,buf,sizeof(buf),&keySym,&stat ); |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
1034 key = (keySym&0xff00) != 0? ( (keySym&0x00ff) + 256 ) |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
1035 : ( keySym ) ; |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
1036 if(gl_handlekey(key)) |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
1037 XPutBackEvent(mDisplay, &Event); |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
1038 break; |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
1039 } else { |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
1040 XPutBackEvent(mDisplay, &Event); |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
1041 break; |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
1042 } |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
1043 } |
10757
3aea64e0d6d9
Avoid flickering during resizes. Keep video contents even when paused. Fix by Tomas Simonaitis <haden@homelan.lt>
mosu
parents:
10604
diff
changeset
|
1044 e=vo_x11_check_events(mDisplay); |
11087 | 1045 if(e&VO_EVENT_RESIZE) resize(&vo_dwidth, &vo_dheight); |
10757
3aea64e0d6d9
Avoid flickering during resizes. Keep video contents even when paused. Fix by Tomas Simonaitis <haden@homelan.lt>
mosu
parents:
10604
diff
changeset
|
1046 if(e&VO_EVENT_EXPOSE && int_pause) flip_page(); |
2124 | 1047 } |
1048 | |
10880
ba9557e864c0
vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
10757
diff
changeset
|
1049 #endif |
ba9557e864c0
vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
10757
diff
changeset
|
1050 |
2124 | 1051 static void draw_osd(void) |
12446
59cd81e2e1ef
fixed memory leak and removed unnecessary static variable
reimar
parents:
12394
diff
changeset
|
1052 { |
59cd81e2e1ef
fixed memory leak and removed unnecessary static variable
reimar
parents:
12394
diff
changeset
|
1053 if (ImageData) |
59cd81e2e1ef
fixed memory leak and removed unnecessary static variable
reimar
parents:
12394
diff
changeset
|
1054 vo_draw_text(image_width,image_height,draw_alpha_fnc); |
59cd81e2e1ef
fixed memory leak and removed unnecessary static variable
reimar
parents:
12394
diff
changeset
|
1055 } |
2124 | 1056 |
1057 static void | |
1058 flip_page(void) | |
1059 { | |
1060 | |
1061 drawTextureDisplay(); | |
1062 | |
1063 // glFlush(); | |
1064 glFinish(); | |
10880
ba9557e864c0
vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
10757
diff
changeset
|
1065 #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
|
1066 SwapBuffers(vo_hdc); |
ba9557e864c0
vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
10757
diff
changeset
|
1067 #else |
6095 | 1068 glXSwapBuffers( mDisplay,vo_window ); |
10880
ba9557e864c0
vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
10757
diff
changeset
|
1069 #endif |
12394
b3ff1a576b8c
clear buffer after (glX)SwapBuffers in fullscreen to avoid flickering borders
reimar
parents:
12382
diff
changeset
|
1070 |
b3ff1a576b8c
clear buffer after (glX)SwapBuffers in fullscreen to avoid flickering borders
reimar
parents:
12382
diff
changeset
|
1071 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
|
1072 glClear (GL_COLOR_BUFFER_BIT); |
2124 | 1073 } |
1074 | |
1075 //static inline uint32_t draw_slice_x11(uint8_t *src[], uint32_t slice_num) | |
1076 static uint32_t draw_slice(uint8_t *src[], int stride[], int w,int h,int x,int y) | |
1077 { | |
2276
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
1078 return 0; |
2124 | 1079 } |
1080 | |
1081 static inline uint32_t | |
1082 draw_frame_x11_bgr(uint8_t *src[]) | |
1083 { | |
2276
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
1084 resetTexturePointers((unsigned char *)src[0]); |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
1085 ImageData=(unsigned char *)src[0]; |
2124 | 1086 |
2276
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
1087 // for(i=0;i<image_height;i++) ImageData[image_width*image_bytes*i+20]=128; |
2124 | 1088 |
2276
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
1089 setupTextureDirtyArea(0, 0, image_width, image_height); |
2124 | 1090 return 0; |
1091 } | |
1092 | |
1093 static inline uint32_t | |
1094 draw_frame_x11_rgb(uint8_t *src[]) | |
1095 { | |
2276
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
1096 resetTexturePointers((unsigned char *)src[0]); |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
1097 ImageData=(unsigned char *)src[0]; |
2124 | 1098 |
2276
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
1099 setupTextureDirtyArea(0, 0, image_width, image_height); |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
1100 return 0; |
2124 | 1101 } |
1102 | |
1103 | |
1104 static uint32_t | |
1105 draw_frame(uint8_t *src[]) | |
1106 { | |
1107 uint32_t res = 0; | |
1108 | |
10143
fd3cbeb388f0
removed broken swscaler support, added runtime fullscreens switching ability, and some other general cleanup thingies
alex
parents:
8254
diff
changeset
|
1109 if (IMGFMT_IS_RGB(image_format)) |
2124 | 1110 res = draw_frame_x11_rgb(src); |
1111 else | |
1112 res = draw_frame_x11_bgr(src); | |
1113 | |
1114 return res; | |
1115 } | |
1116 | |
1117 static uint32_t | |
1118 query_format(uint32_t format) | |
1119 { | |
1120 switch(format){ | |
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
|
1121 #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
|
1122 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
|
1123 #else |
10143
fd3cbeb388f0
removed broken swscaler support, added runtime fullscreens switching ability, and some other general cleanup thingies
alex
parents:
8254
diff
changeset
|
1124 case IMGFMT_RGB24: |
fd3cbeb388f0
removed broken swscaler support, added runtime fullscreens switching ability, and some other general cleanup thingies
alex
parents:
8254
diff
changeset
|
1125 case IMGFMT_BGR24: |
fd3cbeb388f0
removed broken swscaler support, added runtime fullscreens switching ability, and some other general cleanup thingies
alex
parents:
8254
diff
changeset
|
1126 // case IMGFMT_RGB32: |
fd3cbeb388f0
removed broken swscaler support, added runtime fullscreens switching ability, and some other general cleanup thingies
alex
parents:
8254
diff
changeset
|
1127 // 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
|
1128 #endif |
6212 | 1129 return VFCAP_CSP_SUPPORTED | VFCAP_CSP_SUPPORTED_BY_HW | VFCAP_OSD; |
2124 | 1130 } |
1131 return 0; | |
1132 } | |
1133 | |
1134 | |
1135 static void | |
1136 uninit(void) | |
1137 { | |
6095 | 1138 if ( !vo_config_count ) return; |
13877 | 1139 #ifndef GL_WIN32 |
13871 | 1140 releaseGlContext(&gl_vinfo, &gl_context); |
13877 | 1141 #endif |
13540 | 1142 if (texgrid) { |
1143 free(texgrid); | |
1144 texgrid = NULL; | |
1145 } | |
10880
ba9557e864c0
vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
10757
diff
changeset
|
1146 #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
|
1147 vo_w32_uninit(); |
ba9557e864c0
vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
10757
diff
changeset
|
1148 #else |
6095 | 1149 vo_x11_uninit(); |
10880
ba9557e864c0
vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
10757
diff
changeset
|
1150 #endif |
2124 | 1151 } |
4352 | 1152 |
1153 static uint32_t preinit(const char *arg) | |
1154 { | |
4737
32e1f5042f65
I don't like such reports: '-vo dga:vidix or -vo x11:vidix works fine for me'
nick
parents:
4658
diff
changeset
|
1155 if(arg) |
32e1f5042f65
I don't like such reports: '-vo dga:vidix or -vo x11:vidix works fine for me'
nick
parents:
4658
diff
changeset
|
1156 { |
11988 | 1157 mp_msg(MSGT_VO, MSGL_FATAL, "[gl2] Unknown subdevice: %s\n",arg); |
4737
32e1f5042f65
I don't like such reports: '-vo dga:vidix or -vo x11:vidix works fine for me'
nick
parents:
4658
diff
changeset
|
1158 return ENOSYS; |
32e1f5042f65
I don't like such reports: '-vo dga:vidix or -vo x11:vidix works fine for me'
nick
parents:
4658
diff
changeset
|
1159 } |
7931 | 1160 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
|
1161 return 0; |
4352 | 1162 } |
1163 | |
4596 | 1164 static uint32_t control(uint32_t request, void *data, ...) |
4352 | 1165 { |
4592
5fbfd8545c3b
query_ stuff replaced by new control() - patch by David Holm
arpi
parents:
4440
diff
changeset
|
1166 switch (request) { |
10757
3aea64e0d6d9
Avoid flickering during resizes. Keep video contents even when paused. Fix by Tomas Simonaitis <haden@homelan.lt>
mosu
parents:
10604
diff
changeset
|
1167 case VOCTRL_PAUSE: return (int_pause=1); |
3aea64e0d6d9
Avoid flickering during resizes. Keep video contents even when paused. Fix by Tomas Simonaitis <haden@homelan.lt>
mosu
parents:
10604
diff
changeset
|
1168 case VOCTRL_RESUME: return (int_pause=0); |
4592
5fbfd8545c3b
query_ stuff replaced by new control() - patch by David Holm
arpi
parents:
4440
diff
changeset
|
1169 case VOCTRL_QUERY_FORMAT: |
5fbfd8545c3b
query_ stuff replaced by new control() - patch by David Holm
arpi
parents:
4440
diff
changeset
|
1170 return query_format(*((uint32_t*)data)); |
12382 | 1171 case VOCTRL_GUISUPPORT: |
1172 return VO_TRUE; | |
11542 | 1173 case VOCTRL_ONTOP: |
1174 #ifdef GL_WIN32 | |
1175 vo_w32_ontop(); | |
1176 #else | |
1177 vo_x11_ontop(); | |
1178 #endif | |
1179 return VO_TRUE; | |
10143
fd3cbeb388f0
removed broken swscaler support, added runtime fullscreens switching ability, and some other general cleanup thingies
alex
parents:
8254
diff
changeset
|
1180 case VOCTRL_FULLSCREEN: |
10880
ba9557e864c0
vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
10757
diff
changeset
|
1181 #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
|
1182 vo_w32_fullscreen(); |
ba9557e864c0
vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
10757
diff
changeset
|
1183 initGl(vo_dwidth, vo_dheight); |
ba9557e864c0
vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
10757
diff
changeset
|
1184 #else |
10143
fd3cbeb388f0
removed broken swscaler support, added runtime fullscreens switching ability, and some other general cleanup thingies
alex
parents:
8254
diff
changeset
|
1185 vo_x11_fullscreen(); |
10880
ba9557e864c0
vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
10757
diff
changeset
|
1186 #endif |
10143
fd3cbeb388f0
removed broken swscaler support, added runtime fullscreens switching ability, and some other general cleanup thingies
alex
parents:
8254
diff
changeset
|
1187 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
|
1188 #ifndef GL_WIN32 |
7964
143d730908ae
here is a somewhat generic equalizer implementation for the X11 vo drivers
arpi
parents:
7931
diff
changeset
|
1189 case VOCTRL_SET_EQUALIZER: |
143d730908ae
here is a somewhat generic equalizer implementation for the X11 vo drivers
arpi
parents:
7931
diff
changeset
|
1190 { |
143d730908ae
here is a somewhat generic equalizer implementation for the X11 vo drivers
arpi
parents:
7931
diff
changeset
|
1191 va_list ap; |
143d730908ae
here is a somewhat generic equalizer implementation for the X11 vo drivers
arpi
parents:
7931
diff
changeset
|
1192 int value; |
143d730908ae
here is a somewhat generic equalizer implementation for the X11 vo drivers
arpi
parents:
7931
diff
changeset
|
1193 |
143d730908ae
here is a somewhat generic equalizer implementation for the X11 vo drivers
arpi
parents:
7931
diff
changeset
|
1194 va_start(ap, data); |
143d730908ae
here is a somewhat generic equalizer implementation for the X11 vo drivers
arpi
parents:
7931
diff
changeset
|
1195 value = va_arg(ap, int); |
143d730908ae
here is a somewhat generic equalizer implementation for the X11 vo drivers
arpi
parents:
7931
diff
changeset
|
1196 va_end(ap); |
143d730908ae
here is a somewhat generic equalizer implementation for the X11 vo drivers
arpi
parents:
7931
diff
changeset
|
1197 return vo_x11_set_equalizer(data, value); |
143d730908ae
here is a somewhat generic equalizer implementation for the X11 vo drivers
arpi
parents:
7931
diff
changeset
|
1198 } |
143d730908ae
here is a somewhat generic equalizer implementation for the X11 vo drivers
arpi
parents:
7931
diff
changeset
|
1199 case VOCTRL_GET_EQUALIZER: |
143d730908ae
here is a somewhat generic equalizer implementation for the X11 vo drivers
arpi
parents:
7931
diff
changeset
|
1200 { |
143d730908ae
here is a somewhat generic equalizer implementation for the X11 vo drivers
arpi
parents:
7931
diff
changeset
|
1201 va_list ap; |
143d730908ae
here is a somewhat generic equalizer implementation for the X11 vo drivers
arpi
parents:
7931
diff
changeset
|
1202 int *value; |
143d730908ae
here is a somewhat generic equalizer implementation for the X11 vo drivers
arpi
parents:
7931
diff
changeset
|
1203 |
143d730908ae
here is a somewhat generic equalizer implementation for the X11 vo drivers
arpi
parents:
7931
diff
changeset
|
1204 va_start(ap, data); |
143d730908ae
here is a somewhat generic equalizer implementation for the X11 vo drivers
arpi
parents:
7931
diff
changeset
|
1205 value = va_arg(ap, int *); |
143d730908ae
here is a somewhat generic equalizer implementation for the X11 vo drivers
arpi
parents:
7931
diff
changeset
|
1206 va_end(ap); |
143d730908ae
here is a somewhat generic equalizer implementation for the X11 vo drivers
arpi
parents:
7931
diff
changeset
|
1207 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
|
1208 } |
10880
ba9557e864c0
vo_gl2 port to win32 patch by Tristan Seligmann <mithrandi-mplayer-dev-eng at mithrandi.za.net>
faust3
parents:
10757
diff
changeset
|
1209 #endif |
4592
5fbfd8545c3b
query_ stuff replaced by new control() - patch by David Holm
arpi
parents:
4440
diff
changeset
|
1210 } |
5fbfd8545c3b
query_ stuff replaced by new control() - patch by David Holm
arpi
parents:
4440
diff
changeset
|
1211 return VO_NOTIMPL; |
4352 | 1212 } |