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
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
2124
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
1 #define DISP
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
2
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
3 /*
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
4 * video_out_gl.c, X11/OpenGL interface
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
5 * based on video_out_x11 by Aaron Holtzman,
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
6 * and WS opengl window manager by Pontscho/Fresh!
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
7 */
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
8
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
9 #include <stdio.h>
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
10 #include <stdlib.h>
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
11 #include <string.h>
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
12 #include <math.h>
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
13
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
14 #include "config.h"
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
15 #include "video_out.h"
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
16 #include "video_out_internal.h"
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
17
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
18 LIBVO_EXTERN(gl2)
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
19
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
20 #include <X11/Xlib.h>
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
21 #include <X11/Xutil.h>
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
22 //#include <X11/keysym.h>
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
23 #include <GL/glx.h>
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
24 #include <errno.h>
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
25 #include "yuv2rgb.h"
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
26
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
27 #include <GL/gl.h>
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
28
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
29 #include "x11_common.h"
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
30 #include "aspect.h"
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
31
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
32 #define NDEBUG
2276
558a9397c250 improved gl, please check performance and correct display
sven
parents: 2249
diff changeset
33 //#undef NDEBUG
2124
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
34
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
35 static vo_info_t vo_info =
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
36 {
2126
724af64311c8 info & author changed
arpi
parents: 2124
diff changeset
37 "X11 (OpenGL) - multiple textures version",
2124
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
38 "gl2",
2126
724af64311c8 info & author changed
arpi
parents: 2124
diff changeset
39 "Arpad Gereoffy & Sven Goethel",
2124
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
40 ""
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
41 };
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
42
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
43 /* private prototypes */
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
44
2455
712a46dff92d printf-gcc3 patch, x11-commons mRootwin
sven
parents: 2453
diff changeset
45 static const char * tweaks_used =
712a46dff92d printf-gcc3 patch, x11-commons mRootwin
sven
parents: 2453
diff changeset
46 #ifdef HAVE_MMX
712a46dff92d printf-gcc3 patch, x11-commons mRootwin
sven
parents: 2453
diff changeset
47 "mmx_bpp"
712a46dff92d printf-gcc3 patch, x11-commons mRootwin
sven
parents: 2453
diff changeset
48 #else
712a46dff92d printf-gcc3 patch, x11-commons mRootwin
sven
parents: 2453
diff changeset
49 "none"
712a46dff92d printf-gcc3 patch, x11-commons mRootwin
sven
parents: 2453
diff changeset
50 #endif
712a46dff92d printf-gcc3 patch, x11-commons mRootwin
sven
parents: 2453
diff changeset
51 ;
712a46dff92d printf-gcc3 patch, x11-commons mRootwin
sven
parents: 2453
diff changeset
52
2124
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
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
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
55 static unsigned char *ImageData=NULL;
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
56
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
57 /* X11 related variables */
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
58 static Window mywindow;
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
59 static int X_already_started = 0;
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
60
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
61 //static int texture_id=1;
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
62
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
63 static GLXContext wsGLXContext;
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
64 static int wsGLXAttrib[] = { GLX_RGBA,
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
65 GLX_RED_SIZE,1,
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
66 GLX_GREEN_SIZE,1,
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
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
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
69 GLX_DOUBLEBUFFER,
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
70 None };
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
71
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
72
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
73 static uint32_t image_width;
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
74 static uint32_t image_height;
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
75 static uint32_t image_format;
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
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
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
78 static uint32_t image_bytes;
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
79
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
80 static uint32_t texture_width;
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
81 static uint32_t texture_height;
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
82 static int texnumx, texnumy, memory_x_len, memory_x_start_offset, raw_line_len;
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
83 static GLfloat texpercx, texpercy;
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
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
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
103
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
104 /* The squares that are tiled to make up the game screen polygon */
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
105
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
106 struct TexSquare
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
107 {
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
108 GLubyte *texture;
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
109 GLuint texobj;
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
110 int isTexture;
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
111 GLfloat fx1, fy1, fx2, fy2, fx3, fy3, fx4, fy4;
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
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
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
115 };
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
116
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
117 static void CalcFlatPoint(int x,int y,GLfloat *px,GLfloat *py)
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
118 {
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
119 *px=(float)x*texpercx;
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
120 if(*px>1.0) *px=1.0;
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
121 *py=(float)y*texpercy;
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
122 if(*py>1.0) *py=1.0;
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
123 }
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
124
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
125 static void initTextures()
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
126 {
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
127 unsigned char *line_1=0, *line_2=0, *mem_start=0;
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
128 struct TexSquare *tsq=0;
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
129 int e_x, e_y, s, i=0;
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
130 int x=0, y=0;
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
131 GLint format=0;
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
132 GLenum err;
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
133
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
134 /* achieve the 2**e_x:=texture_width, 2**e_y:=texture_height */
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
135 e_x=0; s=1;
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
136 while (s<texture_width)
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
137 { s*=2; e_x++; }
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
138 texture_width=s;
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
139
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
140 e_y=0; s=1;
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
141 while (s<texture_height)
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
142 { s*=2; e_y++; }
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
143 texture_height=s;
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
144
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
145
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
146 /* Test the max texture size */
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
147 do
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
148 {
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
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
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
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
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
153
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
154 glGetTexLevelParameteriv
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
155 (GL_PROXY_TEXTURE_2D, 0, GL_TEXTURE_INTERNAL_FORMAT, &format);
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
156
2276
558a9397c250 improved gl, please check performance and correct display
sven
parents: 2249
diff changeset
157 if (format != gl_internal_format)
2124
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
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
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
160 texture_height, texture_width);
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
161
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
162 if (texture_width > texture_height)
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
163 {
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
164 e_x--;
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
165 texture_width = 1;
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
166 for (i = e_x; i > 0; i--)
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
167 texture_width *= 2;
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
168 }
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
169 else
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
170 {
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
171 e_y--;
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
172 texture_height = 1;
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
173 for (i = e_y; i > 0; i--)
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
174 texture_height *= 2;
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
175 }
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
176
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
177 fprintf (stderr, "[%dx%d] !\n", texture_height, texture_width);
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
178
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
179 if(texture_width < 64 || texture_height < 64)
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
180 {
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
181 fprintf (stderr, "GLERROR: Give up .. usable texture size not avaiable, or texture config error !\n");
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
182 exit(1);
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
183 }
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
184 }
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
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
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
187
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
188 texnumx = image_width / texture_width;
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
189 if ((image_width % texture_width) > 0)
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
190 texnumx++;
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
191
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
192 texnumy = image_height / texture_height;
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
193 if ((image_height % texture_height) > 0)
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
194 texnumy++;
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
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
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
199 /* Allocate the texture memory */
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
200
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
201 texpercx = (GLfloat) texture_width / (GLfloat) image_width;
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
202 if (texpercx > 1.0)
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
203 texpercx = 1.0;
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
204
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
205 texpercy = (GLfloat) texture_height / (GLfloat) image_height;
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
206 if (texpercy > 1.0)
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
207 texpercy = 1.0;
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
208
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
209 texgrid = (struct TexSquare *)
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
210 calloc (texnumx * texnumy, sizeof (struct TexSquare));
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
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
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
214
2276
558a9397c250 improved gl, please check performance and correct display
sven
parents: 2249
diff changeset
215 mem_start = (unsigned char *) ImageDataLocal;
2124
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
216
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
217 raw_line_len = line_2 - line_1;
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
218
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
219 memory_x_len = raw_line_len / image_bytes;
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
220
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
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
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
223 (int) texnumx, (int) texture_width, (int) texnumy,
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
224 (int) texture_height);
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
225 #endif
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
226
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
227 for (y = 0; y < texnumy; y++)
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
228 {
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
229 for (x = 0; x < texnumx; x++)
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
230 {
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
231 tsq = texgrid + y * texnumx + x;
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
232
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
233 if (x == texnumx - 1 && image_width % texture_width)
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
234 tsq->xcov =
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
235 (GLfloat) (image_width % texture_width) / (GLfloat) texture_width;
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
236 else
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
237 tsq->xcov = 1.0;
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
238
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
239 if (y == texnumy - 1 && image_height % texture_height)
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
240 tsq->ycov =
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
241 (GLfloat) (image_height % texture_height) / (GLfloat) texture_height;
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
242 else
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
243 tsq->ycov = 1.0;
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
244
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
245 CalcFlatPoint (x, y, &(tsq->fx1), &(tsq->fy1));
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
246 CalcFlatPoint (x + 1, y, &(tsq->fx2), &(tsq->fy2));
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
247 CalcFlatPoint (x + 1, y + 1, &(tsq->fx3), &(tsq->fy3));
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
248 CalcFlatPoint (x, y + 1, &(tsq->fx4), &(tsq->fy4));
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
249
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
250 /* calculate the pixel store data,
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
251 to use the machine-bitmap for our texture
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
252 */
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
253 memory_x_start_offset = 0 * image_bytes +
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
254 x * texture_width * image_bytes;
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
255
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
256 tsq->texture = line_1 +
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
257 y * texture_height * raw_line_len +
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
258 memory_x_start_offset;
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
259
2276
558a9397c250 improved gl, please check performance and correct display
sven
parents: 2249
diff changeset
260 tsq->isDirty=GL_TRUE;
2124
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
261 tsq->isTexture=GL_FALSE;
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
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
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
264
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
265 glGenTextures (1, &(tsq->texobj));
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
266
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
267 glBindTexture (GL_TEXTURE_2D, tsq->texobj);
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
268 err = glGetError ();
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
269 if(err==GL_INVALID_ENUM)
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
270 {
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
271 fprintf (stderr, "GLERROR glBindTexture (glGenText) := GL_INVALID_ENUM, texnum x=%d, y=%d, texture=%d\n", x, y, tsq->texobj);
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
272 }
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
273
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
274 if(glIsTexture(tsq->texobj) == GL_FALSE)
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
275 {
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
276 fprintf (stderr, "GLERROR ain't a texture (glGenText): texnum x=%d, y=%d, texture=%d\n",
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
277 x, y, tsq->texobj);
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
278 } else {
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
279 tsq->isTexture=GL_TRUE;
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
280 }
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
281
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
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
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
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
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
287 glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_PRIORITY, 1.0);
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
288
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
289 glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
290 glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
291
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
292 glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP);
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
293 glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP);
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
294
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
295 glTexEnvf (GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
296
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
297 } /* for all texnumx */
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
298 } /* for all texnumy */
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
299 }
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
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
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
479 static void drawTextureDisplay ()
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
480 {
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
481 struct TexSquare *square;
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
482 int x, y, xoff=0, yoff=0, wd, ht;
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
483 GLenum err;
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
484
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
485 glColor3f(1.0,1.0,1.0);
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
486
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
487 for (y = 0; y < texnumy; y++)
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
488 {
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
489 for (x = 0; x < texnumx; x++)
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
490 {
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
491 square = texgrid + y * texnumx + x;
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
492
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
493 if(square->isTexture==GL_FALSE)
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
494 {
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
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
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
497 x, y, square->texobj);
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
498 #endif
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
499 continue;
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
500 }
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
501
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
502 glBindTexture (GL_TEXTURE_2D, square->texobj);
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
503 err = glGetError ();
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
504 if(err==GL_INVALID_ENUM)
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
505 {
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
506 fprintf (stderr, "GLERROR glBindTexture := GL_INVALID_ENUM, texnum x=%d, y=%d, texture=%d\n", x, y, square->texobj);
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
507 }
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
508 #ifndef NDEBUG
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
509 else if(err==GL_INVALID_OPERATION) {
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
510 fprintf (stderr, "GLERROR glBindTexture := GL_INVALID_OPERATION, texnum x=%d, y=%d, texture=%d\n", x, y, square->texobj);
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
511 }
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
512 #endif
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
513
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
514 if(glIsTexture(square->texobj) == GL_FALSE)
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
515 {
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
516 square->isTexture=GL_FALSE;
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
517 fprintf (stderr, "GLERROR ain't a texture(update): texnum x=%d, y=%d, texture=%d\n",
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
518 x, y, square->texobj);
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
519 }
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
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
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
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
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
531
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
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
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
535 #endif
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
536
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
537 glBegin(GL_QUADS);
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
538
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
539 glTexCoord2f (0, 0);
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
540 glVertex2f (square->fx1, square->fy1);
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
541
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
542 glTexCoord2f (0, square->ycov);
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
543 glVertex2f (square->fx4, square->fy4);
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
544
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
545 glTexCoord2f (square->xcov, square->ycov);
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
546 glVertex2f (square->fx3, square->fy3);
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
547
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
548 glTexCoord2f (square->xcov, 0);
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
549 glVertex2f (square->fx2, square->fy2);
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
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
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
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
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
555 square->fx3, square->fy3, square->fx2, square->fy2);
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
556 #endif
2276
558a9397c250 improved gl, please check performance and correct display
sven
parents: 2249
diff changeset
557 */
2124
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
558 } /* for all texnumx */
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
559 } /* for all texnumy */
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
560
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
561 /* YES - lets catch this error ...
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
562 */
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
563 (void) glGetError ();
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
564 }
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
565
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
566
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
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
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
573
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
574 glMatrixMode(GL_PROJECTION);
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
575 glLoadIdentity();
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
576 glOrtho (0, 1, 1, 0, -1.0, 1.0);
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
577
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
578 glMatrixMode(GL_MODELVIEW);
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
579 glLoadIdentity();
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
580 }
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
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
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
601 /* connect to server, create and map window,
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
602 * allocate colors and (shared) memory
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
603 */
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
604 static uint32_t
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
605 init(uint32_t width, uint32_t height, uint32_t d_width, uint32_t d_height, uint32_t flags, char *title, uint32_t format)
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
606 {
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
607 // int screen;
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
608 unsigned int fg, bg;
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
609 char *hello = (title == NULL) ? "OpenGL rulez" : title;
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
610 // char *name = ":0.0";
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
611 XSizeHints hint;
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
612 XVisualInfo *vinfo;
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
613 XEvent xev;
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
614
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
615 // XGCValues xgcv;
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
616 XSetWindowAttributes xswa;
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
617 unsigned long xswamask;
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
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
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
621 image_height = height;
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
622 image_width = width;
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
623 image_format = format;
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
624
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
625 if (X_already_started) return -1;
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
626 if(!vo_init()) return -1;
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
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
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
634 X_already_started++;
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
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
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
651 }
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
652
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
653 /* Get some colors */
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
654
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
655 bg = WhitePixel(mDisplay, mScreen);
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
656 fg = BlackPixel(mDisplay, mScreen);
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
657
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
658 /* Make the window */
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
659
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
660 // XGetWindowAttributes(mDisplay, DefaultRootWindow(mDisplay), &attribs);
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
661
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
662 // XMatchVisualInfo(mDisplay, screen, depth, TrueColor, &vinfo);
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
663 vinfo=glXChooseVisual( mDisplay,mScreen,wsGLXAttrib );
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
664 if (vinfo == NULL)
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
665 {
2276
558a9397c250 improved gl, please check performance and correct display
sven
parents: 2249
diff changeset
666 printf("[gl2] no GLX support present\n");
2124
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
667 return -1;
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
668 }
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
669
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
670 xswa.background_pixel = 0;
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
671 xswa.border_pixel = 1;
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
672 xswa.colormap = XCreateColormap(mDisplay, mRootWin, vinfo->visual, AllocNone);
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
673 xswamask = CWBackPixel | CWBorderPixel | CWColormap;
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
674
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
675 mywindow = XCreateWindow(mDisplay, RootWindow(mDisplay,mScreen),
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
676 hint.x, hint.y, hint.width, hint.height, 4, vinfo->depth,CopyFromParent,vinfo->visual,xswamask,&xswa);
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
677
2276
558a9397c250 improved gl, please check performance and correct display
sven
parents: 2249
diff changeset
678 vo_x11_classhint( mDisplay,mywindow,"gl2" );
2124
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
679 vo_hidecursor(mDisplay,mywindow);
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
680
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
681 wsGLXContext=glXCreateContext( mDisplay,vinfo,NULL,True );
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
682
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
683 if ( flags&0x01 ) vo_x11_decoration( mDisplay,mywindow,0 );
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
684
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
685 XSelectInput(mDisplay, mywindow, StructureNotifyMask);
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
686
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
687 /* Tell other applications about this window */
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
688
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
689 XSetStandardProperties(mDisplay, mywindow, hello, hello, None, NULL, 0, &hint);
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
690
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
691 /* Map window. */
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
692
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
693 XMapWindow(mDisplay, mywindow);
2276
558a9397c250 improved gl, please check performance and correct display
sven
parents: 2249
diff changeset
694 XClearWindow(mDisplay,mywindow);
2124
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
695
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
696 /* Wait for map. */
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
697 do
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
698 {
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
699 XNextEvent(mDisplay, &xev);
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
700 }
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
701 while (xev.type != MapNotify || xev.xmap.event != mywindow);
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
702
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
703 XSelectInput(mDisplay, mywindow, NoEventMask);
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
704
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
705 glXMakeCurrent( mDisplay,mywindow,wsGLXContext );
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
706
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
707 XFlush(mDisplay);
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
708 XSync(mDisplay, False);
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
709
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
710 //XSelectInput(mDisplay, mywindow, StructureNotifyMask); // !!!!
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
711 XSelectInput(mDisplay, mywindow, StructureNotifyMask | KeyPressMask );
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
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
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
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
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
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
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
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
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
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
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
809 } else {
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
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
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
816 }
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
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
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
887
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
888 texture_width=image_width;
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
889 texture_height=image_height;
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
890 initTextures();
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
891
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
892 glDisable(GL_BLEND);
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
893 glDisable(GL_DEPTH_TEST);
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
894 glDepthMask(GL_FALSE);
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
895 glDisable(GL_CULL_FACE);
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
896
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
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
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
913 glEnable (GL_TEXTURE_2D);
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
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
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
918 drawTextureDisplay ();
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
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
712a46dff92d printf-gcc3 patch, x11-commons mRootwin
sven
parents: 2453
diff changeset
923 rgb_sz, r_sz, g_sz, b_sz, a_sz, gl_internal_format_s, tweaks_used);
2124
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
924
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
925 resize(d_width,d_height);
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
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
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
928 glClear( GL_COLOR_BUFFER_BIT );
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
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
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
935 // printf("OpenGL setup OK!\n");
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
936
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
937 saver_off(mDisplay); // turning off screen saver
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
938
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
939 return 0;
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
940 }
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
941
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
942 static const vo_info_t*
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
943 get_info(void)
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
944 {
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
945 return &vo_info;
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
946 }
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
947
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
948 static void
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
949 Terminate_Display_Process(void)
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
950 {
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
951 getchar(); /* wait for enter to remove window */
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
952 XDestroyWindow(mDisplay, mywindow);
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
953 XCloseDisplay(mDisplay);
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
954 X_already_started = 0;
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
955 }
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
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
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
971
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
972 static void check_events(void)
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
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
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
1000 }
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
1001
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
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
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
1004
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
1005 static void
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
1006 flip_page(void)
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
1007 {
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
1008
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
1009 drawTextureDisplay();
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
1010
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
1011 // glFlush();
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
1012 glFinish();
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
1013 glXSwapBuffers( mDisplay,mywindow );
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
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
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
1023 }
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
1024
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
1025 //static inline uint32_t draw_slice_x11(uint8_t *src[], uint32_t slice_num)
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
1026 static uint32_t draw_slice(uint8_t *src[], int stride[], int w,int h,int x,int y)
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
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
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
1030
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
1031 #ifndef NDEBUG
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
1032 printf("slice: %d/%d -> %d/%d (%dx%d)\n",
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
1033 x, y, x+w-1, y+h-1, w, h);
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
1034 #endif
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
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
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
1041 }
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
1042
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
1043 static inline uint32_t
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
1044 draw_frame_x11_bgr(uint8_t *src[])
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
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
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
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
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
1050
2276
558a9397c250 improved gl, please check performance and correct display
sven
parents: 2249
diff changeset
1051 used_b=1;
2124
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
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
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
1054 return 0;
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
1055 }
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
1056
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
1057 static inline uint32_t
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
1058 draw_frame_x11_rgb(uint8_t *src[])
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
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
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
1062
2276
558a9397c250 improved gl, please check performance and correct display
sven
parents: 2249
diff changeset
1063 used_r=1;
2124
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
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
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
1067 }
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
1068
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
1069
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
1070 static uint32_t
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
1071 draw_frame(uint8_t *src[])
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
1072 {
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
1073 uint32_t res = 0;
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
1074
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
1075 if((image_format&IMGFMT_RGB_MASK)==IMGFMT_RGB)
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
1076 res = draw_frame_x11_rgb(src);
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
1077 else
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
1078 res = draw_frame_x11_bgr(src);
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
1079
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
1080 //flip_page();
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
1081 return res;
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
1082 }
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
1083
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
1084 static uint32_t
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
1085 query_format(uint32_t format)
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
1086 {
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
1087 switch(format){
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
1088 case IMGFMT_YV12:
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
1089 case IMGFMT_RGB|24:
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
1090 case IMGFMT_BGR|24:
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
1091 return 1;
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
1092 }
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
1093 return 0;
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
1094 }
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
1095
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
1096
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
1097 static void
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
1098 uninit(void)
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
1099 {
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
1100 saver_on(mDisplay); // screen saver back on
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
1101 XDestroyWindow( mDisplay,mywindow );
0bb00e528669 new version by Sven Goethel
arpi
parents:
diff changeset
1102 }