pcsxr-1.9.92
[pcsx_rearmed.git] / plugins / peopsxgl / menu.c
CommitLineData
ef79bbde
P
1/***************************************************************************\r
2 menu.c - description\r
3 -------------------\r
4 begin : Sun Mar 08 2009\r
5 copyright : (C) 1999-2009 by Pete Bernert\r
6 web : www.pbernert.com \r
7 ***************************************************************************/\r
8\r
9/***************************************************************************\r
10 * *\r
11 * This program is free software; you can redistribute it and/or modify *\r
12 * it under the terms of the GNU General Public License as published by *\r
13 * the Free Software Foundation; either version 2 of the License, or *\r
14 * (at your option) any later version. See also the license.txt file for *\r
15 * additional informations. *\r
16 * *\r
17 ***************************************************************************/\r
18\r
19#include "stdafx.h"\r
20\r
21#define _IN_MENU\r
22\r
23#include "externals.h"\r
24#include "draw.h"\r
25#include "menu.h"\r
26#include "gpu.h"\r
27\r
28uint32_t dwCoreFlags=0;\r
29PSXPoint_t ptCursorPoint[8];\r
30unsigned short usCursorActive=0;\r
31\r
32////////////////////////////////////////////////////////////////////////\r
33// field with menu chars... like good old C64 time :)\r
34////////////////////////////////////////////////////////////////////////\r
35\r
36GLubyte texrasters[40][12]= {\r
37\r
38// 0,0 FPS\r
39{0x00,0x60,0x60,0x60,0x60,0x60,0x7e,0x60,0x60,0x60,0x60,0x7f},\r
40{0x00,0x18,0x18,0x18,0x18,0x18,0x1f,0x18,0x18,0x18,0x18,0x1f},\r
41{0x00,0x03,0x06,0x00,0x00,0x00,0xc3,0x66,0x66,0x66,0x66,0xc3},\r
42{0x00,0xf0,0x18,0x18,0x18,0x18,0xf0,0x00,0x00,0x00,0x18,0xf0},\r
43// 4,0 0\r
44{0x00,0x3c,0x66,0xc3,0xe3,0xf3,0xdb,0xcf,0xc7,0xc3,0x66,0x3c},\r
45// 5,0 1\r
46{0x00,0x7e,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x78,0x38,0x18},\r
47// 6,0 2\r
48{0x00,0xff,0xc0,0xc0,0x60,0x30,0x18,0x0c,0x06,0x03,0xe7,0x7e},\r
49// 7,0 3\r
50\r
51{0x00,0x7e,0xe7,0x03,0x03,0x07,0x7e,0x07,0x03,0x03,0xe7,0x7e},\r
52// 0,1 4\r
53{0x00,0x0c,0x0c,0x0c,0x0c,0x0c,0xff,0xcc,0x6c,0x3c,0x1c,0x0c},\r
54// 1,1 5\r
55{0x00,0x7e,0xe7,0x03,0x03,0x07,0xfe,0xc0,0xc0,0xc0,0xc0,0xff},\r
56// 2,1 6\r
57{0x00,0x7e,0xe7,0xc3,0xc3,0xc7,0xfe,0xc0,0xc0,0xc0,0xe7,0x7e},\r
58// 3,1 7\r
59{0x00,0x30,0x30,0x30,0x30,0x18,0x0c,0x06,0x03,0x03,0x03,0xff},\r
60// 4,1 8\r
61{0x00,0x7e,0xe7,0xc3,0xc3,0xe7,0x7e,0xe7,0xc3,0xc3,0xe7,0x7e},\r
62// 5,1 9\r
63{0x00,0x7e,0xe7,0x03,0x03,0x03,0x7f,0xe7,0xc3,0xc3,0xe7,0x7e},\r
64// 6,1 smiley\r
65{0x00,0x3c,0x42,0x99,0xa5,0x81,0xa5,0x81,0x42,0x3c,0x00,0x00},\r
66// 7,1 sun\r
67{0x00,0x08,0x49,0x2a,0x1c,0x7f,0x1c,0x2a,0x49,0x08,0x00,0x00},\r
68\r
69// 0,2 fl + empty box\r
70{0xff,0x81,0x81,0x81,0xff,0x00,0x87,0x84,0x84,0xf4,0x84,0xf8},\r
71// 1,2 fs + grey box\r
72{0xff,0xab,0xd5,0xab,0xff,0x00,0x87,0x81,0x87,0xf4,0x87,0xf8},\r
73// 2,2 od + filled box\r
74{0xff,0xff,0xff,0xff,0xff,0x00,0x66,0x95,0x95,0x95,0x96,0x60},\r
75// 3,2 fi + half grey box\r
76{0xff,0xa1,0xd1,0xa1,0xff,0x00,0x82,0x82,0x82,0xe2,0x82,0xf8},\r
77// 4,2 di + half filled box\r
78{0xff,0xf1,0xf1,0xf1,0xff,0x00,0xe2,0x92,0x92,0x92,0x92,0xe0},\r
79// 5,2 am + grey box\r
80{0xff,0xab,0xd5,0xab,0xff,0x00,0x95,0x95,0x95,0xf7,0x95,0x60},\r
81// 6,2 ab + filled box\r
82{0xff,0xff,0xff,0xff,0xff,0x00,0x97,0x95,0x96,0xf5,0x96,0x60},\r
83// 7,2 fa\r
84{0x00,0x00,0x00,0x00,0x00,0x00,0x85,0x85,0x87,0xf5,0x82,0xf8},\r
85\r
86// 0,3 fb\r
87{0xff,0x8b,0x85,0x8b,0xff,0x00,0x82,0x82,0x82,0xe2,0x87,0xf8},\r
88// 1,3 gf\r
89{0xff,0x8f,0x8f,0x8f,0xff,0x00,0x74,0x94,0x96,0xb4,0x87,0x70},\r
90// 2,3 D\r
91{0xff,0x00,0xfc,0xc6,0xc3,0xc3,0xc3,0xc3,0xc6,0xfc,0x00,0xff}, \r
92// 3,3 G\r
93{0xff,0x00,0x3e,0x63,0xc3,0xc7,0xc0,0xc0,0x63,0x3e,0x00,0xff},\r
94// 4,3\r
95{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},\r
96// 5,3\r
97{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},\r
98// 6,3 tex pal smiley\r
99{0x00,0x3c,0x7e,0xe7,0xdb,0xff,0xdb,0xff,0x7e,0x3c,0x00,0x00},\r
100// 7,3\r
101{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},\r
102\r
103// 0,4 subtract blending (moon)\r
104{0x00,0x06,0x1c,0x38,0x78,0x78,0x78,0x38,0x1c,0x06,0x00,0x00},\r
105// 1,4 blurring\r
106{0x00,0x7e,0x93,0xa5,0x93,0xc9,0x93,0xa5,0x93,0x7e,0x00,0x00},\r
107// 2,4 (M)\r
108{0xff,0x00,0xc3,0xc3,0xc3,0xdb,0xff,0xe7,0xc3,0x81,0x00,0xff},\r
109// 3,4 (A)\r
110{0xff,0x00,0xc3,0xc3,0xff,0xc3,0xc3,0x66,0x3c,0x18,0x00,0xff},\r
111// 4,4 blank\r
112{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},\r
113// 5,4\r
114{0x00,0xfe,0xc5,0x62,0x35,0x18,0x0c,0xc6,0xc6,0x7c,0x00,0x00},\r
115// 6,4 <-\r
116{0x00,0x00,0x00,0x00,0x00,0x10,0x30,0x7f,0xff,0x7f,0x30,0x10},\r
117// 7,4 .\r
118{0x00,0x38,0x38,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}\r
119};\r
120\r
121////////////////////////////////////////////////////////////////////////\r
122// create lists/stuff for fonts \r
123// (as a matter of fact: no more display list used, just a texture)\r
124////////////////////////////////////////////////////////////////////////\r
125\r
126GLuint gTexFontName=0;\r
127GLuint gTexPicName=0;\r
128GLuint gTexCursorName=0;\r
129\r
130void MakeDisplayLists(void) // MAKE FONT \r
131{\r
132 GLubyte TexBytes[64][64][3]; // we use a 64x64 texture\r
133 int x,y,i,j,n=0; GLubyte col,IB;\r
134\r
135 glPixelStorei(GL_UNPACK_ALIGNMENT,1);\r
136 \r
137 memset(TexBytes,0,64*64*3);\r
138\r
139 for(y=0;y<5;y++) // create texture out of raster infos\r
140 {\r
141 for(x=0;x<8;x++,n++)\r
142 {\r
143 for(i=0;i<12;i++)\r
144 {\r
145 IB=texrasters[n][i];\r
146 for(j=0;j<8;j++)\r
147 {\r
148 if(IB&(1<<(7-j))) col=255; else col=0;\r
149 TexBytes[y*12+i][x*8+j][0]=col;\r
150 TexBytes[y*12+i][x*8+j][1]=col;\r
151 TexBytes[y*12+i][x*8+j][2]=col;\r
152 }\r
153 }\r
154 }\r
155 }\r
156\r
157 glGenTextures(1, &gTexFontName); // set tex params for font texture\r
158 glBindTexture(GL_TEXTURE_2D, gTexFontName);\r
159 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP);\r
160 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP);\r
161 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);\r
162 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);\r
163 glTexImage2D(GL_TEXTURE_2D, 0, 3, 64, 64, 0, GL_RGB,\r
164 GL_UNSIGNED_BYTE,TexBytes);\r
165}\r
166\r
167////////////////////////////////////////////////////////////////////////\r
168// kill existing font stuff\r
169////////////////////////////////////////////////////////////////////////\r
170\r
171void KillDisplayLists(void)\r
172{\r
173 if(gTexFontName) // del font/info textures\r
174 {glDeleteTextures(1,&gTexFontName);gTexFontName=0;}\r
175 if(gTexPicName) \r
176 {glDeleteTextures(1,&gTexPicName);gTexPicName=0;}\r
177 if(gTexCursorName) \r
178 {glDeleteTextures(1,&gTexCursorName);gTexCursorName=0;}\r
179}\r
180\r
181////////////////////////////////////////////////////////////////////////\r
182// display text/infos in gpu menu\r
183////////////////////////////////////////////////////////////////////////\r
184\r
185#ifdef OWNSCALE\r
186#define DRAWTEXCHAR glTexCoord2f(fX1/256.0f,fY2/256.0f);glVertex3f(fXS1,fYS2,1.0f);glTexCoord2f(fX1/256.0f,fY1/256.0f);glVertex3f(fXS1,fYS1,1.0f);glTexCoord2f(fX2/256.0f,fY1/256.0f);glVertex3f(fXS2,fYS1,1.0f);glTexCoord2f(fX2/256.0f,fY2/256.0f);glVertex3f(fXS2,fYS2,1.0f);\r
187#else\r
188#define DRAWTEXCHAR glTexCoord2f(fX1,fY2);glVertex3f(fXS1,fYS2,1.0f);glTexCoord2f(fX1,fY1);glVertex3f(fXS1,fYS1,1.0f);glTexCoord2f(fX2,fY1);glVertex3f(fXS2,fYS1,1.0f);glTexCoord2f(fX2,fY2);glVertex3f(fXS2,fYS2,1.0f);\r
189#endif\r
190\r
191int iMPos=0;\r
192\r
193void DisplayText(void)\r
194{\r
195 int iX,iY,i;\r
196 GLfloat fX1,fY1,fX2,fY2,fYS1,fYS2,fXS1,fXS2,fXS,fXSC,fYSC,fYD;\r
197\r
198 glDisable(GL_SCISSOR_TEST); // disable unwanted ogl states\r
199 glDisable(GL_ALPHA_TEST);\r
200 if(bOldSmoothShaded) {glShadeModel(GL_FLAT);bOldSmoothShaded=FALSE;}\r
201 if(bBlendEnable) {glDisable(GL_BLEND);bBlendEnable=FALSE;}\r
202 if(!bTexEnabled) {glEnable(GL_TEXTURE_2D);bTexEnabled=TRUE;}\r
203\r
204 gTexName=gTexFontName;\r
205 glBindTexture(GL_TEXTURE_2D,gTexFontName); // now set font texture\r
206\r
207 fYD=fYSC=(GLfloat)PSXDisplay.DisplayMode.y/(GLfloat)iResY; // some pre-calculations\r
208 fYS1=12.0f*fYSC;fYSC*=13.0f;\r
209 fYS2=0.0f;\r
210 fXS= (GLfloat)PSXDisplay.DisplayMode.x/(GLfloat)iResX;\r
211 fXSC= 8.0f*fXS;fXS*=10.0f;\r
212 fXS1=0.0f;\r
213 fXS2=50.0f*fXS; // 3 is one option\r
214\r
215#ifdef OWNSCALE\r
216 vertex[0].c.lcol=0xff00ff00; // set menu text color\r
217#else\r
218 vertex[0].c.lcol=0xff00ffff; // set menu text color\r
219#endif\r
220\r
221 SETCOL(vertex[0]); \r
222\r
223 glBegin(GL_QUADS);\r
224\r
225#ifdef OWNSCALE\r
226 glTexCoord2f(128.0f/256.0f,240.0f/256.0f); // make blank (ownscale)\r
227 glVertex3f(fXS1,fYS2,0.99996f);\r
228 glTexCoord2f(128.0f/256.0f,192.0f/256.0f);\r
229 glVertex3f(fXS1,fYSC,0.99996f);\r
230 glTexCoord2f(160.0f/256.0f,192.0f/256.0f);\r
231 glVertex3f(fXS2,fYSC,0.99996f);\r
232 glTexCoord2f(160.0f/256.0f,240.0f/256.0f);\r
233 glVertex3f(fXS2,fYS2,0.99996f);\r
234#else\r
235 glTexCoord2f(128.0f,240.0f); // make blank\r
236 glVertex3f(fXS1,fYS2,0.99996f);\r
237 glTexCoord2f(128.0f,192.0f);\r
238 glVertex3f(fXS1,fYSC,0.99996f);\r
239 glTexCoord2f(160.0f,192.0f);\r
240 glVertex3f(fXS2,fYSC,0.99996f);\r
241 glTexCoord2f(160.0f,240.0f);\r
242 glVertex3f(fXS2,fYS2,0.99996f);\r
243#endif\r
244\r
245 fXS1=0.0f;fXS2=4.0f*fXSC; // draw fps\r
246 fX1=0.0f; fX2=128.0f;\r
247 fY1=0.0f; fY2=48.0f;\r
248 DRAWTEXCHAR;\r
249\r
250 fYSC=fXS1=3.0f*fXS; // start pos of numbers\r
251\r
252 i=0;do // paint fps numbers\r
253 {\r
254 iX=4;iY=4;\r
255 if(szDispBuf[i]>='0' && szDispBuf[i]<='3')\r
256 {iX=4+szDispBuf[i]-'0';iY=0;}\r
257 else\r
258 if(szDispBuf[i]>='4' && szDispBuf[i]<='9')\r
259 {iX=szDispBuf[i]-'4';iY=1;}\r
260 else\r
261 if(szDispBuf[i]=='.')\r
262 {iX=7;iY=4;}\r
263 else\r
264 if(szDispBuf[i]==0) break;\r
265\r
266 fX1=(GLfloat)iX*32.0f; fX2=fX1+32.0f;\r
267 fY1=(GLfloat)iY*48.0f; fY2=fY1+48.0f;\r
268 fXS1+=fXS;\r
269 fXS2=fXS1+fXSC;\r
270\r
271 DRAWTEXCHAR;\r
272\r
273 i++;\r
274 }\r
275 while(i);\r
276\r
277 //----------------------------------------------------//\r
278 // draw small chars\r
279 //----------------------------------------------------//\r
280\r
281 fXS1=12.0f*fXS;fYS1=6.0f*fYD;\r
282 fY1=120.0f;fY2=144.0f;\r
283 fX1=0.0f;fX2=32.0f;\r
284\r
285 for(i=0;i<8;i++)\r
286 {\r
287 fXS2=fXS1+fXSC;\r
288 DRAWTEXCHAR;\r
289 fX1+=32.0f;fX2+=32.0f;fXS1+=fYSC;\r
290 }\r
291\r
292 fY1=168.0f;fY2=192.0f;\r
293 fX1=0.0f;fX2=32.0f;\r
294\r
295 for(i=0;i<2;i++)\r
296 {\r
297 fXS2=fXS1+fXSC;\r
298 DRAWTEXCHAR;\r
299 fX1+=32.0f;fX2+=32.0f;fXS1+=fYSC;\r
300 }\r
301\r
302 //----------------------------------------------------//\r
303\r
304 fYSC=fXS+fXS;\r
305\r
306 fYS1=12.0f*fYD;\r
307\r
308 if(iBlurBuffer && gTexBlurName) // blur\r
309 {\r
310 fXS1-=fXS;fY1=192.0f;fY2=240.0f;\r
311 fXS2=fXS1+fXSC;fX1=32.0f;fX2=64.0f;\r
312 DRAWTEXCHAR;\r
313 fXS1+=fXS;\r
314 }\r
315\r
316 fY1=48.0f;fY2=96.0f;\r
317 \r
318 if(bGLExt) // packed pixel\r
319 {\r
320 fXS2=fXS1+fXSC;fX1=192.0f;fX2=224.0f;\r
321 DRAWTEXCHAR;\r
322 }\r
323\r
324 if(glColorTableEXTEx) // tex wnd pal\r
325 { \r
326 fY1=144.0f;fY2=192.0f;\r
327 fXS2=fXS1+fXSC;fX1=192.0f;\r
328 if(bGLExt) {fX2=208.0f;fXS2-=fXSC/2.0f;}\r
329 else fX2=224.0f;\r
330 DRAWTEXCHAR;\r
331 fY1=48.0f;fY2=96.0f;\r
332 }\r
333\r
334 if(!bUseMultiPass && glBlendEquationEXTEx) // multipass blend\r
335 {\r
336 fY1=192.0f;fY2=240.0f;\r
337 fXS1+=fYSC-fXSC;fXS2=fXS1+fXSC;fX1=0.0f;fX2=32.0f;\r
338 DRAWTEXCHAR;\r
339 fXS1+=fXSC;\r
340 fY1=48.0f;fY2=96.0f;\r
341 }\r
342 else fXS1+=fYSC;\r
343\r
344 if(bGLBlend) // modulate2x\r
345 {\r
346 fXS2=fXS1+fXSC;fX1=224.0f;fX2=256.0f;\r
347 DRAWTEXCHAR;\r
348 }\r
349\r
350 fY1=192.0f;fY2=240.0f;\r
351\r
352 if(iHiResTextures) // 2x textures\r
353 {\r
354 fXS1+=fYSC-fXS;fXS2=fXS1+fXSC;\r
355 fX1=160.0f;fX2=192.0f;\r
356 DRAWTEXCHAR;\r
357 fXS1+=fXS;\r
358 }\r
359 else fXS1+=fYSC;\r
360\r
361 if(dwCoreFlags&1) //A \r
362 {\r
363 fXS2=fXS1+fXSC;fX1=96.0f;fX2=128.0f;\r
364 DRAWTEXCHAR;\r
365 }\r
366\r
367 if(dwCoreFlags&2) //M\r
368 {\r
369 fXS2=fXS1+fXSC;fX1=64.0f;fX2=96.0f;\r
370 DRAWTEXCHAR;\r
371 }\r
372\r
373 // 00 -> digital, 01 -> analog, 02 -> mouse, 03 -> gun\r
374 if(dwCoreFlags&0xff00) //A/M/G/D \r
375 {\r
376 int k;\r
377\r
378 fXS2=fXS1+fXSC;\r
379\r
380 if((dwCoreFlags&0x0f00)==0x0000) // D\r
381 {\r
382 fY1=144.0f;fY2=192.0f;\r
383 fX1=64.0f;fX2=96.0f;\r
384 }\r
385 else\r
386 if((dwCoreFlags&0x0f00)==0x0100) // A\r
387 {\r
388 fX1=96.0f;fX2=128.0f;\r
389 }\r
390 else\r
391 if((dwCoreFlags&0x0f00)==0x0200) // M\r
392 {\r
393 fX1=64.0f;fX2=96.0f;\r
394 }\r
395 else\r
396 if((dwCoreFlags&0x0f00)==0x0300) // G\r
397 {\r
398 fY1=144.0f;fY2=192.0f;\r
399 fX1=96.0f;fX2=128.0f;\r
400 }\r
401 DRAWTEXCHAR;\r
402\r
403 k=(dwCoreFlags&0xf000)>>12; // number\r
404 fXS1+=fXS;\r
405 fXS2=fXS1+fXSC;\r
406 iX=4;iY=4;\r
407 if(k>=0 && k<=3)\r
408 {iX=4+k;iY=0;}\r
409 else\r
410 if(k>=4 && k<=9)\r
411 {iX=k-4;iY=1;}\r
412 fX1=(GLfloat)iX*32.0f; fX2=fX1+32.0f;\r
413 fY1=(GLfloat)iY*48.0f; fY2=fY1+48.0f;\r
414 DRAWTEXCHAR;\r
415 }\r
416\r
417 fXS1+=fYSC;\r
418\r
419 if(lSelectedSlot) // save state num\r
420 {\r
421 fXS2=fXS1+fXSC;\r
422 iX=4;iY=4;\r
423 if(lSelectedSlot>=0 && lSelectedSlot<=3)\r
424 {iX=4+lSelectedSlot;iY=0;}\r
425 else\r
426 if(lSelectedSlot>=4 && lSelectedSlot<=9)\r
427 {iX=lSelectedSlot-4;iY=1;}\r
428 fX1=(GLfloat)iX*32.0f; fX2=fX1+32.0f;\r
429 fY1=(GLfloat)iY*48.0f; fY2=fY1+48.0f;\r
430 DRAWTEXCHAR;\r
431 }\r
432\r
433 fXS1=(GLfloat)(13+iMPos*3)*fXS;fXS2=fXS1+fXSC; // arrow\r
434 fX1=192.0f; fX2=224.0f;\r
435 fY1=192.0f; fY2=240.0f;\r
436 DRAWTEXCHAR;\r
437\r
438 /////////////////\r
439\r
440 fXS1=12.0f*fXS;fXS2=fXS1+fXSC;\r
441 fYS2=6.0f*fYD;fYSC=3.0f*fXS;\r
442 fY1=96.0f;fY2=120.0f;\r
443\r
444 if(bUseFrameLimit) // frame limit\r
445 {\r
446 if(iFrameLimit==2) {fX1=64.0f;fX2=96.0f;}\r
447 else {fX1=32.0f;fX2=64.0f;}\r
448 }\r
449 else {fX1=0.0f ;fX2=32.0f;}\r
450 DRAWTEXCHAR; \r
451 fXS1+=fYSC;fXS2=fXS1+fXSC;\r
452\r
453 if(bUseFrameSkip) {fX1=64.0f;fX2=96.0f;} // frame skip\r
454 else {fX1=0.0f ;fX2=32.0f;}\r
455 DRAWTEXCHAR; \r
456 fXS1+=fYSC;fXS2=fXS1+fXSC;\r
457\r
458 if(iOffscreenDrawing) fX1=(iOffscreenDrawing+2)*32.0f;// offscreen drawing\r
459 else fX1=0.0f;\r
460 fX2=fX1+32.0f;\r
461 DRAWTEXCHAR; \r
462 fXS1+=fYSC;fXS2=fXS1+fXSC;\r
463\r
464 if(iFilterType<5) fX1=iFilterType*32.0f; // texture filter\r
465 else {fX1=(iFilterType-5)*32.0f;fY1=144.0f;fY2=168.0f;}\r
466 fX2=fX1+32.0f; \r
467 DRAWTEXCHAR; \r
468 if(iFilterType>=5) {fY1=96.0f;fY2=120.0f;}\r
469 fXS1+=fYSC;fXS2=fXS1+fXSC;\r
470\r
471 if(bDrawDither) {fX1=64.0f;fX2=96.0f;} // dithering\r
472 else {fX1=0.0f ;fX2=32.0f;}\r
473 DRAWTEXCHAR; \r
474 fXS1+=fYSC;fXS2=fXS1+fXSC;\r
475\r
476 if(bOpaquePass) {fX1=64.0f;fX2=96.0f;} // opaque pass\r
477 else {fX1=0.0f ;fX2=32.0f;}\r
478 DRAWTEXCHAR; \r
479 fXS1+=fYSC;fXS2=fXS1+fXSC;\r
480\r
481 if(bAdvancedBlend) {fX1=64.0f;fX2=96.0f;} // advanced blend\r
482 else {fX1=0.0f ;fX2=32.0f;}\r
483 DRAWTEXCHAR; \r
484 fXS1+=fYSC;fXS2=fXS1+fXSC;\r
485\r
486 if(!iFrameReadType) fX1=0.0f; // framebuffer reading\r
487 else if(iFrameReadType==2) {fX1=0.0f;fY1=144.0f;fY2=168.0f;}\r
488 else fX1=(iFrameReadType+2)*32.0f;\r
489 fX2=fX1+32.0f;\r
490 DRAWTEXCHAR; \r
491 if(iFrameReadType==2) {fY1=96.0f;fY2=120.0f;}\r
492 fXS1+=fYSC;fXS2=fXS1+fXSC;\r
493\r
494 if(iFrameTexType<2) fX1=iFrameTexType*32.0f; // frame texture\r
495 else fX1=iFrameTexType*64.0f;\r
496 fX2=fX1+32.0f;\r
497 DRAWTEXCHAR; \r
498 fXS1+=fYSC;fXS2=fXS1+fXSC;\r
499\r
500 if(dwActFixes) {fX1=64.0f;fX2=96.0f;} // game fixes\r
501 else {fX1=0.0f ;fX2=32.0f;}\r
502 DRAWTEXCHAR; \r
503 fXS1+=fYSC;fXS2=fXS1+fXSC;\r
504\r
505 /////////////////\r
506\r
507 glEnd();\r
508\r
509 glEnable(GL_ALPHA_TEST); // repair needed states\r
510 glEnable(GL_SCISSOR_TEST); \r
511}\r
512 \r
513////////////////////////////////////////////////////////////////////////\r
514\r
515void HideText(void)\r
516{\r
517 GLfloat fYS1,fYS2,fXS1,fXS2,fXS,fXSC,fYSC;\r
518\r
519 glDisable(GL_SCISSOR_TEST); // turn off unneeded ogl states\r
520 glDisable(GL_ALPHA_TEST);\r
521 if(bOldSmoothShaded) {glShadeModel(GL_FLAT);bOldSmoothShaded=FALSE;}\r
522 if(bBlendEnable) {glDisable(GL_BLEND);bBlendEnable=FALSE;}\r
523 if(bTexEnabled) {glDisable(GL_TEXTURE_2D);bTexEnabled=FALSE;}\r
524\r
525 fYSC=(GLfloat)PSXDisplay.DisplayMode.y/(GLfloat)iResY;\r
526 fYS1=12.0f*fYSC;fYSC*=13.0f;\r
527 fYS2=0.0f;\r
528 fXS= (GLfloat)PSXDisplay.DisplayMode.x/(GLfloat)iResX;\r
529 fXSC= 8.0f*fXS;fXS*=10.0f;\r
530 fXS1=0.0f;\r
531 fXS2=50.0f*fXS; \r
532\r
533 vertex[0].c.lcol=0xff000000; // black color\r
534 SETCOL(vertex[0]); \r
535\r
536 glBegin(GL_QUADS); // make one quad\r
537\r
538 glVertex3f(fXS1,fYS2,0.99996f);\r
539 glVertex3f(fXS1,fYSC,0.99996f);\r
540 glVertex3f(fXS2,fYSC,0.99996f);\r
541 glVertex3f(fXS2,fYS2,0.99996f);\r
542\r
543 glEnd();\r
544 glEnable(GL_ALPHA_TEST); // enable needed ogl states\r
545 glEnable(GL_SCISSOR_TEST); \r
546}\r
547\r
548////////////////////////////////////////////////////////////////////////\r
549// Build Menu buffer (== Dispbuffer without FPS)\r
550////////////////////////////////////////////////////////////////////////\r
551\r
552void BuildDispMenu(int iInc)\r
553{\r
554 if(!(ulKeybits&KEY_SHOWFPS)) return; // mmm, cheater ;)\r
555\r
556 iMPos+=iInc; // up or down\r
557 if(iMPos<0) iMPos=9; // wrap around\r
558 if(iMPos>9) iMPos=0; \r
559}\r
560\r
561////////////////////////////////////////////////////////////////////////\r
562// gpu menu actions...\r
563////////////////////////////////////////////////////////////////////////\r
564\r
565void SwitchDispMenu(int iStep)\r
566{\r
567 if(!(ulKeybits&KEY_SHOWFPS)) return; // tststs\r
568\r
569 switch(iMPos)\r
570 {//////////////////////////////////////////////////////\r
571 case 0: // frame limit\r
572 {\r
573 int iType=0;\r
574 bInitCap = TRUE;\r
575\r
576 if(bUseFrameLimit) iType=iFrameLimit;\r
577 iType+=iStep;\r
578 if(iType<0) iType=2;\r
579 if(iType>2) iType=0;\r
580 if(iType==0) bUseFrameLimit=FALSE;\r
581 else\r
582 {\r
583 bUseFrameLimit=TRUE;\r
584 iFrameLimit=iType;\r
585 SetAutoFrameCap();\r
586 }\r
587 }\r
588 break;\r
589 //////////////////////////////////////////////////////\r
590 case 1: // frame skip\r
591 bInitCap = TRUE;\r
592 bUseFrameSkip=!bUseFrameSkip;\r
593 bSkipNextFrame=FALSE;\r
594 break;\r
595 //////////////////////////////////////////////////////\r
596 case 2: // offscreen drawing\r
597 iOffscreenDrawing+=iStep; \r
598 if(iOffscreenDrawing>4) iOffscreenDrawing=0;\r
599 if(iOffscreenDrawing<0) iOffscreenDrawing=4;\r
600 break;\r
601 //////////////////////////////////////////////////////\r
602 case 3: // filtering\r
603 ulKeybits|=KEY_RESETTEXSTORE;\r
604 ulKeybits|=KEY_RESETFILTER;\r
605 if(iStep==-1) ulKeybits|=KEY_STEPDOWN;\r
606 break;\r
607 //////////////////////////////////////////////////////\r
608 case 4: // dithering\r
609 ulKeybits|=KEY_RESETTEXSTORE;\r
610 ulKeybits|=KEY_RESETDITHER;\r
611 break;\r
612 //////////////////////////////////////////////////////\r
613 case 5: // alpha multipass\r
614 ulKeybits|=KEY_RESETTEXSTORE;\r
615 ulKeybits|=KEY_RESETOPAQUE;\r
616 break;\r
617 //////////////////////////////////////////////////////\r
618 case 6: // advanced blending\r
619 ulKeybits|=KEY_RESETTEXSTORE;\r
620 ulKeybits|=KEY_RESETADVBLEND;\r
621 break;\r
622 //////////////////////////////////////////////////////\r
623 case 7: // full vram\r
624 ulKeybits|=KEY_RESETTEXSTORE;\r
625 ulKeybits|=KEY_TOGGLEFBREAD;\r
626 if(iStep==-1) ulKeybits|=KEY_STEPDOWN;\r
627 break;\r
628 //////////////////////////////////////////////////////\r
629 case 8: // frame buffer texture\r
630 ulKeybits|=KEY_RESETTEXSTORE;\r
631 ulKeybits|=KEY_TOGGLEFBTEXTURE;\r
632 if(iStep==-1) ulKeybits|=KEY_STEPDOWN;\r
633 break;\r
634 //////////////////////////////////////////////////////\r
635 case 9: // game fixes\r
636 ulKeybits|=KEY_RESETTEXSTORE;\r
637 ulKeybits|=KEY_BLACKWHITE;\r
638 break;\r
639 //////////////////////////////////////////////////////\r
640 }\r
641\r
642 BuildDispMenu(0); // update info\r
643}\r
644\r
645///////////////////////////////////////////////////////////////////////////////////////\r
646///////////////////////////////////////////////////////////////////////////////////////\r
647///////////////////////////////////////////////////////////////////////////////////////\r
648\r
649////////////////////////////////////////////////////////////////////////\r
650// Here comes my painting zone... just to paint stuff... like 3DStudio ;)\r
651////////////////////////////////////////////////////////////////////////\r
652\r
653\r
654/*\r
655 12345678\r
6561\r
6572\r
6583\r
6594\r
6605\r
6616\r
6627\r
6638\r
6649\r
6650\r
6661\r
6672\r
6683\r
669\r
670\r
671{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}\r
672\r
673\r
674 12345678\r
6753\r
6762\r
6771\r
6780\r
6799\r
6808\r
6817\r
6826\r
6835 111\r
6844 111\r
6853\r
6862\r
6871\r
688\r
689{0x00,0x00,0x00,0x38,0x38,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}\r
690\r
691\r
692 12345678\r
6933 1111\r
6942 11 11\r
695111 11\r
696011 111\r
697911 1111\r
698811 11 11\r
69971111 11\r
7006111 11\r
701511 11\r
7024 11 11\r
7033 1111\r
7042\r
7051\r
706\r
707// 0\r
708{0x00,0x00,0x3c,0x66,0xc3,0xe3,0xf3,0xdb,0xcf,0xc7,0xc3,0x66,0x3c}\r
709// 1\r
710{0x00,0x00,0x7e,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x78,0x38,0x18}\r
711// 2\r
712{0x00,0x00,0xff,0xc0,0xc0,0x60,0x30,0x18,0x0c,0x06,0x03,0xe7,0x7e}\r
713// 3\r
714{0x00,0x00,0x7e,0xe7,0x03,0x03,0x07,0x7e,0x07,0x03,0x03,0xe7,0x7e}\r
715// 4\r
716{0x00,0x00,0x0c,0x0c,0x0c,0x0c,0x0c,0xff,0xcc,0x6c,0x3c,0x1c,0x0c}\r
717// 5\r
718{0x00,0x00,0x7e,0xe7,0x03,0x03,0x07,0xfe,0xc0,0xc0,0xc0,0xc0,0xff}\r
719// 6\r
720{0x00,0x00,0x7e,0xe7,0xc3,0xc3,0xc7,0xfe,0xc0,0xc0,0xc0,0xe7,0x7e}\r
721// 7\r
722{0x00,0x00,0x30,0x30,0x30,0x30,0x18,0x0c,0x06,0x03,0x03,0x03,0xff}\r
723// 8\r
724{0x00,0x00,0x7e,0xe7,0xc3,0xc3,0xe7,0x7e,0xe7,0xc3,0xc3,0xe7,0x7e}\r
725// 9\r
726{0x00,0x00,0x7e,0xe7,0x03,0x03,0x03,0x7f,0xe7,0xc3,0xc3,0xe7,0x7e}\r
727\r
728 12345678123456781234567812345678\r
7293 11111111 1111111 111111\r
7302 11 11 11 11 11\r
7311 11 11 11 11\r
7320 11 11 11 11\r
7339 11 11 11 11\r
7348 111111 1111111 111111\r
7357 11 11 11\r
7366 11 11 11\r
7375 11 11 11\r
7384 11 11 11 11\r
7393 11 11 111111\r
7402 \r
741 \r
742{0x00,0x60,0x60,0x60,0x60,0x60,0x7e,0x60,0x60,0x60,0x60,0x7f},\r
743{0x00,0x18,0x18,0x18,0x18,0x18,0x1f,0x18,0x18,0x18,0x18,0x1f},\r
744{0x00,0x03,0x06,0x00,0x00,0x00,0xc3,0x66,0x66,0x66,0x66,0xc3},\r
745{0x00,0xf0,0x18,0x18,0x18,0x18,0xf0,0x00,0x00,0x00,0x18,0xf0},\r
746\r
747 12345678\r
748311111111 0xff\r
749211 0xc0\r
750111 0xc0\r
751011 0xc0\r
752911 0xc0\r
7538111111 0xfc\r
754711 0xc0\r
755611 0xc0\r
756511 0xc0\r
757411 0xc0\r
758311 0xc0\r
7592 0x00\r
7601 0x00\r
761\r
762{0x00,0x00,0xc0,0xc0,0xc0,0xc0,0xc0,0x3f,0xc0,0xc0,0xc0,0xc0,0xff}\r
763\r
764\r
765 12345678\r
76631111111 0xfe\r
767211 11 0xc3\r
768111 11 0xc3\r
769011 11 0xc3\r
770911 11 0xc3\r
77181111111 0xfe\r
772711 0xc0\r
773611 0xc0\r
774511 0xc0\r
775411 0xc0\r
776311 0xc0\r
7772 0x00\r
7781 0x00\r
779\r
780\r
781{0x00,0x00,0xc0,0xc0,0xc0,0xc0,0xc0,0x7f,0xc3,0xc3,0xc3,0xc3,0x7f}\r
782\r
783 12345678\r
7843 111111 0x7e\r
785211 11 0xc3\r
786111 0xc0\r
787011 0xc0\r
788911 0xc0\r
7898 111111 0x7e\r
7907 11 0x03\r
7916 11 0x03\r
7925 11 0x03\r
793411 11 0xc3\r
7943 111111 0x7e\r
7952 0x00\r
7961 0x00\r
797\r
798{0x00,0x00,0x7e,0xc3,0x03,0x03,0x03,0x7e,0xc0,0xc0,0xc0,0xc3,0x7e}\r
799\r
800 12345678\r
8013 0x00\r
8022 1111111 0x7f\r
8031 11 0x60\r
8040 11 0x60\r
8059 11111 0x7c\r
8068 11 0x60\r
8077 11 0x60\r
8086 11 0x60\r
8095 0x00\r
8104 0x00\r
8113 0x00\r
8122 0x00\r
8131 0x00\r
814\r
815{0x00,0x00,0x00,0x00,0x00,0x60,0x60,0x60,0x7c,0x60,0x60,0x7f,0x00}\r
816\r
817 12345678\r
8183 0x00\r
8192 1111111 0x7f\r
8201 11 0x60\r
8210 11 0x60\r
8229 11111 0x7c\r
8238 11 0x60\r
8247 11 0x60\r
8256 11 0x60\r
8265 0x00\r
8274 1 0x08\r
8283 111 0x1c\r
8292 11111 0x3e\r
8301 1111111 0x7f\r
831\r
832{0x7f,0x3e,0x1c,0x08,0x00,0x60,0x60,0x60,0x7c,0x60,0x60,0x7f,0x00}\r
833\r
834 12345678\r
8353 0x00\r
8362 11 11 0x63\r
8371 11 11 0x63\r
8380 11 11 0x63\r
8399 11 11 0x63\r
8408 11 1 11 0x6b\r
8417 1111111 0x7f\r
8426 11 11 0x36\r
8435 0x00\r
8444 0x00\r
8453 0x00\r
8462 0x00\r
8471 0x00\r
848\r
849{0x00,0x00,0x00,0x00,0x00,0x36,0x7f,0x6b,0x63,0x63,0x63,0x63,0x00}\r
850\r
851 12345678\r
8523 0x00\r
8532 11 11 0x63\r
8541 11 11 0x63\r
8550 11 11 0x63\r
8569 11 11 0x63\r
8578 11 1 11 0x6b\r
8587 1111111 0x7f\r
8596 11 11 0x36\r
8605 0x00\r
8614 1 0x08\r
8623 111 0x1c\r
8632 11111 0x3e\r
8641 1111111 0x7f\r
865\r
866{0x7f,0x3e,0x1c,0x08,0x00,0x36,0x7f,0x6b,0x63,0x63,0x63,0x63,0x00}\r
867\r
868\r
869 12345678\r
8703 0x00\r
8712 1 0x08\r
8721 111 0x1c\r
8730 11 11 0x36\r
8749 11 11 0x63\r
8758 1111111 0x7f\r
8767 11 11 0x63\r
8776 11 11 0x63\r
8785 0x00\r
8794 0x00\r
8803 0x00\r
8812 0x00\r
8821 0x00\r
883\r
884{0x00,0x00,0x00,0x00,0x00,0x63,0x63,0x7f,0x63,0x36,0x1c,0x08,0x00}\r
885\r
886 12345678\r
8873 0x00\r
8882 1 0x08\r
8891 111 0x1c\r
8900 11 11 0x36\r
8919 11 11 0x63\r
8928 1111111 0x7f\r
8937 11 11 0x63\r
8946 11 11 0x63\r
8955 0x00\r
8964 1 0x08\r
8973 111 0x1c\r
8982 11111 0x3e\r
8991 1111111 0x7f\r
900\r
901{0x7f,0x3e,0x1c,0x08,0x00,0x63,0x63,0x7f,0x63,0x36,0x1c,0x08,0x00}\r
902\r
903 12345678\r
9043 0x00\r
9052 11111 0x3e\r
9061 11 11 0x63\r
9070 11 11 0x63\r
9089 11 11 0x63\r
9098 11 11 0x63\r
9107 11 11 0x63\r
9116 11111 0x3e\r
9125 0x00\r
9134 0x00\r
9143 0x00\r
9152 0x00\r
9161 0x00\r
917\r
918{0x00,0x00,0x00,0x00,0x00,0x3e,0x63,0x63,0x63,0x63,0x63,0x3e,0x00}\r
919\r
920 12345678\r
9213 0x00\r
9222 11111 0x3e\r
9231 11 11 0x63\r
9240 11 11 0x63\r
9259 11 11 0x63\r
9268 11 11 0x63\r
9277 11 11 0x63\r
9286 11111 0x3e\r
9295 0x00\r
9304 1 0x08\r
9313 111 0x1c\r
9322 11111 0x3e\r
9331 1111111 0x7f\r
934\r
935{0x7f,0x3e,0x1c,0x08,0x00,0x3e,0x63,0x63,0x63,0x63,0x63,0x3e,0x00}\r
936\r
937 12345678\r
9383 1 0x10\r
9392 11 0x30\r
9401 111 0x70\r
941011111111 0xff\r
9429 111 0x70\r
9438 11 0x30\r
9447 1 0x10\r
9456 0x00\r
9465 0x00\r
9474 0x00\r
9483 0x00\r
9492 0x00\r
9501 0x00\r
951\r
952{0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x30,0x70,0xff,0x70,0x30,0x10}\r
953\r
954 12345678\r
9553 1 0x10\r
9562 11 0x30\r
9571 1111111 0x7f\r
958011111111 0xff\r
9599 1111111 0x7f\r
9608 11 0x30\r
9617 1 0x10\r
9626 0x00\r
9635 0x00\r
9644 0x00\r
9653 0x00\r
9662 0x00\r
9671 0x00\r
968\r
969{0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x30,0x7f,0xff,0x7f,0x30,0x10}\r
970\r
971///////////////////////////////////////////////////////////////////////////////////////\r
972\r
973 12345678\r
9743 0x00\r
975211111 0xf8\r
97611 1 1 0x85\r
97701111 1 1 0xf5\r
97891 1 1 0x85\r
97981 1 1 0x85\r
98071 1 0x82\r
9816 0x00\r
9825 0x00\r
9834 0x00\r
9843 0x00\r
9852 0x00\r
9861 0x00\r
987\r
988{0x00,0x00,0x00,0x00,0x00,0x00,0x82,0x85,0x85,0xf5,0x85,0xf8,0x00},\r
989\r
990///////////////////////////////////////////////////////////////////////////////////////\r
991\r
992 12345678\r
9933 0x00\r
994211111 0xf8\r
99511 111 0x87\r
99601111 1 0xf4\r
99791 111 0x87\r
99881 1 0x81\r
99971 111 0x87\r
10006 0x00\r
10015 0x00\r
10024 0x00\r
10033 0x00\r
10042 0x00\r
10051 0x00\r
1006\r
1007{0x00,0x00,0x00,0x00,0x00,0x00,0x87,0x81,0x87,0xf4,0x87,0xf8,0x00},\r
1008\r
1009 12345678\r
10103 0x00\r
1011211111 0xf8\r
101211 1 0x84\r
101301111 1 0xf4\r
101491 1 0x84\r
101581 1 0x84\r
101671 111 0x87\r
10176 0x00\r
10185 0x00\r
10194 0x00\r
10203 0x00\r
10212 0x00\r
10221 0x00\r
1023\r
1024{0x00,0x00,0x00,0x00,0x00,0x00,0x87,0x84,0x84,0xf4,0x84,0xf8,0x00},\r
1025\r
1026 12345678\r
10273 0x00\r
10282 11 0x60\r
102911 1 11 0x96\r
103001 1 1 1 0x95\r
103191 1 1 1 0x95\r
103281 1 1 1 0x95\r
10337 11 11 0x66\r
10346 0x00\r
10355 0x00\r
10364 0x00\r
10373 0x00\r
10382 0x00\r
10391 0x00\r
1040\r
1041{0x00,0x00,0x00,0x00,0x00,0x00,0xf6,0x95,0x95,0x95,0x96,0xf0,0x00},\r
1042\r
1043 12345678\r
10443 0x00\r
1045211111 0xf8\r
10461 1 1 0x22\r
10470 1 1 1 0x25\r
10489 1 111 0x27\r
10498 1 1 1 0x25\r
10507 1 1 1 0x25\r
10516 0x00\r
10525 0x00\r
10534 0x00\r
10543 0x00\r
10552 0x00\r
10561 0x00\r
1057\r
1058{0x00,0x00,0x00,0x00,0x00,0x00,0x25,0x25,0x27,0x25,0x22,0xf8,0x00},\r
1059\r
1060 12345678\r
10613 0x00\r
1062211111 0xf8\r
106311 1 0x82\r
10640111 1 0xe2\r
106591 1 0x82\r
106681 1 0x82\r
106771 1 0x82\r
10686 0x00\r
10695 0x00\r
10704 0x00\r
10713 0x00\r
10722 0x00\r
10731 0x00\r
1074\r
1075{0x00,0x00,0x00,0x00,0x00,0x00,0x82,0x82,0x82,0xe2,0x82,0xf8,0x00},\r
1076\r
1077 12345678\r
10783 0x00\r
10792111 0xe0\r
108011 1 1 0x92\r
108101 1 1 0x92\r
108291 1 1 0x92\r
108381 1 1 0x92\r
10847111 1 0xe2\r
10856 0x00\r
10865 0x00\r
10874 0x00\r
10883 0x00\r
10892 0x00\r
10901 0x00\r
1091\r
1092{0x00,0x00,0x00,0x00,0x00,0x00,0xe2,0x92,0x92,0x92,0x92,0xe0,0x00},\r
1093\r
1094 12345678\r
10953 0x00\r
1096211111 0xf8\r
10971 1 1 0x41\r
10980 1 1 1 0x51\r
10999 1 1 1 1 0x55\r
11008 1 11 11 0x5b\r
11017 1 1 1 0x51\r
11026 0x00\r
11035 0x00\r
11044 0x00\r
11053 0x00\r
11062 0x00\r
11071 0x00\r
1108\r
1109{0x00,0x00,0x00,0x00,0x00,0x00,0x51,0x5b,0x55,0x51,0x41,0xf8,0x00},\r
1110\r
1111 12345678\r
11126 0x00\r
1113511111111 0xff\r
11144111 111 0xe7\r
111531 11 1 0x99\r
11162111 111 0xe7\r
1117111111111 0xff\r
1118\r
11190xff,0xe7,0x99,0xe7,0xff\r
1120\r
1121 12345678\r
11226 0x00\r
1123511111111 0xff\r
112441 1 0x81\r
112531 1 0x81\r
112621 1 0x81\r
1127111111111 0xff\r
1128\r
11290xff,0x81,0x81,0x81,0xff\r
1130\r
1131\r
1132 12345678\r
11333 0x00\r
11342 11 0x60\r
113511 1 1 1 0x95\r
113601111 111 0xf7\r
113791 1 1 1 0x95\r
113881 1 1 1 0x95\r
113971 1 1 1 0x95\r
11406 0x00\r
11415 0x00\r
11424 0x00\r
11433 0x00\r
11442 0x00\r
11451 0x00\r
1146\r
11470x95,0x95,0x95,0xf7,0x95,0x60,0x00\r
1148\r
1149 12345678\r
11503 0x00\r
11512 0x00\r
11521 1111 0x3c\r
11530 1 1 0x42\r
115491 1 0x81\r
115581 1 1 1 0xa5\r
115671 1 0x81\r
115761 1 1 1 0xa5\r
115851 11 1 0x99\r
11594 1 1 0x42\r
11603 1111 0x3c\r
11612 0x00\r
11621 0x00\r
1163\r
11640x00,0x00,0x3c,0x42,0x99,0xa5,0x81,0xa5,0x81,0x42,0x3c,0x00,0x00 \r
1165\r
1166 12345678\r
11673 0x00\r
11682 0x00\r
11691 1 0x08\r
11700 1 1 1 0x49\r
11719 1 1 1 0x2a\r
11728 111 0x1c\r
11737 1111111 0x7f\r
11746 111 0x1c\r
11755 1 1 1 0x2a\r
11764 1 1 1 0x49\r
11773 1 0x08\r
11782 0x00\r
11791 0x00\r
1180\r
11810x00,0x00,0x08,0x49,0x2a,0x1c,0x7f,0x1c,0x2a,0x49,0x08,0x00,0x00\r
1182\r
1183\r
1184 12345678\r
11853 0x00\r
11862 0x00\r
11871 11111 0x3e\r
11880 1 1 1 0x2a\r
11899 11 11 0x36\r
11908 1 1 1 0x2a\r
11917 11 11 0x36\r
11926 1 1 1 0x2a\r
11935 11 11 0x36\r
11944 1 1 1 0x2a\r
11953 11111 0x3e\r
11962 0x00\r
11971 0x00\r
1198\r
1199{0x00,0x00,0x3e,0x2a,0x36,0x2a,0x36,0x2a,0x36,0x2a,0x3e,0x00,0x00},\r
1200\r
1201 12345678\r
12023 0x00\r
12032 0x00\r
12041 11 0x06\r
12050 111 0x1c\r
12069 111 0x38\r
12078 1111 0x78\r
12087 1111 0x78 \r
12096 1111 0x78\r
12105 111 0x38\r
12114 111 0x1c\r
12123 11 0x06\r
12132 0x00\r
12141 0x00\r
1215\r
1216{0x00,0x00,0x06,0x1c,0x38,0x78,0x78,0x78,0x38,0x1c,0x06,0x00,0x00},\r
1217\r
1218\r
1219 12345678\r
12203 0x00\r
12212 11 0x60\r
122211 1 11 0x96\r
122301111 1 1 0xf5\r
122491 1 11 0x96\r
122581 1 1 1 0x95\r
122671 1 111 0x97\r
12276 0x00\r
12285 0x00\r
12294 0x00\r
12303 0x00\r
12312 0x00\r
12321 0x00\r
1233\r
12340x00,0x00,0x00,0x00,0x00,0x00,0x97,x95,0x96,0xf5,0x96,0x60,0x00\r
1235\r
1236*/\r
1237\r
1238////////////////////////////////////////////////////////////////////////\r
1239// texture for gpu picture\r
1240////////////////////////////////////////////////////////////////////////\r
1241\r
1242void CreatePic(unsigned char * pMem)\r
1243{\r
1244 int x,y;\r
1245 GLubyte TexBytes[128][128][3];\r
1246 memset(TexBytes,0,128*128*3);\r
1247 \r
1248 for(y=0;y<96;y++)\r
1249 {\r
1250 for(x=0;x<128;x++)\r
1251 {\r
1252 TexBytes[y][x][0]=*(pMem+2);\r
1253 TexBytes[y][x][1]=*(pMem+1);\r
1254 TexBytes[y][x][2]=*(pMem+0);\r
1255 pMem+=3;\r
1256 }\r
1257 }\r
1258\r
1259 glGenTextures(1, &gTexPicName);\r
1260 glBindTexture(GL_TEXTURE_2D, gTexPicName);\r
1261 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP);\r
1262 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP);\r
1263 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);\r
1264 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);\r
1265 glTexImage2D(GL_TEXTURE_2D, 0, 3, 128, 128, 0, GL_RGB,\r
1266 GL_UNSIGNED_BYTE,TexBytes);\r
1267}\r
1268\r
1269////////////////////////////////////////////////////////////////////////\r
1270// destroy gpu picture texture\r
1271////////////////////////////////////////////////////////////////////////\r
1272\r
1273void DestroyPic(void)\r
1274{\r
1275 if(gTexPicName) \r
1276 {\r
1277 GLfloat fYS1,fYS2,fXS1,fXS2,fXS,fYS;\r
1278\r
1279 glDisable(GL_SCISSOR_TEST); \r
1280 glDisable(GL_ALPHA_TEST);\r
1281 if(bOldSmoothShaded) {glShadeModel(GL_FLAT);bOldSmoothShaded=FALSE;}\r
1282 if(bBlendEnable) {glDisable(GL_BLEND);bBlendEnable=FALSE;}\r
1283 if(!bTexEnabled) {glEnable(GL_TEXTURE_2D);bTexEnabled=TRUE;}\r
1284 gTexName=0;\r
1285 glBindTexture(GL_TEXTURE_2D,0); \r
1286 vertex[0].c.lcol=0xff000000; \r
1287\r
1288 fYS=(GLfloat)PSXDisplay.DisplayMode.y/(GLfloat)iResY;\r
1289 fXS=(GLfloat)PSXDisplay.DisplayMode.x/(GLfloat)iResX;\r
1290 fYS2=96.0f*fYS;\r
1291 fYS1=0.0f;\r
1292 fXS2=(GLfloat)PSXDisplay.DisplayMode.x;\r
1293 fXS1=fXS2-128.0f*fXS;\r
1294\r
1295 SETCOL(vertex[0]); \r
1296 glBegin(GL_QUADS); // paint a black rect to hide texture\r
1297\r
1298 glVertex3f(fXS1,fYS1,0.99996f);\r
1299 glVertex3f(fXS1,fYS2,0.99996f);\r
1300 glVertex3f(fXS2,fYS2,0.99996f);\r
1301 glVertex3f(fXS2,fYS1,0.99996f);\r
1302\r
1303 glEnd();\r
1304 glEnable(GL_ALPHA_TEST);\r
1305 glEnable(GL_SCISSOR_TEST); \r
1306 \r
1307 glDeleteTextures(1,&gTexPicName);gTexPicName=0;\r
1308 }\r
1309}\r
1310\r
1311////////////////////////////////////////////////////////////////////////\r
1312// display info picture\r
1313////////////////////////////////////////////////////////////////////////\r
1314\r
1315void DisplayPic(void)\r
1316{\r
1317 GLfloat fYS1,fYS2,fXS1,fXS2,fXS,fYS;\r
1318\r
1319 glDisable(GL_SCISSOR_TEST); \r
1320 glDisable(GL_ALPHA_TEST);\r
1321 if(bOldSmoothShaded) {glShadeModel(GL_FLAT);bOldSmoothShaded=FALSE;}\r
1322 if(bBlendEnable) {glDisable(GL_BLEND);bBlendEnable=FALSE;}\r
1323 if(!bTexEnabled) {glEnable(GL_TEXTURE_2D);bTexEnabled=TRUE;}\r
1324 gTexName=gTexPicName;\r
1325 glBindTexture(GL_TEXTURE_2D,gTexPicName); // now set font texture\r
1326\r
1327 if(bGLBlend) vertex[0].c.lcol=0xff7f7f7f; \r
1328 else vertex[0].c.lcol=0xffffffff; \r
1329\r
1330 fYS=(GLfloat)PSXDisplay.DisplayMode.y/(GLfloat)iResY;\r
1331 fXS=(GLfloat)PSXDisplay.DisplayMode.x/(GLfloat)iResX;\r
1332 fYS2=96.0f*fYS;\r
1333 fYS1=0.0f;\r
1334 fXS2=(GLfloat)PSXDisplay.DisplayMode.x;\r
1335 fXS1=fXS2-128.0f*fXS;\r
1336\r
1337 SETCOL(vertex[0]); \r
1338 glBegin(GL_QUADS);\r
1339\r
1340#ifdef OWNSCALE\r
1341 glTexCoord2f(0.0f,0.0f);\r
1342 glVertex3f(fXS1,fYS1,0.99996f);\r
1343 glTexCoord2f(0.0f,192.0f/256.0f);\r
1344 glVertex3f(fXS1,fYS2,0.99996f);\r
1345 glTexCoord2f(256.0f/256.0f,192.0f/256.0f);\r
1346 glVertex3f(fXS2,fYS2,0.99996f);\r
1347 glTexCoord2f(256.0f/256.0f,0.0f);\r
1348 glVertex3f(fXS2,fYS1,0.99996f);\r
1349#else\r
1350 glTexCoord2f(0.0f,0.0f);\r
1351 glVertex3f(fXS1,fYS1,0.99996f);\r
1352 glTexCoord2f(0.0f,192.0f);\r
1353 glVertex3f(fXS1,fYS2,0.99996f);\r
1354 glTexCoord2f(256.0f,192.0f);\r
1355 glVertex3f(fXS2,fYS2,0.99996f);\r
1356 glTexCoord2f(256.0f,0.0f);\r
1357 glVertex3f(fXS2,fYS1,0.99996f);\r
1358#endif\r
1359\r
1360 glEnd();\r
1361 glEnable(GL_ALPHA_TEST);\r
1362 glEnable(GL_SCISSOR_TEST); \r
1363}\r
1364
1365////////////////////////////////////////////////////////////////////////\r
1366// show gun cursor\r
1367////////////////////////////////////////////////////////////////////////\r
1368\r
1369#define TRA 0x00,0x00,0x00,0x00\r
1370#define PNT 0xff,0xff,0xff,0xff\r
1371\r
1372GLubyte texcursor[8][32]= \r
1373{\r
1374{TRA,TRA,PNT,PNT,PNT,TRA,TRA,TRA},\r
1375{TRA,PNT,TRA,TRA,TRA,PNT,TRA,TRA},\r
1376{PNT,TRA,TRA,PNT,TRA,TRA,PNT,TRA},\r
1377{PNT,TRA,PNT,TRA,PNT,TRA,PNT,TRA},\r
1378{PNT,TRA,TRA,PNT,TRA,TRA,PNT,TRA},\r
1379{TRA,PNT,TRA,TRA,TRA,PNT,TRA,TRA},\r
1380{TRA,TRA,PNT,PNT,PNT,TRA,TRA,TRA},\r
1381{TRA,TRA,TRA,TRA,TRA,TRA,TRA,TRA}\r
1382};\r
1383\r
1384void ShowGunCursor(void)\r
1385{\r
1386 int iPlayer;\r
1387 GLfloat fX,fY,fDX,fDY,fYS,fXS;\r
1388 const uint32_t crCursorColor32[8]={0xff00ff00,0xffff0000,0xff0000ff,0xffff00ff,0xffffff00,0xff00ffff,0xffffffff,0xff7f7f7f};\r
1389\r
1390 if(!gTexCursorName) // create gun cursor texture the first time\r
1391 {\r
1392 glGenTextures(1, &gTexCursorName);\r
1393 glBindTexture(GL_TEXTURE_2D, gTexCursorName);\r
1394 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP);\r
1395 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP);\r
1396 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);\r
1397 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);\r
1398 glTexImage2D(GL_TEXTURE_2D, 0, 4, 8, 8, 0, GL_RGBA,\r
1399 GL_UNSIGNED_BYTE,texcursor);\r
1400 }\r
1401\r
1402 fYS=(GLfloat)PSXDisplay.DisplayMode.y/(GLfloat)iResY; // some pre-calculations\r
1403 fXS=(GLfloat)PSXDisplay.DisplayMode.x/(GLfloat)iResX;\r
1404\r
1405 fDX=fXS*7;\r
1406 fDY=fYS*7;\r
1407\r
1408 glDisable(GL_SCISSOR_TEST); \r
1409 if(bOldSmoothShaded) {glShadeModel(GL_FLAT);bOldSmoothShaded=FALSE;}\r
1410 if(bBlendEnable) {glDisable(GL_BLEND);bBlendEnable=FALSE;}\r
1411 if(!bTexEnabled) {glEnable(GL_TEXTURE_2D);bTexEnabled=TRUE;}\r
1412\r
1413 gTexName=gTexCursorName;\r
1414 glBindTexture(GL_TEXTURE_2D,gTexCursorName); // now set font texture\r
1415\r
1416 for(iPlayer=0;iPlayer<8;iPlayer++) // loop all possible players\r
1417 {\r
1418 if(usCursorActive&(1<<iPlayer)) // player is active?\r
1419 {\r
1420 fY=((GLfloat)ptCursorPoint[iPlayer].y*(GLfloat)PSXDisplay.DisplayMode.y)/256.0f;\r
1421 fX=((GLfloat)ptCursorPoint[iPlayer].x*(GLfloat)PSXDisplay.DisplayMode.x)/512.0f;\r
1422\r
1423 vertex[0].c.lcol=crCursorColor32[iPlayer]; // -> set player color\r
1424\r
1425 SETCOL(vertex[0]); \r
1426\r
1427 glBegin(GL_QUADS);\r
1428\r
1429 glTexCoord2f(000.0f,224.0f/255.99f); // -> paint gun cursor\r
1430 glVertex3f(fX-fDX,fY+fDY,0.99996f);\r
1431 glTexCoord2f(000.0f,000.0f);\r
1432 glVertex3f(fX-fDX,fY-fDY,0.99996f);\r
1433 glTexCoord2f(224.0f/255.99f,000.0f);\r
1434 glVertex3f(fX+fDX,fY-fDY,0.99996f);\r
1435 glTexCoord2f(224.0f/255.99f,224.0f/255.99f);\r
1436 glVertex3f(fX+fDX,fY+fDY,0.99996f);\r
1437\r
1438 glEnd();\r
1439 }\r
1440 }\r
1441\r
1442 glEnable(GL_SCISSOR_TEST); \r
1443}\r