Mercurial > mplayer.hg
annotate libvo/vo_gl2.c @ 2703:4e321443413f
Quick hack to don't use ldivxencode on systems where it'S not installed.
This should be improved: add compile check to configure (with sth. from encore2.h I guess), seperate divxdecore and encore as only one of them could possibly be
installed, add ifdefs to code so it doesn't spit errors about missing headers if no divx4 is present.
(I don't currently have installed divx4 so I only did the quick hack for first).
author | atmos4 |
---|---|
date | Mon, 05 Nov 2001 02:04:10 +0000 |
parents | 712a46dff92d |
children | ae79207a3055 |
rev | line source |
---|---|
2124 | 1 #define DISP |
2 | |
3 /* | |
4 * video_out_gl.c, X11/OpenGL interface | |
5 * based on video_out_x11 by Aaron Holtzman, | |
6 * and WS opengl window manager by Pontscho/Fresh! | |
7 */ | |
8 | |
9 #include <stdio.h> | |
10 #include <stdlib.h> | |
11 #include <string.h> | |
12 #include <math.h> | |
13 | |
14 #include "config.h" | |
15 #include "video_out.h" | |
16 #include "video_out_internal.h" | |
17 | |
18 LIBVO_EXTERN(gl2) | |
19 | |
20 #include <X11/Xlib.h> | |
21 #include <X11/Xutil.h> | |
22 //#include <X11/keysym.h> | |
23 #include <GL/glx.h> | |
24 #include <errno.h> | |
25 #include "yuv2rgb.h" | |
26 | |
27 #include <GL/gl.h> | |
28 | |
29 #include "x11_common.h" | |
30 #include "aspect.h" | |
31 | |
32 #define NDEBUG | |
2276
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
33 //#undef NDEBUG |
2124 | 34 |
35 static vo_info_t vo_info = | |
36 { | |
2126 | 37 "X11 (OpenGL) - multiple textures version", |
2124 | 38 "gl2", |
2126 | 39 "Arpad Gereoffy & Sven Goethel", |
2124 | 40 "" |
41 }; | |
42 | |
43 /* private prototypes */ | |
44 | |
2455 | 45 static const char * tweaks_used = |
46 #ifdef HAVE_MMX | |
47 "mmx_bpp" | |
48 #else | |
49 "none" | |
50 #endif | |
51 ; | |
52 | |
2124 | 53 /* local data */ |
2276
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
54 static unsigned char *ImageDataLocal=NULL; |
2124 | 55 static unsigned char *ImageData=NULL; |
56 | |
57 /* X11 related variables */ | |
58 static Window mywindow; | |
59 static int X_already_started = 0; | |
60 | |
61 //static int texture_id=1; | |
62 | |
63 static GLXContext wsGLXContext; | |
64 static int wsGLXAttrib[] = { GLX_RGBA, | |
65 GLX_RED_SIZE,1, | |
66 GLX_GREEN_SIZE,1, | |
67 GLX_BLUE_SIZE,1, | |
2276
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
68 GLX_ALPHA_SIZE,0, |
2124 | 69 GLX_DOUBLEBUFFER, |
70 None }; | |
71 | |
72 | |
73 static uint32_t image_width; | |
74 static uint32_t image_height; | |
75 static uint32_t image_format; | |
76 static uint32_t image_bpp; | |
2276
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
77 static int image_mode; |
2124 | 78 static uint32_t image_bytes; |
79 | |
80 static uint32_t texture_width; | |
81 static uint32_t texture_height; | |
82 static int texnumx, texnumy, memory_x_len, memory_x_start_offset, raw_line_len; | |
83 static GLfloat texpercx, texpercy; | |
84 static struct TexSquare * texgrid; | |
2276
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
85 static GLint gl_internal_format; |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
86 static char * gl_internal_format_s; |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
87 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
|
88 static GLint gl_bitmap_format; |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
89 static char * gl_bitmap_format_s; |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
90 static GLint gl_bitmap_type; |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
91 static char * gl_bitmap_type_s; |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
92 static int gl_alignment; |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
93 static int isGL12 = GL_FALSE; |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
94 static int isFullscreen = GL_FALSE; |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
95 |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
96 static int gl_bilinear=1; |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
97 static int gl_antialias=0; |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
98 |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
99 static int used_s=0, used_r=0, used_b=0, used_info_done=0; |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
100 |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
101 static void (*draw_alpha_fnc) |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
102 (int x0,int y0, int w,int h, unsigned char* src, unsigned char *srca, int stride); |
2124 | 103 |
104 /* The squares that are tiled to make up the game screen polygon */ | |
105 | |
106 struct TexSquare | |
107 { | |
108 GLubyte *texture; | |
109 GLuint texobj; | |
110 int isTexture; | |
111 GLfloat fx1, fy1, fx2, fy2, fx3, fy3, fx4, fy4; | |
112 GLfloat xcov, ycov; | |
2276
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
113 int isDirty; |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
114 int dirtyXoff, dirtyYoff, dirtyWidth, dirtyHeight; |
2124 | 115 }; |
116 | |
117 static void CalcFlatPoint(int x,int y,GLfloat *px,GLfloat *py) | |
118 { | |
119 *px=(float)x*texpercx; | |
120 if(*px>1.0) *px=1.0; | |
121 *py=(float)y*texpercy; | |
122 if(*py>1.0) *py=1.0; | |
123 } | |
124 | |
125 static void initTextures() | |
126 { | |
127 unsigned char *line_1=0, *line_2=0, *mem_start=0; | |
128 struct TexSquare *tsq=0; | |
129 int e_x, e_y, s, i=0; | |
130 int x=0, y=0; | |
131 GLint format=0; | |
132 GLenum err; | |
133 | |
134 /* achieve the 2**e_x:=texture_width, 2**e_y:=texture_height */ | |
135 e_x=0; s=1; | |
136 while (s<texture_width) | |
137 { s*=2; e_x++; } | |
138 texture_width=s; | |
139 | |
140 e_y=0; s=1; | |
141 while (s<texture_height) | |
142 { s*=2; e_y++; } | |
143 texture_height=s; | |
144 | |
145 | |
146 /* Test the max texture size */ | |
147 do | |
148 { | |
149 glTexImage2D (GL_PROXY_TEXTURE_2D, 0, | |
2276
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
150 gl_internal_format, |
2124 | 151 texture_width, texture_height, |
2276
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
152 0, gl_bitmap_format, gl_bitmap_type, NULL); |
2124 | 153 |
154 glGetTexLevelParameteriv | |
155 (GL_PROXY_TEXTURE_2D, 0, GL_TEXTURE_INTERNAL_FORMAT, &format); | |
156 | |
2276
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
157 if (format != gl_internal_format) |
2124 | 158 { |
2276
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
159 fprintf (stderr, "[gl2] Needed texture [%dx%d] too big, trying ", |
2124 | 160 texture_height, texture_width); |
161 | |
162 if (texture_width > texture_height) | |
163 { | |
164 e_x--; | |
165 texture_width = 1; | |
166 for (i = e_x; i > 0; i--) | |
167 texture_width *= 2; | |
168 } | |
169 else | |
170 { | |
171 e_y--; | |
172 texture_height = 1; | |
173 for (i = e_y; i > 0; i--) | |
174 texture_height *= 2; | |
175 } | |
176 | |
177 fprintf (stderr, "[%dx%d] !\n", texture_height, texture_width); | |
178 | |
179 if(texture_width < 64 || texture_height < 64) | |
180 { | |
181 fprintf (stderr, "GLERROR: Give up .. usable texture size not avaiable, or texture config error !\n"); | |
182 exit(1); | |
183 } | |
184 } | |
185 } | |
2276
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
186 while (format != gl_internal_format && texture_width > 1 && texture_height > 1); |
2124 | 187 |
188 texnumx = image_width / texture_width; | |
189 if ((image_width % texture_width) > 0) | |
190 texnumx++; | |
191 | |
192 texnumy = image_height / texture_height; | |
193 if ((image_height % texture_height) > 0) | |
194 texnumy++; | |
195 | |
2276
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
196 printf("[gl2] Creating %dx%d textures of size %dx%d ...\n", |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
197 texnumx, texnumy, texture_width,texture_height, gl_bitmap_format_s); |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
198 |
2124 | 199 /* Allocate the texture memory */ |
200 | |
201 texpercx = (GLfloat) texture_width / (GLfloat) image_width; | |
202 if (texpercx > 1.0) | |
203 texpercx = 1.0; | |
204 | |
205 texpercy = (GLfloat) texture_height / (GLfloat) image_height; | |
206 if (texpercy > 1.0) | |
207 texpercy = 1.0; | |
208 | |
209 texgrid = (struct TexSquare *) | |
210 calloc (texnumx * texnumy, sizeof (struct TexSquare)); | |
211 | |
2276
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
212 line_1 = (unsigned char *) ImageDataLocal; |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
213 line_2 = (unsigned char *) ImageDataLocal+(image_width*image_bytes); |
2124 | 214 |
2276
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
215 mem_start = (unsigned char *) ImageDataLocal; |
2124 | 216 |
217 raw_line_len = line_2 - line_1; | |
218 | |
219 memory_x_len = raw_line_len / image_bytes; | |
220 | |
221 #ifndef NDEBUG | |
2276
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
222 fprintf (stderr, "[gl2] texture-usage %d*width=%d, %d*height=%d\n", |
2124 | 223 (int) texnumx, (int) texture_width, (int) texnumy, |
224 (int) texture_height); | |
225 #endif | |
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 | |
250 /* calculate the pixel store data, | |
251 to use the machine-bitmap for our texture | |
252 */ | |
253 memory_x_start_offset = 0 * image_bytes + | |
254 x * texture_width * image_bytes; | |
255 | |
256 tsq->texture = line_1 + | |
257 y * texture_height * raw_line_len + | |
258 memory_x_start_offset; | |
259 | |
2276
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
260 tsq->isDirty=GL_TRUE; |
2124 | 261 tsq->isTexture=GL_FALSE; |
262 tsq->texobj=0; | |
2276
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
263 tsq->dirtyXoff=0; tsq->dirtyYoff=0; tsq->dirtyWidth=-1; tsq->dirtyHeight=-1; |
2124 | 264 |
265 glGenTextures (1, &(tsq->texobj)); | |
266 | |
267 glBindTexture (GL_TEXTURE_2D, tsq->texobj); | |
268 err = glGetError (); | |
269 if(err==GL_INVALID_ENUM) | |
270 { | |
271 fprintf (stderr, "GLERROR glBindTexture (glGenText) := GL_INVALID_ENUM, texnum x=%d, y=%d, texture=%d\n", x, y, tsq->texobj); | |
272 } | |
273 | |
274 if(glIsTexture(tsq->texobj) == GL_FALSE) | |
275 { | |
276 fprintf (stderr, "GLERROR ain't a texture (glGenText): texnum x=%d, y=%d, texture=%d\n", | |
277 x, y, tsq->texobj); | |
278 } else { | |
279 tsq->isTexture=GL_TRUE; | |
280 } | |
281 | |
282 glTexImage2D (GL_TEXTURE_2D, 0, | |
2276
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
283 gl_internal_format, |
2124 | 284 texture_width, texture_height, |
2276
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
285 0, gl_bitmap_format, gl_bitmap_type, NULL); |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
286 |
2124 | 287 glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_PRIORITY, 1.0); |
288 | |
289 glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); | |
290 glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); | |
291 | |
292 glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP); | |
293 glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP); | |
294 | |
295 glTexEnvf (GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); | |
296 | |
297 } /* for all texnumx */ | |
298 } /* for all texnumy */ | |
299 } | |
300 | |
2276
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
301 static void resetTexturePointers(unsigned char *imageSource) |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
302 { |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
303 unsigned char *line_1=0, *line_2=0, *mem_start=0; |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
304 struct TexSquare *tsq=0; |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
305 int x=0, y=0; |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
306 |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
307 line_1 = (unsigned char *) imageSource; |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
308 line_2 = (unsigned char *) imageSource+(image_width*image_bytes); |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
309 |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
310 mem_start = (unsigned char *) imageSource; |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
311 |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
312 for (y = 0; y < texnumy; y++) |
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 for (x = 0; x < texnumx; x++) |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
315 { |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
316 tsq = texgrid + y * texnumx + x; |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
317 |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
318 /* calculate the pixel store data, |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
319 to use the machine-bitmap for our texture |
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 memory_x_start_offset = 0 * image_bytes + |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
322 x * texture_width * image_bytes; |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
323 |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
324 tsq->texture = line_1 + |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
325 y * texture_height * raw_line_len + |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
326 memory_x_start_offset; |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
327 |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
328 } /* for all texnumx */ |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
329 } /* for all texnumy */ |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
330 } |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
331 |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
332 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
|
333 { |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
334 struct TexSquare *square; |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
335 int xi, yi, wd, ht, wh, hh; |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
336 int wdecr, hdecr, xh, yh; |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
337 |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
338 wdecr=w; hdecr=h; xh=x; yh=y; |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
339 |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
340 for (yi = 0; hdecr>0 && yi < texnumy; yi++) |
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 (yi < texnumy - 1) |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
343 ht = texture_height; |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
344 else |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
345 ht = image_height - texture_height * yi; |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
346 |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
347 xh =x; |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
348 wdecr =w; |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
349 |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
350 for (xi = 0; wdecr>0 && xi < texnumx; xi++) |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
351 { |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
352 square = texgrid + yi * texnumx + xi; |
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 if (xi < texnumx - 1) |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
355 wd = texture_width; |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
356 else |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
357 wd = image_width - texture_width * xi; |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
358 |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
359 if( 0 <= xh && xh < wd && |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
360 0 <= yh && yh < ht |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
361 ) |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
362 { |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
363 square->isDirty=GL_TRUE; |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
364 |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
365 wh=(wdecr<wd)?wdecr:wd-xh; |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
366 if(wh<0) wh=0; |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
367 |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
368 hh=(hdecr<ht)?hdecr:ht-yh; |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
369 if(hh<0) hh=0; |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
370 |
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 #ifndef NDEBUG |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
373 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
|
374 xi, yi, xh, yh, wdecr, hdecr, xh, yh, wh, hh); |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
375 #endif |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
376 */ |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
377 |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
378 if(xh<square->dirtyXoff) |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
379 square->dirtyXoff=xh; |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
380 |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
381 if(yh<square->dirtyYoff) |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
382 square->dirtyYoff=yh; |
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 square->dirtyWidth = wd-square->dirtyXoff; |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
385 square->dirtyHeight = ht-square->dirtyYoff; |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
386 |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
387 wdecr-=wh; |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
388 |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
389 if ( xi == texnumx - 1 ) |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
390 hdecr-=hh; |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
391 } |
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 xh-=wd; |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
394 if(xh<0) xh=0; |
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 yh-=ht; |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
397 if(yh<0) yh=0; |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
398 } |
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 |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
401 static void gl_set_bilinear (int val) |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
402 { |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
403 int x, y; |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
404 |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
405 if(val>=0) |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
406 gl_bilinear = val; |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
407 else |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
408 gl_bilinear++; |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
409 |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
410 gl_bilinear=gl_bilinear%2; |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
411 /* no mipmap yet .. */ |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
412 |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
413 for (y = 0; y < texnumy; y++) |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
414 { |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
415 for (x = 0; x < texnumx; x++) |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
416 { |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
417 glBindTexture (GL_TEXTURE_2D, texgrid[y * texnumx + x].texobj); |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
418 |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
419 switch (gl_bilinear) |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
420 { |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
421 case 0: |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
422 glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
423 GL_NEAREST); |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
424 glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
425 GL_NEAREST); |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
426 printf("[gl2] bilinear off\n"); |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
427 break; |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
428 case 1: |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
429 glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
430 GL_LINEAR); |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
431 glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
432 GL_LINEAR); |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
433 printf("[gl2] bilinear linear\n"); |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
434 break; |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
435 case 2: |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
436 glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
437 GL_LINEAR_MIPMAP_NEAREST); |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
438 glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
439 GL_LINEAR_MIPMAP_NEAREST); |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
440 printf("[gl2] bilinear mipmap nearest\n"); |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
441 break; |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
442 case 3: |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
443 glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
444 GL_LINEAR_MIPMAP_LINEAR); |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
445 glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
446 GL_LINEAR_MIPMAP_LINEAR); |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
447 printf("[gl2] bilinear mipmap linear\n"); |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
448 break; |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
449 } |
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 } |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
452 fflush(0); |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
453 } |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
454 |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
455 static void gl_set_antialias (int val) |
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 gl_antialias=val; |
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 if (gl_antialias) |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
460 { |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
461 glShadeModel (GL_SMOOTH); |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
462 glEnable (GL_POLYGON_SMOOTH); |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
463 glEnable (GL_LINE_SMOOTH); |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
464 glEnable (GL_POINT_SMOOTH); |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
465 printf("[gl2] antialiasing on\n"); |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
466 } |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
467 else |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
468 { |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
469 glShadeModel (GL_FLAT); |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
470 glDisable (GL_POLYGON_SMOOTH); |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
471 glDisable (GL_LINE_SMOOTH); |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
472 glDisable (GL_POINT_SMOOTH); |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
473 printf("[gl2] antialiasing off\n"); |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
474 } |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
475 fflush(0); |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
476 } |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
477 |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
478 |
2124 | 479 static void drawTextureDisplay () |
480 { | |
481 struct TexSquare *square; | |
482 int x, y, xoff=0, yoff=0, wd, ht; | |
483 GLenum err; | |
484 | |
485 glColor3f(1.0,1.0,1.0); | |
486 | |
487 for (y = 0; y < texnumy; y++) | |
488 { | |
489 for (x = 0; x < texnumx; x++) | |
490 { | |
491 square = texgrid + y * texnumx + x; | |
492 | |
493 if(square->isTexture==GL_FALSE) | |
494 { | |
495 #ifndef NDEBUG | |
2276
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
496 fprintf (stderr, "[gl2] ain't a texture(update): texnum x=%d, y=%d, texture=%d\n", |
2124 | 497 x, y, square->texobj); |
498 #endif | |
499 continue; | |
500 } | |
501 | |
502 glBindTexture (GL_TEXTURE_2D, square->texobj); | |
503 err = glGetError (); | |
504 if(err==GL_INVALID_ENUM) | |
505 { | |
506 fprintf (stderr, "GLERROR glBindTexture := GL_INVALID_ENUM, texnum x=%d, y=%d, texture=%d\n", x, y, square->texobj); | |
507 } | |
508 #ifndef NDEBUG | |
509 else if(err==GL_INVALID_OPERATION) { | |
510 fprintf (stderr, "GLERROR glBindTexture := GL_INVALID_OPERATION, texnum x=%d, y=%d, texture=%d\n", x, y, square->texobj); | |
511 } | |
512 #endif | |
513 | |
514 if(glIsTexture(square->texobj) == GL_FALSE) | |
515 { | |
516 square->isTexture=GL_FALSE; | |
517 fprintf (stderr, "GLERROR ain't a texture(update): texnum x=%d, y=%d, texture=%d\n", | |
518 x, y, square->texobj); | |
519 } | |
520 | |
2276
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
521 if(square->isDirty) |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
522 { |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
523 glTexSubImage2D (GL_TEXTURE_2D, 0, |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
524 square->dirtyXoff, square->dirtyYoff, |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
525 square->dirtyWidth, square->dirtyHeight, |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
526 gl_bitmap_format, gl_bitmap_type, square->texture); |
2124 | 527 |
2276
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
528 square->isDirty=GL_FALSE; |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
529 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
|
530 } |
2124 | 531 |
532 #ifndef NDEBUG | |
2276
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
533 fprintf (stdout, "[gl2] glTexSubImage2D texnum x=%d, y=%d, %d/%d - %d/%d\n", |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
534 x, y, square->dirtyXoff, square->dirtyYoff, square->dirtyWidth, square->dirtyHeight); |
2124 | 535 #endif |
536 | |
537 glBegin(GL_QUADS); | |
538 | |
539 glTexCoord2f (0, 0); | |
540 glVertex2f (square->fx1, square->fy1); | |
541 | |
542 glTexCoord2f (0, square->ycov); | |
543 glVertex2f (square->fx4, square->fy4); | |
544 | |
545 glTexCoord2f (square->xcov, square->ycov); | |
546 glVertex2f (square->fx3, square->fy3); | |
547 | |
548 glTexCoord2f (square->xcov, 0); | |
549 glVertex2f (square->fx2, square->fy2); | |
550 | |
2276
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
551 glEnd(); |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
552 /* |
2124 | 553 #ifndef NDEBUG |
2276
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
554 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 | 555 square->fx3, square->fy3, square->fx2, square->fy2); |
556 #endif | |
2276
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
557 */ |
2124 | 558 } /* for all texnumx */ |
559 } /* for all texnumy */ | |
560 | |
561 /* YES - lets catch this error ... | |
562 */ | |
563 (void) glGetError (); | |
564 } | |
565 | |
566 | |
567 static void resize(int x,int y){ | |
2276
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
568 printf("[gl2] Resize: %dx%d\n",x,y); |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
569 if( isFullscreen ) |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
570 glViewport( (vo_screenwidth-x)/2, (vo_screenheight-y)/2, x, y); |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
571 else |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
572 glViewport( 0, 0, x, y ); |
2124 | 573 |
574 glMatrixMode(GL_PROJECTION); | |
575 glLoadIdentity(); | |
576 glOrtho (0, 1, 1, 0, -1.0, 1.0); | |
577 | |
578 glMatrixMode(GL_MODELVIEW); | |
579 glLoadIdentity(); | |
580 } | |
581 | |
2276
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
582 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
|
583 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
|
584 } |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
585 |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
586 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
|
587 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
|
588 } |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
589 |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
590 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
|
591 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
|
592 } |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
593 |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
594 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
|
595 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
|
596 } |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
597 |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
598 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
|
599 } |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
600 |
2124 | 601 /* connect to server, create and map window, |
602 * allocate colors and (shared) memory | |
603 */ | |
604 static uint32_t | |
605 init(uint32_t width, uint32_t height, uint32_t d_width, uint32_t d_height, uint32_t flags, char *title, uint32_t format) | |
606 { | |
607 // int screen; | |
608 unsigned int fg, bg; | |
609 char *hello = (title == NULL) ? "OpenGL rulez" : title; | |
610 // char *name = ":0.0"; | |
611 XSizeHints hint; | |
612 XVisualInfo *vinfo; | |
613 XEvent xev; | |
614 | |
615 // XGCValues xgcv; | |
616 XSetWindowAttributes xswa; | |
617 unsigned long xswamask; | |
618 | |
2276
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
619 const unsigned char * glVersion; |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
620 |
2124 | 621 image_height = height; |
622 image_width = width; | |
623 image_format = format; | |
624 | |
625 if (X_already_started) return -1; | |
626 if(!vo_init()) return -1; | |
627 | |
2278
54874c78af6b
aspect changes integrated .., please check performance and conformance
sven
parents:
2276
diff
changeset
|
628 aspect_save_orig(width,height); |
54874c78af6b
aspect changes integrated .., please check performance and conformance
sven
parents:
2276
diff
changeset
|
629 aspect_save_prescale(d_width,d_height); |
54874c78af6b
aspect changes integrated .., please check performance and conformance
sven
parents:
2276
diff
changeset
|
630 aspect_save_screenres(vo_screenwidth,vo_screenheight); |
54874c78af6b
aspect changes integrated .., please check performance and conformance
sven
parents:
2276
diff
changeset
|
631 |
54874c78af6b
aspect changes integrated .., please check performance and conformance
sven
parents:
2276
diff
changeset
|
632 aspect(&d_width,&d_height,A_NOZOOM); |
54874c78af6b
aspect changes integrated .., please check performance and conformance
sven
parents:
2276
diff
changeset
|
633 |
2124 | 634 X_already_started++; |
635 | |
2276
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
636 if( flags&0x01 ) |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
637 { |
2278
54874c78af6b
aspect changes integrated .., please check performance and conformance
sven
parents:
2276
diff
changeset
|
638 isFullscreen = GL_TRUE; |
54874c78af6b
aspect changes integrated .., please check performance and conformance
sven
parents:
2276
diff
changeset
|
639 aspect(&d_width,&d_height,A_ZOOM); |
2276
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
640 hint.x = 0; |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
641 hint.y = 0; |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
642 hint.width = vo_screenwidth; |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
643 hint.height = vo_screenheight; |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
644 hint.flags = PPosition | PSize; |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
645 } else { |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
646 hint.x = 0; |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
647 hint.y = 0; |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
648 hint.width = d_width; |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
649 hint.height = d_height; |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
650 hint.flags = PPosition | PSize; |
2124 | 651 } |
652 | |
653 /* Get some colors */ | |
654 | |
655 bg = WhitePixel(mDisplay, mScreen); | |
656 fg = BlackPixel(mDisplay, mScreen); | |
657 | |
658 /* Make the window */ | |
659 | |
660 // XGetWindowAttributes(mDisplay, DefaultRootWindow(mDisplay), &attribs); | |
661 | |
662 // XMatchVisualInfo(mDisplay, screen, depth, TrueColor, &vinfo); | |
663 vinfo=glXChooseVisual( mDisplay,mScreen,wsGLXAttrib ); | |
664 if (vinfo == NULL) | |
665 { | |
2276
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
666 printf("[gl2] no GLX support present\n"); |
2124 | 667 return -1; |
668 } | |
669 | |
670 xswa.background_pixel = 0; | |
671 xswa.border_pixel = 1; | |
672 xswa.colormap = XCreateColormap(mDisplay, mRootWin, vinfo->visual, AllocNone); | |
673 xswamask = CWBackPixel | CWBorderPixel | CWColormap; | |
674 | |
675 mywindow = XCreateWindow(mDisplay, RootWindow(mDisplay,mScreen), | |
676 hint.x, hint.y, hint.width, hint.height, 4, vinfo->depth,CopyFromParent,vinfo->visual,xswamask,&xswa); | |
677 | |
2276
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
678 vo_x11_classhint( mDisplay,mywindow,"gl2" ); |
2124 | 679 vo_hidecursor(mDisplay,mywindow); |
680 | |
681 wsGLXContext=glXCreateContext( mDisplay,vinfo,NULL,True ); | |
682 | |
683 if ( flags&0x01 ) vo_x11_decoration( mDisplay,mywindow,0 ); | |
684 | |
685 XSelectInput(mDisplay, mywindow, StructureNotifyMask); | |
686 | |
687 /* Tell other applications about this window */ | |
688 | |
689 XSetStandardProperties(mDisplay, mywindow, hello, hello, None, NULL, 0, &hint); | |
690 | |
691 /* Map window. */ | |
692 | |
693 XMapWindow(mDisplay, mywindow); | |
2276
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
694 XClearWindow(mDisplay,mywindow); |
2124 | 695 |
696 /* Wait for map. */ | |
697 do | |
698 { | |
699 XNextEvent(mDisplay, &xev); | |
700 } | |
701 while (xev.type != MapNotify || xev.xmap.event != mywindow); | |
702 | |
703 XSelectInput(mDisplay, mywindow, NoEventMask); | |
704 | |
705 glXMakeCurrent( mDisplay,mywindow,wsGLXContext ); | |
706 | |
707 XFlush(mDisplay); | |
708 XSync(mDisplay, False); | |
709 | |
710 //XSelectInput(mDisplay, mywindow, StructureNotifyMask); // !!!! | |
711 XSelectInput(mDisplay, mywindow, StructureNotifyMask | KeyPressMask ); | |
712 | |
2276
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
713 glVersion = glGetString(GL_VERSION); |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
714 |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
715 printf("[gl2] OpenGL Driver Information:\n"); |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
716 printf("\tvendor: %s,\n\trenderer %s,\n\tversion %s\n", |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
717 glGetString(GL_VENDOR), |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
718 glGetString(GL_RENDERER), |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
719 glVersion); |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
720 |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
721 if(glVersion[0]>'1' || |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
722 (glVersion[0]=='1' && glVersion[2]>='2') ) |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
723 isGL12 = GL_TRUE; |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
724 else |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
725 isGL12 = GL_FALSE; |
2124 | 726 |
2276
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
727 if(isGL12) |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
728 { |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
729 printf("[gl2] You have an OpenGL >= 1.2 capable drivers, GOOD (16bpp and BGR is ok !)\n"); |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
730 } else { |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
731 printf("[gl2] You have an OpenGL < 1.2 drivers, BAD (16bpp and BGR may be damaged !)\n"); |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
732 } |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
733 |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
734 if(glXGetConfig(mDisplay,vinfo,GLX_RED_SIZE, &r_sz)!=0) |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
735 r_sz=0; |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
736 if(glXGetConfig(mDisplay,vinfo,GLX_RED_SIZE, &g_sz)!=0) |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
737 g_sz=0; |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
738 if(glXGetConfig(mDisplay,vinfo,GLX_RED_SIZE, &b_sz)!=0) |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
739 b_sz=0; |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
740 if(glXGetConfig(mDisplay,vinfo,GLX_ALPHA_SIZE, &a_sz)!=0) |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
741 b_sz=0; |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
742 |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
743 rgb_sz=r_sz+g_sz+b_sz; |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
744 if(rgb_sz<=0) rgb_sz=24; |
2124 | 745 |
2276
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
746 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
|
747 gl_internal_format=GL_R3_G3_B2; |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
748 gl_internal_format_s="GL_R3_G3_B2"; |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
749 image_bpp = 8; |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
750 } 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
|
751 gl_internal_format=GL_RGB4; |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
752 gl_internal_format_s="GL_RGB4"; |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
753 image_bpp = 16; |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
754 } 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
|
755 gl_internal_format=GL_RGB5; |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
756 gl_internal_format_s="GL_RGB5"; |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
757 image_bpp = 16; |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
758 } 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
|
759 gl_internal_format=GL_RGB8; |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
760 gl_internal_format_s="GL_RGB8"; |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
761 #ifdef HAVE_MMX |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
762 image_bpp = 32; |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
763 #else |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
764 image_bpp = 24; |
2124 | 765 #endif |
2276
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
766 } 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
|
767 gl_internal_format=GL_RGB10; |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
768 gl_internal_format_s="GL_RGB10"; |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
769 image_bpp = 32; |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
770 } 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
|
771 gl_internal_format=GL_RGBA2; |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
772 gl_internal_format_s="GL_RGBA2"; |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
773 image_bpp = 8; |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
774 } 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
|
775 gl_internal_format=GL_RGBA4; |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
776 gl_internal_format_s="GL_RGBA4"; |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
777 image_bpp = 16; |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
778 } 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
|
779 gl_internal_format=GL_RGB5_A1; |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
780 gl_internal_format_s="GL_RGB5_A1"; |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
781 image_bpp = 16; |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
782 } 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
|
783 gl_internal_format=GL_RGBA8; |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
784 gl_internal_format_s="GL_RGBA8"; |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
785 #ifdef HAVE_MMX |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
786 image_bpp = 32; |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
787 #else |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
788 image_bpp = 24; |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
789 #endif |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
790 } 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
|
791 gl_internal_format=GL_RGB10_A2; |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
792 gl_internal_format_s="GL_RGB10_A2"; |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
793 image_bpp = 32; |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
794 } else { |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
795 gl_internal_format=GL_RGB; |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
796 gl_internal_format_s="GL_RGB"; |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
797 #ifdef HAVE_MMX |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
798 image_bpp = 16; |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
799 #else |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
800 image_bpp = 24; |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
801 #endif |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
802 } |
2124 | 803 |
2276
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
804 if(image_format==IMGFMT_YV12) |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
805 { |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
806 image_mode= MODE_RGB; |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
807 yuv2rgb_init(image_bpp, image_mode); |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
808 printf("[gl2] YUV init OK!\n"); |
2124 | 809 } else { |
810 image_bpp=format&0xFF; | |
2276
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
811 |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
812 if((format & IMGFMT_BGR_MASK) == IMGFMT_BGR) |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
813 image_mode= MODE_BGR; |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
814 else |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
815 image_mode= MODE_RGB; |
2124 | 816 } |
817 | |
2276
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
818 image_bytes=(image_bpp+7)/8; |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
819 |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
820 draw_alpha_fnc=draw_alpha_null; |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
821 |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
822 switch(image_bpp) |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
823 { |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
824 case 15: |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
825 case 16: |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
826 if(image_mode!=MODE_BGR) |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
827 { |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
828 gl_bitmap_format = GL_RGB; |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
829 gl_bitmap_format_s ="GL_RGB"; |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
830 gl_bitmap_type = GL_UNSIGNED_SHORT_5_6_5; |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
831 gl_bitmap_type_s ="GL_UNSIGNED_SHORT_5_6_5"; |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
832 } else { |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
833 gl_bitmap_format = GL_BGR; |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
834 gl_bitmap_format_s ="GL_BGR"; |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
835 gl_bitmap_type = GL_UNSIGNED_SHORT_5_6_5; |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
836 gl_bitmap_type_s ="GL_UNSIGNED_SHORT_5_6_5"; |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
837 } |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
838 |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
839 if (image_bpp==15) |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
840 draw_alpha_fnc=draw_alpha_15; |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
841 else |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
842 draw_alpha_fnc=draw_alpha_16; |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
843 |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
844 break; |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
845 case 24: |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
846 if(image_mode!=MODE_BGR) |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
847 { |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
848 /* RGB888 */ |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
849 gl_bitmap_format = GL_RGB; |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
850 gl_bitmap_format_s ="GL_RGB"; |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
851 } else { |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
852 /* BGR888 */ |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
853 gl_bitmap_format = GL_BGR; |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
854 gl_bitmap_format_s ="GL_BGR"; |
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 gl_bitmap_type = GL_UNSIGNED_BYTE; |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
857 gl_bitmap_type_s ="GL_UNSIGNED_BYTE"; |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
858 |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
859 draw_alpha_fnc=draw_alpha_24; break; |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
860 break; |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
861 case 32: |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
862 /* RGBA8888 */ |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
863 gl_bitmap_format = GL_BGRA; |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
864 gl_bitmap_format_s ="GL_BGRA"; |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
865 |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
866 if(image_mode!=MODE_BGR) |
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 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
|
869 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
|
870 } else { |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
871 gl_bitmap_type = GL_UNSIGNED_INT_8_8_8_8; |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
872 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
|
873 } |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
874 |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
875 draw_alpha_fnc=draw_alpha_32; break; |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
876 break; |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
877 } |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
878 |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
879 r_sz=0; g_sz=0; b_sz=0; |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
880 rgb_sz=0; |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
881 a_sz=0; |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
882 |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
883 ImageDataLocal=malloc(image_width*image_height*image_bytes); |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
884 memset(ImageDataLocal,128,image_width*image_height*image_bytes); |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
885 |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
886 ImageData=ImageDataLocal; |
2124 | 887 |
888 texture_width=image_width; | |
889 texture_height=image_height; | |
890 initTextures(); | |
891 | |
892 glDisable(GL_BLEND); | |
893 glDisable(GL_DEPTH_TEST); | |
894 glDepthMask(GL_FALSE); | |
895 glDisable(GL_CULL_FACE); | |
896 | |
897 glPixelStorei (GL_UNPACK_ROW_LENGTH, memory_x_len); | |
2276
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
898 |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
899 /** |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
900 * may give a little speed up for a kinda burst read .. |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
901 */ |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
902 if( (image_width*image_bpp)%8 == 0 ) |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
903 gl_alignment=8; |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
904 else if( (image_width*image_bpp)%4 == 0 ) |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
905 gl_alignment=4; |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
906 else if( (image_width*image_bpp)%2 == 0 ) |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
907 gl_alignment=2; |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
908 else |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
909 gl_alignment=1; |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
910 |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
911 glPixelStorei (GL_UNPACK_ALIGNMENT, gl_alignment); |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
912 |
2124 | 913 glEnable (GL_TEXTURE_2D); |
914 | |
2276
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
915 gl_set_antialias(0); |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
916 gl_set_bilinear(1); |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
917 |
2124 | 918 drawTextureDisplay (); |
919 | |
2276
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
920 printf("[gl2] Using image_bpp=%d, image_bytes=%d, isBGR=%d, \n\tgl_bitmap_format=%s, gl_bitmap_type=%s, \n\tgl_alignment=%d, rgb_size=%d (%d,%d,%d), a_sz=%d, \n\tgl_internal_format=%s, tweaks=%s\n", |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
921 image_bpp, image_bytes, image_mode==MODE_BGR, |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
922 gl_bitmap_format_s, gl_bitmap_type_s, gl_alignment, |
2455 | 923 rgb_sz, r_sz, g_sz, b_sz, a_sz, gl_internal_format_s, tweaks_used); |
2124 | 924 |
925 resize(d_width,d_height); | |
926 | |
2276
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
927 glClearColor( 0.0f,0.0f,0.0f,0.0f ); |
2124 | 928 glClear( GL_COLOR_BUFFER_BIT ); |
929 | |
2276
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
930 used_s=0; |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
931 used_r=0; |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
932 used_b=0; |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
933 used_info_done=0; |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
934 |
2124 | 935 // printf("OpenGL setup OK!\n"); |
936 | |
937 saver_off(mDisplay); // turning off screen saver | |
938 | |
939 return 0; | |
940 } | |
941 | |
942 static const vo_info_t* | |
943 get_info(void) | |
944 { | |
945 return &vo_info; | |
946 } | |
947 | |
948 static void | |
949 Terminate_Display_Process(void) | |
950 { | |
951 getchar(); /* wait for enter to remove window */ | |
952 XDestroyWindow(mDisplay, mywindow); | |
953 XCloseDisplay(mDisplay); | |
954 X_already_started = 0; | |
955 } | |
956 | |
2276
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
957 static int gl_handlekey(int key) |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
958 { |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
959 if(key=='a'||key=='A') |
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_set_antialias(!gl_antialias); |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
962 return 0; |
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 else if(key=='b'||key=='B') |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
965 { |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
966 gl_set_bilinear(-1); |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
967 return 0; |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
968 } |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
969 return 1; |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
970 } |
2124 | 971 |
972 static void check_events(void) | |
973 { | |
2276
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
974 XEvent Event; |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
975 char buf[100]; |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
976 KeySym keySym; |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
977 int key; |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
978 static XComposeStatus stat; |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
979 int e; |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
980 |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
981 while ( XPending( mDisplay ) ) |
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 XNextEvent( mDisplay,&Event ); |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
984 if( Event.type == KeyPress ) |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
985 { |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
986 |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
987 XLookupString( &Event.xkey,buf,sizeof(buf),&keySym,&stat ); |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
988 key = (keySym&0xff00) != 0? ( (keySym&0x00ff) + 256 ) |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
989 : ( keySym ) ; |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
990 if(gl_handlekey(key)) |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
991 XPutBackEvent(mDisplay, &Event); |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
992 break; |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
993 } else { |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
994 XPutBackEvent(mDisplay, &Event); |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
995 break; |
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 } |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
998 e=vo_x11_check_events(mDisplay); |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
999 if(e&VO_EVENT_RESIZE) resize(vo_dwidth,vo_dheight); |
2124 | 1000 } |
1001 | |
1002 static void draw_osd(void) | |
2276
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
1003 { vo_draw_text(image_width,image_height,draw_alpha_fnc); } |
2124 | 1004 |
1005 static void | |
1006 flip_page(void) | |
1007 { | |
1008 | |
1009 drawTextureDisplay(); | |
1010 | |
1011 // glFlush(); | |
1012 glFinish(); | |
1013 glXSwapBuffers( mDisplay,mywindow ); | |
1014 | |
2276
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
1015 if(!used_info_done) |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
1016 { |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
1017 if(used_s) printf("[gl2] using slice method yuv\n"); |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
1018 if(used_r) printf("[gl2] using frame method rgb\n"); |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
1019 if(used_b) printf("[gl2] using frame method bgr\n"); |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
1020 used_info_done=1; |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
1021 fflush(0); |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
1022 } |
2124 | 1023 } |
1024 | |
1025 //static inline uint32_t draw_slice_x11(uint8_t *src[], uint32_t slice_num) | |
1026 static uint32_t draw_slice(uint8_t *src[], int stride[], int w,int h,int x,int y) | |
1027 { | |
2276
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
1028 yuv2rgb(ImageData+y*raw_line_len, src[0], src[1], src[2], |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
1029 w,h, image_width*image_bytes, stride[0],stride[1]); |
2124 | 1030 |
1031 #ifndef NDEBUG | |
1032 printf("slice: %d/%d -> %d/%d (%dx%d)\n", | |
1033 x, y, x+w-1, y+h-1, w, h); | |
1034 #endif | |
1035 | |
2276
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
1036 used_s=1; |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
1037 |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
1038 setupTextureDirtyArea(x, y, w, h); |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
1039 |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
1040 return 0; |
2124 | 1041 } |
1042 | |
1043 static inline uint32_t | |
1044 draw_frame_x11_bgr(uint8_t *src[]) | |
1045 { | |
2276
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
1046 resetTexturePointers((unsigned char *)src[0]); |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
1047 ImageData=(unsigned char *)src[0]; |
2124 | 1048 |
2276
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
1049 // for(i=0;i<image_height;i++) ImageData[image_width*image_bytes*i+20]=128; |
2124 | 1050 |
2276
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
1051 used_b=1; |
2124 | 1052 |
2276
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
1053 setupTextureDirtyArea(0, 0, image_width, image_height); |
2124 | 1054 return 0; |
1055 } | |
1056 | |
1057 static inline uint32_t | |
1058 draw_frame_x11_rgb(uint8_t *src[]) | |
1059 { | |
2276
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
1060 resetTexturePointers((unsigned char *)src[0]); |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
1061 ImageData=(unsigned char *)src[0]; |
2124 | 1062 |
2276
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
1063 used_r=1; |
2124 | 1064 |
2276
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
1065 setupTextureDirtyArea(0, 0, image_width, image_height); |
558a9397c250
improved gl, please check performance and correct display
sven
parents:
2249
diff
changeset
|
1066 return 0; |
2124 | 1067 } |
1068 | |
1069 | |
1070 static uint32_t | |
1071 draw_frame(uint8_t *src[]) | |
1072 { | |
1073 uint32_t res = 0; | |
1074 | |
1075 if((image_format&IMGFMT_RGB_MASK)==IMGFMT_RGB) | |
1076 res = draw_frame_x11_rgb(src); | |
1077 else | |
1078 res = draw_frame_x11_bgr(src); | |
1079 | |
1080 //flip_page(); | |
1081 return res; | |
1082 } | |
1083 | |
1084 static uint32_t | |
1085 query_format(uint32_t format) | |
1086 { | |
1087 switch(format){ | |
1088 case IMGFMT_YV12: | |
1089 case IMGFMT_RGB|24: | |
1090 case IMGFMT_BGR|24: | |
1091 return 1; | |
1092 } | |
1093 return 0; | |
1094 } | |
1095 | |
1096 | |
1097 static void | |
1098 uninit(void) | |
1099 { | |
1100 saver_on(mDisplay); // screen saver back on | |
1101 XDestroyWindow( mDisplay,mywindow ); | |
1102 } |