-/***************************************************************************\r
- soft.c - description\r
- -------------------\r
- begin : Sun Oct 28 2001\r
- copyright : (C) 2001 by Pete Bernert\r
- web : www.pbernert.com \r
- ***************************************************************************/\r
-\r
-/***************************************************************************\r
- * *\r
- * This program is free software; you can redistribute it and/or modify *\r
- * it under the terms of the GNU General Public License as published by *\r
- * the Free Software Foundation; either version 2 of the License, or *\r
- * (at your option) any later version. See also the license.txt file for *\r
- * additional informations. *\r
- * *\r
- ***************************************************************************/\r
-\r
-#include "stdafx.h"\r
-\r
-#define _IN_SOFT\r
-\r
-#include "externals.h"\r
-#include "soft.h"\r
-\r
-int iDither = 0;\r
-\r
-////////////////////////////////////////////////////////////////////////////////////\r
-// "NO EDGE BUFFER" POLY VERSION... FUNCS BASED ON FATMAP.TXT FROM MRI / Doomsday\r
-////////////////////////////////////////////////////////////////////////////////////\r
-\r
-////////////////////////////////////////////////////////////////////////////////////\r
-// defines\r
-////////////////////////////////////////////////////////////////////////////////////\r
-\r
-// switches for painting textured quads as 2 triangles (small glitches, but better shading!)\r
-// can be toggled by game fix 0x200 in version 1.17 anyway, so let the defines enabled!\r
-\r
-#define POLYQUAD3 \r
-#define POLYQUAD3GT \r
-\r
-// fast solid loops... a bit more additional code, of course\r
-\r
-#define FASTSOLID\r
-\r
-// psx blending mode 3 with 25% incoming color (instead 50% without the define)\r
-\r
-#define HALFBRIGHTMODE3\r
-\r
-// color decode defines\r
-\r
-#define XCOL1(x) (x & 0x1f)\r
-#define XCOL2(x) (x & 0x3e0)\r
-#define XCOL3(x) (x & 0x7c00)\r
-\r
-#define XCOL1D(x) (x & 0x1f)\r
-#define XCOL2D(x) ((x>>5) & 0x1f)\r
-#define XCOL3D(x) ((x>>10) & 0x1f)\r
-\r
-#define X32TCOL1(x) ((x & 0x001f001f)<<7)\r
-#define X32TCOL2(x) ((x & 0x03e003e0)<<2)\r
-#define X32TCOL3(x) ((x & 0x7c007c00)>>3)\r
-\r
-#define X32COL1(x) (x & 0x001f001f)\r
-#define X32COL2(x) ((x>>5) & 0x001f001f)\r
-#define X32COL3(x) ((x>>10) & 0x001f001f)\r
-\r
-#define X32ACOL1(x) (x & 0x001e001e)\r
-#define X32ACOL2(x) ((x>>5) & 0x001e001e)\r
-#define X32ACOL3(x) ((x>>10) & 0x001e001e)\r
-\r
-#define X32BCOL1(x) (x & 0x001c001c)\r
-#define X32BCOL2(x) ((x>>5) & 0x001c001c)\r
-#define X32BCOL3(x) ((x>>10) & 0x001c001c)\r
-\r
-#define X32PSXCOL(r,g,b) ((g<<10)|(b<<5)|r)\r
-\r
-#define XPSXCOL(r,g,b) ((g&0x7c00)|(b&0x3e0)|(r&0x1f))\r
-\r
-////////////////////////////////////////////////////////////////////////////////////\r
-// soft globals\r
-////////////////////////////////////////////////////////////////////////////////////\r
-\r
-short g_m1 = 255, g_m2 = 255, g_m3 = 255;\r
-short DrawSemiTrans = FALSE;\r
-short Ymin;\r
-short Ymax;\r
-\r
-short ly0, lx0, ly1, lx1, ly2, lx2, ly3, lx3; // global psx vertex coords\r
-int GlobalTextAddrX, GlobalTextAddrY, GlobalTextTP;\r
-int GlobalTextREST, GlobalTextABR, GlobalTextPAGE;\r
-\r
-////////////////////////////////////////////////////////////////////////\r
-// POLYGON OFFSET FUNCS\r
-////////////////////////////////////////////////////////////////////////\r
-\r
-void offsetPSXLine(void)\r
-{\r
- short x0,x1,y0,y1,dx,dy;float px,py;\r
-\r
- x0 = lx0+1+PSXDisplay.DrawOffset.x;\r
- x1 = lx1+1+PSXDisplay.DrawOffset.x;\r
- y0 = ly0+1+PSXDisplay.DrawOffset.y;\r
- y1 = ly1+1+PSXDisplay.DrawOffset.y;\r
-\r
- dx=x1-x0;\r
- dy=y1-y0;\r
-\r
- // tricky line width without sqrt\r
-\r
- if(dx>=0)\r
- {\r
- if(dy>=0)\r
- {\r
- px=0.5f;\r
- if(dx>dy) py=-0.5f;\r
- else if(dx<dy) py= 0.5f;\r
- else py= 0.0f;\r
- }\r
- else\r
- {\r
- py=-0.5f;\r
- dy=-dy;\r
- if(dx>dy) px= 0.5f;\r
- else if(dx<dy) px=-0.5f;\r
- else px= 0.0f;\r
- }\r
- }\r
- else\r
- {\r
- if(dy>=0)\r
- {\r
- py=0.5f;\r
- dx=-dx;\r
- if(dx>dy) px=-0.5f;\r
- else if(dx<dy) px= 0.5f;\r
- else px= 0.0f;\r
- }\r
- else\r
- {\r
- px=-0.5f;\r
- if(dx>dy) py=-0.5f;\r
- else if(dx<dy) py= 0.5f;\r
- else py= 0.0f;\r
- }\r
- } \r
- \r
- lx0=(short)((float)x0-px);\r
- lx3=(short)((float)x0+py);\r
- \r
- ly0=(short)((float)y0-py);\r
- ly3=(short)((float)y0-px);\r
- \r
- lx1=(short)((float)x1-py);\r
- lx2=(short)((float)x1+px);\r
- \r
- ly1=(short)((float)y1+px);\r
- ly2=(short)((float)y1+py);\r
-}\r
-\r
-void offsetPSX2(void)\r
-{\r
- lx0 += PSXDisplay.DrawOffset.x;\r
- ly0 += PSXDisplay.DrawOffset.y;\r
- lx1 += PSXDisplay.DrawOffset.x;\r
- ly1 += PSXDisplay.DrawOffset.y;\r
-}\r
-\r
-void offsetPSX3(void)\r
-{\r
- lx0 += PSXDisplay.DrawOffset.x;\r
- ly0 += PSXDisplay.DrawOffset.y;\r
- lx1 += PSXDisplay.DrawOffset.x;\r
- ly1 += PSXDisplay.DrawOffset.y;\r
- lx2 += PSXDisplay.DrawOffset.x;\r
- ly2 += PSXDisplay.DrawOffset.y;\r
-}\r
-\r
-void offsetPSX4(void)\r
-{\r
- lx0 += PSXDisplay.DrawOffset.x;\r
- ly0 += PSXDisplay.DrawOffset.y;\r
- lx1 += PSXDisplay.DrawOffset.x;\r
- ly1 += PSXDisplay.DrawOffset.y;\r
- lx2 += PSXDisplay.DrawOffset.x;\r
- ly2 += PSXDisplay.DrawOffset.y;\r
- lx3 += PSXDisplay.DrawOffset.x;\r
- ly3 += PSXDisplay.DrawOffset.y;\r
-}\r
-\r
-/////////////////////////////////////////////////////////////////\r
-/////////////////////////////////////////////////////////////////\r
-/////////////////////////////////////////////////////////////////\r
-// PER PIXEL FUNCS\r
-////////////////////////////////////////////////////////////////////////\r
-/////////////////////////////////////////////////////////////////\r
-/////////////////////////////////////////////////////////////////\r
-\r
-\r
-unsigned char dithertable[16] =\r
-{\r
- 7, 0, 6, 1,\r
- 2, 5, 3, 4,\r
- 1, 6, 0, 7,\r
- 4, 3, 5, 2\r
-};\r
-\r
-void Dither16(unsigned short *pdest, uint32_t r, uint32_t g, uint32_t b, unsigned short sM)\r
-{\r
- unsigned char coeff;\r
- unsigned char rlow, glow, blow;\r
- int x, y;\r
- \r
- x = pdest - psxVuw;\r
- y = x >> 10;\r
- x -= (y << 10);\r
-\r
- coeff = dithertable[(y&3)*4+(x&3)];\r
-\r
- rlow = r&7; glow = g&7; blow = b&7;\r
-\r
- r>>=3; g>>=3; b>>=3;\r
-\r
- if ((r < 0x1F) && rlow > coeff) r++;\r
- if ((g < 0x1F) && glow > coeff) g++;\r
- if ((b < 0x1F) && blow > coeff) b++;\r
-\r
- *pdest=((unsigned short)b<<10) |\r
- ((unsigned short)g<<5) |\r
- (unsigned short)r | sM;\r
-}\r
-\r
-/////////////////////////////////////////////////////////////////\r
-\r
-__inline void GetShadeTransCol_Dither(unsigned short *pdest, int m1, int m2, int m3)\r
-{\r
- int r,g,b;\r
-\r
- if (bCheckMask && *pdest & 0x8000) return;\r
-\r
- if (DrawSemiTrans)\r
- {\r
- r=((XCOL1D(*pdest))<<3);\r
- b=((XCOL2D(*pdest))<<3);\r
- g=((XCOL3D(*pdest))<<3);\r
-\r
- if(GlobalTextABR==0)\r
- {\r
- r=(r>>1)+(m1>>1);\r
- b=(b>>1)+(m2>>1);\r
- g=(g>>1)+(m3>>1);\r
- }\r
- else\r
- if(GlobalTextABR==1)\r
- {\r
- r+=m1;\r
- b+=m2;\r
- g+=m3;\r
- }\r
- else\r
- if(GlobalTextABR==2)\r
- {\r
- r-=m1;\r
- b-=m2;\r
- g-=m3;\r
- if(r&0x80000000) r=0;\r
- if(b&0x80000000) b=0;\r
- if(g&0x80000000) g=0;\r
- }\r
- else\r
- {\r
-#ifdef HALFBRIGHTMODE3\r
- r+=(m1>>2);\r
- b+=(m2>>2);\r
- g+=(m3>>2);\r
-#else\r
- r+=(m1>>1);\r
- b+=(m2>>1);\r
- g+=(m3>>1);\r
-#endif\r
- }\r
- }\r
- else \r
- {\r
- r=m1;\r
- b=m2;\r
- g=m3;\r
- }\r
-\r
- if(r&0x7FFFFF00) r=0xff;\r
- if(b&0x7FFFFF00) b=0xff;\r
- if(g&0x7FFFFF00) g=0xff;\r
-\r
- Dither16(pdest,r,b,g,sSetMask);\r
-}\r
-\r
-////////////////////////////////////////////////////////////////////////\r
-\r
-__inline void GetShadeTransCol(unsigned short * pdest,unsigned short color)\r
-{\r
- if(bCheckMask && *pdest&0x8000) return;\r
-\r
- if(DrawSemiTrans)\r
- {\r
- int r,g,b;\r
- \r
- if(GlobalTextABR==0)\r
- {\r
- *pdest=((((*pdest)&0x7bde)>>1)+(((color)&0x7bde)>>1))|sSetMask;//0x8000;\r
- return;\r
-/*\r
- r=(XCOL1(*pdest)>>1)+((XCOL1(color))>>1);\r
- b=(XCOL2(*pdest)>>1)+((XCOL2(color))>>1);\r
- g=(XCOL3(*pdest)>>1)+((XCOL3(color))>>1);\r
-*/\r
- }\r
- else\r
- if(GlobalTextABR==1)\r
- {\r
- r=(XCOL1(*pdest))+((XCOL1(color)));\r
- b=(XCOL2(*pdest))+((XCOL2(color)));\r
- g=(XCOL3(*pdest))+((XCOL3(color)));\r
- }\r
- else\r
- if(GlobalTextABR==2)\r
- {\r
- r=(XCOL1(*pdest))-((XCOL1(color)));\r
- b=(XCOL2(*pdest))-((XCOL2(color)));\r
- g=(XCOL3(*pdest))-((XCOL3(color)));\r
- if(r&0x80000000) r=0;\r
- if(b&0x80000000) b=0;\r
- if(g&0x80000000) g=0;\r
- }\r
- else\r
- {\r
-#ifdef HALFBRIGHTMODE3\r
- r=(XCOL1(*pdest))+((XCOL1(color))>>2);\r
- b=(XCOL2(*pdest))+((XCOL2(color))>>2);\r
- g=(XCOL3(*pdest))+((XCOL3(color))>>2);\r
-#else\r
- r=(XCOL1(*pdest))+((XCOL1(color))>>1);\r
- b=(XCOL2(*pdest))+((XCOL2(color))>>1);\r
- g=(XCOL3(*pdest))+((XCOL3(color))>>1);\r
-#endif\r
- }\r
-\r
- if(r&0x7FFFFFE0) r=0x1f;\r
- if(b&0x7FFFFC00) b=0x3e0;\r
- if(g&0x7FFF8000) g=0x7c00;\r
-\r
- *pdest=(XPSXCOL(r,g,b))|sSetMask;//0x8000;\r
- }\r
- else *pdest=color|sSetMask;\r
-} \r
-\r
-////////////////////////////////////////////////////////////////////////\r
-\r
-__inline void GetShadeTransCol32(uint32_t *pdest, uint32_t color)\r
-{\r
- if (DrawSemiTrans)\r
- {\r
- int r,g,b;\r
-\r
- if(GlobalTextABR==0)\r
- {\r
- if(!bCheckMask)\r
- {\r
- *pdest=((((*pdest)&0x7bde7bde)>>1)+(((color)&0x7bde7bde)>>1))|lSetMask;//0x80008000;\r
- return;\r
- }\r
- r=(X32ACOL1(*pdest)>>1)+((X32ACOL1(color))>>1);\r
- b=(X32ACOL2(*pdest)>>1)+((X32ACOL2(color))>>1);\r
- g=(X32ACOL3(*pdest)>>1)+((X32ACOL3(color))>>1);\r
- }\r
- else\r
- if(GlobalTextABR==1)\r
- {\r
- r=(X32COL1(*pdest))+((X32COL1(color)));\r
- b=(X32COL2(*pdest))+((X32COL2(color)));\r
- g=(X32COL3(*pdest))+((X32COL3(color)));\r
- }\r
- else\r
- if(GlobalTextABR==2)\r
- {\r
- int sr,sb,sg,src,sbc,sgc,c;\r
- src=XCOL1(color);sbc=XCOL2(color);sgc=XCOL3(color);\r
- c=(*pdest)>>16;\r
- sr=(XCOL1(c))-src; if(sr&0x8000) sr=0;\r
- sb=(XCOL2(c))-sbc; if(sb&0x8000) sb=0;\r
- sg=(XCOL3(c))-sgc; if(sg&0x8000) sg=0;\r
- r=((int)sr)<<16;b=((int)sb)<<11;g=((int)sg)<<6;\r
- c=LOWORD(*pdest);\r
- sr=(XCOL1(c))-src; if(sr&0x8000) sr=0;\r
- sb=(XCOL2(c))-sbc; if(sb&0x8000) sb=0;\r
- sg=(XCOL3(c))-sgc; if(sg&0x8000) sg=0;\r
- r|=sr;b|=sb>>5;g|=sg>>10;\r
- }\r
- else\r
- {\r
-#ifdef HALFBRIGHTMODE3\r
- r=(X32COL1(*pdest))+((X32BCOL1(color))>>2);\r
- b=(X32COL2(*pdest))+((X32BCOL2(color))>>2);\r
- g=(X32COL3(*pdest))+((X32BCOL3(color))>>2);\r
-#else\r
- r=(X32COL1(*pdest))+((X32ACOL1(color))>>1);\r
- b=(X32COL2(*pdest))+((X32ACOL2(color))>>1);\r
- g=(X32COL3(*pdest))+((X32ACOL3(color))>>1);\r
-#endif\r
- }\r
-\r
- if(r&0x7FE00000) r=0x1f0000|(r&0xFFFF);\r
- if(r&0x7FE0) r=0x1f |(r&0xFFFF0000);\r
- if(b&0x7FE00000) b=0x1f0000|(b&0xFFFF);\r
- if(b&0x7FE0) b=0x1f |(b&0xFFFF0000);\r
- if(g&0x7FE00000) g=0x1f0000|(g&0xFFFF);\r
- if(g&0x7FE0) g=0x1f |(g&0xFFFF0000);\r
-\r
- if(bCheckMask) \r
- {\r
- uint32_t ma=*pdest;\r
- *pdest=(X32PSXCOL(r,g,b))|lSetMask;//0x80008000;\r
- if(ma&0x80000000) *pdest=(ma&0xFFFF0000)|(*pdest&0xFFFF);\r
- if(ma&0x00008000) *pdest=(ma&0xFFFF) |(*pdest&0xFFFF0000);\r
- return;\r
- }\r
- *pdest=(X32PSXCOL(r,g,b))|lSetMask;//0x80008000;\r
- }\r
- else\r
- {\r
- if(bCheckMask) \r
- {\r
- uint32_t ma=*pdest;\r
- *pdest=color|lSetMask;//0x80008000;\r
- if(ma&0x80000000) *pdest=(ma&0xFFFF0000)|(*pdest&0xFFFF);\r
- if(ma&0x00008000) *pdest=(ma&0xFFFF) |(*pdest&0xFFFF0000);\r
- return;\r
- }\r
-\r
- *pdest=color|lSetMask;//0x80008000;\r
- }\r
-} \r
-\r
-////////////////////////////////////////////////////////////////////////\r
-\r
-__inline void GetTextureTransColG(unsigned short * pdest,unsigned short color)\r
-{\r
- int r,g,b;unsigned short l;\r
-\r
- if(color==0) return;\r
-\r
- if(bCheckMask && *pdest&0x8000) return;\r
-\r
- l=sSetMask|(color&0x8000);\r
-\r
- if(DrawSemiTrans && (color&0x8000))\r
- {\r
- if(GlobalTextABR==0)\r
- {\r
- unsigned short d;\r
- d =((*pdest)&0x7bde)>>1;\r
- color =((color) &0x7bde)>>1;\r
- r=(XCOL1(d))+((((XCOL1(color)))* g_m1)>>7);\r
- b=(XCOL2(d))+((((XCOL2(color)))* g_m2)>>7);\r
- g=(XCOL3(d))+((((XCOL3(color)))* g_m3)>>7);\r
-\r
-/*\r
- r=(XCOL1(*pdest)>>1)+((((XCOL1(color))>>1)* g_m1)>>7);\r
- b=(XCOL2(*pdest)>>1)+((((XCOL2(color))>>1)* g_m2)>>7);\r
- g=(XCOL3(*pdest)>>1)+((((XCOL3(color))>>1)* g_m3)>>7);\r
-*/\r
- }\r
- else\r
- if(GlobalTextABR==1)\r
- {\r
- r=(XCOL1(*pdest))+((((XCOL1(color)))* g_m1)>>7);\r
- b=(XCOL2(*pdest))+((((XCOL2(color)))* g_m2)>>7);\r
- g=(XCOL3(*pdest))+((((XCOL3(color)))* g_m3)>>7);\r
- }\r
- else\r
- if(GlobalTextABR==2)\r
- {\r
- r=(XCOL1(*pdest))-((((XCOL1(color)))* g_m1)>>7);\r
- b=(XCOL2(*pdest))-((((XCOL2(color)))* g_m2)>>7);\r
- g=(XCOL3(*pdest))-((((XCOL3(color)))* g_m3)>>7);\r
- if(r&0x80000000) r=0;\r
- if(b&0x80000000) b=0;\r
- if(g&0x80000000) g=0;\r
- }\r
- else\r
- {\r
-#ifdef HALFBRIGHTMODE3\r
- r=(XCOL1(*pdest))+((((XCOL1(color))>>2)* g_m1)>>7);\r
- b=(XCOL2(*pdest))+((((XCOL2(color))>>2)* g_m2)>>7);\r
- g=(XCOL3(*pdest))+((((XCOL3(color))>>2)* g_m3)>>7);\r
-#else\r
- r=(XCOL1(*pdest))+((((XCOL1(color))>>1)* g_m1)>>7);\r
- b=(XCOL2(*pdest))+((((XCOL2(color))>>1)* g_m2)>>7);\r
- g=(XCOL3(*pdest))+((((XCOL3(color))>>1)* g_m3)>>7);\r
-#endif\r
- }\r
- }\r
- else \r
- {\r
- r=((XCOL1(color))* g_m1)>>7;\r
- b=((XCOL2(color))* g_m2)>>7;\r
- g=((XCOL3(color))* g_m3)>>7;\r
- }\r
-\r
- if(r&0x7FFFFFE0) r=0x1f;\r
- if(b&0x7FFFFC00) b=0x3e0;\r
- if(g&0x7FFF8000) g=0x7c00;\r
-\r
- *pdest=(XPSXCOL(r,g,b))|l;\r
-}\r
-\r
-////////////////////////////////////////////////////////////////////////\r
-\r
-__inline void GetTextureTransColG_S(unsigned short * pdest,unsigned short color)\r
-{\r
- int r,g,b;unsigned short l;\r
-\r
- if(color==0) return;\r
-\r
- l=sSetMask|(color&0x8000);\r
-\r
- r=((XCOL1(color))* g_m1)>>7;\r
- b=((XCOL2(color))* g_m2)>>7;\r
- g=((XCOL3(color))* g_m3)>>7;\r
-\r
- if(r&0x7FFFFFE0) r=0x1f;\r
- if(b&0x7FFFFC00) b=0x3e0;\r
- if(g&0x7FFF8000) g=0x7c00;\r
-\r
- *pdest=(XPSXCOL(r,g,b))|l;\r
-}\r
-\r
-\r
-////////////////////////////////////////////////////////////////////////\r
-\r
-__inline void GetTextureTransColG_SPR(unsigned short * pdest,unsigned short color)\r
-{\r
- int r,g,b;unsigned short l;\r
-\r
- if(color==0) return;\r
-\r
- if(bCheckMask && *pdest&0x8000) return;\r
-\r
- l=sSetMask|(color&0x8000);\r
-\r
- if(DrawSemiTrans && (color&0x8000))\r
- {\r
- if(GlobalTextABR==0)\r
- {\r
- unsigned short d;\r
- d =((*pdest)&0x7bde)>>1;\r
- color =((color) &0x7bde)>>1;\r
- r=(XCOL1(d))+((((XCOL1(color)))* g_m1)>>7);\r
- b=(XCOL2(d))+((((XCOL2(color)))* g_m2)>>7);\r
- g=(XCOL3(d))+((((XCOL3(color)))* g_m3)>>7);\r
-\r
-/*\r
- r=(XCOL1(*pdest)>>1)+((((XCOL1(color))>>1)* g_m1)>>7);\r
- b=(XCOL2(*pdest)>>1)+((((XCOL2(color))>>1)* g_m2)>>7);\r
- g=(XCOL3(*pdest)>>1)+((((XCOL3(color))>>1)* g_m3)>>7);\r
-*/\r
- }\r
- else\r
- if(GlobalTextABR==1)\r
- {\r
- r=(XCOL1(*pdest))+((((XCOL1(color)))* g_m1)>>7);\r
- b=(XCOL2(*pdest))+((((XCOL2(color)))* g_m2)>>7);\r
- g=(XCOL3(*pdest))+((((XCOL3(color)))* g_m3)>>7);\r
- }\r
- else\r
- if(GlobalTextABR==2)\r
- {\r
- r=(XCOL1(*pdest))-((((XCOL1(color)))* g_m1)>>7);\r
- b=(XCOL2(*pdest))-((((XCOL2(color)))* g_m2)>>7);\r
- g=(XCOL3(*pdest))-((((XCOL3(color)))* g_m3)>>7);\r
- if(r&0x80000000) r=0;\r
- if(b&0x80000000) b=0;\r
- if(g&0x80000000) g=0;\r
- }\r
- else\r
- {\r
-#ifdef HALFBRIGHTMODE3\r
- r=(XCOL1(*pdest))+((((XCOL1(color))>>2)* g_m1)>>7);\r
- b=(XCOL2(*pdest))+((((XCOL2(color))>>2)* g_m2)>>7);\r
- g=(XCOL3(*pdest))+((((XCOL3(color))>>2)* g_m3)>>7);\r
-#else\r
- r=(XCOL1(*pdest))+((((XCOL1(color))>>1)* g_m1)>>7);\r
- b=(XCOL2(*pdest))+((((XCOL2(color))>>1)* g_m2)>>7);\r
- g=(XCOL3(*pdest))+((((XCOL3(color))>>1)* g_m3)>>7);\r
-#endif\r
- }\r
- }\r
- else \r
- {\r
- r=((XCOL1(color))* g_m1)>>7;\r
- b=((XCOL2(color))* g_m2)>>7;\r
- g=((XCOL3(color))* g_m3)>>7;\r
- }\r
-\r
- if(r&0x7FFFFFE0) r=0x1f;\r
- if(b&0x7FFFFC00) b=0x3e0;\r
- if(g&0x7FFF8000) g=0x7c00;\r
-\r
- *pdest=(XPSXCOL(r,g,b))|l;\r
-}\r
-\r
-////////////////////////////////////////////////////////////////////////\r
-\r
-__inline void GetTextureTransColG32(uint32_t *pdest, uint32_t color)\r
-{\r
- int r,g,b,l;\r
-\r
- if(color==0) return;\r
-\r
- l=lSetMask|(color&0x80008000);\r
-\r
- if(DrawSemiTrans && (color&0x80008000))\r
- {\r
- if(GlobalTextABR==0)\r
- { \r
- r=((((X32TCOL1(*pdest))+((X32COL1(color)) * g_m1))&0xFF00FF00)>>8);\r
- b=((((X32TCOL2(*pdest))+((X32COL2(color)) * g_m2))&0xFF00FF00)>>8);\r
- g=((((X32TCOL3(*pdest))+((X32COL3(color)) * g_m3))&0xFF00FF00)>>8);\r
- }\r
- else\r
- if(GlobalTextABR==1)\r
- {\r
- r=(X32COL1(*pdest))+(((((X32COL1(color)))* g_m1)&0xFF80FF80)>>7);\r
- b=(X32COL2(*pdest))+(((((X32COL2(color)))* g_m2)&0xFF80FF80)>>7);\r
- g=(X32COL3(*pdest))+(((((X32COL3(color)))* g_m3)&0xFF80FF80)>>7);\r
- }\r
- else\r
- if(GlobalTextABR==2)\r
- {\r
- int t;\r
- r=(((((X32COL1(color)))* g_m1)&0xFF80FF80)>>7);\r
- t=(*pdest&0x001f0000)-(r&0x003f0000); if(t&0x80000000) t=0;\r
- r=(*pdest&0x0000001f)-(r&0x0000003f); if(r&0x80000000) r=0;\r
- r|=t;\r
-\r
- b=(((((X32COL2(color)))* g_m2)&0xFF80FF80)>>7);\r
- t=((*pdest>>5)&0x001f0000)-(b&0x003f0000); if(t&0x80000000) t=0;\r
- b=((*pdest>>5)&0x0000001f)-(b&0x0000003f); if(b&0x80000000) b=0;\r
- b|=t;\r
-\r
- g=(((((X32COL3(color)))* g_m3)&0xFF80FF80)>>7);\r
- t=((*pdest>>10)&0x001f0000)-(g&0x003f0000); if(t&0x80000000) t=0;\r
- g=((*pdest>>10)&0x0000001f)-(g&0x0000003f); if(g&0x80000000) g=0;\r
- g|=t;\r
- }\r
- else\r
- {\r
-#ifdef HALFBRIGHTMODE3\r
- r=(X32COL1(*pdest))+(((((X32BCOL1(color))>>2)* g_m1)&0xFF80FF80)>>7);\r
- b=(X32COL2(*pdest))+(((((X32BCOL2(color))>>2)* g_m2)&0xFF80FF80)>>7);\r
- g=(X32COL3(*pdest))+(((((X32BCOL3(color))>>2)* g_m3)&0xFF80FF80)>>7);\r
-#else\r
- r=(X32COL1(*pdest))+(((((X32ACOL1(color))>>1)* g_m1)&0xFF80FF80)>>7);\r
- b=(X32COL2(*pdest))+(((((X32ACOL2(color))>>1)* g_m2)&0xFF80FF80)>>7);\r
- g=(X32COL3(*pdest))+(((((X32ACOL3(color))>>1)* g_m3)&0xFF80FF80)>>7);\r
-#endif\r
- }\r
-\r
- if(!(color&0x8000))\r
- {\r
- r=(r&0xffff0000)|((((X32COL1(color))* g_m1)&0x0000FF80)>>7);\r
- b=(b&0xffff0000)|((((X32COL2(color))* g_m2)&0x0000FF80)>>7);\r
- g=(g&0xffff0000)|((((X32COL3(color))* g_m3)&0x0000FF80)>>7);\r
- }\r
- if(!(color&0x80000000))\r
- {\r
- r=(r&0xffff)|((((X32COL1(color))* g_m1)&0xFF800000)>>7);\r
- b=(b&0xffff)|((((X32COL2(color))* g_m2)&0xFF800000)>>7);\r
- g=(g&0xffff)|((((X32COL3(color))* g_m3)&0xFF800000)>>7);\r
- }\r
-\r
- }\r
- else \r
- {\r
- r=(((X32COL1(color))* g_m1)&0xFF80FF80)>>7;\r
- b=(((X32COL2(color))* g_m2)&0xFF80FF80)>>7;\r
- g=(((X32COL3(color))* g_m3)&0xFF80FF80)>>7;\r
- }\r
-\r
- if(r&0x7FE00000) r=0x1f0000|(r&0xFFFF);\r
- if(r&0x7FE0) r=0x1f |(r&0xFFFF0000);\r
- if(b&0x7FE00000) b=0x1f0000|(b&0xFFFF);\r
- if(b&0x7FE0) b=0x1f |(b&0xFFFF0000);\r
- if(g&0x7FE00000) g=0x1f0000|(g&0xFFFF);\r
- if(g&0x7FE0) g=0x1f |(g&0xFFFF0000);\r
- \r
- if(bCheckMask) \r
- {\r
- uint32_t ma=*pdest;\r
-\r
- *pdest=(X32PSXCOL(r,g,b))|l;\r
- \r
- if((color&0xffff)==0 ) *pdest=(ma&0xffff)|(*pdest&0xffff0000);\r
- if((color&0xffff0000)==0) *pdest=(ma&0xffff0000)|(*pdest&0xffff);\r
- if(ma&0x80000000) *pdest=(ma&0xFFFF0000)|(*pdest&0xFFFF);\r
- if(ma&0x00008000) *pdest=(ma&0xFFFF) |(*pdest&0xFFFF0000);\r
-\r
- return; \r
- }\r
- if((color&0xffff)==0 ) {*pdest=(*pdest&0xffff)|(((X32PSXCOL(r,g,b))|l)&0xffff0000);return;}\r
- if((color&0xffff0000)==0) {*pdest=(*pdest&0xffff0000)|(((X32PSXCOL(r,g,b))|l)&0xffff);return;}\r
-\r
- *pdest=(X32PSXCOL(r,g,b))|l;\r
-}\r
-\r
-////////////////////////////////////////////////////////////////////////\r
-\r
-__inline void GetTextureTransColG32_S(uint32_t *pdest, uint32_t color)\r
-{\r
- int r,g,b;\r
-\r
- if(color==0) return;\r
-\r
- r=(((X32COL1(color))* g_m1)&0xFF80FF80)>>7;\r
- b=(((X32COL2(color))* g_m2)&0xFF80FF80)>>7;\r
- g=(((X32COL3(color))* g_m3)&0xFF80FF80)>>7;\r
-\r
- if(r&0x7FE00000) r=0x1f0000|(r&0xFFFF);\r
- if(r&0x7FE0) r=0x1f |(r&0xFFFF0000);\r
- if(b&0x7FE00000) b=0x1f0000|(b&0xFFFF);\r
- if(b&0x7FE0) b=0x1f |(b&0xFFFF0000);\r
- if(g&0x7FE00000) g=0x1f0000|(g&0xFFFF);\r
- if(g&0x7FE0) g=0x1f |(g&0xFFFF0000);\r
- \r
- if((color&0xffff)==0) {*pdest=(*pdest&0xffff)|(((X32PSXCOL(r,g,b))|lSetMask|(color&0x80008000))&0xffff0000);return;}\r
- if((color&0xffff0000)==0) {*pdest=(*pdest&0xffff0000)|(((X32PSXCOL(r,g,b))|lSetMask|(color&0x80008000))&0xffff);return;}\r
-\r
- *pdest=(X32PSXCOL(r,g,b))|lSetMask|(color&0x80008000);\r
-}\r
-\r
-////////////////////////////////////////////////////////////////////////\r
-\r
-__inline void GetTextureTransColG32_SPR(uint32_t *pdest, uint32_t color)\r
-{\r
- int r,g,b;\r
-\r
- if(color==0) return;\r
-\r
- if(DrawSemiTrans && (color&0x80008000))\r
- {\r
- if(GlobalTextABR==0)\r
- { \r
- r=((((X32TCOL1(*pdest))+((X32COL1(color)) * g_m1))&0xFF00FF00)>>8);\r
- b=((((X32TCOL2(*pdest))+((X32COL2(color)) * g_m2))&0xFF00FF00)>>8);\r
- g=((((X32TCOL3(*pdest))+((X32COL3(color)) * g_m3))&0xFF00FF00)>>8);\r
- }\r
- else\r
- if(GlobalTextABR==1)\r
- {\r
- r=(X32COL1(*pdest))+(((((X32COL1(color)))* g_m1)&0xFF80FF80)>>7);\r
- b=(X32COL2(*pdest))+(((((X32COL2(color)))* g_m2)&0xFF80FF80)>>7);\r
- g=(X32COL3(*pdest))+(((((X32COL3(color)))* g_m3)&0xFF80FF80)>>7);\r
- }\r
- else\r
- if(GlobalTextABR==2)\r
- {\r
- int t;\r
- r=(((((X32COL1(color)))* g_m1)&0xFF80FF80)>>7);\r
- t=(*pdest&0x001f0000)-(r&0x003f0000); if(t&0x80000000) t=0;\r
- r=(*pdest&0x0000001f)-(r&0x0000003f); if(r&0x80000000) r=0;\r
- r|=t;\r
-\r
- b=(((((X32COL2(color)))* g_m2)&0xFF80FF80)>>7);\r
- t=((*pdest>>5)&0x001f0000)-(b&0x003f0000); if(t&0x80000000) t=0;\r
- b=((*pdest>>5)&0x0000001f)-(b&0x0000003f); if(b&0x80000000) b=0;\r
- b|=t;\r
-\r
- g=(((((X32COL3(color)))* g_m3)&0xFF80FF80)>>7);\r
- t=((*pdest>>10)&0x001f0000)-(g&0x003f0000); if(t&0x80000000) t=0;\r
- g=((*pdest>>10)&0x0000001f)-(g&0x0000003f); if(g&0x80000000) g=0;\r
- g|=t;\r
- }\r
- else\r
- {\r
-#ifdef HALFBRIGHTMODE3\r
- r=(X32COL1(*pdest))+(((((X32BCOL1(color))>>2)* g_m1)&0xFF80FF80)>>7);\r
- b=(X32COL2(*pdest))+(((((X32BCOL2(color))>>2)* g_m2)&0xFF80FF80)>>7);\r
- g=(X32COL3(*pdest))+(((((X32BCOL3(color))>>2)* g_m3)&0xFF80FF80)>>7);\r
-#else\r
- r=(X32COL1(*pdest))+(((((X32ACOL1(color))>>1)* g_m1)&0xFF80FF80)>>7);\r
- b=(X32COL2(*pdest))+(((((X32ACOL2(color))>>1)* g_m2)&0xFF80FF80)>>7);\r
- g=(X32COL3(*pdest))+(((((X32ACOL3(color))>>1)* g_m3)&0xFF80FF80)>>7);\r
-#endif\r
- }\r
-\r
- if(!(color&0x8000))\r
- {\r
- r=(r&0xffff0000)|((((X32COL1(color))* g_m1)&0x0000FF80)>>7);\r
- b=(b&0xffff0000)|((((X32COL2(color))* g_m2)&0x0000FF80)>>7);\r
- g=(g&0xffff0000)|((((X32COL3(color))* g_m3)&0x0000FF80)>>7);\r
- }\r
- if(!(color&0x80000000))\r
- {\r
- r=(r&0xffff)|((((X32COL1(color))* g_m1)&0xFF800000)>>7);\r
- b=(b&0xffff)|((((X32COL2(color))* g_m2)&0xFF800000)>>7);\r
- g=(g&0xffff)|((((X32COL3(color))* g_m3)&0xFF800000)>>7);\r
- }\r
-\r
- }\r
- else \r
- {\r
- r=(((X32COL1(color))* g_m1)&0xFF80FF80)>>7;\r
- b=(((X32COL2(color))* g_m2)&0xFF80FF80)>>7;\r
- g=(((X32COL3(color))* g_m3)&0xFF80FF80)>>7;\r
- }\r
-\r
- if(r&0x7FE00000) r=0x1f0000|(r&0xFFFF);\r
- if(r&0x7FE0) r=0x1f |(r&0xFFFF0000);\r
- if(b&0x7FE00000) b=0x1f0000|(b&0xFFFF);\r
- if(b&0x7FE0) b=0x1f |(b&0xFFFF0000);\r
- if(g&0x7FE00000) g=0x1f0000|(g&0xFFFF);\r
- if(g&0x7FE0) g=0x1f |(g&0xFFFF0000);\r
- \r
- if(bCheckMask) \r
- {\r
- uint32_t ma=*pdest;\r
-\r
- *pdest=(X32PSXCOL(r,g,b))|lSetMask|(color&0x80008000);\r
- \r
- if((color&0xffff)==0 ) *pdest=(ma&0xffff)|(*pdest&0xffff0000);\r
- if((color&0xffff0000)==0) *pdest=(ma&0xffff0000)|(*pdest&0xffff);\r
- if(ma&0x80000000) *pdest=(ma&0xFFFF0000)|(*pdest&0xFFFF);\r
- if(ma&0x00008000) *pdest=(ma&0xFFFF) |(*pdest&0xFFFF0000);\r
-\r
- return; \r
- }\r
- if((color&0xffff)==0 ) {*pdest=(*pdest&0xffff)|(((X32PSXCOL(r,g,b))|lSetMask|(color&0x80008000))&0xffff0000);return;}\r
- if((color&0xffff0000)==0) {*pdest=(*pdest&0xffff0000)|(((X32PSXCOL(r,g,b))|lSetMask|(color&0x80008000))&0xffff);return;}\r
-\r
- *pdest=(X32PSXCOL(r,g,b))|lSetMask|(color&0x80008000);\r
-}\r
-\r
-////////////////////////////////////////////////////////////////////////\r
-\r
-__inline void GetTextureTransColGX_Dither(unsigned short * pdest, unsigned short color, int m1, int m2, int m3)\r
-{\r
- int r,g,b;\r
-\r
- if(color==0) return;\r
- \r
- if(bCheckMask && *pdest&0x8000) return;\r
-\r
- m1=(((XCOL1D(color)))*m1)>>4;\r
- m2=(((XCOL2D(color)))*m2)>>4;\r
- m3=(((XCOL3D(color)))*m3)>>4;\r
-\r
- if(DrawSemiTrans && (color&0x8000))\r
- {\r
- r=((XCOL1D(*pdest))<<3);\r
- b=((XCOL2D(*pdest))<<3);\r
- g=((XCOL3D(*pdest))<<3);\r
-\r
- if(GlobalTextABR==0)\r
- {\r
- r=(r>>1)+(m1>>1);\r
- b=(b>>1)+(m2>>1);\r
- g=(g>>1)+(m3>>1);\r
- }\r
- else\r
- if(GlobalTextABR==1)\r
- {\r
- r+=m1;\r
- b+=m2;\r
- g+=m3;\r
- }\r
- else\r
- if(GlobalTextABR==2)\r
- {\r
- r-=m1;\r
- b-=m2;\r
- g-=m3;\r
- if(r&0x80000000) r=0;\r
- if(b&0x80000000) b=0;\r
- if(g&0x80000000) g=0;\r
- }\r
- else\r
- {\r
-#ifdef HALFBRIGHTMODE3\r
- r+=(m1>>2);\r
- b+=(m2>>2);\r
- g+=(m3>>2);\r
-#else\r
- r+=(m1>>1);\r
- b+=(m2>>1);\r
- g+=(m3>>1);\r
-#endif\r
- }\r
- }\r
- else \r
- {\r
- r=m1;\r
- b=m2;\r
- g=m3;\r
- }\r
-\r
- if(r&0x7FFFFF00) r=0xff;\r
- if(b&0x7FFFFF00) b=0xff;\r
- if(g&0x7FFFFF00) g=0xff;\r
-\r
- Dither16(pdest,r,b,g,sSetMask|(color&0x8000));\r
-\r
-}\r
-\r
-////////////////////////////////////////////////////////////////////////\r
-\r
-__inline void GetTextureTransColGX(unsigned short * pdest,unsigned short color,short m1,short m2,short m3)\r
-{\r
- int r,g,b;unsigned short l;\r
-\r
- if(color==0) return;\r
- \r
- if(bCheckMask && *pdest&0x8000) return;\r
-\r
- l=sSetMask|(color&0x8000);\r
-\r
- if(DrawSemiTrans && (color&0x8000))\r
- {\r
- if(GlobalTextABR==0)\r
- {\r
- unsigned short d;\r
- d =((*pdest)&0x7bde)>>1;\r
- color =((color) &0x7bde)>>1;\r
- r=(XCOL1(d))+((((XCOL1(color)))* m1)>>7);\r
- b=(XCOL2(d))+((((XCOL2(color)))* m2)>>7);\r
- g=(XCOL3(d))+((((XCOL3(color)))* m3)>>7);\r
-/*\r
- r=(XCOL1(*pdest)>>1)+((((XCOL1(color))>>1)* m1)>>7);\r
- b=(XCOL2(*pdest)>>1)+((((XCOL2(color))>>1)* m2)>>7);\r
- g=(XCOL3(*pdest)>>1)+((((XCOL3(color))>>1)* m3)>>7);\r
-*/\r
- }\r
- else\r
- if(GlobalTextABR==1)\r
- {\r
- r=(XCOL1(*pdest))+((((XCOL1(color)))* m1)>>7);\r
- b=(XCOL2(*pdest))+((((XCOL2(color)))* m2)>>7);\r
- g=(XCOL3(*pdest))+((((XCOL3(color)))* m3)>>7);\r
- }\r
- else\r
- if(GlobalTextABR==2)\r
- {\r
- r=(XCOL1(*pdest))-((((XCOL1(color)))* m1)>>7);\r
- b=(XCOL2(*pdest))-((((XCOL2(color)))* m2)>>7);\r
- g=(XCOL3(*pdest))-((((XCOL3(color)))* m3)>>7);\r
- if(r&0x80000000) r=0;\r
- if(b&0x80000000) b=0;\r
- if(g&0x80000000) g=0;\r
- }\r
- else\r
- {\r
-#ifdef HALFBRIGHTMODE3\r
- r=(XCOL1(*pdest))+((((XCOL1(color))>>2)* m1)>>7);\r
- b=(XCOL2(*pdest))+((((XCOL2(color))>>2)* m2)>>7);\r
- g=(XCOL3(*pdest))+((((XCOL3(color))>>2)* m3)>>7);\r
-#else\r
- r=(XCOL1(*pdest))+((((XCOL1(color))>>1)* m1)>>7);\r
- b=(XCOL2(*pdest))+((((XCOL2(color))>>1)* m2)>>7);\r
- g=(XCOL3(*pdest))+((((XCOL3(color))>>1)* m3)>>7);\r
-#endif\r
- }\r
- }\r
- else \r
- {\r
- r=((XCOL1(color))* m1)>>7;\r
- b=((XCOL2(color))* m2)>>7;\r
- g=((XCOL3(color))* m3)>>7;\r
- }\r
-\r
- if(r&0x7FFFFFE0) r=0x1f;\r
- if(b&0x7FFFFC00) b=0x3e0;\r
- if(g&0x7FFF8000) g=0x7c00;\r
-\r
- *pdest=(XPSXCOL(r,g,b))|l;\r
-}\r
-\r
-////////////////////////////////////////////////////////////////////////\r
-\r
-__inline void GetTextureTransColGX_S(unsigned short * pdest,unsigned short color,short m1,short m2,short m3)\r
-{\r
- int r,g,b;\r
-\r
- if(color==0) return;\r
- \r
- r=((XCOL1(color))* m1)>>7;\r
- b=((XCOL2(color))* m2)>>7;\r
- g=((XCOL3(color))* m3)>>7;\r
-\r
- if(r&0x7FFFFFE0) r=0x1f;\r
- if(b&0x7FFFFC00) b=0x3e0;\r
- if(g&0x7FFF8000) g=0x7c00;\r
-\r
- *pdest=(XPSXCOL(r,g,b))|sSetMask|(color&0x8000);\r
-}\r
-\r
-////////////////////////////////////////////////////////////////////////\r
-\r
-__inline void GetTextureTransColGX32_S(uint32_t *pdest, uint32_t color, short m1, short m2, short m3)\r
-{\r
- int r,g,b;\r
- \r
- if(color==0) return;\r
-\r
- r=(((X32COL1(color))* m1)&0xFF80FF80)>>7;\r
- b=(((X32COL2(color))* m2)&0xFF80FF80)>>7;\r
- g=(((X32COL3(color))* m3)&0xFF80FF80)>>7;\r
- \r
- if(r&0x7FE00000) r=0x1f0000|(r&0xFFFF);\r
- if(r&0x7FE0) r=0x1f |(r&0xFFFF0000);\r
- if(b&0x7FE00000) b=0x1f0000|(b&0xFFFF);\r
- if(b&0x7FE0) b=0x1f |(b&0xFFFF0000);\r
- if(g&0x7FE00000) g=0x1f0000|(g&0xFFFF);\r
- if(g&0x7FE0) g=0x1f |(g&0xFFFF0000);\r
-\r
- if((color&0xffff)==0) {*pdest=(*pdest&0xffff)|(((X32PSXCOL(r,g,b))|lSetMask|(color&0x80008000))&0xffff0000);return;}\r
- if((color&0xffff0000)==0) {*pdest=(*pdest&0xffff0000)|(((X32PSXCOL(r,g,b))|lSetMask|(color&0x80008000))&0xffff);return;}\r
-\r
- *pdest=(X32PSXCOL(r,g,b))|lSetMask|(color&0x80008000);\r
-}\r
-\r
-////////////////////////////////////////////////////////////////////////\r
-// FILL FUNCS\r
-////////////////////////////////////////////////////////////////////////\r
-\r
-void FillSoftwareAreaTrans(short x0,short y0,short x1, // FILL AREA TRANS\r
- short y1,unsigned short col)\r
-{\r
- short j,i,dx,dy;\r
-\r
- if(y0>y1) return;\r
- if(x0>x1) return;\r
-\r
- if(x1<drawX) return;\r
- if(y1<drawY) return;\r
- if(x0>drawW) return;\r
- if(y0>drawH) return;\r
-\r
- x1=min(x1,drawW+1);\r
- y1=min(y1,drawH+1);\r
- x0=max(x0,drawX);\r
- y0=max(y0,drawY);\r
- \r
- if(y0>=iGPUHeight) return;\r
- if(x0>1023) return;\r
-\r
- if(y1>iGPUHeight) y1=iGPUHeight;\r
- if(x1>1024) x1=1024;\r
-\r
- dx=x1-x0;dy=y1-y0;\r
-\r
- if(dx==1 && dy==1 && x0==1020 && y0==511) // special fix for pinball game... emu protection???\r
- {\r
-/*\r
-m->v 1020 511 1 1\r
-writedatamem 0x00000000 1\r
-tile1 newcol 7fff (orgcol 0xffffff), oldvram 0\r
-v->m 1020 511 1 1\r
-readdatamem 0x00007fff 1\r
-m->v 1020 511 1 1\r
-writedatamem 0x00000000 1\r
-tile1 newcol 8000 (orgcol 0xffffff), oldvram 0\r
-v->m 1020 511 1 1\r
-readdatamem 0x00008000 1\r
-*/\r
-\r
- static int iCheat=0;\r
- col+=iCheat;\r
- if(iCheat==1) iCheat=0; else iCheat=1;\r
- }\r
-\r
- if(dx&1) // slow fill\r
- {\r
- unsigned short *DSTPtr;\r
- unsigned short LineOffset;\r
- DSTPtr = psxVuw + (1024*y0) + x0;\r
- LineOffset = 1024 - dx;\r
- for(i=0;i<dy;i++)\r
- {\r
- for(j=0;j<dx;j++)\r
- GetShadeTransCol(DSTPtr++,col);\r
- DSTPtr += LineOffset;\r
- } \r
- }\r
- else // fast fill\r
- {\r
- uint32_t *DSTPtr;\r
- unsigned short LineOffset;\r
- uint32_t lcol=lSetMask|(((uint32_t)(col))<<16)|col;\r
- dx>>=1;\r
- DSTPtr = (uint32_t *)(psxVuw + (1024*y0) + x0);\r
- LineOffset = 512 - dx;\r
-\r
- if(!bCheckMask && !DrawSemiTrans)\r
- {\r
- for(i=0;i<dy;i++)\r
- {\r
- for(j=0;j<dx;j++) *DSTPtr++=lcol;\r
- DSTPtr += LineOffset;\r
- }\r
- }\r
- else\r
- {\r
- for(i=0;i<dy;i++)\r
- {\r
- for(j=0;j<dx;j++) \r
- GetShadeTransCol32(DSTPtr++,lcol);\r
- DSTPtr += LineOffset;\r
- } \r
- }\r
- }\r
-}\r
-\r
-////////////////////////////////////////////////////////////////////////\r
-\r
-void FillSoftwareArea(short x0,short y0,short x1, // FILL AREA (BLK FILL)\r
- short y1,unsigned short col) // no draw area check here!\r
-{\r
- short j,i,dx,dy;\r
-\r
- if(y0>y1) return;\r
- if(x0>x1) return;\r
- \r
- if(y0>=iGPUHeight) return;\r
- if(x0>1023) return;\r
-\r
- if(y1>iGPUHeight) y1=iGPUHeight;\r
- if(x1>1024) x1=1024;\r
-\r
- dx=x1-x0;dy=y1-y0;\r
- if(dx&1)\r
- {\r
- unsigned short *DSTPtr;\r
- unsigned short LineOffset;\r
-\r
- DSTPtr = psxVuw + (1024*y0) + x0;\r
- LineOffset = 1024 - dx;\r
-\r
- for(i=0;i<dy;i++)\r
- {\r
- for(j=0;j<dx;j++) *DSTPtr++=col;\r
- DSTPtr += LineOffset;\r
- } \r
- }\r
- else\r
- {\r
- uint32_t *DSTPtr;\r
- unsigned short LineOffset;\r
- uint32_t lcol=(((int)col)<<16)|col;\r
- dx>>=1;\r
- DSTPtr = (uint32_t *)(psxVuw + (1024*y0) + x0);\r
- LineOffset = 512 - dx;\r
-\r
- for(i=0;i<dy;i++)\r
- {\r
- for(j=0;j<dx;j++) *DSTPtr++=lcol;\r
- DSTPtr += LineOffset;\r
- } \r
- }\r
-}\r
-\r
-////////////////////////////////////////////////////////////////////////\r
-// EDGE INTERPOLATION\r
-////////////////////////////////////////////////////////////////////////\r
-\r
-typedef struct SOFTVTAG\r
-{\r
- int x,y; \r
- int u,v;\r
- int R,G,B;\r
-} soft_vertex;\r
-\r
-static soft_vertex vtx[4];\r
-static soft_vertex * left_array[4], * right_array[4];\r
-static int left_section, right_section;\r
-static int left_section_height, right_section_height;\r
-static int left_x, delta_left_x, right_x, delta_right_x;\r
-static int left_u, delta_left_u, left_v, delta_left_v;\r
-static int right_u, delta_right_u, right_v, delta_right_v;\r
-static int left_R, delta_left_R, right_R, delta_right_R;\r
-static int left_G, delta_left_G, right_G, delta_right_G;\r
-static int left_B, delta_left_B, right_B, delta_right_B;\r
-\r
-__inline int shl10idiv(int x, int y)\r
-{\r
- long long int bi=x;\r
- bi<<=10;\r
- return bi/y;\r
-}\r
-\r
-__inline int RightSection_F(void)\r
-{\r
- soft_vertex * v1 = right_array[ right_section ];\r
- soft_vertex * v2 = right_array[ right_section-1 ];\r
-\r
- int height = v2->y - v1->y;\r
- if(height == 0) return 0;\r
- delta_right_x = (v2->x - v1->x) / height;\r
- right_x = v1->x;\r
-\r
- right_section_height = height;\r
- return height;\r
-}\r
-\r
-__inline int LeftSection_F(void)\r
-{\r
- soft_vertex * v1 = left_array[ left_section ];\r
- soft_vertex * v2 = left_array[ left_section-1 ];\r
-\r
- int height = v2->y - v1->y;\r
- if(height == 0) return 0;\r
- delta_left_x = (v2->x - v1->x) / height;\r
- left_x = v1->x;\r
-\r
- left_section_height = height;\r
- return height; \r
-}\r
-\r
-__inline BOOL NextRow_F(void)\r
-{\r
- if(--left_section_height<=0) \r
- {\r
- if(--left_section <= 0) {return TRUE;}\r
- if(LeftSection_F() <= 0) {return TRUE;}\r
- }\r
- else\r
- {\r
- left_x += delta_left_x;\r
- }\r
-\r
- if(--right_section_height<=0) \r
- {\r
- if(--right_section<=0) {return TRUE;}\r
- if(RightSection_F() <=0) {return TRUE;}\r
- }\r
- else\r
- {\r
- right_x += delta_right_x;\r
- }\r
- return FALSE;\r
-}\r
-\r
-__inline BOOL SetupSections_F(short x1, short y1, short x2, short y2, short x3, short y3)\r
-{\r
- soft_vertex * v1, * v2, * v3;\r
- int height,longest;\r
-\r
- v1 = vtx; v1->x=x1<<16;v1->y=y1;\r
- v2 = vtx+1; v2->x=x2<<16;v2->y=y2;\r
- v3 = vtx+2; v3->x=x3<<16;v3->y=y3;\r
-\r
- if(v1->y > v2->y) { soft_vertex * v = v1; v1 = v2; v2 = v; }\r
- if(v1->y > v3->y) { soft_vertex * v = v1; v1 = v3; v3 = v; }\r
- if(v2->y > v3->y) { soft_vertex * v = v2; v2 = v3; v3 = v; }\r
-\r
- height = v3->y - v1->y;\r
- if(height == 0) {return FALSE;}\r
- longest = (((v2->y - v1->y) << 16) / height) * ((v3->x - v1->x)>>16) + (v1->x - v2->x);\r
- if(longest == 0) {return FALSE;}\r
-\r
- if(longest < 0)\r
- {\r
- right_array[0] = v3;\r
- right_array[1] = v2;\r
- right_array[2] = v1;\r
- right_section = 2;\r
- left_array[0] = v3;\r
- left_array[1] = v1;\r
- left_section = 1;\r
-\r
- if(LeftSection_F() <= 0) return FALSE;\r
- if(RightSection_F() <= 0)\r
- {\r
- right_section--;\r
- if(RightSection_F() <= 0) return FALSE;\r
- }\r
- }\r
- else\r
- {\r
- left_array[0] = v3;\r
- left_array[1] = v2;\r
- left_array[2] = v1;\r
- left_section = 2;\r
- right_array[0] = v3;\r
- right_array[1] = v1;\r
- right_section = 1;\r
-\r
- if(RightSection_F() <= 0) return FALSE;\r
- if(LeftSection_F() <= 0)\r
- { \r
- left_section--;\r
- if(LeftSection_F() <= 0) return FALSE;\r
- }\r
- }\r
-\r
- Ymin=v1->y;\r
- Ymax=min(v3->y-1,drawH);\r
-\r
- return TRUE;\r
-}\r
-\r
-__inline int RightSection_G(void)\r
-{\r
- soft_vertex * v1 = right_array[ right_section ];\r
- soft_vertex * v2 = right_array[ right_section-1 ];\r
-\r
- int height = v2->y - v1->y;\r
- if(height == 0) return 0;\r
- delta_right_x = (v2->x - v1->x) / height;\r
- right_x = v1->x;\r
-\r
- right_section_height = height;\r
- return height;\r
-}\r
-\r
-__inline int LeftSection_G(void)\r
-{\r
- soft_vertex * v1 = left_array[ left_section ];\r
- soft_vertex * v2 = left_array[ left_section-1 ];\r
-\r
- int height = v2->y - v1->y;\r
- if(height == 0) return 0;\r
- delta_left_x = (v2->x - v1->x) / height;\r
- left_x = v1->x;\r
-\r
- delta_left_R = ((v2->R - v1->R)) / height;\r
- left_R = v1->R;\r
- delta_left_G = ((v2->G - v1->G)) / height;\r
- left_G = v1->G;\r
- delta_left_B = ((v2->B - v1->B)) / height;\r
- left_B = v1->B;\r
-\r
- left_section_height = height;\r
- return height; \r
-}\r
-\r
-__inline BOOL NextRow_G(void)\r
-{\r
- if(--left_section_height<=0) \r
- {\r
- if(--left_section <= 0) {return TRUE;}\r
- if(LeftSection_G() <= 0) {return TRUE;}\r
- }\r
- else\r
- {\r
- left_x += delta_left_x;\r
- left_R += delta_left_R;\r
- left_G += delta_left_G;\r
- left_B += delta_left_B;\r
- }\r
-\r
- if(--right_section_height<=0) \r
- {\r
- if(--right_section<=0) {return TRUE;}\r
- if(RightSection_G() <=0) {return TRUE;}\r
- }\r
- else\r
- {\r
- right_x += delta_right_x;\r
- }\r
- return FALSE;\r
-}\r
-\r
-__inline BOOL SetupSections_G(short x1,short y1,short x2,short y2,short x3,short y3, int rgb1, int rgb2, int rgb3){\r
- soft_vertex *v1, *v2, *v3;\r
- int height, longest, temp;\r
-\r
- v1 = vtx; v1->x=x1<<16;v1->y=y1;\r
- v1->R=(rgb1) & 0x00ff0000;\r
- v1->G=(rgb1<<8) & 0x00ff0000;\r
- v1->B=(rgb1<<16) & 0x00ff0000;\r
- v2 = vtx+1; v2->x=x2<<16;v2->y=y2;\r
- v2->R=(rgb2) & 0x00ff0000;\r
- v2->G=(rgb2<<8) & 0x00ff0000;\r
- v2->B=(rgb2<<16) & 0x00ff0000;\r
- v3 = vtx+2; v3->x=x3<<16;v3->y=y3;\r
- v3->R=(rgb3) & 0x00ff0000;\r
- v3->G=(rgb3<<8) & 0x00ff0000;\r
- v3->B=(rgb3<<16) & 0x00ff0000;\r
-\r
- if(v1->y > v2->y) { soft_vertex * v = v1; v1 = v2; v2 = v; }\r
- if(v1->y > v3->y) { soft_vertex * v = v1; v1 = v3; v3 = v; }\r
- if(v2->y > v3->y) { soft_vertex * v = v2; v2 = v3; v3 = v; }\r
-\r
- height = v3->y - v1->y;\r
- if(height == 0) {return FALSE;}\r
- temp=(((v2->y - v1->y) << 16) / height);\r
- longest = temp * ((v3->x - v1->x)>>16) + (v1->x - v2->x);\r
- if(longest == 0) {return FALSE;}\r
-\r
- if(longest < 0)\r
- {\r
- right_array[0] = v3;\r
- right_array[1] = v2;\r
- right_array[2] = v1;\r
- right_section = 2;\r
- left_array[0] = v3;\r
- left_array[1] = v1;\r
- left_section = 1;\r
-\r
- if(LeftSection_G() <= 0) return FALSE;\r
- if(RightSection_G() <= 0)\r
- {\r
- right_section--;\r
- if(RightSection_G() <= 0) return FALSE;\r
- }\r
- if(longest > -0x1000) longest = -0x1000; \r
- }\r
- else\r
- {\r
- left_array[0] = v3;\r
- left_array[1] = v2;\r
- left_array[2] = v1;\r
- left_section = 2;\r
- right_array[0] = v3;\r
- right_array[1] = v1;\r
- right_section = 1;\r
-\r
- if(RightSection_G() <= 0) return FALSE;\r
- if(LeftSection_G() <= 0)\r
- { \r
- left_section--;\r
- if(LeftSection_G() <= 0) return FALSE;\r
- }\r
- if(longest < 0x1000) longest = 0x1000; \r
- }\r
-\r
- Ymin=v1->y;\r
- Ymax=min(v3->y-1,drawH); \r
-\r
- delta_right_R=shl10idiv(temp*((v3->R - v1->R)>>10)+((v1->R - v2->R)<<6),longest);\r
- delta_right_G=shl10idiv(temp*((v3->G - v1->G)>>10)+((v1->G - v2->G)<<6),longest);\r
- delta_right_B=shl10idiv(temp*((v3->B - v1->B)>>10)+((v1->B - v2->B)<<6),longest);\r
-\r
- return TRUE;\r
-}\r
-\r
-__inline int RightSection_FT(void)\r
-{\r
- soft_vertex * v1 = right_array[ right_section ];\r
- soft_vertex * v2 = right_array[ right_section-1 ];\r
-\r
- int height = v2->y - v1->y;\r
- if(height == 0) return 0;\r
- delta_right_x = (v2->x - v1->x) / height;\r
- right_x = v1->x;\r
-\r
- right_section_height = height;\r
- return height;\r
-}\r
-\r
-__inline int LeftSection_FT(void)\r
-{\r
- soft_vertex * v1 = left_array[ left_section ];\r
- soft_vertex * v2 = left_array[ left_section-1 ];\r
-\r
- int height = v2->y - v1->y;\r
- if(height == 0) return 0;\r
- delta_left_x = (v2->x - v1->x) / height;\r
- left_x = v1->x;\r
- \r
- delta_left_u = ((v2->u - v1->u)) / height;\r
- left_u = v1->u;\r
- delta_left_v = ((v2->v - v1->v)) / height;\r
- left_v = v1->v;\r
-\r
- left_section_height = height;\r
- return height; \r
-}\r
-\r
-__inline BOOL NextRow_FT(void)\r
-{\r
- if(--left_section_height<=0) \r
- {\r
- if(--left_section <= 0) {return TRUE;}\r
- if(LeftSection_FT() <= 0) {return TRUE;}\r
- }\r
- else\r
- {\r
- left_x += delta_left_x;\r
- left_u += delta_left_u;\r
- left_v += delta_left_v;\r
- }\r
-\r
- if(--right_section_height<=0) \r
- {\r
- if(--right_section<=0) {return TRUE;}\r
- if(RightSection_FT() <=0) {return TRUE;}\r
- }\r
- else\r
- {\r
- right_x += delta_right_x;\r
- }\r
- return FALSE;\r
-}\r
-\r
-__inline BOOL SetupSections_FT(short x1, short y1, short x2, short y2, short x3, short y3, short tx1, short ty1, short tx2, short ty2, short tx3, short ty3)\r
-{\r
- soft_vertex * v1, * v2, * v3;\r
- int height,longest,temp;\r
-\r
- v1 = vtx; v1->x=x1<<16;v1->y=y1;\r
- v1->u=tx1<<16;v1->v=ty1<<16;\r
- v2 = vtx+1; v2->x=x2<<16;v2->y=y2;\r
- v2->u=tx2<<16;v2->v=ty2<<16;\r
- v3 = vtx+2; v3->x=x3<<16;v3->y=y3;\r
- v3->u=tx3<<16;v3->v=ty3<<16;\r
-\r
- if(v1->y > v2->y) { soft_vertex * v = v1; v1 = v2; v2 = v; }\r
- if(v1->y > v3->y) { soft_vertex * v = v1; v1 = v3; v3 = v; }\r
- if(v2->y > v3->y) { soft_vertex * v = v2; v2 = v3; v3 = v; }\r
-\r
- height = v3->y - v1->y;\r
- if(height == 0) {return FALSE;}\r
-\r
- temp=(((v2->y - v1->y) << 16) / height);\r
- longest = temp * ((v3->x - v1->x)>>16) + (v1->x - v2->x);\r
-\r
- if(longest == 0) {return FALSE;}\r
-\r
- if(longest < 0)\r
- {\r
- right_array[0] = v3;\r
- right_array[1] = v2;\r
- right_array[2] = v1;\r
- right_section = 2;\r
- left_array[0] = v3;\r
- left_array[1] = v1;\r
- left_section = 1;\r
-\r
- if(LeftSection_FT() <= 0) return FALSE;\r
- if(RightSection_FT() <= 0)\r
- {\r
- right_section--;\r
- if(RightSection_FT() <= 0) return FALSE;\r
- }\r
- if(longest > -0x1000) longest = -0x1000; \r
- }\r
- else\r
- {\r
- left_array[0] = v3;\r
- left_array[1] = v2;\r
- left_array[2] = v1;\r
- left_section = 2;\r
- right_array[0] = v3;\r
- right_array[1] = v1;\r
- right_section = 1;\r
-\r
- if(RightSection_FT() <= 0) return FALSE;\r
- if(LeftSection_FT() <= 0)\r
- { \r
- left_section--; \r
- if(LeftSection_FT() <= 0) return FALSE;\r
- }\r
- if(longest < 0x1000) longest = 0x1000; \r
- }\r
-\r
- Ymin=v1->y;\r
- Ymax=min(v3->y-1,drawH);\r
-\r
- delta_right_u=shl10idiv(temp*((v3->u - v1->u)>>10)+((v1->u - v2->u)<<6),longest);\r
- delta_right_v=shl10idiv(temp*((v3->v - v1->v)>>10)+((v1->v - v2->v)<<6),longest);\r
-\r
-/*\r
-Mmm... adjust neg tex deltas... will sometimes cause slight\r
-texture distortions \r
-\r
- longest>>=16;\r
- if(longest)\r
- {\r
- if(longest<0) longest=-longest;\r
- if(delta_right_u<0)\r
- delta_right_u-=delta_right_u/longest;\r
- if(delta_right_v<0)\r
- delta_right_v-=delta_right_v/longest;\r
- }\r
-*/\r
-\r
- return TRUE;\r
-}\r
-\r
-__inline int RightSection_GT(void)\r
-{\r
- soft_vertex * v1 = right_array[ right_section ];\r
- soft_vertex * v2 = right_array[ right_section-1 ];\r
-\r
- int height = v2->y - v1->y;\r
- if(height == 0) return 0;\r
- delta_right_x = (v2->x - v1->x) / height;\r
- right_x = v1->x;\r
-\r
- right_section_height = height;\r
- return height;\r
-}\r
-\r
-__inline int LeftSection_GT(void)\r
-{\r
- soft_vertex * v1 = left_array[ left_section ];\r
- soft_vertex * v2 = left_array[ left_section-1 ];\r
-\r
- int height = v2->y - v1->y;\r
- if(height == 0) return 0;\r
- delta_left_x = (v2->x - v1->x) / height;\r
- left_x = v1->x;\r
-\r
- delta_left_u = ((v2->u - v1->u)) / height;\r
- left_u = v1->u;\r
- delta_left_v = ((v2->v - v1->v)) / height;\r
- left_v = v1->v;\r
-\r
- delta_left_R = ((v2->R - v1->R)) / height;\r
- left_R = v1->R;\r
- delta_left_G = ((v2->G - v1->G)) / height;\r
- left_G = v1->G;\r
- delta_left_B = ((v2->B - v1->B)) / height;\r
- left_B = v1->B;\r
-\r
- left_section_height = height;\r
- return height; \r
-}\r
-\r
-__inline BOOL NextRow_GT(void)\r
-{\r
- if(--left_section_height<=0) \r
- {\r
- if(--left_section <= 0) {return TRUE;}\r
- if(LeftSection_GT() <= 0) {return TRUE;}\r
- }\r
- else\r
- {\r
- left_x += delta_left_x;\r
- left_u += delta_left_u;\r
- left_v += delta_left_v;\r
- left_R += delta_left_R;\r
- left_G += delta_left_G;\r
- left_B += delta_left_B;\r
- }\r
-\r
- if(--right_section_height<=0) \r
- {\r
- if(--right_section<=0) {return TRUE;}\r
- if(RightSection_GT() <=0) {return TRUE;}\r
- }\r
- else\r
- {\r
- right_x += delta_right_x;\r
- }\r
- return FALSE;\r
-}\r
-\r
-__inline BOOL SetupSections_GT(short x1, short y1, short x2, short y2, short x3, short y3, short tx1, short ty1, short tx2, short ty2, short tx3, short ty3, int rgb1, int rgb2, int rgb3)\r
-{\r
- soft_vertex * v1, * v2, * v3;\r
- int height,longest,temp;\r
-\r
- v1 = vtx; v1->x=x1<<16;v1->y=y1;\r
- v1->u=tx1<<16;v1->v=ty1<<16;\r
- v1->R=(rgb1) & 0x00ff0000;\r
- v1->G=(rgb1<<8) & 0x00ff0000;\r
- v1->B=(rgb1<<16) & 0x00ff0000;\r
-\r
- v2 = vtx+1; v2->x=x2<<16;v2->y=y2;\r
- v2->u=tx2<<16;v2->v=ty2<<16;\r
- v2->R=(rgb2) & 0x00ff0000;\r
- v2->G=(rgb2<<8) & 0x00ff0000;\r
- v2->B=(rgb2<<16) & 0x00ff0000;\r
- \r
- v3 = vtx+2; v3->x=x3<<16;v3->y=y3;\r
- v3->u=tx3<<16;v3->v=ty3<<16;\r
- v3->R=(rgb3) & 0x00ff0000;\r
- v3->G=(rgb3<<8) & 0x00ff0000;\r
- v3->B=(rgb3<<16) & 0x00ff0000;\r
-\r
- if(v1->y > v2->y) { soft_vertex * v = v1; v1 = v2; v2 = v; }\r
- if(v1->y > v3->y) { soft_vertex * v = v1; v1 = v3; v3 = v; }\r
- if(v2->y > v3->y) { soft_vertex * v = v2; v2 = v3; v3 = v; }\r
-\r
- height = v3->y - v1->y;\r
- if(height == 0) {return FALSE;}\r
-\r
- temp=(((v2->y - v1->y) << 16) / height);\r
- longest = temp * ((v3->x - v1->x)>>16) + (v1->x - v2->x);\r
-\r
- if(longest == 0) {return FALSE;}\r
-\r
- if(longest < 0)\r
- {\r
- right_array[0] = v3;\r
- right_array[1] = v2;\r
- right_array[2] = v1;\r
- right_section = 2;\r
- left_array[0] = v3;\r
- left_array[1] = v1;\r
- left_section = 1;\r
-\r
- if(LeftSection_GT() <= 0) return FALSE;\r
- if(RightSection_GT() <= 0)\r
- {\r
- right_section--;\r
- if(RightSection_GT() <= 0) return FALSE;\r
- }\r
-\r
- if(longest > -0x1000) longest = -0x1000; \r
- }\r
- else\r
- {\r
- left_array[0] = v3;\r
- left_array[1] = v2;\r
- left_array[2] = v1;\r
- left_section = 2;\r
- right_array[0] = v3;\r
- right_array[1] = v1;\r
- right_section = 1;\r
-\r
- if(RightSection_GT() <= 0) return FALSE;\r
- if(LeftSection_GT() <= 0)\r
- { \r
- left_section--;\r
- if(LeftSection_GT() <= 0) return FALSE;\r
- }\r
- if(longest < 0x1000) longest = 0x1000; \r
- }\r
-\r
- Ymin=v1->y;\r
- Ymax=min(v3->y-1,drawH);\r
-\r
- delta_right_R=shl10idiv(temp*((v3->R - v1->R)>>10)+((v1->R - v2->R)<<6),longest);\r
- delta_right_G=shl10idiv(temp*((v3->G - v1->G)>>10)+((v1->G - v2->G)<<6),longest);\r
- delta_right_B=shl10idiv(temp*((v3->B - v1->B)>>10)+((v1->B - v2->B)<<6),longest);\r
-\r
- delta_right_u=shl10idiv(temp*((v3->u - v1->u)>>10)+((v1->u - v2->u)<<6),longest);\r
- delta_right_v=shl10idiv(temp*((v3->v - v1->v)>>10)+((v1->v - v2->v)<<6),longest);\r
-\r
-\r
-/*\r
-Mmm... adjust neg tex deltas... will sometimes cause slight\r
-texture distortions \r
- longest>>=16;\r
- if(longest)\r
- {\r
- if(longest<0) longest=-longest;\r
- if(delta_right_u<0)\r
- delta_right_u-=delta_right_u/longest;\r
- if(delta_right_v<0)\r
- delta_right_v-=delta_right_v/longest;\r
- }\r
-*/\r
-\r
-\r
- return TRUE;\r
-}\r
-\r
-__inline int RightSection_F4(void)\r
-{\r
- soft_vertex * v1 = right_array[ right_section ];\r
- soft_vertex * v2 = right_array[ right_section-1 ];\r
-\r
- int height = v2->y - v1->y;\r
- right_section_height = height;\r
- right_x = v1->x;\r
- if(height == 0) \r
- {\r
- return 0;\r
- }\r
- delta_right_x = (v2->x - v1->x) / height;\r
-\r
- return height;\r
-}\r
-\r
-__inline int LeftSection_F4(void)\r
-{\r
- soft_vertex * v1 = left_array[ left_section ];\r
- soft_vertex * v2 = left_array[ left_section-1 ];\r
-\r
- int height = v2->y - v1->y;\r
- left_section_height = height;\r
- left_x = v1->x;\r
- if(height == 0) \r
- {\r
- return 0;\r
- }\r
- delta_left_x = (v2->x - v1->x) / height;\r
-\r
- return height; \r
-}\r
-\r
-__inline BOOL NextRow_F4(void)\r
-{\r
- if(--left_section_height<=0) \r
- {\r
- if(--left_section > 0) \r
- while(LeftSection_F4()<=0) \r
- {\r
- if(--left_section <= 0) break;\r
- }\r
- }\r
- else\r
- {\r
- left_x += delta_left_x;\r
- }\r
-\r
- if(--right_section_height<=0) \r
- {\r
- if(--right_section > 0) \r
- while(RightSection_F4()<=0) \r
- {\r
- if(--right_section<=0) break;\r
- }\r
- }\r
- else\r
- {\r
- right_x += delta_right_x;\r
- }\r
- return FALSE;\r
-}\r
-\r
-__inline BOOL SetupSections_F4(short x1, short y1, short x2, short y2, short x3, short y3, short x4, short y4)\r
-{\r
- soft_vertex * v1, * v2, * v3, * v4;\r
- int height,width,longest1,longest2;\r
-\r
- v1 = vtx; v1->x=x1<<16;v1->y=y1;\r
- v2 = vtx+1; v2->x=x2<<16;v2->y=y2;\r
- v3 = vtx+2; v3->x=x3<<16;v3->y=y3;\r
- v4 = vtx+3; v4->x=x4<<16;v4->y=y4;\r
-\r
- if(v1->y > v2->y) { soft_vertex * v = v1; v1 = v2; v2 = v; }\r
- if(v1->y > v3->y) { soft_vertex * v = v1; v1 = v3; v3 = v; }\r
- if(v1->y > v4->y) { soft_vertex * v = v1; v1 = v4; v4 = v; }\r
- if(v2->y > v3->y) { soft_vertex * v = v2; v2 = v3; v3 = v; }\r
- if(v2->y > v4->y) { soft_vertex * v = v2; v2 = v4; v4 = v; }\r
- if(v3->y > v4->y) { soft_vertex * v = v3; v3 = v4; v4 = v; }\r
-\r
- height = v4->y - v1->y; if(height == 0) height =1;\r
- width = (v4->x - v1->x)>>16;\r
- longest1 = (((v2->y - v1->y) << 16) / height) * width + (v1->x - v2->x);\r
- longest2 = (((v3->y - v1->y) << 16) / height) * width + (v1->x - v3->x);\r
-\r
- if(longest1 < 0) // 2 is right\r
- {\r
- if(longest2 < 0) // 3 is right\r
- {\r
- left_array[0] = v4;\r
- left_array[1] = v1;\r
- left_section = 1;\r
-\r
- height = v3->y - v1->y; if(height == 0) height=1;\r
- longest1 = (((v2->y - v1->y) << 16) / height) * ((v3->x - v1->x)>>16) + (v1->x - v2->x);\r
- if(longest1 >= 0)\r
- {\r
- right_array[0] = v4; // 1\r
- right_array[1] = v3; // 3\r
- right_array[2] = v1; // 4\r
- right_section = 2; \r
- }\r
- else\r
- {\r
- height = v4->y - v2->y; if(height == 0) height=1;\r
- longest1 = (((v3->y - v2->y) << 16) / height) * ((v4->x - v2->x)>>16) + (v2->x - v3->x);\r
- if(longest1 >= 0)\r
- {\r
- right_array[0] = v4; // 1\r
- right_array[1] = v2; // 2\r
- right_array[2] = v1; // 4\r
- right_section = 2; \r
- }\r
- else\r
- {\r
- right_array[0] = v4; // 1\r
- right_array[1] = v3; // 2\r
- right_array[2] = v2; // 3\r
- right_array[3] = v1; // 4\r
- right_section = 3; \r
- }\r
- }\r
- }\r
- else \r
- {\r
- left_array[0] = v4;\r
- left_array[1] = v3; // 1\r
- left_array[2] = v1; // 2\r
- left_section = 2; // 3\r
- right_array[0] = v4; // 4\r
- right_array[1] = v2;\r
- right_array[2] = v1;\r
- right_section = 2;\r
- }\r
- }\r
- else\r
- {\r
- if(longest2 < 0) \r
- {\r
- left_array[0] = v4; // 1\r
- left_array[1] = v2; // 2\r
- left_array[2] = v1; // 3\r
- left_section = 2; // 4\r
- right_array[0] = v4;\r
- right_array[1] = v3;\r
- right_array[2] = v1;\r
- right_section = 2;\r
- }\r
- else \r
- {\r
- right_array[0] = v4;\r
- right_array[1] = v1;\r
- right_section = 1;\r
-\r
- height = v3->y - v1->y; if(height == 0) height=1;\r
- longest1 = (((v2->y - v1->y) << 16) / height) * ((v3->x - v1->x)>>16) + (v1->x - v2->x);\r
- if(longest1<0)\r
- {\r
- left_array[0] = v4; // 1\r
- left_array[1] = v3; // 3\r
- left_array[2] = v1; // 4\r
- left_section = 2; \r
- }\r
- else\r
- {\r
- height = v4->y - v2->y; if(height == 0) height=1;\r
- longest1 = (((v3->y - v2->y) << 16) / height) * ((v4->x - v2->x)>>16) + (v2->x - v3->x);\r
- if(longest1<0)\r
- {\r
- left_array[0] = v4; // 1\r
- left_array[1] = v2; // 2\r
- left_array[2] = v1; // 4\r
- left_section = 2; \r
- }\r
- else\r
- {\r
- left_array[0] = v4; // 1\r
- left_array[1] = v3; // 2\r
- left_array[2] = v2; // 3\r
- left_array[3] = v1; // 4\r
- left_section = 3; \r
- }\r
- }\r
- }\r
- }\r
-\r
- while(LeftSection_F4()<=0) \r
- {\r
- if(--left_section <= 0) break;\r
- }\r
-\r
- while(RightSection_F4()<=0) \r
- {\r
- if(--right_section <= 0) break;\r
- }\r
-\r
- Ymin=v1->y;\r
- Ymax=min(v4->y-1,drawH);\r
-\r
- return TRUE;\r
-}\r
-\r
-__inline int RightSection_FT4(void)\r
-{\r
- soft_vertex * v1 = right_array[ right_section ];\r
- soft_vertex * v2 = right_array[ right_section-1 ];\r
-\r
- int height = v2->y - v1->y;\r
- right_section_height = height;\r
- right_x = v1->x;\r
- right_u = v1->u;\r
- right_v = v1->v;\r
- if(height == 0) \r
- {\r
- return 0;\r
- }\r
- delta_right_x = (v2->x - v1->x) / height;\r
- delta_right_u = (v2->u - v1->u) / height;\r
- delta_right_v = (v2->v - v1->v) / height;\r
-\r
- return height;\r
-}\r
-\r
-__inline int LeftSection_FT4(void)\r
-{\r
- soft_vertex * v1 = left_array[ left_section ];\r
- soft_vertex * v2 = left_array[ left_section-1 ];\r
-\r
- int height = v2->y - v1->y;\r
- left_section_height = height;\r
- left_x = v1->x;\r
- left_u = v1->u;\r
- left_v = v1->v;\r
- if(height == 0) \r
- {\r
- return 0;\r
- }\r
- delta_left_x = (v2->x - v1->x) / height;\r
- delta_left_u = (v2->u - v1->u) / height;\r
- delta_left_v = (v2->v - v1->v) / height;\r
-\r
- return height; \r
-}\r
-\r
-__inline BOOL NextRow_FT4(void)\r
-{\r
- if(--left_section_height<=0) \r
- {\r
- if(--left_section > 0) \r
- while(LeftSection_FT4()<=0) \r
- {\r
- if(--left_section <= 0) break;\r
- }\r
- }\r
- else\r
- {\r
- left_x += delta_left_x;\r
- left_u += delta_left_u;\r
- left_v += delta_left_v;\r
- }\r
-\r
- if(--right_section_height<=0) \r
- {\r
- if(--right_section > 0) \r
- while(RightSection_FT4()<=0) \r
- {\r
- if(--right_section<=0) break;\r
- }\r
- }\r
- else\r
- {\r
- right_x += delta_right_x;\r
- right_u += delta_right_u;\r
- right_v += delta_right_v;\r
- }\r
- return FALSE;\r
-}\r
-\r
-__inline BOOL SetupSections_FT4(short x1, short y1, short x2, short y2, short x3, short y3, short x4, short y4, short tx1, short ty1, short tx2, short ty2, short tx3, short ty3, short tx4, short ty4)\r
-{\r
- soft_vertex * v1, * v2, * v3, * v4;\r
- int height,width,longest1,longest2;\r
-\r
- v1 = vtx; v1->x=x1<<16;v1->y=y1;\r
- v1->u=tx1<<16;v1->v=ty1<<16;\r
-\r
- v2 = vtx+1; v2->x=x2<<16;v2->y=y2;\r
- v2->u=tx2<<16;v2->v=ty2<<16;\r
- \r
- v3 = vtx+2; v3->x=x3<<16;v3->y=y3;\r
- v3->u=tx3<<16;v3->v=ty3<<16;\r
-\r
- v4 = vtx+3; v4->x=x4<<16;v4->y=y4;\r
- v4->u=tx4<<16;v4->v=ty4<<16;\r
-\r
- if(v1->y > v2->y) { soft_vertex * v = v1; v1 = v2; v2 = v; }\r
- if(v1->y > v3->y) { soft_vertex * v = v1; v1 = v3; v3 = v; }\r
- if(v1->y > v4->y) { soft_vertex * v = v1; v1 = v4; v4 = v; }\r
- if(v2->y > v3->y) { soft_vertex * v = v2; v2 = v3; v3 = v; }\r
- if(v2->y > v4->y) { soft_vertex * v = v2; v2 = v4; v4 = v; }\r
- if(v3->y > v4->y) { soft_vertex * v = v3; v3 = v4; v4 = v; }\r
-\r
- height = v4->y - v1->y; if(height == 0) height =1;\r
- width = (v4->x - v1->x)>>16;\r
- longest1 = (((v2->y - v1->y) << 16) / height) * width + (v1->x - v2->x);\r
- longest2 = (((v3->y - v1->y) << 16) / height) * width + (v1->x - v3->x);\r
-\r
- if(longest1 < 0) // 2 is right\r
- {\r
- if(longest2 < 0) // 3 is right\r
- {\r
- left_array[0] = v4;\r
- left_array[1] = v1;\r
- left_section = 1;\r
-\r
- height = v3->y - v1->y; if(height == 0) height=1;\r
- longest1 = (((v2->y - v1->y) << 16) / height) * ((v3->x - v1->x)>>16) + (v1->x - v2->x);\r
- if(longest1 >= 0)\r
- {\r
- right_array[0] = v4; // 1\r
- right_array[1] = v3; // 3\r
- right_array[2] = v1; // 4\r
- right_section = 2; \r
- }\r
- else\r
- {\r
- height = v4->y - v2->y; if(height == 0) height=1;\r
- longest1 = (((v3->y - v2->y) << 16) / height) * ((v4->x - v2->x)>>16) + (v2->x - v3->x);\r
- if(longest1 >= 0)\r
- {\r
- right_array[0] = v4; // 1\r
- right_array[1] = v2; // 2\r
- right_array[2] = v1; // 4\r
- right_section = 2; \r
- }\r
- else\r
- {\r
- right_array[0] = v4; // 1\r
- right_array[1] = v3; // 2\r
- right_array[2] = v2; // 3\r
- right_array[3] = v1; // 4\r
- right_section = 3; \r
- }\r
- }\r
- }\r
- else \r
- {\r
- left_array[0] = v4;\r
- left_array[1] = v3; // 1\r
- left_array[2] = v1; // 2\r
- left_section = 2; // 3\r
- right_array[0] = v4; // 4\r
- right_array[1] = v2;\r
- right_array[2] = v1;\r
- right_section = 2;\r
- }\r
- }\r
- else\r
- {\r
- if(longest2 < 0) \r
- {\r
- left_array[0] = v4; // 1\r
- left_array[1] = v2; // 2\r
- left_array[2] = v1; // 3\r
- left_section = 2; // 4\r
- right_array[0] = v4;\r
- right_array[1] = v3;\r
- right_array[2] = v1;\r
- right_section = 2;\r
- }\r
- else \r
- {\r
- right_array[0] = v4;\r
- right_array[1] = v1;\r
- right_section = 1;\r
-\r
- height = v3->y - v1->y; if(height == 0) height=1;\r
- longest1 = (((v2->y - v1->y) << 16) / height) * ((v3->x - v1->x)>>16) + (v1->x - v2->x);\r
- if(longest1<0)\r
- {\r
- left_array[0] = v4; // 1\r
- left_array[1] = v3; // 3\r
- left_array[2] = v1; // 4\r
- left_section = 2; \r
- }\r
- else\r
- {\r
- height = v4->y - v2->y; if(height == 0) height=1;\r
- longest1 = (((v3->y - v2->y) << 16) / height) * ((v4->x - v2->x)>>16) + (v2->x - v3->x);\r
- if(longest1<0)\r
- {\r
- left_array[0] = v4; // 1\r
- left_array[1] = v2; // 2\r
- left_array[2] = v1; // 4\r
- left_section = 2; \r
- }\r
- else\r
- {\r
- left_array[0] = v4; // 1\r
- left_array[1] = v3; // 2\r
- left_array[2] = v2; // 3\r
- left_array[3] = v1; // 4\r
- left_section = 3; \r
- }\r
- }\r
- }\r
- }\r
-\r
- while(LeftSection_FT4()<=0) \r
- {\r
- if(--left_section <= 0) break;\r
- }\r
-\r
- while(RightSection_FT4()<=0) \r
- {\r
- if(--right_section <= 0) break;\r
- }\r
-\r
- Ymin=v1->y;\r
- Ymax=min(v4->y-1,drawH);\r
-\r
- return TRUE;\r
-}\r
-\r
-__inline int RightSection_GT4(void)\r
-{\r
- soft_vertex * v1 = right_array[ right_section ];\r
- soft_vertex * v2 = right_array[ right_section-1 ];\r
-\r
- int height = v2->y - v1->y;\r
- right_section_height = height;\r
- right_x = v1->x;\r
- right_u = v1->u;\r
- right_v = v1->v;\r
- right_R = v1->R;\r
- right_G = v1->G;\r
- right_B = v1->B;\r
-\r
- if(height == 0) \r
- {\r
- return 0;\r
- }\r
- delta_right_x = (v2->x - v1->x) / height;\r
- delta_right_u = (v2->u - v1->u) / height;\r
- delta_right_v = (v2->v - v1->v) / height;\r
- delta_right_R = (v2->R - v1->R) / height;\r
- delta_right_G = (v2->G - v1->G) / height;\r
- delta_right_B = (v2->B - v1->B) / height;\r
-\r
- return height;\r
-}\r
-\r
-__inline int LeftSection_GT4(void)\r
-{\r
- soft_vertex * v1 = left_array[ left_section ];\r
- soft_vertex * v2 = left_array[ left_section-1 ];\r
-\r
- int height = v2->y - v1->y;\r
- left_section_height = height;\r
- left_x = v1->x;\r
- left_u = v1->u;\r
- left_v = v1->v;\r
- left_R = v1->R;\r
- left_G = v1->G;\r
- left_B = v1->B;\r
-\r
- if(height == 0) \r
- {\r
- return 0;\r
- }\r
- delta_left_x = (v2->x - v1->x) / height;\r
- delta_left_u = (v2->u - v1->u) / height;\r
- delta_left_v = (v2->v - v1->v) / height;\r
- delta_left_R = (v2->R - v1->R) / height;\r
- delta_left_G = (v2->G - v1->G) / height;\r
- delta_left_B = (v2->B - v1->B) / height;\r
-\r
- return height; \r
-}\r
-\r
-__inline BOOL NextRow_GT4(void)\r
-{\r
- if(--left_section_height<=0) \r
- {\r
- if(--left_section > 0) \r
- while(LeftSection_GT4()<=0) \r
- {\r
- if(--left_section <= 0) break;\r
- }\r
- }\r
- else\r
- {\r
- left_x += delta_left_x;\r
- left_u += delta_left_u;\r
- left_v += delta_left_v;\r
- left_R += delta_left_R;\r
- left_G += delta_left_G;\r
- left_B += delta_left_B;\r
- }\r
-\r
- if(--right_section_height<=0) \r
- {\r
- if(--right_section > 0) \r
- while(RightSection_GT4()<=0) \r
- {\r
- if(--right_section<=0) break;\r
- }\r
- }\r
- else\r
- {\r
- right_x += delta_right_x;\r
- right_u += delta_right_u;\r
- right_v += delta_right_v;\r
- right_R += delta_right_R;\r
- right_G += delta_right_G;\r
- right_B += delta_right_B;\r
- }\r
- return FALSE;\r
-}\r
-\r
-__inline BOOL SetupSections_GT4(short x1, short y1, short x2, short y2, short x3, short y3, short x4, short y4, short tx1, short ty1, short tx2, short ty2, short tx3, short ty3, short tx4, short ty4, int rgb1, int rgb2, int rgb3, int rgb4)\r
-{\r
- soft_vertex * v1, * v2, * v3, * v4;\r
- int height,width,longest1,longest2;\r
-\r
- v1 = vtx; v1->x=x1<<16;v1->y=y1;\r
- v1->u=tx1<<16;v1->v=ty1<<16;\r
- v1->R=(rgb1) & 0x00ff0000;\r
- v1->G=(rgb1<<8) & 0x00ff0000;\r
- v1->B=(rgb1<<16) & 0x00ff0000;\r
-\r
- v2 = vtx+1; v2->x=x2<<16;v2->y=y2;\r
- v2->u=tx2<<16;v2->v=ty2<<16;\r
- v2->R=(rgb2) & 0x00ff0000;\r
- v2->G=(rgb2<<8) & 0x00ff0000;\r
- v2->B=(rgb2<<16) & 0x00ff0000;\r
- \r
- v3 = vtx+2; v3->x=x3<<16;v3->y=y3;\r
- v3->u=tx3<<16;v3->v=ty3<<16;\r
- v3->R=(rgb3) & 0x00ff0000;\r
- v3->G=(rgb3<<8) & 0x00ff0000;\r
- v3->B=(rgb3<<16) & 0x00ff0000;\r
-\r
- v4 = vtx+3; v4->x=x4<<16;v4->y=y4;\r
- v4->u=tx4<<16;v4->v=ty4<<16;\r
- v4->R=(rgb4) & 0x00ff0000;\r
- v4->G=(rgb4<<8) & 0x00ff0000;\r
- v4->B=(rgb4<<16) & 0x00ff0000;\r
-\r
- if(v1->y > v2->y) { soft_vertex * v = v1; v1 = v2; v2 = v; }\r
- if(v1->y > v3->y) { soft_vertex * v = v1; v1 = v3; v3 = v; }\r
- if(v1->y > v4->y) { soft_vertex * v = v1; v1 = v4; v4 = v; }\r
- if(v2->y > v3->y) { soft_vertex * v = v2; v2 = v3; v3 = v; }\r
- if(v2->y > v4->y) { soft_vertex * v = v2; v2 = v4; v4 = v; }\r
- if(v3->y > v4->y) { soft_vertex * v = v3; v3 = v4; v4 = v; }\r
-\r
- height = v4->y - v1->y; if(height == 0) height =1;\r
- width = (v4->x - v1->x)>>16;\r
- longest1 = (((v2->y - v1->y) << 16) / height) * width + (v1->x - v2->x);\r
- longest2 = (((v3->y - v1->y) << 16) / height) * width + (v1->x - v3->x);\r
-\r
- if(longest1 < 0) // 2 is right\r
- {\r
- if(longest2 < 0) // 3 is right\r
- {\r
- left_array[0] = v4;\r
- left_array[1] = v1;\r
- left_section = 1;\r
-\r
- height = v3->y - v1->y; if(height == 0) height=1;\r
- longest1 = (((v2->y - v1->y) << 16) / height) * ((v3->x - v1->x)>>16) + (v1->x - v2->x);\r
- if(longest1 >= 0)\r
- {\r
- right_array[0] = v4; // 1\r
- right_array[1] = v3; // 3\r
- right_array[2] = v1; // 4\r
- right_section = 2; \r
- }\r
- else\r
- {\r
- height = v4->y - v2->y; if(height == 0) height=1;\r
- longest1 = (((v3->y - v2->y) << 16) / height) * ((v4->x - v2->x)>>16) + (v2->x - v3->x);\r
- if(longest1 >= 0)\r
- {\r
- right_array[0] = v4; // 1\r
- right_array[1] = v2; // 2\r
- right_array[2] = v1; // 4\r
- right_section = 2; \r
- }\r
- else\r
- {\r
- right_array[0] = v4; // 1\r
- right_array[1] = v3; // 2\r
- right_array[2] = v2; // 3\r
- right_array[3] = v1; // 4\r
- right_section = 3; \r
- }\r
- }\r
- }\r
- else \r
- {\r
- left_array[0] = v4;\r
- left_array[1] = v3; // 1\r
- left_array[2] = v1; // 2\r
- left_section = 2; // 3\r
- right_array[0] = v4; // 4\r
- right_array[1] = v2;\r
- right_array[2] = v1;\r
- right_section = 2;\r
- }\r
- }\r
- else\r
- {\r
- if(longest2 < 0) \r
- {\r
- left_array[0] = v4; // 1\r
- left_array[1] = v2; // 2\r
- left_array[2] = v1; // 3\r
- left_section = 2; // 4\r
- right_array[0] = v4;\r
- right_array[1] = v3;\r
- right_array[2] = v1;\r
- right_section = 2;\r
- }\r
- else \r
- {\r
- right_array[0] = v4;\r
- right_array[1] = v1;\r
- right_section = 1;\r
-\r
- height = v3->y - v1->y; if(height == 0) height=1;\r
- longest1 = (((v2->y - v1->y) << 16) / height) * ((v3->x - v1->x)>>16) + (v1->x - v2->x);\r
- if(longest1<0)\r
- {\r
- left_array[0] = v4; // 1\r
- left_array[1] = v3; // 3\r
- left_array[2] = v1; // 4\r
- left_section = 2; \r
- }\r
- else\r
- {\r
- height = v4->y - v2->y; if(height == 0) height=1;\r
- longest1 = (((v3->y - v2->y) << 16) / height) * ((v4->x - v2->x)>>16) + (v2->x - v3->x);\r
- if(longest1<0)\r
- {\r
- left_array[0] = v4; // 1\r
- left_array[1] = v2; // 2\r
- left_array[2] = v1; // 4\r
- left_section = 2; \r
- }\r
- else\r
- {\r
- left_array[0] = v4; // 1\r
- left_array[1] = v3; // 2\r
- left_array[2] = v2; // 3\r
- left_array[3] = v1; // 4\r
- left_section = 3; \r
- }\r
- }\r
- }\r
- }\r
-\r
- while(LeftSection_GT4()<=0) \r
- {\r
- if(--left_section <= 0) break;\r
- }\r
-\r
- while(RightSection_GT4()<=0) \r
- {\r
- if(--right_section <= 0) break;\r
- }\r
-\r
- Ymin=v1->y;\r
- Ymax=min(v4->y-1,drawH);\r
-\r
- return TRUE;\r
-}\r
-\r
-////////////////////////////////////////////////////////////////////////\r
-// POLY FUNCS\r
-////////////////////////////////////////////////////////////////////////\r
-\r
-////////////////////////////////////////////////////////////////////////\r
-// POLY 3/4 FLAT SHADED\r
-////////////////////////////////////////////////////////////////////////\r
-\r
-__inline void drawPoly3Fi(short x1, short y1, short x2, short y2, short x3, short y3, int rgb)\r
-{\r
- int i,j,xmin,xmax,ymin,ymax;\r
- unsigned short color;\r
- uint32_t lcolor;\r
-\r
- if(x1>drawW && x2>drawW && x3>drawW) return;\r
- if(y1>drawH && y2>drawH && y3>drawH) return;\r
- if(x1<drawX && x2<drawX && x3<drawX) return;\r
- if(y1<drawY && y2<drawY && y3<drawY) return;\r
- if(drawY>=drawH) return;\r
- if(drawX>=drawW) return; \r
-\r
- if(!SetupSections_F(x1,y1,x2,y2,x3,y3)) return;\r
-\r
- ymax=Ymax;\r
-\r
- color = ((rgb & 0x00f80000)>>9) | ((rgb & 0x0000f800)>>6) | ((rgb & 0x000000f8)>>3);\r
- lcolor=lSetMask|(((uint32_t)(color))<<16)|color;\r
-\r
- for(ymin=Ymin;ymin<drawY;ymin++)\r
- if(NextRow_F()) return;\r
-\r
-#ifdef FASTSOLID\r
-\r
- if(!bCheckMask && !DrawSemiTrans)\r
- {\r
- color |=sSetMask;\r
- for (i=ymin;i<=ymax;i++)\r
- {\r
- xmin=left_x >> 16; if(drawX>xmin) xmin=drawX;\r
- xmax=(right_x >> 16)-1; if(drawW<xmax) xmax=drawW;\r
-\r
- for(j=xmin;j<xmax;j+=2) \r
- {\r
- *((uint32_t *)&psxVuw[(i<<10)+j])=lcolor;\r
- }\r
- if(j==xmax) psxVuw[(i<<10)+j]=color;\r
-\r
- if(NextRow_F()) return;\r
- }\r
- return;\r
- }\r
-\r
-#endif\r
-\r
- for (i=ymin;i<=ymax;i++)\r
- {\r
- xmin=left_x >> 16; if(drawX>xmin) xmin=drawX;\r
- xmax=(right_x >> 16)-1; if(drawW<xmax) xmax=drawW;\r
-\r
- for(j=xmin;j<xmax;j+=2) \r
- {\r
- GetShadeTransCol32((uint32_t *)&psxVuw[(i<<10)+j], lcolor);\r
- }\r
- if(j == xmax)\r
- GetShadeTransCol(&psxVuw[(i << 10) + j],color);\r
-\r
- if(NextRow_F()) return;\r
- }\r
-}\r
-\r
-////////////////////////////////////////////////////////////////////////\r
-\r
-void drawPoly3F(int rgb)\r
-{\r
- drawPoly3Fi(lx0,ly0,lx1,ly1,lx2,ly2,rgb);\r
-}\r
-\r
-#ifdef POLYQUAD3FS\r
-\r
-void drawPoly4F_TRI(int rgb)\r
-{\r
- drawPoly3Fi(lx1,ly1,lx3,ly3,lx2,ly2,rgb);\r
- drawPoly3Fi(lx0,ly0,lx1,ly1,lx2,ly2,rgb);\r
-}\r
-\r
-#endif\r
-\r
-// more exact:\r
-\r
-void drawPoly4F(int rgb)\r
-{\r
- int i,j,xmin,xmax,ymin,ymax;\r
- unsigned short color;unsigned int lcolor;\r
- \r
- if(lx0>drawW && lx1>drawW && lx2>drawW && lx3>drawW) return;\r
- if(ly0>drawH && ly1>drawH && ly2>drawH && ly3>drawH) return;\r
- if(lx0<drawX && lx1<drawX && lx2<drawX && lx3<drawX) return;\r
- if(ly0<drawY && ly1<drawY && ly2<drawY && ly3<drawY) return;\r
- if(drawY>=drawH) return;\r
- if(drawX>=drawW) return; \r
-\r
- if(!SetupSections_F4(lx0,ly0,lx1,ly1,lx2,ly2,lx3,ly3)) return;\r
-\r
- ymax=Ymax;\r
-\r
- for(ymin=Ymin;ymin<drawY;ymin++)\r
- if(NextRow_F4()) return;\r
-\r
- color = ((rgb & 0x00f80000)>>9) | ((rgb & 0x0000f800)>>6) | ((rgb & 0x000000f8)>>3);\r
- lcolor= lSetMask|(((uint32_t)(color))<<16)|color;\r
-\r
-#ifdef FASTSOLID\r
-\r
- if(!bCheckMask && !DrawSemiTrans)\r
- {\r
- color |=sSetMask;\r
- for (i=ymin;i<=ymax;i++)\r
- {\r
- xmin=left_x >> 16; if(drawX>xmin) xmin=drawX;\r
- xmax=(right_x >> 16)-1; if(drawW<xmax) xmax=drawW;\r
-\r
- for(j=xmin;j<xmax;j+=2) \r
- {\r
- *((uint32_t *)&psxVuw[(i<<10)+j])=lcolor;\r
- }\r
- if(j==xmax) psxVuw[(i<<10)+j]=color;\r
-\r
- if(NextRow_F4()) return;\r
- }\r
- return;\r
- } \r
-\r
-#endif\r
-\r
- for (i = ymin; i <= ymax; i++)\r
- {\r
- xmin = left_x >> 16; if(drawX > xmin) xmin = drawX;\r
- xmax = (right_x >> 16) - 1; if(drawW < xmax) xmax = drawW;\r
-\r
- for(j = xmin; j < xmax; j += 2) \r
- {\r
- GetShadeTransCol32((uint32_t *)&psxVuw[(i<<10) + j],lcolor);\r
- }\r
- if(j == xmax) GetShadeTransCol(&psxVuw[(i<<10) + j],color);\r
-\r
- if(NextRow_F4()) return;\r
- }\r
-}\r
-\r
-////////////////////////////////////////////////////////////////////////\r
-// POLY 3/4 F-SHADED TEX PAL 4\r
-////////////////////////////////////////////////////////////////////////\r
-\r
-void drawPoly3TEx4(short x1, short y1, short x2, short y2, short x3, short y3, short tx1, short ty1, short tx2, short ty2, short tx3, short ty3,short clX, short clY)\r
-{\r
- int i,j,xmin,xmax,ymin,ymax;\r
- int difX, difY,difX2, difY2;\r
- int posX,posY,YAdjust,XAdjust;\r
- int clutP;\r
- short tC1,tC2;\r
- \r
- if (x1 > drawW && x2 > drawW && x3 > drawW) return;\r
- if (y1 > drawH && y2 > drawH && y3 > drawH) return;\r
- if (x1 < drawX && x2 < drawX && x3 < drawX) return;\r
- if (y1 < drawY && y2 < drawY && y3 < drawY) return;\r
- if (drawY >= drawH) return;\r
- if (drawX >= drawW) return; \r
-\r
- if (!SetupSections_FT(x1,y1,x2,y2,x3,y3,tx1,ty1,tx2,ty2,tx3,ty3)) return;\r
-\r
- ymax = Ymax;\r
-\r
- for (ymin = Ymin; ymin < drawY; ymin++)\r
- if (NextRow_FT()) return;\r
-\r
- clutP = (clY << 10) + clX;\r
-\r
- YAdjust = ((GlobalTextAddrY) << 11) + (GlobalTextAddrX << 1);\r
-\r
- difX = delta_right_u; difX2 = difX << 1;\r
- difY = delta_right_v; difY2 = difY << 1;\r
-\r
-#ifdef FASTSOLID\r
-\r
- if(!bCheckMask && !DrawSemiTrans)\r
- {\r
- for (i=ymin;i<=ymax;i++)\r
- {\r
- xmin=(left_x >> 16);\r
- xmax=(right_x >> 16)-1; //!!!!!!!!!!!!!!!!\r
- if(drawW<xmax) xmax=drawW;\r
-\r
- if(xmax>=xmin)\r
- {\r
- posX=left_u;\r
- posY=left_v;\r
-\r
- if(xmin<drawX)\r
- {j=drawX-xmin;xmin=drawX;posX+=j*difX;posY+=j*difY;}\r
-\r
- for(j=xmin;j<xmax;j+=2)\r
- {\r
- XAdjust=(posX>>16);\r
- tC1 = psxVub[((posY>>5)&(int)0xFFFFF800)+YAdjust+(XAdjust>>1)];\r
- tC1=(tC1>>((XAdjust&1)<<2))&0xf;\r
- XAdjust=((posX+difX)>>16);\r
- tC2 = psxVub[(((posY+difY)>>5)&(int)0xFFFFF800)+YAdjust+\r
- (XAdjust>>1)];\r
- tC2=(tC2>>((XAdjust&1)<<2))&0xf;\r
-\r
- GetTextureTransColG32_S((uint32_t *)&psxVuw[(i<<10)+j],\r
- psxVuw[clutP+tC1]|\r
- ((int)psxVuw[clutP+tC2])<<16);\r
-\r
- posX+=difX2;\r
- posY+=difY2;\r
- }\r
- if(j==xmax)\r
- {\r
- XAdjust=(posX>>16);\r
- tC1 = psxVub[((posY>>5)&(int)0xFFFFF800)+YAdjust+\r
- (XAdjust>>1)];\r
- tC1=(tC1>>((XAdjust&1)<<2))&0xf;\r
- GetTextureTransColG_S(&psxVuw[(i<<10)+j],psxVuw[clutP+tC1]);\r
- }\r
- }\r
- if(NextRow_FT()) \r
- {\r
- return;\r
- }\r
- }\r
- return;\r
- }\r
-\r
-#endif\r
-\r
- for (i=ymin;i<=ymax;i++)\r
- {\r
- xmin=(left_x >> 16);\r
- xmax=(right_x >> 16)-1; //!!!!!!!!!!!!!!!!!!\r
- if(drawW<xmax) xmax=drawW;\r
-\r
- if(xmax>=xmin)\r
- {\r
- posX=left_u;\r
- posY=left_v;\r
-\r
- if(xmin<drawX)\r
- {j=drawX-xmin;xmin=drawX;posX+=j*difX;posY+=j*difY;}\r
-\r
- for(j=xmin;j<xmax;j+=2)\r
- {\r
- XAdjust=(posX>>16);\r
- tC1 = psxVub[((posY>>5)&(int)0xFFFFF800)+YAdjust+(XAdjust>>1)];\r
- tC1=(tC1>>((XAdjust&1)<<2))&0xf;\r
- XAdjust=((posX+difX)>>16);\r
- tC2 = psxVub[(((posY+difY)>>5)&(int)0xFFFFF800)+YAdjust+\r
- (XAdjust>>1)];\r
- tC2=(tC2>>((XAdjust&1)<<2))&0xf;\r
-\r
- GetTextureTransColG32((uint32_t *)&psxVuw[(i<<10)+j],\r
- psxVuw[clutP+tC1]|\r
- ((int)psxVuw[clutP+tC2])<<16);\r
-\r
- posX+=difX2;\r
- posY+=difY2;\r
- }\r
- if(j==xmax)\r
- {\r
- XAdjust=(posX>>16);\r
- tC1 = psxVub[((posY>>5)&(int)0xFFFFF800)+YAdjust+\r
- (XAdjust>>1)];\r
- tC1=(tC1>>((XAdjust&1)<<2))&0xf;\r
- GetTextureTransColG(&psxVuw[(i<<10)+j],psxVuw[clutP+tC1]);\r
- }\r
- }\r
- if(NextRow_FT()) \r
- {\r
- return;\r
- }\r
- }\r
-}\r
-\r
-////////////////////////////////////////////////////////////////////////\r
-\r
-void drawPoly3TEx4_IL(short x1, short y1, short x2, short y2, short x3, short y3, short tx1, short ty1, short tx2, short ty2, short tx3, short ty3,short clX, short clY)\r
-{\r
- int i,j,xmin,xmax,ymin,ymax,n_xi,n_yi,TXV;\r
- int difX, difY,difX2, difY2;\r
- int posX,posY,YAdjust,XAdjust;\r
- int clutP;\r
- short tC1,tC2;\r
- \r
- if(x1>drawW && x2>drawW && x3>drawW) return;\r
- if(y1>drawH && y2>drawH && y3>drawH) return;\r
- if(x1<drawX && x2<drawX && x3<drawX) return;\r
- if(y1<drawY && y2<drawY && y3<drawY) return;\r
- if(drawY>=drawH) return;\r
- if(drawX>=drawW) return; \r
-\r
- if(!SetupSections_FT(x1,y1,x2,y2,x3,y3,tx1,ty1,tx2,ty2,tx3,ty3)) return;\r
-\r
- ymax=Ymax;\r
-\r
- for(ymin=Ymin;ymin<drawY;ymin++)\r
- if(NextRow_FT()) return;\r
-\r
- clutP=(clY<<10)+clX;\r
-\r
- YAdjust=(GlobalTextAddrY<<10)+GlobalTextAddrX;\r
-\r
- difX=delta_right_u;difX2=difX<<1;\r
- difY=delta_right_v;difY2=difY<<1;\r
-\r
-#ifdef FASTSOLID\r
-\r
- if(!bCheckMask && !DrawSemiTrans)\r
- {\r
- for (i=ymin;i<=ymax;i++)\r
- {\r
- xmin=(left_x >> 16);\r
- xmax=(right_x >> 16)-1;\r
- if(drawW<xmax) xmax=drawW;\r
-\r
- if(xmax>=xmin)\r
- {\r
- posX=left_u;\r
- posY=left_v;\r
-\r
- if(xmin<drawX)\r
- {j=drawX-xmin;xmin=drawX;posX+=j*difX;posY+=j*difY;}\r
-\r
- for(j=xmin;j<xmax;j+=2)\r
- {\r
- XAdjust=(posX>>16);\r
-\r
- TXV=posY>>16;\r
- n_xi = ( ( XAdjust >> 2 ) & ~0x3c ) + ( ( TXV << 2 ) & 0x3c );\r
- n_yi = ( TXV & ~0xf ) + ( ( XAdjust >> 4 ) & 0xf );\r
-\r
- tC1= (psxVuw[(n_yi<<10)+YAdjust+n_xi] >> ((XAdjust & 0x03)<<2)) & 0x0f ;\r
-\r
- XAdjust=((posX+difX)>>16);\r
-\r
- TXV=(posY+difY)>>16;\r
- n_xi = ( ( XAdjust >> 2 ) & ~0x3c ) + ( ( TXV << 2 ) & 0x3c );\r
- n_yi = ( TXV & ~0xf ) + ( ( XAdjust >> 4 ) & 0xf );\r
-\r
- tC2= (psxVuw[(n_yi<<10)+YAdjust+n_xi] >> ((XAdjust & 0x03)<<2)) & 0x0f ;\r
-\r
- GetTextureTransColG32_S((uint32_t *)&psxVuw[(i<<10)+j],\r
- psxVuw[clutP+tC1]|\r
- ((int)psxVuw[clutP+tC2])<<16);\r
-\r
- posX+=difX2;\r
- posY+=difY2;\r
- }\r
- if(j==xmax)\r
- {\r
- XAdjust=(posX>>16);\r
-\r
- TXV=posY>>16;\r
- n_xi = ( ( XAdjust >> 2 ) & ~0x3c ) + ( ( TXV << 2 ) & 0x3c );\r
- n_yi = ( TXV & ~0xf ) + ( ( XAdjust >> 4 ) & 0xf );\r
-\r
- tC1= (psxVuw[(n_yi<<10)+YAdjust+n_xi] >> ((XAdjust & 0x03)<<2)) & 0x0f ;\r
-\r
- GetTextureTransColG_S(&psxVuw[(i<<10)+j],psxVuw[clutP+tC1]);\r
- }\r
- }\r
- if(NextRow_FT()) \r
- {\r
- return;\r
- }\r
- }\r
- return;\r
- }\r
-\r
-#endif\r
-\r
- for (i=ymin;i<=ymax;i++)\r
- {\r
- xmin=(left_x >> 16);\r
- xmax=(right_x >> 16)-1; //!!!!!!!!!!!!!!!!!!\r
- if(drawW<xmax) xmax=drawW;\r
-\r
- if(xmax>=xmin)\r
- {\r
- posX=left_u;\r
- posY=left_v;\r
-\r
- if(xmin<drawX)\r
- {j=drawX-xmin;xmin=drawX;posX+=j*difX;posY+=j*difY;}\r
-\r
- for(j=xmin;j<xmax;j+=2)\r
- {\r
- XAdjust=(posX>>16);\r
-\r
- TXV=posY>>16;\r
- n_xi = ( ( XAdjust >> 2 ) & ~0x3c ) + ( ( TXV << 2 ) & 0x3c );\r
- n_yi = ( TXV & ~0xf ) + ( ( XAdjust >> 4 ) & 0xf );\r
-\r
- tC1= (psxVuw[(n_yi<<10)+YAdjust+n_xi] >> ((XAdjust & 0x03)<<2)) & 0x0f ;\r
-\r
- XAdjust=((posX+difX)>>16);\r
-\r
- TXV=(posY+difY)>>16;\r
- n_xi = ( ( XAdjust >> 2 ) & ~0x3c ) + ( ( TXV << 2 ) & 0x3c );\r
- n_yi = ( TXV & ~0xf ) + ( ( XAdjust >> 4 ) & 0xf );\r
-\r
- tC2= (psxVuw[(n_yi<<10)+YAdjust+n_xi] >> ((XAdjust & 0x03)<<2)) & 0x0f ;\r
-\r
- GetTextureTransColG32((uint32_t *)&psxVuw[(i<<10)+j],\r
- psxVuw[clutP+tC1]|\r
- ((int)psxVuw[clutP+tC2])<<16);\r
-\r
- posX+=difX2;\r
- posY+=difY2;\r
- }\r
- if(j==xmax)\r
- {\r
- XAdjust=(posX>>16);\r
-\r
- TXV=posY>>16;\r
- n_xi = ( ( XAdjust >> 2 ) & ~0x3c ) + ( ( TXV << 2 ) & 0x3c );\r
- n_yi = ( TXV & ~0xf ) + ( ( XAdjust >> 4 ) & 0xf );\r
-\r
- tC1= (psxVuw[(n_yi<<10)+YAdjust+n_xi] >> ((XAdjust & 0x03)<<2)) & 0x0f ;\r
-\r
- GetTextureTransColG(&psxVuw[(i<<10)+j],psxVuw[clutP+tC1]);\r
- }\r
- }\r
- if(NextRow_FT()) \r
- {\r
- return;\r
- }\r
- }\r
-}\r
-\r
-////////////////////////////////////////////////////////////////////////\r
-\r
-void drawPoly3TEx4_TW(short x1, short y1, short x2, short y2, short x3, short y3, short tx1, short ty1, short tx2, short ty2, short tx3, short ty3,short clX, short clY)\r
-{\r
- int i,j,xmin,xmax,ymin,ymax;\r
- int difX, difY,difX2, difY2;\r
- int posX,posY,YAdjust,XAdjust;\r
- int clutP;\r
- short tC1,tC2;\r
- \r
- if(x1>drawW && x2>drawW && x3>drawW) return;\r
- if(y1>drawH && y2>drawH && y3>drawH) return;\r
- if(x1<drawX && x2<drawX && x3<drawX) return;\r
- if(y1<drawY && y2<drawY && y3<drawY) return;\r
- if(drawY>=drawH) return;\r
- if(drawX>=drawW) return; \r
-\r
- if(!SetupSections_FT(x1,y1,x2,y2,x3,y3,tx1,ty1,tx2,ty2,tx3,ty3)) return;\r
-\r
- ymax=Ymax;\r
-\r
- for(ymin=Ymin;ymin<drawY;ymin++)\r
- if(NextRow_FT()) return;\r
-\r
- clutP=(clY<<10)+clX;\r
-\r
- YAdjust=((GlobalTextAddrY)<<11)+(GlobalTextAddrX<<1);\r
- YAdjust+=(TWin.Position.y0<<11)+(TWin.Position.x0>>1);\r
-\r
- difX=delta_right_u;difX2=difX<<1;\r
- difY=delta_right_v;difY2=difY<<1;\r
-\r
-#ifdef FASTSOLID\r
-\r
- if(!bCheckMask && !DrawSemiTrans)\r
- {\r
- for (i=ymin;i<=ymax;i++)\r
- {\r
- xmin=(left_x >> 16);\r
- xmax=(right_x >> 16);//-1; //!!!!!!!!!!!!!!!!\r
- if(xmax>xmin) xmax--;\r
-\r
- if(drawW<xmax) xmax=drawW;\r
-\r
- if(xmax>=xmin)\r
- {\r
- posX=left_u;\r
- posY=left_v;\r
-\r
- if(xmin<drawX)\r
- {j=drawX-xmin;xmin=drawX;posX+=j*difX;posY+=j*difY;}\r
-\r
- for(j=xmin;j<xmax;j+=2)\r
- {\r
- XAdjust=(posX>>16)%TWin.Position.x1;\r
- tC1 = psxVub[(((posY>>16)%TWin.Position.y1)<<11)+\r
- YAdjust+(XAdjust>>1)];\r
- tC1=(tC1>>((XAdjust&1)<<2))&0xf;\r
- XAdjust=((posX+difX)>>16)%TWin.Position.x1;\r
- tC2 = psxVub[((((posY+difY)>>16)%TWin.Position.y1)<<11)+\r
- YAdjust+(XAdjust>>1)];\r
- tC2=(tC2>>((XAdjust&1)<<2))&0xf;\r
-\r
- GetTextureTransColG32_S((uint32_t *)&psxVuw[(i << 10) + j],\r
- psxVuw[clutP+tC1]|\r
- ((int)psxVuw[clutP+tC2])<<16);\r
-\r
- posX+=difX2;\r
- posY+=difY2;\r
- }\r
- if(j==xmax)\r
- {\r
- XAdjust=(posX>>16)%TWin.Position.x1;\r
- tC1 = psxVub[(((posY>>16)%TWin.Position.y1)<<11)+\r
- YAdjust+(XAdjust>>1)];\r
- tC1=(tC1>>((XAdjust&1)<<2))&0xf;\r
- GetTextureTransColG_S(&psxVuw[(i<<10)+j],psxVuw[clutP+tC1]);\r
- }\r
- }\r
- if(NextRow_FT()) \r
- {\r
- return;\r
- }\r
- }\r
- return;\r
- }\r
-\r
-#endif\r
-\r
- for (i=ymin;i<=ymax;i++)\r
- {\r
- xmin=(left_x >> 16);\r
- xmax=(right_x >> 16)-1; //!!!!!!!!!!!!!!!!!!\r
- if(drawW<xmax) xmax=drawW;\r
-\r
- if(xmax>=xmin)\r
- {\r
- posX=left_u;\r
- posY=left_v;\r
-\r
- if(xmin<drawX)\r
- {j=drawX-xmin;xmin=drawX;posX+=j*difX;posY+=j*difY;}\r
-\r
- for(j=xmin;j<xmax;j+=2)\r
- {\r
- XAdjust=(posX>>16)%TWin.Position.x1;\r
- tC1 = psxVub[(((posY>>16)%TWin.Position.y1)<<11)+\r
- YAdjust+(XAdjust>>1)];\r
- tC1=(tC1>>((XAdjust&1)<<2))&0xf;\r
- XAdjust=((posX+difX)>>16)%TWin.Position.x1;\r
- tC2 = psxVub[((((posY+difY)>>16)%TWin.Position.y1)<<11)+\r
- YAdjust+(XAdjust>>1)];\r
- tC2=(tC2>>((XAdjust&1)<<2))&0xf;\r
-\r
- GetTextureTransColG32((uint32_t *)&psxVuw[(i<<10)+j],\r
- psxVuw[clutP+tC1]|\r
- ((int)psxVuw[clutP+tC2])<<16);\r
-\r
- posX+=difX2;\r
- posY+=difY2;\r
- }\r
- if(j==xmax)\r
- {\r
- XAdjust=(posX>>16)%TWin.Position.x1;\r
- tC1 = psxVub[(((posY>>16)%TWin.Position.y1)<<11)+\r
- YAdjust+(XAdjust>>1)];\r
- tC1=(tC1>>((XAdjust&1)<<2))&0xf;\r
- GetTextureTransColG(&psxVuw[(i<<10)+j],psxVuw[clutP+tC1]);\r
- }\r
- }\r
- if(NextRow_FT()) \r
- {\r
- return;\r
- }\r
- }\r
-}\r
-\r
-////////////////////////////////////////////////////////////////////////\r
-\r
-#ifdef POLYQUAD3\r
-\r
-void drawPoly4TEx4_TRI(short x1, short y1, short x2, short y2, short x3, short y3, short x4, short y4, short tx1, short ty1, short tx2, short ty2, short tx3, short ty3, short tx4, short ty4,short clX, short clY)\r
-{\r
- drawPoly3TEx4(x2,y2,x3,y3,x4,y4,\r
- tx2,ty2,tx3,ty3,tx4,ty4,\r
- clX,clY);\r
- drawPoly3TEx4(x1,y1,x2,y2,x4,y4,\r
- tx1,ty1,tx2,ty2,tx4,ty4,\r
- clX,clY);\r
-}\r
-\r
-#endif\r
-\r
-// more exact:\r
-\r
-void drawPoly4TEx4(short x1, short y1, short x2, short y2, short x3, short y3, short x4, short y4, short tx1, short ty1, short tx2, short ty2, short tx3, short ty3, short tx4, short ty4,short clX, short clY)\r
-{\r
- int num; \r
- int i,j,xmin,xmax,ymin,ymax;\r
- int difX, difY, difX2, difY2;\r
- int posX,posY,YAdjust,clutP,XAdjust;\r
- short tC1,tC2;\r
-\r
- if(x1>drawW && x2>drawW && x3>drawW && x4>drawW) return;\r
- if(y1>drawH && y2>drawH && y3>drawH && y4>drawH) return;\r
- if(x1<drawX && x2<drawX && x3<drawX && x4<drawX) return;\r
- if(y1<drawY && y2<drawY && y3<drawY && y4<drawY) return;\r
- if(drawY>=drawH) return;\r
- if(drawX>=drawW) return; \r
-\r
- if(!SetupSections_FT4(x1,y1,x2,y2,x3,y3,x4,y4,tx1,ty1,tx2,ty2,tx3,ty3,tx4,ty4)) return;\r
-\r
- ymax=Ymax;\r
-\r
- for(ymin=Ymin;ymin<drawY;ymin++)\r
- if(NextRow_FT4()) return;\r
-\r
- clutP=(clY<<10)+clX;\r
-\r
- YAdjust=((GlobalTextAddrY)<<11)+(GlobalTextAddrX<<1);\r
-\r
-#ifdef FASTSOLID\r
-\r
- if(!bCheckMask && !DrawSemiTrans)\r
- {\r
- for (i=ymin;i<=ymax;i++)\r
- {\r
- xmin=(left_x >> 16);\r
- xmax=(right_x >> 16);\r
-\r
- if(xmax>=xmin)\r
- {\r
- posX=left_u;\r
- posY=left_v;\r
-\r
- num=(xmax-xmin);\r
- if(num==0) num=1;\r
- difX=(right_u-posX)/num;\r
- difY=(right_v-posY)/num;\r
- difX2=difX<<1;\r
- difY2=difY<<1;\r
-\r
- if(xmin<drawX)\r
- {j=drawX-xmin;xmin=drawX;posX+=j*difX;posY+=j*difY;}\r
- xmax--;if(drawW<xmax) xmax=drawW;\r
-\r
- for(j=xmin;j<xmax;j+=2)\r
- {\r
- XAdjust=(posX>>16);\r
- tC1 = psxVub[((posY>>5)&(int)0xFFFFF800)+YAdjust+(XAdjust>>1)];\r
- tC1=(tC1>>((XAdjust&1)<<2))&0xf;\r
- XAdjust=((posX+difX)>>16);\r
- tC2 = psxVub[(((posY+difY)>>5)&(int)0xFFFFF800)+YAdjust+\r
- (XAdjust>>1)];\r
- tC2=(tC2>>((XAdjust&1)<<2))&0xf;\r
-\r
- GetTextureTransColG32_S((uint32_t *)&psxVuw[(i<<10)+j],\r
- psxVuw[clutP+tC1]|\r
- ((int)psxVuw[clutP+tC2])<<16);\r
- posX+=difX2;\r
- posY+=difY2;\r
- }\r
- if(j==xmax)\r
- {\r
- XAdjust=(posX>>16);\r
- tC1 = psxVub[((posY>>5)&(int)0xFFFFF800)+YAdjust+\r
- (XAdjust>>1)];\r
- tC1=(tC1>>((XAdjust&1)<<2))&0xf;\r
- GetTextureTransColG_S(&psxVuw[(i<<10)+j],psxVuw[clutP+tC1]);\r
- }\r
-\r
- }\r
- if(NextRow_FT4()) return;\r
- }\r
- return;\r
- }\r
-\r
-#endif\r
-\r
- for (i=ymin;i<=ymax;i++)\r
- {\r
- xmin=(left_x >> 16);\r
- xmax=(right_x >> 16);\r
-\r
- if(xmax>=xmin)\r
- {\r
- posX=left_u;\r
- posY=left_v;\r
-\r
- num=(xmax-xmin);\r
- if(num==0) num=1;\r
- difX=(right_u-posX)/num;\r
- difY=(right_v-posY)/num;\r
- difX2=difX<<1;\r
- difY2=difY<<1;\r
-\r
- if(xmin<drawX)\r
- {j=drawX-xmin;xmin=drawX;posX+=j*difX;posY+=j*difY;}\r
- xmax--;if(drawW<xmax) xmax=drawW;\r
-\r
- for(j=xmin;j<xmax;j+=2)\r
- {\r
- XAdjust=(posX>>16);\r
- tC1 = psxVub[((posY>>5)&(int)0xFFFFF800)+YAdjust+(XAdjust>>1)];\r
- tC1=(tC1>>((XAdjust&1)<<2))&0xf;\r
- XAdjust=((posX+difX)>>16);\r
- tC2 = psxVub[(((posY+difY)>>5)&(int)0xFFFFF800)+YAdjust+\r
- (XAdjust>>1)];\r
- tC2=(tC2>>((XAdjust&1)<<2))&0xf;\r
-\r
- GetTextureTransColG32((uint32_t *)&psxVuw[(i<<10)+j],\r
- psxVuw[clutP+tC1]|\r
- ((int)psxVuw[clutP+tC2])<<16);\r
- posX+=difX2;\r
- posY+=difY2;\r
- }\r
- if(j==xmax)\r
- {\r
- XAdjust=(posX>>16);\r
- tC1 = psxVub[((posY>>5)&(int)0xFFFFF800)+YAdjust+\r
- (XAdjust>>1)];\r
- tC1=(tC1>>((XAdjust&1)<<2))&0xf;\r
- GetTextureTransColG(&psxVuw[(i<<10)+j],psxVuw[clutP+tC1]);\r
- }\r
- }\r
- if(NextRow_FT4()) return;\r
- }\r
-}\r
-\r
-////////////////////////////////////////////////////////////////////////\r
-\r
-void drawPoly4TEx4_IL(short x1, short y1, short x2, short y2, short x3, short y3, short x4, short y4, short tx1, short ty1, short tx2, short ty2, short tx3, short ty3, short tx4, short ty4,short clX, short clY)\r
-{\r
- int num; \r
- int i,j,xmin,xmax,ymin,ymax,n_xi,n_yi,TXV;\r
- int difX, difY, difX2, difY2;\r
- int posX,posY,YAdjust,clutP,XAdjust;\r
- short tC1,tC2;\r
-\r
- if(x1>drawW && x2>drawW && x3>drawW && x4>drawW) return;\r
- if(y1>drawH && y2>drawH && y3>drawH && y4>drawH) return;\r
- if(x1<drawX && x2<drawX && x3<drawX && x4<drawX) return;\r
- if(y1<drawY && y2<drawY && y3<drawY && y4<drawY) return;\r
- if(drawY>=drawH) return;\r
- if(drawX>=drawW) return; \r
-\r
- if(!SetupSections_FT4(x1,y1,x2,y2,x3,y3,x4,y4,tx1,ty1,tx2,ty2,tx3,ty3,tx4,ty4)) return;\r
-\r
- ymax=Ymax;\r
-\r
- for(ymin=Ymin;ymin<drawY;ymin++)\r
- if(NextRow_FT4()) return;\r
-\r
- clutP=(clY<<10)+clX;\r
-\r
- YAdjust=((GlobalTextAddrY)<<10)+GlobalTextAddrX;\r
-\r
-#ifdef FASTSOLID\r
-\r
- if(!bCheckMask && !DrawSemiTrans)\r
- {\r
- for (i=ymin;i<=ymax;i++)\r
- {\r
- xmin=(left_x >> 16);\r
- xmax=(right_x >> 16);\r
-\r
- if(xmax>=xmin)\r
- {\r
- posX=left_u;\r
- posY=left_v;\r
-\r
- num=(xmax-xmin);\r
- if(num==0) num=1;\r
- difX=(right_u-posX)/num;\r
- difY=(right_v-posY)/num;\r
- difX2=difX<<1;\r
- difY2=difY<<1;\r
-\r
- if(xmin<drawX)\r
- {j=drawX-xmin;xmin=drawX;posX+=j*difX;posY+=j*difY;}\r
- xmax--;if(drawW<xmax) xmax=drawW;\r
-\r
- for(j=xmin;j<xmax;j+=2)\r
- {\r
- XAdjust=(posX>>16);\r
-\r
- TXV=posY>>16;\r
- n_xi = ( ( XAdjust >> 2 ) & ~0x3c ) + ( ( TXV << 2 ) & 0x3c );\r
- n_yi = ( TXV & ~0xf ) + ( ( XAdjust >> 4 ) & 0xf );\r
-\r
- tC1= (psxVuw[(n_yi<<10)+YAdjust+n_xi] >> ((XAdjust & 0x03)<<2)) & 0x0f ;\r
-\r
- XAdjust=((posX+difX)>>16);\r
-\r
- TXV=(posY+difY)>>16;\r
- n_xi = ( ( XAdjust >> 2 ) & ~0x3c ) + ( ( TXV << 2 ) & 0x3c );\r
- n_yi = ( TXV & ~0xf ) + ( ( XAdjust >> 4 ) & 0xf );\r
-\r
- tC2= (psxVuw[(n_yi<<10)+YAdjust+n_xi] >> ((XAdjust & 0x03)<<2)) & 0x0f ;\r
-\r
- GetTextureTransColG32_S((uint32_t *)&psxVuw[(i<<10)+j],\r
- psxVuw[clutP+tC1]|\r
- ((int)psxVuw[clutP+tC2])<<16);\r
- posX+=difX2;\r
- posY+=difY2;\r
- }\r
-\r
- if(j==xmax)\r
- {\r
- XAdjust=(posX>>16);\r
- TXV=posY>>16;\r
- n_xi = ( ( XAdjust >> 2 ) & ~0x3c ) + ( ( TXV << 2 ) & 0x3c );\r
- n_yi = ( TXV & ~0xf ) + ( ( XAdjust >> 4 ) & 0xf );\r
-\r
- tC1= (psxVuw[(n_yi<<10)+YAdjust+n_xi] >> ((XAdjust & 0x03)<<2)) & 0x0f ;\r
-\r
- GetTextureTransColG_S(&psxVuw[(i<<10)+j],psxVuw[clutP+tC1]);\r
- }\r
-\r
- }\r
- if(NextRow_FT4()) return;\r
- }\r
- return;\r
- }\r
-\r
-#endif\r
-\r
- for (i=ymin;i<=ymax;i++)\r
- {\r
- xmin=(left_x >> 16);\r
- xmax=(right_x >> 16);\r
-\r
- if(xmax>=xmin)\r
- {\r
- posX=left_u;\r
- posY=left_v;\r
-\r
- num=(xmax-xmin);\r
- if(num==0) num=1;\r
- difX=(right_u-posX)/num;\r
- difY=(right_v-posY)/num;\r
- difX2=difX<<1;\r
- difY2=difY<<1;\r
-\r
- if(xmin<drawX)\r
- {j=drawX-xmin;xmin=drawX;posX+=j*difX;posY+=j*difY;}\r
- xmax--;if(drawW<xmax) xmax=drawW;\r
-\r
- for(j=xmin;j<xmax;j+=2)\r
- {\r
- XAdjust=(posX>>16);\r
-\r
- TXV=posY>>16;\r
- n_xi = ( ( XAdjust >> 2 ) & ~0x3c ) + ( ( TXV << 2 ) & 0x3c );\r
- n_yi = ( TXV & ~0xf ) + ( ( XAdjust >> 4 ) & 0xf );\r
-\r
- tC1= (psxVuw[(n_yi<<10)+YAdjust+n_xi] >> ((XAdjust & 0x03)<<2)) & 0x0f ;\r
-\r
- XAdjust=((posX+difX)>>16);\r
-\r
- TXV=(posY+difY)>>16;\r
- n_xi = ( ( XAdjust >> 2 ) & ~0x3c ) + ( ( TXV << 2 ) & 0x3c );\r
- n_yi = ( TXV & ~0xf ) + ( ( XAdjust >> 4 ) & 0xf );\r
-\r
- tC2= (psxVuw[(n_yi<<10)+YAdjust+n_xi] >> ((XAdjust & 0x03)<<2)) & 0x0f ;\r
-\r
- GetTextureTransColG32((uint32_t *)&psxVuw[(i<<10)+j],\r
- psxVuw[clutP+tC1]|\r
- ((int)psxVuw[clutP+tC2])<<16);\r
- posX+=difX2;\r
- posY+=difY2;\r
- }\r
- if(j==xmax)\r
- {\r
- XAdjust=(posX>>16);\r
- TXV=posY>>16;\r
- n_xi = ( ( XAdjust >> 2 ) & ~0x3c ) + ( ( TXV << 2 ) & 0x3c );\r
- n_yi = ( TXV & ~0xf ) + ( ( XAdjust >> 4 ) & 0xf );\r
-\r
- tC1= (psxVuw[(n_yi<<10)+YAdjust+n_xi] >> ((XAdjust & 0x03)<<2)) & 0x0f ;\r
-\r
- GetTextureTransColG(&psxVuw[(i<<10)+j],psxVuw[clutP+tC1]);\r
- }\r
- }\r
- if(NextRow_FT4()) return;\r
- }\r
-}\r
-\r
-////////////////////////////////////////////////////////////////////////\r
-\r
-void drawPoly4TEx4_TW(short x1, short y1, short x2, short y2, short x3, short y3, short x4, short y4, short tx1, short ty1, short tx2, short ty2, short tx3, short ty3, short tx4, short ty4,short clX, short clY)\r
-{\r
- int num; \r
- int i,j,xmin,xmax,ymin,ymax;\r
- int difX, difY, difX2, difY2;\r
- int posX,posY,YAdjust,clutP,XAdjust;\r
- short tC1,tC2;\r
-\r
- if(x1>drawW && x2>drawW && x3>drawW && x4>drawW) return;\r
- if(y1>drawH && y2>drawH && y3>drawH && y4>drawH) return;\r
- if(x1<drawX && x2<drawX && x3<drawX && x4<drawX) return;\r
- if(y1<drawY && y2<drawY && y3<drawY && y4<drawY) return;\r
- if(drawY>=drawH) return;\r
- if(drawX>=drawW) return; \r
-\r
- if(!SetupSections_FT4(x1,y1,x2,y2,x3,y3,x4,y4,tx1,ty1,tx2,ty2,tx3,ty3,tx4,ty4)) return;\r
-\r
- ymax=Ymax;\r
-\r
- for(ymin=Ymin;ymin<drawY;ymin++)\r
- if(NextRow_FT4()) return;\r
-\r
- clutP=(clY<<10)+clX;\r
-\r
- YAdjust=((GlobalTextAddrY)<<11)+(GlobalTextAddrX<<1);\r
- YAdjust+=(TWin.Position.y0<<11)+(TWin.Position.x0>>1);\r
-\r
-#ifdef FASTSOLID\r
-\r
- if(!bCheckMask && !DrawSemiTrans)\r
- {\r
- for (i=ymin;i<=ymax;i++)\r
- {\r
- xmin=(left_x >> 16);\r
- xmax=(right_x >> 16);\r
-\r
- if(xmax>=xmin)\r
- {\r
- posX=left_u;\r
- posY=left_v;\r
-\r
- num=(xmax-xmin);\r
- if(num==0) num=1;\r
- difX=(right_u-posX)/num;\r
- difY=(right_v-posY)/num;\r
- difX2=difX<<1;\r
- difY2=difY<<1;\r
-\r
- if(xmin<drawX)\r
- {j=drawX-xmin;xmin=drawX;posX+=j*difX;posY+=j*difY;}\r
- xmax--;if(drawW<xmax) xmax=drawW;\r
-\r
- for(j=xmin;j<xmax;j+=2)\r
- {\r
- XAdjust=(posX>>16)%TWin.Position.x1;\r
- tC1 = psxVub[(((posY>>16)%TWin.Position.y1)<<11)+\r
- YAdjust+(XAdjust>>1)];\r
- tC1=(tC1>>((XAdjust&1)<<2))&0xf;\r
- XAdjust=((posX+difX)>>16)%TWin.Position.x1;\r
- tC2 = psxVub[((((posY+difY)>>16)%TWin.Position.y1)<<11)+\r
- YAdjust+(XAdjust>>1)];\r
- tC2=(tC2>>((XAdjust&1)<<2))&0xf;\r
-\r
- GetTextureTransColG32_S((uint32_t *)&psxVuw[(i<<10)+j],\r
- psxVuw[clutP+tC1]|\r
- ((int)psxVuw[clutP+tC2])<<16);\r
- posX+=difX2;\r
- posY+=difY2;\r
- }\r
- if(j==xmax)\r
- {\r
- XAdjust=(posX>>16)%TWin.Position.x1;\r
- tC1 = psxVub[(((posY>>16)%TWin.Position.y1)<<11)+\r
- YAdjust+(XAdjust>>1)];\r
- tC1=(tC1>>((XAdjust&1)<<2))&0xf;\r
- GetTextureTransColG_S(&psxVuw[(i<<10)+j],psxVuw[clutP+tC1]);\r
- }\r
- }\r
- if(NextRow_FT4()) return;\r
- }\r
- return;\r
- }\r
-\r
-#endif\r
-\r
- for (i=ymin;i<=ymax;i++)\r
- {\r
- xmin=(left_x >> 16);\r
- xmax=(right_x >> 16);\r
-\r
- if(xmax>=xmin)\r
- {\r
- posX=left_u;\r
- posY=left_v;\r
-\r
- num=(xmax-xmin);\r
- if(num==0) num=1;\r
- difX=(right_u-posX)/num;\r
- difY=(right_v-posY)/num;\r
- difX2=difX<<1;\r
- difY2=difY<<1;\r
-\r
- if(xmin<drawX)\r
- {j=drawX-xmin;xmin=drawX;posX+=j*difX;posY+=j*difY;}\r
- xmax--;if(drawW<xmax) xmax=drawW;\r
-\r
- for(j=xmin;j<xmax;j+=2)\r
- {\r
- XAdjust=(posX>>16)%TWin.Position.x1;\r
- tC1 = psxVub[(((posY>>16)%TWin.Position.y1)<<11)+\r
- YAdjust+(XAdjust>>1)];\r
- tC1=(tC1>>((XAdjust&1)<<2))&0xf;\r
- XAdjust=((posX+difX)>>16)%TWin.Position.x1;\r
- tC2 = psxVub[((((posY+difY)>>16)%TWin.Position.y1)<<11)+\r
- YAdjust+(XAdjust>>1)];\r
- tC2=(tC2>>((XAdjust&1)<<2))&0xf;\r
-\r
- GetTextureTransColG32((uint32_t *)&psxVuw[(i<<10)+j],\r
- psxVuw[clutP+tC1]|\r
- ((int)psxVuw[clutP+tC2])<<16);\r
- posX+=difX2;\r
- posY+=difY2;\r
- }\r
- if(j==xmax)\r
- {\r
- XAdjust=(posX>>16)%TWin.Position.x1;\r
- tC1 = psxVub[(((posY>>16)%TWin.Position.y1)<<11)+\r
- YAdjust+(XAdjust>>1)];\r
- tC1=(tC1>>((XAdjust&1)<<2))&0xf;\r
- GetTextureTransColG(&psxVuw[(i<<10)+j],psxVuw[clutP+tC1]);\r
- }\r
- }\r
- if(NextRow_FT4()) return;\r
- }\r
-}\r
-\r
-////////////////////////////////////////////////////////////////////////\r
-\r
-void drawPoly4TEx4_TW_S(short x1, short y1, short x2, short y2, short x3, short y3, short x4, short y4, short tx1, short ty1, short tx2, short ty2, short tx3, short ty3, short tx4, short ty4,short clX, short clY)\r
-{\r
- int num; \r
- int i,j,xmin,xmax,ymin,ymax;\r
- int difX, difY, difX2, difY2;\r
- int posX,posY,YAdjust,clutP,XAdjust;\r
- short tC1,tC2;\r
-\r
- if(x1>drawW && x2>drawW && x3>drawW && x4>drawW) return;\r
- if(y1>drawH && y2>drawH && y3>drawH && y4>drawH) return;\r
- if(x1<drawX && x2<drawX && x3<drawX && x4<drawX) return;\r
- if(y1<drawY && y2<drawY && y3<drawY && y4<drawY) return;\r
- if(drawY>=drawH) return;\r
- if(drawX>=drawW) return; \r
-\r
- if(!SetupSections_FT4(x1,y1,x2,y2,x3,y3,x4,y4,tx1,ty1,tx2,ty2,tx3,ty3,tx4,ty4)) return;\r
-\r
- ymax=Ymax;\r
-\r
- for(ymin=Ymin;ymin<drawY;ymin++)\r
- if(NextRow_FT4()) return;\r
-\r
- clutP=(clY<<10)+clX;\r
-\r
- YAdjust=((GlobalTextAddrY)<<11)+(GlobalTextAddrX<<1);\r
- YAdjust+=(TWin.Position.y0<<11)+(TWin.Position.x0>>1);\r
-\r
-#ifdef FASTSOLID\r
-\r
- if(!bCheckMask && !DrawSemiTrans)\r
- {\r
- for (i=ymin;i<=ymax;i++)\r
- {\r
- xmin=(left_x >> 16);\r
- xmax=(right_x >> 16);\r
-\r
- if(xmax>=xmin)\r
- {\r
- posX=left_u;\r
- posY=left_v;\r
-\r
- num=(xmax-xmin);\r
- if(num==0) num=1;\r
- difX=(right_u-posX)/num;\r
- difY=(right_v-posY)/num;\r
- difX2=difX<<1;\r
- difY2=difY<<1;\r
-\r
- if(xmin<drawX)\r
- {j=drawX-xmin;xmin=drawX;posX+=j*difX;posY+=j*difY;}\r
- xmax--;if(drawW<xmax) xmax=drawW;\r
-\r
- for(j=xmin;j<xmax;j+=2)\r
- {\r
- XAdjust=(posX>>16)%TWin.Position.x1;\r
- tC1 = psxVub[(((posY>>16)%TWin.Position.y1)<<11)+\r
- YAdjust+(XAdjust>>1)];\r
- tC1=(tC1>>((XAdjust&1)<<2))&0xf;\r
- XAdjust=((posX+difX)>>16)%TWin.Position.x1;\r
- tC2 = psxVub[((((posY+difY)>>16)%TWin.Position.y1)<<11)+\r
- YAdjust+(XAdjust>>1)];\r
- tC2=(tC2>>((XAdjust&1)<<2))&0xf;\r
-\r
- GetTextureTransColG32_S((uint32_t *)&psxVuw[(i<<10)+j],\r
- psxVuw[clutP+tC1]|\r
- ((int)psxVuw[clutP+tC2])<<16);\r
- posX+=difX2;\r
- posY+=difY2;\r
- }\r
- if(j==xmax)\r
- {\r
- XAdjust=(posX>>16)%TWin.Position.x1;\r
- tC1 = psxVub[(((posY>>16)%TWin.Position.y1)<<11)+\r
- YAdjust+(XAdjust>>1)];\r
- tC1=(tC1>>((XAdjust&1)<<2))&0xf;\r
- GetTextureTransColG_S(&psxVuw[(i<<10)+j],psxVuw[clutP+tC1]);\r
- }\r
- }\r
- if(NextRow_FT4()) return;\r
- }\r
- return;\r
- }\r
-\r
-#endif\r
-\r
- for (i=ymin;i<=ymax;i++)\r
- {\r
- xmin=(left_x >> 16);\r
- xmax=(right_x >> 16);\r
-\r
- if(xmax>=xmin)\r
- {\r
- posX=left_u;\r
- posY=left_v;\r
-\r
- num=(xmax-xmin);\r
- if(num==0) num=1;\r
- difX=(right_u-posX)/num;\r
- difY=(right_v-posY)/num;\r
- difX2=difX<<1;\r
- difY2=difY<<1;\r
-\r
- if(xmin<drawX)\r
- {j=drawX-xmin;xmin=drawX;posX+=j*difX;posY+=j*difY;}\r
- xmax--;if(drawW<xmax) xmax=drawW;\r
-\r
- for(j=xmin;j<xmax;j+=2)\r
- {\r
- XAdjust=(posX>>16)%TWin.Position.x1;\r
- tC1 = psxVub[(((posY>>16)%TWin.Position.y1)<<11)+\r
- YAdjust+(XAdjust>>1)];\r
- tC1=(tC1>>((XAdjust&1)<<2))&0xf;\r
- XAdjust=((posX+difX)>>16)%TWin.Position.x1;\r
- tC2 = psxVub[((((posY+difY)>>16)%TWin.Position.y1)<<11)+\r
- YAdjust+(XAdjust>>1)];\r
- tC2=(tC2>>((XAdjust&1)<<2))&0xf;\r
-\r
- GetTextureTransColG32_SPR((uint32_t *)&psxVuw[(i<<10)+j],\r
- psxVuw[clutP+tC1]|\r
- ((int)psxVuw[clutP+tC2])<<16);\r
- posX+=difX2;\r
- posY+=difY2;\r
- }\r
- if(j==xmax)\r
- {\r
- XAdjust=(posX>>16)%TWin.Position.x1;\r
- tC1 = psxVub[(((posY>>16)%TWin.Position.y1)<<11)+\r
- YAdjust+(XAdjust>>1)];\r
- tC1=(tC1>>((XAdjust&1)<<2))&0xf;\r
- GetTextureTransColG_SPR(&psxVuw[(i<<10)+j],psxVuw[clutP+tC1]);\r
- }\r
- }\r
- if(NextRow_FT4()) return;\r
- }\r
-}\r
-////////////////////////////////////////////////////////////////////////\r
-// POLY 3 F-SHADED TEX PAL 8\r
-////////////////////////////////////////////////////////////////////////\r
-\r
-void drawPoly3TEx8(short x1, short y1, short x2, short y2, short x3, short y3, short tx1, short ty1, short tx2, short ty2, short tx3, short ty3,short clX, short clY)\r
-{\r
- int i,j,xmin,xmax,ymin,ymax;\r
- int difX, difY,difX2, difY2;\r
- int posX,posY,YAdjust,clutP;\r
- short tC1,tC2;\r
-\r
- if(x1>drawW && x2>drawW && x3>drawW) return;\r
- if(y1>drawH && y2>drawH && y3>drawH) return;\r
- if(x1<drawX && x2<drawX && x3<drawX) return;\r
- if(y1<drawY && y2<drawY && y3<drawY) return;\r
- if(drawY>=drawH) return;\r
- if(drawX>=drawW) return; \r
-\r
- if(!SetupSections_FT(x1,y1,x2,y2,x3,y3,tx1,ty1,tx2,ty2,tx3,ty3)) return;\r
-\r
- ymax=Ymax;\r
-\r
- for(ymin=Ymin;ymin<drawY;ymin++)\r
- if(NextRow_FT()) return;\r
-\r
- clutP=(clY<<10)+clX;\r
-\r
- YAdjust=((GlobalTextAddrY)<<11)+(GlobalTextAddrX<<1);\r
-\r
- difX=delta_right_u;difX2=difX<<1;\r
- difY=delta_right_v;difY2=difY<<1;\r
-\r
-#ifdef FASTSOLID\r
-\r
- if(!bCheckMask && !DrawSemiTrans)\r
- {\r
- for (i=ymin;i<=ymax;i++)\r
- {\r
- xmin=(left_x >> 16);\r
- xmax=(right_x >> 16)-1; //!!!!!!!!!!!!!!!\r
- if(drawW<xmax) xmax=drawW;\r
-\r
- if(xmax>=xmin)\r
- {\r
- posX=left_u;\r
- posY=left_v;\r
-\r
- if(xmin<drawX)\r
- {j=drawX-xmin;xmin=drawX;posX+=j*difX;posY+=j*difY;}\r
-\r
- for(j=xmin;j<xmax;j+=2)\r
- {\r
- tC1 = psxVub[((posY>>5)&(int)0xFFFFF800)+YAdjust+(posX>>16)];\r
- tC2 = psxVub[(((posY+difY)>>5)&(int)0xFFFFF800)+YAdjust+\r
- ((posX+difX)>>16)];\r
- GetTextureTransColG32_S((uint32_t *)&psxVuw[(i<<10)+j],\r
- psxVuw[clutP+tC1]|\r
- ((int)psxVuw[clutP+tC2])<<16);\r
- posX+=difX2;\r
- posY+=difY2;\r
- }\r
-\r
- if(j==xmax)\r
- {\r
- tC1 = psxVub[((posY>>5)&(int)0xFFFFF800)+YAdjust+(posX>>16)];\r
- GetTextureTransColG_S(&psxVuw[(i<<10)+j],psxVuw[clutP+tC1]);\r
- }\r
- }\r
- if(NextRow_FT()) \r
- {\r
- return;\r
- }\r
- }\r
- return;\r
- }\r
-\r
-#endif\r
-\r
- for (i=ymin;i<=ymax;i++)\r
- {\r
- xmin=(left_x >> 16);\r
- xmax=(right_x >> 16)-1; //!!!!!!!!!!!!!!!!!\r
- if(drawW<xmax) xmax=drawW;\r
-\r
- if(xmax>=xmin)\r
- {\r
- posX=left_u;\r
- posY=left_v;\r
-\r
- if(xmin<drawX)\r
- {j=drawX-xmin;xmin=drawX;posX+=j*difX;posY+=j*difY;}\r
-\r
- for(j=xmin;j<xmax;j+=2)\r
- {\r
- tC1 = psxVub[((posY>>5)&(int)0xFFFFF800)+YAdjust+(posX>>16)];\r
- tC2 = psxVub[(((posY+difY)>>5)&(int)0xFFFFF800)+YAdjust+\r
- ((posX+difX)>>16)];\r
- GetTextureTransColG32((uint32_t *)&psxVuw[(i<<10)+j],\r
- psxVuw[clutP+tC1]|\r
- ((int)psxVuw[clutP+tC2])<<16);\r
- posX+=difX2;\r
- posY+=difY2;\r
- }\r
-\r
- if(j==xmax)\r
- {\r
- tC1 = psxVub[((posY>>5)&(int)0xFFFFF800)+YAdjust+(posX>>16)];\r
- GetTextureTransColG(&psxVuw[(i<<10)+j],psxVuw[clutP+tC1]);\r
- }\r
-\r
- }\r
- if(NextRow_FT()) \r
- {\r
- return;\r
- }\r
- }\r
-}\r
-\r
-////////////////////////////////////////////////////////////////////////\r
-\r
-void drawPoly3TEx8_IL(short x1, short y1, short x2, short y2, short x3, short y3, short tx1, short ty1, short tx2, short ty2, short tx3, short ty3,short clX, short clY)\r
-{\r
- int i,j,xmin,xmax,ymin,ymax,n_xi,n_yi,TXV,TXU;\r
- int difX, difY,difX2, difY2;\r
- int posX,posY,YAdjust,clutP;\r
- short tC1,tC2;\r
-\r
- if(x1>drawW && x2>drawW && x3>drawW) return;\r
- if(y1>drawH && y2>drawH && y3>drawH) return;\r
- if(x1<drawX && x2<drawX && x3<drawX) return;\r
- if(y1<drawY && y2<drawY && y3<drawY) return;\r
- if(drawY>=drawH) return;\r
- if(drawX>=drawW) return; \r
-\r
- if(!SetupSections_FT(x1,y1,x2,y2,x3,y3,tx1,ty1,tx2,ty2,tx3,ty3)) return;\r
-\r
- ymax=Ymax;\r
-\r
- for(ymin=Ymin;ymin<drawY;ymin++)\r
- if(NextRow_FT()) return;\r
-\r
- clutP=(clY<<10)+clX;\r
-\r
- YAdjust=(GlobalTextAddrY<<10)+GlobalTextAddrX;\r
-\r
- difX=delta_right_u;difX2=difX<<1;\r
- difY=delta_right_v;difY2=difY<<1;\r
-\r
-#ifdef FASTSOLID\r
-\r
- if(!bCheckMask && !DrawSemiTrans)\r
- {\r
- for (i=ymin;i<=ymax;i++)\r
- {\r
- xmin=(left_x >> 16);\r
- xmax=(right_x >> 16)-1; //!!!!!!!!!!!!!!!\r
- if(drawW<xmax) xmax=drawW;\r
-\r
- if(xmax>=xmin)\r
- {\r
- posX=left_u;\r
- posY=left_v;\r
-\r
- if(xmin<drawX)\r
- {j=drawX-xmin;xmin=drawX;posX+=j*difX;posY+=j*difY;}\r
-\r
- for(j=xmin;j<xmax;j+=2)\r
- {\r
- TXU=posX>>16;\r
- TXV=posY>>16;\r
- n_xi = ( ( TXU >> 1 ) & ~0x78 ) + ( ( TXU << 2 ) & 0x40 ) + ( ( TXV << 3 ) & 0x38 );\r
- n_yi = ( TXV & ~0x7 ) + ( ( TXU >> 5 ) & 0x7 );\r
-\r
- tC1= (psxVuw[(n_yi<<10)+YAdjust+n_xi] >> ((TXU & 0x01)<<3)) & 0xff;\r
-\r
- TXU=(posX+difX)>>16;\r
- TXV=(posY+difY)>>16;\r
- n_xi = ( ( TXU >> 1 ) & ~0x78 ) + ( ( TXU << 2 ) & 0x40 ) + ( ( TXV << 3 ) & 0x38 );\r
- n_yi = ( TXV & ~0x7 ) + ( ( TXU >> 5 ) & 0x7 );\r
-\r
- tC2= (psxVuw[(n_yi<<10)+YAdjust+n_xi] >> ((TXU & 0x01)<<3)) & 0xff;\r
-\r
- GetTextureTransColG32_S((uint32_t *)&psxVuw[(i<<10)+j],\r
- psxVuw[clutP+tC1]|\r
- ((int)psxVuw[clutP+tC2])<<16);\r
- posX+=difX2;\r
- posY+=difY2;\r
- }\r
-\r
- if(j==xmax)\r
- {\r
- TXU=posX>>16;\r
- TXV=posY>>16;\r
- n_xi = ( ( TXU >> 1 ) & ~0x78 ) + ( ( TXU << 2 ) & 0x40 ) + ( ( TXV << 3 ) & 0x38 );\r
- n_yi = ( TXV & ~0x7 ) + ( ( TXU >> 5 ) & 0x7 );\r
-\r
- tC1= (psxVuw[(n_yi<<10)+YAdjust+n_xi] >> ((TXU & 0x01)<<3)) & 0xff;\r
-\r
- GetTextureTransColG_S(&psxVuw[(i<<10)+j],psxVuw[clutP+tC1]);\r
- }\r
- }\r
- if(NextRow_FT()) \r
- {\r
- return;\r
- }\r
- }\r
- return;\r
- }\r
-\r
-#endif\r
-\r
- for (i=ymin;i<=ymax;i++)\r
- {\r
- xmin=(left_x >> 16);\r
- xmax=(right_x >> 16)-1; //!!!!!!!!!!!!!!!!!\r
- if(drawW<xmax) xmax=drawW;\r
-\r
- if(xmax>=xmin)\r
- {\r
- posX=left_u;\r
- posY=left_v;\r
-\r
- if(xmin<drawX)\r
- {j=drawX-xmin;xmin=drawX;posX+=j*difX;posY+=j*difY;}\r
-\r
- for(j=xmin;j<xmax;j+=2)\r
- {\r
- TXU=posX>>16;\r
- TXV=posY>>16;\r
- n_xi = ( ( TXU >> 1 ) & ~0x78 ) + ( ( TXU << 2 ) & 0x40 ) + ( ( TXV << 3 ) & 0x38 );\r
- n_yi = ( TXV & ~0x7 ) + ( ( TXU >> 5 ) & 0x7 );\r
-\r
- tC1= (psxVuw[(n_yi<<10)+YAdjust+n_xi] >> ((TXU & 0x01)<<3)) & 0xff;\r
-\r
- TXU=(posX+difX)>>16;\r
- TXV=(posY+difY)>>16;\r
- n_xi = ( ( TXU >> 1 ) & ~0x78 ) + ( ( TXU << 2 ) & 0x40 ) + ( ( TXV << 3 ) & 0x38 );\r
- n_yi = ( TXV & ~0x7 ) + ( ( TXU >> 5 ) & 0x7 );\r
-\r
- tC2= (psxVuw[(n_yi<<10)+YAdjust+n_xi] >> ((TXU & 0x01)<<3)) & 0xff;\r
-\r
- GetTextureTransColG32((uint32_t *)&psxVuw[(i<<10)+j],\r
- psxVuw[clutP+tC1]|\r
- ((int)psxVuw[clutP+tC2])<<16);\r
- posX+=difX2;\r
- posY+=difY2;\r
- }\r
-\r
- if(j==xmax)\r
- {\r
- TXU=posX>>16;\r
- TXV=posY>>16;\r
- n_xi = ( ( TXU >> 1 ) & ~0x78 ) + ( ( TXU << 2 ) & 0x40 ) + ( ( TXV << 3 ) & 0x38 );\r
- n_yi = ( TXV & ~0x7 ) + ( ( TXU >> 5 ) & 0x7 );\r
-\r
- tC1= (psxVuw[(n_yi<<10)+YAdjust+n_xi] >> ((TXU & 0x01)<<3)) & 0xff;\r
-\r
- GetTextureTransColG(&psxVuw[(i<<10)+j],psxVuw[clutP+tC1]);\r
- }\r
-\r
- }\r
- if(NextRow_FT()) \r
- {\r
- return;\r
- }\r
- }\r
-}\r
-\r
-////////////////////////////////////////////////////////////////////////\r
-\r
-void drawPoly3TEx8_TW(short x1, short y1, short x2, short y2, short x3, short y3, short tx1, short ty1, short tx2, short ty2, short tx3, short ty3,short clX, short clY)\r
-{\r
- int i,j,xmin,xmax,ymin,ymax;\r
- int difX, difY,difX2, difY2;\r
- int posX,posY,YAdjust,clutP;\r
- short tC1,tC2;\r
-\r
- if(x1>drawW && x2>drawW && x3>drawW) return;\r
- if(y1>drawH && y2>drawH && y3>drawH) return;\r
- if(x1<drawX && x2<drawX && x3<drawX) return;\r
- if(y1<drawY && y2<drawY && y3<drawY) return;\r
- if(drawY>=drawH) return;\r
- if(drawX>=drawW) return; \r
-\r
- if(!SetupSections_FT(x1,y1,x2,y2,x3,y3,tx1,ty1,tx2,ty2,tx3,ty3)) return;\r
-\r
- ymax=Ymax;\r
-\r
- for(ymin=Ymin;ymin<drawY;ymin++)\r
- if(NextRow_FT()) return;\r
-\r
- clutP=(clY<<10)+clX;\r
-\r
- YAdjust=((GlobalTextAddrY)<<11)+(GlobalTextAddrX<<1);\r
- YAdjust+=(TWin.Position.y0<<11)+(TWin.Position.x0);\r
-\r
- difX=delta_right_u;difX2=difX<<1;\r
- difY=delta_right_v;difY2=difY<<1;\r
-\r
-#ifdef FASTSOLID\r
-\r
- if(!bCheckMask && !DrawSemiTrans)\r
- {\r
- for (i=ymin;i<=ymax;i++)\r
- {\r
- xmin=(left_x >> 16);\r
- xmax=(right_x >> 16);//-1; //!!!!!!!!!!!!!!!!\r
- if(xmax>xmin) xmax--;\r
-\r
- if(drawW<xmax) xmax=drawW;\r
-\r
- if(xmax>=xmin)\r
- {\r
- posX=left_u;\r
- posY=left_v;\r
-\r
- if(xmin<drawX)\r
- {j=drawX-xmin;xmin=drawX;posX+=j*difX;posY+=j*difY;}\r
-\r
- for(j=xmin;j<xmax;j+=2)\r
- {\r
- tC1 = psxVub[(((posY>>16)%TWin.Position.y1)<<11)+\r
- YAdjust+((posX>>16)%TWin.Position.x1)];\r
- tC2 = psxVub[((((posY+difY)>>16)%TWin.Position.y1)<<11)+\r
- YAdjust+(((posX+difX)>>16)%TWin.Position.x1)];\r
- GetTextureTransColG32_S((uint32_t *)&psxVuw[(i<<10)+j],\r
- psxVuw[clutP+tC1]|\r
- ((int)psxVuw[clutP+tC2])<<16);\r
- posX+=difX2;\r
- posY+=difY2;\r
- }\r
-\r
- if(j==xmax)\r
- {\r
- tC1 = psxVub[(((posY>>16)%TWin.Position.y1)<<11)+\r
- YAdjust+((posX>>16)%TWin.Position.x1)];\r
- GetTextureTransColG_S(&psxVuw[(i<<10)+j],psxVuw[clutP+tC1]);\r
- }\r
- }\r
- if(NextRow_FT()) \r
- {\r
- return;\r
- }\r
- }\r
- return;\r
- }\r
-\r
-#endif\r
-\r
- for (i=ymin;i<=ymax;i++)\r
- {\r
- xmin=(left_x >> 16);\r
- xmax=(right_x >> 16)-1; //!!!!!!!!!!!!!!!!!\r
- if(drawW<xmax) xmax=drawW;\r
-\r
- if(xmax>=xmin)\r
- {\r
- posX=left_u;\r
- posY=left_v;\r
-\r
- if(xmin<drawX)\r
- {j=drawX-xmin;xmin=drawX;posX+=j*difX;posY+=j*difY;}\r
-\r
- for(j=xmin;j<xmax;j+=2)\r
- {\r
- tC1 = psxVub[(((posY>>16)%TWin.Position.y1)<<11)+\r
- YAdjust+((posX>>16)%TWin.Position.x1)];\r
- tC2 = psxVub[((((posY+difY)>>16)%TWin.Position.y1)<<11)+\r
- YAdjust+(((posX+difX)>>16)%TWin.Position.x1)];\r
- GetTextureTransColG32((uint32_t *)&psxVuw[(i<<10)+j],\r
- psxVuw[clutP+tC1]|\r
- ((int)psxVuw[clutP+tC2])<<16);\r
- posX+=difX2;\r
- posY+=difY2;\r
- }\r
-\r
- if(j==xmax)\r
- {\r
- tC1 = psxVub[(((posY>>16)%TWin.Position.y1)<<11)+\r
- YAdjust+((posX>>16)%TWin.Position.x1)];\r
- GetTextureTransColG(&psxVuw[(i<<10)+j],psxVuw[clutP+tC1]);\r
- }\r
-\r
- }\r
- if(NextRow_FT()) \r
- {\r
- return;\r
- }\r
- }\r
-}\r
-\r
-////////////////////////////////////////////////////////////////////////\r
-\r
-#ifdef POLYQUAD3\r
-\r
-void drawPoly4TEx8_TRI(short x1, short y1, short x2, short y2, short x3, short y3, short x4, short y4, short tx1, short ty1, short tx2, short ty2, short tx3, short ty3, short tx4, short ty4,short clX, short clY)\r
-{\r
- drawPoly3TEx8(x2,y2,x3,y3,x4,y4,\r
- tx2,ty2,tx3,ty3,tx4,ty4,\r
- clX,clY);\r
-\r
- drawPoly3TEx8(x1,y1,x2,y2,x4,y4,\r
- tx1,ty1,tx2,ty2,tx4,ty4,\r
- clX,clY);\r
-}\r
-\r
-#endif\r
-\r
-// more exact:\r
-\r
-void drawPoly4TEx8(short x1, short y1, short x2, short y2, short x3, short y3, short x4, short y4, short tx1, short ty1, short tx2, short ty2, short tx3, short ty3, short tx4, short ty4,short clX, short clY)\r
-{\r
- int num; \r
- int i,j,xmin,xmax,ymin,ymax;\r
- int difX, difY, difX2, difY2;\r
- int posX,posY,YAdjust,clutP;\r
- short tC1,tC2;\r
-\r
- if(x1>drawW && x2>drawW && x3>drawW && x4>drawW) return;\r
- if(y1>drawH && y2>drawH && y3>drawH && y4>drawH) return;\r
- if(x1<drawX && x2<drawX && x3<drawX && x4<drawX) return;\r
- if(y1<drawY && y2<drawY && y3<drawY && y4<drawY) return;\r
- if(drawY>=drawH) return;\r
- if(drawX>=drawW) return; \r
-\r
- if(!SetupSections_FT4(x1,y1,x2,y2,x3,y3,x4,y4,tx1,ty1,tx2,ty2,tx3,ty3,tx4,ty4)) return;\r
-\r
- ymax=Ymax;\r
-\r
- for(ymin=Ymin;ymin<drawY;ymin++)\r
- if(NextRow_FT4()) return;\r
-\r
- clutP=(clY<<10)+clX;\r
-\r
- YAdjust=((GlobalTextAddrY)<<11)+(GlobalTextAddrX<<1);\r
-\r
-#ifdef FASTSOLID\r
-\r
- if(!bCheckMask && !DrawSemiTrans)\r
- {\r
- for (i=ymin;i<=ymax;i++)\r
- {\r
- xmin=(left_x >> 16);\r
- xmax=(right_x >> 16);\r
-\r
- if(xmax>=xmin)\r
- {\r
- posX=left_u;\r
- posY=left_v;\r
-\r
- num=(xmax-xmin);\r
- if(num==0) num=1;\r
- difX=(right_u-posX)/num;\r
- difY=(right_v-posY)/num;\r
- difX2=difX<<1;\r
- difY2=difY<<1;\r
-\r
- if(xmin<drawX)\r
- {j=drawX-xmin;xmin=drawX;posX+=j*difX;posY+=j*difY;}\r
- xmax--;if(drawW<xmax) xmax=drawW;\r
-\r
- for(j=xmin;j<xmax;j+=2)\r
- {\r
- tC1 = psxVub[((posY>>5)&(int)0xFFFFF800)+YAdjust+(posX>>16)];\r
- tC2 = psxVub[(((posY+difY)>>5)&(int)0xFFFFF800)+YAdjust+\r
- ((posX+difX)>>16)];\r
- GetTextureTransColG32_S((uint32_t *)&psxVuw[(i<<10)+j],\r
- psxVuw[clutP+tC1]|\r
- ((int)psxVuw[clutP+tC2])<<16);\r
- posX+=difX2;\r
- posY+=difY2;\r
- }\r
- if(j==xmax)\r
- {\r
- tC1 = psxVub[((posY>>5)&(int)0xFFFFF800)+YAdjust+(posX>>16)];\r
- GetTextureTransColG_S(&psxVuw[(i<<10)+j],psxVuw[clutP+tC1]);\r
- }\r
- }\r
- if(NextRow_FT4()) return;\r
- }\r
- return;\r
- }\r
-\r
-#endif\r
-\r
- for (i=ymin;i<=ymax;i++)\r
- {\r
- xmin=(left_x >> 16);\r
- xmax=(right_x >> 16);\r
-\r
- if(xmax>=xmin)\r
- {\r
- posX=left_u;\r
- posY=left_v;\r
-\r
- num=(xmax-xmin);\r
- if(num==0) num=1;\r
- difX=(right_u-posX)/num;\r
- difY=(right_v-posY)/num;\r
- difX2=difX<<1;\r
- difY2=difY<<1;\r
-\r
- if(xmin<drawX)\r
- {j=drawX-xmin;xmin=drawX;posX+=j*difX;posY+=j*difY;}\r
- xmax--;if(drawW<xmax) xmax=drawW;\r
-\r
- for(j=xmin;j<xmax;j+=2)\r
- {\r
- tC1 = psxVub[((posY>>5)&(int)0xFFFFF800)+YAdjust+(posX>>16)];\r
- tC2 = psxVub[(((posY+difY)>>5)&(int)0xFFFFF800)+YAdjust+\r
- ((posX+difX)>>16)];\r
- GetTextureTransColG32((uint32_t *)&psxVuw[(i<<10)+j],\r
- psxVuw[clutP+tC1]|\r
- ((int)psxVuw[clutP+tC2])<<16);\r
- posX+=difX2;\r
- posY+=difY2;\r
- }\r
- if(j==xmax)\r
- {\r
- tC1 = psxVub[((posY>>5)&(int)0xFFFFF800)+YAdjust+(posX>>16)];\r
- GetTextureTransColG(&psxVuw[(i<<10)+j],psxVuw[clutP+tC1]);\r
- }\r
- }\r
- if(NextRow_FT4()) return;\r
- }\r
-}\r
-\r
-////////////////////////////////////////////////////////////////////////\r
-\r
-void drawPoly4TEx8_IL(short x1, short y1, short x2, short y2, short x3, short y3, short x4, short y4, short tx1, short ty1, short tx2, short ty2, short tx3, short ty3, short tx4, short ty4,short clX, short clY)\r
-{\r
- int num; \r
- int i,j,xmin,xmax,ymin,ymax,n_xi,n_yi,TXV,TXU;\r
- int difX, difY, difX2, difY2;\r
- int posX,posY,YAdjust,clutP;\r
- short tC1,tC2;\r
-\r
- if(x1>drawW && x2>drawW && x3>drawW && x4>drawW) return;\r
- if(y1>drawH && y2>drawH && y3>drawH && y4>drawH) return;\r
- if(x1<drawX && x2<drawX && x3<drawX && x4<drawX) return;\r
- if(y1<drawY && y2<drawY && y3<drawY && y4<drawY) return;\r
- if(drawY>=drawH) return;\r
- if(drawX>=drawW) return; \r
-\r
- if(!SetupSections_FT4(x1,y1,x2,y2,x3,y3,x4,y4,tx1,ty1,tx2,ty2,tx3,ty3,tx4,ty4)) return;\r
-\r
- ymax=Ymax;\r
-\r
- for(ymin=Ymin;ymin<drawY;ymin++)\r
- if(NextRow_FT4()) return;\r
-\r
- clutP=(clY<<10)+clX;\r
-\r
- YAdjust=(GlobalTextAddrY<<10)+GlobalTextAddrX;\r
-\r
-#ifdef FASTSOLID\r
-\r
- if(!bCheckMask && !DrawSemiTrans)\r
- {\r
- for (i=ymin;i<=ymax;i++)\r
- {\r
- xmin=(left_x >> 16);\r
- xmax=(right_x >> 16);\r
-\r
- if(xmax>=xmin)\r
- {\r
- posX=left_u;\r
- posY=left_v;\r
-\r
- num=(xmax-xmin);\r
- if(num==0) num=1;\r
- difX=(right_u-posX)/num;\r
- difY=(right_v-posY)/num;\r
- difX2=difX<<1;\r
- difY2=difY<<1;\r
-\r
- if(xmin<drawX)\r
- {j=drawX-xmin;xmin=drawX;posX+=j*difX;posY+=j*difY;}\r
- xmax--;if(drawW<xmax) xmax=drawW;\r
-\r
- for(j=xmin;j<xmax;j+=2)\r
- {\r
- TXU=posX>>16;\r
- TXV=posY>>16;\r
- n_xi = ( ( TXU >> 1 ) & ~0x78 ) + ( ( TXU << 2 ) & 0x40 ) + ( ( TXV << 3 ) & 0x38 );\r
- n_yi = ( TXV & ~0x7 ) + ( ( TXU >> 5 ) & 0x7 );\r
-\r
- tC1= (psxVuw[(n_yi<<10)+YAdjust+n_xi] >> ((TXU & 0x01)<<3)) & 0xff;\r
-\r
- TXU=(posX+difX)>>16;\r
- TXV=(posY+difY)>>16;\r
- n_xi = ( ( TXU >> 1 ) & ~0x78 ) + ( ( TXU << 2 ) & 0x40 ) + ( ( TXV << 3 ) & 0x38 );\r
- n_yi = ( TXV & ~0x7 ) + ( ( TXU >> 5 ) & 0x7 );\r
-\r
- tC2= (psxVuw[(n_yi<<10)+YAdjust+n_xi] >> ((TXU & 0x01)<<3)) & 0xff;\r
-\r
- GetTextureTransColG32_S((uint32_t *)&psxVuw[(i<<10)+j],\r
- psxVuw[clutP+tC1]|\r
- ((int)psxVuw[clutP+tC2])<<16);\r
- posX+=difX2;\r
- posY+=difY2;\r
- }\r
- if(j==xmax)\r
- {\r
- TXU=posX>>16;\r
- TXV=posY>>16;\r
- n_xi = ( ( TXU >> 1 ) & ~0x78 ) + ( ( TXU << 2 ) & 0x40 ) + ( ( TXV << 3 ) & 0x38 );\r
- n_yi = ( TXV & ~0x7 ) + ( ( TXU >> 5 ) & 0x7 );\r
-\r
- tC1= (psxVuw[(n_yi<<10)+YAdjust+n_xi] >> ((TXU & 0x01)<<3)) & 0xff;\r
-\r
- GetTextureTransColG_S(&psxVuw[(i<<10)+j],psxVuw[clutP+tC1]);\r
- }\r
- }\r
- if(NextRow_FT4()) return;\r
- }\r
- return;\r
- }\r
-\r
-#endif\r
-\r
- for (i=ymin;i<=ymax;i++)\r
- {\r
- xmin=(left_x >> 16);\r
- xmax=(right_x >> 16);\r
-\r
- if(xmax>=xmin)\r
- {\r
- posX=left_u;\r
- posY=left_v;\r
-\r
- num=(xmax-xmin);\r
- if(num==0) num=1;\r
- difX=(right_u-posX)/num;\r
- difY=(right_v-posY)/num;\r
- difX2=difX<<1;\r
- difY2=difY<<1;\r
-\r
- if(xmin<drawX)\r
- {j=drawX-xmin;xmin=drawX;posX+=j*difX;posY+=j*difY;}\r
- xmax--;if(drawW<xmax) xmax=drawW;\r
-\r
- for(j=xmin;j<xmax;j+=2)\r
- {\r
- TXU=posX>>16;\r
- TXV=posY>>16;\r
- n_xi = ( ( TXU >> 1 ) & ~0x78 ) + ( ( TXU << 2 ) & 0x40 ) + ( ( TXV << 3 ) & 0x38 );\r
- n_yi = ( TXV & ~0x7 ) + ( ( TXU >> 5 ) & 0x7 );\r
-\r
- tC1= (psxVuw[(n_yi<<10)+YAdjust+n_xi] >> ((TXU & 0x01)<<3)) & 0xff;\r
-\r
- TXU=(posX+difX)>>16;\r
- TXV=(posY+difY)>>16;\r
- n_xi = ( ( TXU >> 1 ) & ~0x78 ) + ( ( TXU << 2 ) & 0x40 ) + ( ( TXV << 3 ) & 0x38 );\r
- n_yi = ( TXV & ~0x7 ) + ( ( TXU >> 5 ) & 0x7 );\r
- \r
- tC2= (psxVuw[(n_yi<<10)+YAdjust+n_xi] >> ((TXU & 0x01)<<3)) & 0xff;\r
-\r
- GetTextureTransColG32((uint32_t *)&psxVuw[(i<<10)+j],\r
- psxVuw[clutP+tC1]|\r
- ((int)psxVuw[clutP+tC2])<<16);\r
- posX+=difX2;\r
- posY+=difY2;\r
- }\r
- if(j==xmax)\r
- {\r
- TXU=posX>>16;\r
- TXV=posY>>16;\r
- n_xi = ( ( TXU >> 1 ) & ~0x78 ) + ( ( TXU << 2 ) & 0x40 ) + ( ( TXV << 3 ) & 0x38 );\r
- n_yi = ( TXV & ~0x7 ) + ( ( TXU >> 5 ) & 0x7 );\r
- tC1= (psxVuw[(n_yi<<10)+YAdjust+n_xi] >> ((TXU & 0x01)<<3)) & 0xff;\r
- GetTextureTransColG(&psxVuw[(i<<10)+j],psxVuw[clutP+tC1]);\r
- }\r
- }\r
- if(NextRow_FT4()) return;\r
- }\r
-}\r
-\r
-////////////////////////////////////////////////////////////////////////\r
-\r
-void drawPoly4TEx8_TW(short x1, short y1, short x2, short y2, short x3, short y3, short x4, short y4, short tx1, short ty1, short tx2, short ty2, short tx3, short ty3, short tx4, short ty4,short clX, short clY)\r
-{\r
- int num; \r
- int i, j, xmin, xmax, ymin, ymax;\r
- int difX, difY, difX2, difY2;\r
- int posX, posY, YAdjust, clutP;\r
- short tC1, tC2;\r
-\r
- if(x1>drawW && x2>drawW && x3>drawW && x4>drawW) return;\r
- if(y1>drawH && y2>drawH && y3>drawH && y4>drawH) return;\r
- if(x1<drawX && x2<drawX && x3<drawX && x4<drawX) return;\r
- if(y1<drawY && y2<drawY && y3<drawY && y4<drawY) return;\r
- if(drawY>=drawH) return;\r
- if(drawX>=drawW) return; \r
-\r
- if(!SetupSections_FT4(x1,y1,x2,y2,x3,y3,x4,y4,tx1,ty1,tx2,ty2,tx3,ty3,tx4,ty4)) return;\r
-\r
- ymax=Ymax;\r
-\r
- for(ymin=Ymin;ymin<drawY;ymin++)\r
- if(NextRow_FT4()) return;\r
-\r
- clutP=(clY<<10)+clX;\r
-\r
- YAdjust=((GlobalTextAddrY)<<11)+(GlobalTextAddrX<<1);\r
- YAdjust+=(TWin.Position.y0<<11)+(TWin.Position.x0);\r
-\r
-#ifdef FASTSOLID\r
-\r
- if(!bCheckMask && !DrawSemiTrans)\r
- {\r
- for (i=ymin;i<=ymax;i++)\r
- {\r
- xmin=(left_x >> 16);\r
- xmax=(right_x >> 16);\r
-\r
- if(xmax>=xmin)\r
- {\r
- posX=left_u;\r
- posY=left_v;\r
-\r
- num=(xmax-xmin);\r
- if(num==0) num=1;\r
- difX=(right_u-posX)/num;\r
- difY=(right_v-posY)/num;\r
- difX2=difX<<1;\r
- difY2=difY<<1;\r
-\r
- if(xmin<drawX)\r
- {j=drawX-xmin;xmin=drawX;posX+=j*difX;posY+=j*difY;}\r
- xmax--;if(drawW<xmax) xmax=drawW;\r
-\r
- for(j=xmin;j<xmax;j+=2)\r
- {\r
- tC1 = psxVub[(((posY>>16)%TWin.Position.y1)<<11)+\r
- YAdjust+((posX>>16)%TWin.Position.x1)];\r
- tC2 = psxVub[((((posY+difY)>>16)%TWin.Position.y1)<<11)+\r
- YAdjust+(((posX+difX)>>16)%TWin.Position.x1)];\r
- GetTextureTransColG32_S((uint32_t *)&psxVuw[(i<<10)+j],\r
- psxVuw[clutP+tC1]|\r
- ((int)psxVuw[clutP+tC2])<<16);\r
- posX += difX2;\r
- posY += difY2;\r
- }\r
- if(j==xmax)\r
- {\r
- tC1 = psxVub[((((posY+difY)>>16)%TWin.Position.y1)<<11)+\r
- YAdjust+((posX>>16)%TWin.Position.x1)];\r
- GetTextureTransColG_S(&psxVuw[(i<<10)+j],psxVuw[clutP+tC1]);\r
- }\r
- }\r
- if(NextRow_FT4()) return;\r
- }\r
- return;\r
- }\r
-\r
-#endif\r
-\r
-\r
- for (i=ymin;i<=ymax;i++)\r
- {\r
- xmin=(left_x >> 16);\r
- xmax=(right_x >> 16);\r
-\r
- if(xmax>=xmin)\r
- {\r
- posX=left_u;\r
- posY=left_v;\r
-\r
- num=(xmax-xmin);\r
- if(num==0) num=1;\r
- difX=(right_u-posX)/num;\r
- difY=(right_v-posY)/num;\r
- difX2=difX<<1;\r
- difY2=difY<<1;\r
-\r
- if(xmin<drawX)\r
- {j=drawX-xmin;xmin=drawX;posX+=j*difX;posY+=j*difY;}\r
- xmax--;if(drawW<xmax) xmax=drawW;\r
-\r
- for(j=xmin;j<xmax;j+=2)\r
- {\r
- tC1 = psxVub[(((posY>>16)%TWin.Position.y1)<<11)+\r
- YAdjust+((posX>>16)%TWin.Position.x1)];\r
- tC2 = psxVub[((((posY+difY)>>16)%TWin.Position.y1)<<11)+\r
- YAdjust+(((posX+difX)>>16)%TWin.Position.x1)];\r
- GetTextureTransColG32((uint32_t *)&psxVuw[(i<<10)+j],\r
- psxVuw[clutP+tC1]|\r
- ((int)psxVuw[clutP+tC2])<<16);\r
- posX+=difX2;\r
- posY+=difY2;\r
- }\r
- if(j==xmax)\r
- {\r
- tC1 = psxVub[((((posY+difY)>>16)%TWin.Position.y1)<<11)+\r
- YAdjust+((posX>>16)%TWin.Position.x1)];\r
- GetTextureTransColG(&psxVuw[(i<<10)+j],psxVuw[clutP+tC1]);\r
- }\r
- }\r
- if(NextRow_FT4()) return;\r
- }\r
-}\r
-\r
-////////////////////////////////////////////////////////////////////////\r
-\r
-void drawPoly4TEx8_TW_S(short x1, short y1, short x2, short y2, short x3, short y3, short x4, short y4, short tx1, short ty1, short tx2, short ty2, short tx3, short ty3, short tx4, short ty4,short clX, short clY)\r
-{\r
- int num; \r
- int i,j,xmin,xmax,ymin,ymax;\r
- int difX, difY, difX2, difY2;\r
- int posX,posY,YAdjust,clutP;\r
- short tC1,tC2;\r
-\r
- if(x1>drawW && x2>drawW && x3>drawW && x4>drawW) return;\r
- if(y1>drawH && y2>drawH && y3>drawH && y4>drawH) return;\r
- if(x1<drawX && x2<drawX && x3<drawX && x4<drawX) return;\r
- if(y1<drawY && y2<drawY && y3<drawY && y4<drawY) return;\r
- if(drawY>=drawH) return;\r
- if(drawX>=drawW) return; \r
-\r
- if(!SetupSections_FT4(x1,y1,x2,y2,x3,y3,x4,y4,tx1,ty1,tx2,ty2,tx3,ty3,tx4,ty4)) return;\r
-\r
- ymax=Ymax;\r
-\r
- for(ymin=Ymin;ymin<drawY;ymin++)\r
- if(NextRow_FT4()) return;\r
-\r
- clutP=(clY<<10)+clX;\r
-\r
- YAdjust=((GlobalTextAddrY)<<11)+(GlobalTextAddrX<<1);\r
- YAdjust+=(TWin.Position.y0<<11)+(TWin.Position.x0);\r
-\r
-#ifdef FASTSOLID\r
-\r
- if(!bCheckMask && !DrawSemiTrans)\r
- {\r
- for (i=ymin;i<=ymax;i++)\r
- {\r
- xmin=(left_x >> 16);\r
- xmax=(right_x >> 16);\r
-\r
- if(xmax>=xmin)\r
- {\r
- posX=left_u;\r
- posY=left_v;\r
-\r
- num=(xmax-xmin);\r
- if(num==0) num=1;\r
- difX=(right_u-posX)/num;\r
- difY=(right_v-posY)/num;\r
- difX2=difX<<1;\r
- difY2=difY<<1;\r
-\r
- if(xmin<drawX)\r
- {j=drawX-xmin;xmin=drawX;posX+=j*difX;posY+=j*difY;}\r
- xmax--;if(drawW<xmax) xmax=drawW;\r
-\r
- for(j=xmin;j<xmax;j+=2)\r
- {\r
- tC1 = psxVub[(((posY>>16)%TWin.Position.y1)<<11)+\r
- YAdjust+((posX>>16)%TWin.Position.x1)];\r
- tC2 = psxVub[((((posY+difY)>>16)%TWin.Position.y1)<<11)+\r
- YAdjust+(((posX+difX)>>16)%TWin.Position.x1)];\r
- GetTextureTransColG32_S((uint32_t *)&psxVuw[(i<<10)+j],\r
- psxVuw[clutP+tC1]|\r
- ((int)psxVuw[clutP+tC2])<<16);\r
- posX+=difX2;\r
- posY+=difY2;\r
- }\r
- if(j==xmax)\r
- {\r
- tC1 = psxVub[((((posY+difY)>>16)%TWin.Position.y1)<<11)+\r
- YAdjust+((posX>>16)%TWin.Position.x1)];\r
- GetTextureTransColG_S(&psxVuw[(i<<10)+j],psxVuw[clutP+tC1]);\r
- }\r
- }\r
- if(NextRow_FT4()) return;\r
- }\r
- return;\r
- }\r
-\r
-#endif\r
-\r
-\r
- for (i=ymin;i<=ymax;i++)\r
- {\r
- xmin=(left_x >> 16);\r
- xmax=(right_x >> 16);\r
-\r
- if(xmax>=xmin)\r
- {\r
- posX=left_u;\r
- posY=left_v;\r
-\r
- num=(xmax-xmin);\r
- if(num==0) num=1;\r
- difX=(right_u-posX)/num;\r
- difY=(right_v-posY)/num;\r
- difX2=difX<<1;\r
- difY2=difY<<1;\r
-\r
- if(xmin<drawX)\r
- {j=drawX-xmin;xmin=drawX;posX+=j*difX;posY+=j*difY;}\r
- xmax--;if(drawW<xmax) xmax=drawW;\r
-\r
- for(j=xmin;j<xmax;j+=2)\r
- {\r
- tC1 = psxVub[(((posY>>16)%TWin.Position.y1)<<11)+\r
- YAdjust+((posX>>16)%TWin.Position.x1)];\r
- tC2 = psxVub[((((posY+difY)>>16)%TWin.Position.y1)<<11)+\r
- YAdjust+(((posX+difX)>>16)%TWin.Position.x1)];\r
- GetTextureTransColG32_SPR((uint32_t *)&psxVuw[(i<<10)+j],\r
- psxVuw[clutP+tC1]|\r
- ((int)psxVuw[clutP+tC2])<<16);\r
- posX+=difX2;\r
- posY+=difY2;\r
- }\r
- if(j==xmax)\r
- {\r
- tC1 = psxVub[((((posY+difY)>>16)%TWin.Position.y1)<<11)+\r
- YAdjust+((posX>>16)%TWin.Position.x1)];\r
- GetTextureTransColG_SPR(&psxVuw[(i<<10)+j],psxVuw[clutP+tC1]);\r
- }\r
- }\r
- if(NextRow_FT4()) return;\r
- }\r
-}\r
-\r
-////////////////////////////////////////////////////////////////////////\r
-// POLY 3 F-SHADED TEX 15 BIT\r
-////////////////////////////////////////////////////////////////////////\r
-\r
-void drawPoly3TD(short x1, short y1, short x2, short y2, short x3, short y3, short tx1, short ty1, short tx2, short ty2, short tx3, short ty3)\r
-{\r
- int i,j,xmin,xmax,ymin,ymax;\r
- int difX, difY,difX2, difY2;\r
- int posX,posY;\r
-\r
- if(x1>drawW && x2>drawW && x3>drawW) return;\r
- if(y1>drawH && y2>drawH && y3>drawH) return;\r
- if(x1<drawX && x2<drawX && x3<drawX) return;\r
- if(y1<drawY && y2<drawY && y3<drawY) return;\r
- if(drawY>=drawH) return;\r
- if(drawX>=drawW) return; \r
- \r
- if(!SetupSections_FT(x1,y1,x2,y2,x3,y3,tx1,ty1,tx2,ty2,tx3,ty3)) return;\r
-\r
- ymax=Ymax;\r
-\r
- for(ymin=Ymin;ymin<drawY;ymin++)\r
- if(NextRow_FT()) return;\r
-\r
- difX=delta_right_u;difX2=difX<<1;\r
- difY=delta_right_v;difY2=difY<<1;\r
-\r
-#ifdef FASTSOLID\r
-\r
- if(!bCheckMask && !DrawSemiTrans)\r
- {\r
- for (i=ymin;i<=ymax;i++)\r
- {\r
- xmin=(left_x >> 16);\r
- xmax=(right_x >> 16)-1; //!!!!!!!!!!!!!\r
- if(drawW<xmax) xmax=drawW;\r
-\r
- if(xmax>=xmin)\r
- {\r
- posX=left_u;\r
- posY=left_v;\r
-\r
- if(xmin<drawX)\r
- {j=drawX-xmin;xmin=drawX;posX+=j*difX;posY+=j*difY;}\r
-\r
- for(j=xmin;j<xmax;j+=2)\r
- {\r
- GetTextureTransColG32_S((uint32_t *)&psxVuw[(i<<10)+j],\r
- (((int)psxVuw[((((posY+difY)>>16)+GlobalTextAddrY)<<10)+((posX+difX)>>16)+GlobalTextAddrX])<<16)|\r
- psxVuw[(((posY>>16)+GlobalTextAddrY)<<10)+((posX)>>16)+GlobalTextAddrX]);\r
-\r
- posX+=difX2;\r
- posY+=difY2;\r
- }\r
- if(j==xmax)\r
- GetTextureTransColG_S(&psxVuw[(i<<10)+j],\r
- psxVuw[(((posY>>16)+GlobalTextAddrY)<<10)+(posX>>16)+GlobalTextAddrX]);\r
- }\r
- if(NextRow_FT()) \r
- {\r
- return;\r
- }\r
- }\r
- return;\r
- }\r
-\r
-#endif\r
-\r
- for (i=ymin;i<=ymax;i++)\r
- {\r
- xmin=(left_x >> 16);\r
- xmax=(right_x >> 16)-1; //!!!!!!!!!!!!!!\r
- if(drawW<xmax) xmax=drawW;\r
-\r
- if(xmax>=xmin)\r
- {\r
- posX=left_u;\r
- posY=left_v;\r
-\r
- if(xmin<drawX)\r
- {j=drawX-xmin;xmin=drawX;posX+=j*difX;posY+=j*difY;}\r
-\r
- for(j=xmin;j<xmax;j+=2)\r
- {\r
- GetTextureTransColG32((uint32_t *)&psxVuw[(i<<10)+j],\r
- (((int)psxVuw[((((posY+difY)>>16)+GlobalTextAddrY)<<10)+((posX+difX)>>16)+GlobalTextAddrX])<<16)|\r
- psxVuw[(((posY>>16)+GlobalTextAddrY)<<10)+((posX)>>16)+GlobalTextAddrX]);\r
-\r
- posX+=difX2;\r
- posY+=difY2;\r
- }\r
- if(j==xmax)\r
- GetTextureTransColG(&psxVuw[(i<<10)+j],\r
- psxVuw[(((posY>>16)+GlobalTextAddrY)<<10)+(posX>>16)+GlobalTextAddrX]);\r
- }\r
- if(NextRow_FT()) \r
- {\r
- return;\r
- }\r
- }\r
-}\r
-\r
-////////////////////////////////////////////////////////////////////////\r
-\r
-void drawPoly3TD_TW(short x1, short y1, short x2, short y2, short x3, short y3, short tx1, short ty1, short tx2, short ty2, short tx3, short ty3)\r
-{\r
- int i,j,xmin,xmax,ymin,ymax;\r
- int difX, difY,difX2, difY2;\r
- int posX,posY;\r
-\r
- if(x1>drawW && x2>drawW && x3>drawW) return;\r
- if(y1>drawH && y2>drawH && y3>drawH) return;\r
- if(x1<drawX && x2<drawX && x3<drawX) return;\r
- if(y1<drawY && y2<drawY && y3<drawY) return;\r
- if(drawY>=drawH) return;\r
- if(drawX>=drawW) return; \r
- \r
- if(!SetupSections_FT(x1,y1,x2,y2,x3,y3,tx1,ty1,tx2,ty2,tx3,ty3)) return;\r
-\r
- ymax=Ymax;\r
-\r
- for(ymin=Ymin;ymin<drawY;ymin++)\r
- if(NextRow_FT()) return;\r
-\r
- difX=delta_right_u;difX2=difX<<1;\r
- difY=delta_right_v;difY2=difY<<1;\r
-\r
-#ifdef FASTSOLID\r
-\r
- if(!bCheckMask && !DrawSemiTrans)\r
- {\r
- for (i=ymin;i<=ymax;i++)\r
- {\r
- xmin=(left_x >> 16);\r
- xmax=(right_x >> 16)-1; //!!!!!!!!!!!!!\r
- if(drawW<xmax) xmax=drawW;\r
-\r
- if(xmax>=xmin)\r
- {\r
- posX=left_u;\r
- posY=left_v;\r
-\r
- if(xmin<drawX)\r
- {j=drawX-xmin;xmin=drawX;posX+=j*difX;posY+=j*difY;}\r
-\r
- for(j=xmin;j<xmax;j+=2)\r
- {\r
- GetTextureTransColG32_S((uint32_t *)&psxVuw[(i<<10)+j],\r
- (((int)psxVuw[(((((posY+difY)>>16)%TWin.Position.y1)+GlobalTextAddrY+TWin.Position.y0)<<10)+\r
- (((posX+difX)>>16)%TWin.Position.x1)+GlobalTextAddrX+TWin.Position.x0])<<16)|\r
- psxVuw[((((posY>>16)%TWin.Position.y1)+GlobalTextAddrY+TWin.Position.y0)<<10)+\r
- (((posX)>>16)%TWin.Position.x1)+GlobalTextAddrX+TWin.Position.x0]);\r
-\r
- posX+=difX2;\r
- posY+=difY2;\r
- }\r
- if(j==xmax)\r
- GetTextureTransColG_S(&psxVuw[(i<<10)+j],\r
- psxVuw[((((posY>>16)%TWin.Position.y1)+GlobalTextAddrY+TWin.Position.y0)<<10)+\r
- ((posX>>16)%TWin.Position.x1)+GlobalTextAddrX+TWin.Position.x0]);\r
- }\r
- if(NextRow_FT()) \r
- {\r
- return;\r
- }\r
- }\r
- return;\r
- }\r
-\r
-#endif\r
-\r
- for (i=ymin;i<=ymax;i++)\r
- {\r
- xmin=(left_x >> 16);\r
- xmax=(right_x >> 16)-1; //!!!!!!!!!!!!!!\r
- if(drawW<xmax) xmax=drawW;\r
-\r
- if(xmax>=xmin)\r
- {\r
- posX=left_u;\r
- posY=left_v;\r
-\r
- if(xmin<drawX)\r
- {j=drawX-xmin;xmin=drawX;posX+=j*difX;posY+=j*difY;}\r
-\r
- for(j=xmin;j<xmax;j+=2)\r
- {\r
- GetTextureTransColG32((uint32_t *)&psxVuw[(i<<10)+j],\r
- (((int)psxVuw[(((((posY+difY)>>16)%TWin.Position.y1)+GlobalTextAddrY+TWin.Position.y0)<<10)+\r
- (((posX+difX)>>16)%TWin.Position.x1)+GlobalTextAddrX+TWin.Position.x0])<<16)|\r
- psxVuw[((((posY>>16)%TWin.Position.y1)+GlobalTextAddrY+TWin.Position.y0)<<10)+\r
- (((posX)>>16)%TWin.Position.x1)+GlobalTextAddrX+TWin.Position.x0]);\r
-\r
- posX+=difX2;\r
- posY+=difY2;\r
- }\r
- if(j==xmax)\r
- GetTextureTransColG(&psxVuw[(i<<10)+j],\r
- psxVuw[((((posY>>16)%TWin.Position.y1)+GlobalTextAddrY+TWin.Position.y0)<<10)+\r
- ((posX>>16)%TWin.Position.x1)+GlobalTextAddrX+TWin.Position.x0]);\r
- }\r
- if(NextRow_FT()) \r
- {\r
- return;\r
- }\r
- }\r
-}\r
-\r
-\r
-////////////////////////////////////////////////////////////////////////\r
-\r
-#ifdef POLYQUAD3\r
-\r
-void drawPoly4TD_TRI(short x1, short y1, short x2, short y2, short x3, short y3, short x4, short y4, short tx1, short ty1, short tx2, short ty2, short tx3, short ty3, short tx4, short ty4)\r
-{\r
- drawPoly3TD(x2,y2,x3,y3,x4,y4,\r
- tx2,ty2,tx3,ty3,tx4,ty4);\r
- drawPoly3TD(x1,y1,x2,y2,x4,y4,\r
- tx1,ty1,tx2,ty2,tx4,ty4);\r
-}\r
-\r
-#endif\r
-\r
-// more exact:\r
-\r
-void drawPoly4TD(short x1, short y1, short x2, short y2, short x3, short y3, short x4, short y4, short tx1, short ty1, short tx2, short ty2, short tx3, short ty3, short tx4, short ty4)\r
-{\r
- int num; \r
- int i,j,xmin,xmax,ymin,ymax;\r
- int difX, difY, difX2, difY2;\r
- int posX,posY;\r
-\r
- if(x1>drawW && x2>drawW && x3>drawW && x4>drawW) return;\r
- if(y1>drawH && y2>drawH && y3>drawH && y4>drawH) return;\r
- if(x1<drawX && x2<drawX && x3<drawX && x4<drawX) return;\r
- if(y1<drawY && y2<drawY && y3<drawY && y4<drawY) return;\r
- if(drawY>=drawH) return;\r
- if(drawX>=drawW) return; \r
-\r
- if(!SetupSections_FT4(x1,y1,x2,y2,x3,y3,x4,y4,tx1,ty1,tx2,ty2,tx3,ty3,tx4,ty4)) return;\r
-\r
- ymax=Ymax;\r
-\r
- for(ymin=Ymin;ymin<drawY;ymin++)\r
- if(NextRow_FT4()) return;\r
-\r
-#ifdef FASTSOLID\r
-\r
- if(!bCheckMask && !DrawSemiTrans)\r
- {\r
- for (i=ymin;i<=ymax;i++)\r
- {\r
- xmin=(left_x >> 16);\r
- xmax=(right_x >> 16);\r
-\r
- if(xmax>=xmin)\r
- {\r
- posX=left_u;\r
- posY=left_v;\r
-\r
- num=(xmax-xmin);\r
- if(num==0) num=1;\r
- difX=(right_u-posX)/num;\r
- difY=(right_v-posY)/num;\r
- difX2=difX<<1;\r
- difY2=difY<<1;\r
-\r
- if(xmin<drawX)\r
- {j=drawX-xmin;xmin=drawX;posX+=j*difX;posY+=j*difY;}\r
- xmax--;if(drawW<xmax) xmax=drawW;\r
-\r
- for(j=xmin;j<xmax;j+=2)\r
- {\r
- GetTextureTransColG32_S((uint32_t *)&psxVuw[(i<<10)+j],\r
- (((int)psxVuw[((((posY+difY)>>16)+GlobalTextAddrY)<<10)+((posX+difX)>>16)+GlobalTextAddrX])<<16)|\r
- psxVuw[(((posY>>16)+GlobalTextAddrY)<<10)+((posX)>>16)+GlobalTextAddrX]);\r
-\r
- posX+=difX2;\r
- posY+=difY2;\r
- }\r
- if(j==xmax)\r
- GetTextureTransColG_S(&psxVuw[(i<<10)+j],\r
- psxVuw[(((posY>>16)+GlobalTextAddrY)<<10)+(posX>>16)+GlobalTextAddrX]);\r
- }\r
- if(NextRow_FT4()) return;\r
- }\r
- return;\r
- }\r
-\r
-#endif\r
-\r
- for (i=ymin;i<=ymax;i++)\r
- {\r
- xmin=(left_x >> 16);\r
- xmax=(right_x >> 16);\r
-\r
- if(xmax>=xmin)\r
- {\r
- posX=left_u;\r
- posY=left_v;\r
-\r
- num=(xmax-xmin);\r
- if(num==0) num=1;\r
- difX=(right_u-posX)/num;\r
- difY=(right_v-posY)/num;\r
- difX2=difX<<1;\r
- difY2=difY<<1;\r
-\r
- if(xmin<drawX)\r
- {j=drawX-xmin;xmin=drawX;posX+=j*difX;posY+=j*difY;}\r
- xmax--;if(drawW<xmax) xmax=drawW;\r
-\r
- for(j=xmin;j<xmax;j+=2)\r
- {\r
- GetTextureTransColG32((uint32_t *)&psxVuw[(i<<10)+j],\r
- (((int)psxVuw[((((posY+difY)>>16)+GlobalTextAddrY)<<10)+((posX+difX)>>16)+GlobalTextAddrX])<<16)|\r
- psxVuw[(((posY>>16)+GlobalTextAddrY)<<10)+((posX)>>16)+GlobalTextAddrX]);\r
-\r
- posX+=difX2;\r
- posY+=difY2;\r
- }\r
- if(j==xmax)\r
- GetTextureTransColG(&psxVuw[(i<<10)+j],\r
- psxVuw[(((posY>>16)+GlobalTextAddrY)<<10)+(posX>>16)+GlobalTextAddrX]);\r
- }\r
- if(NextRow_FT4()) return;\r
- }\r
-}\r
-\r
-////////////////////////////////////////////////////////////////////////\r
-\r
-void drawPoly4TD_TW(short x1, short y1, short x2, short y2, short x3, short y3, short x4, short y4, short tx1, short ty1, short tx2, short ty2, short tx3, short ty3, short tx4, short ty4)\r
-{\r
- int num; \r
- int i,j,xmin,xmax,ymin,ymax;\r
- int difX, difY, difX2, difY2;\r
- int posX,posY;\r
-\r
- if(x1>drawW && x2>drawW && x3>drawW && x4>drawW) return;\r
- if(y1>drawH && y2>drawH && y3>drawH && y4>drawH) return;\r
- if(x1<drawX && x2<drawX && x3<drawX && x4<drawX) return;\r
- if(y1<drawY && y2<drawY && y3<drawY && y4<drawY) return;\r
- if(drawY>=drawH) return;\r
- if(drawX>=drawW) return; \r
-\r
- if(!SetupSections_FT4(x1,y1,x2,y2,x3,y3,x4,y4,tx1,ty1,tx2,ty2,tx3,ty3,tx4,ty4)) return;\r
-\r
- ymax=Ymax;\r
-\r
- for(ymin=Ymin;ymin<drawY;ymin++)\r
- if(NextRow_FT4()) return;\r
-\r
-#ifdef FASTSOLID\r
-\r
- if(!bCheckMask && !DrawSemiTrans)\r
- {\r
- for (i=ymin;i<=ymax;i++)\r
- {\r
- xmin=(left_x >> 16);\r
- xmax=(right_x >> 16);\r
-\r
- if(xmax>=xmin)\r
- {\r
- posX=left_u;\r
- posY=left_v;\r
-\r
- num=(xmax-xmin);\r
- if(num==0) num=1;\r
- difX=(right_u-posX)/num;\r
- difY=(right_v-posY)/num;\r
- difX2=difX<<1;\r
- difY2=difY<<1;\r
-\r
- if(xmin<drawX)\r
- {j=drawX-xmin;xmin=drawX;posX+=j*difX;posY+=j*difY;}\r
- xmax--;if(drawW<xmax) xmax=drawW;\r
-\r
- for(j=xmin;j<xmax;j+=2)\r
- {\r
- GetTextureTransColG32_S((uint32_t *)&psxVuw[(i<<10)+j],\r
- (((int)psxVuw[(((((posY+difY)>>16)%TWin.Position.y1)+GlobalTextAddrY+TWin.Position.y0)<<10)+\r
- (((posX+difX)>>16)%TWin.Position.x1)+GlobalTextAddrX+TWin.Position.x0])<<16)|\r
- psxVuw[((((posY>>16)%TWin.Position.y1)+GlobalTextAddrY)<<10)+TWin.Position.y0+\r
- ((posX>>16)%TWin.Position.x1)+GlobalTextAddrX+TWin.Position.x0]);\r
-\r
- posX+=difX2;\r
- posY+=difY2;\r
- }\r
- if(j==xmax)\r
- GetTextureTransColG_S(&psxVuw[(i<<10)+j],\r
- psxVuw[((((posY>>16)%TWin.Position.y1)+GlobalTextAddrY+TWin.Position.y0)<<10)+\r
- ((posX>>16)%TWin.Position.x1)+GlobalTextAddrX+TWin.Position.x0]);\r
- }\r
- if(NextRow_FT4()) return;\r
- }\r
- return;\r
- }\r
-\r
-#endif\r
-\r
- for (i=ymin;i<=ymax;i++)\r
- {\r
- xmin=(left_x >> 16);\r
- xmax=(right_x >> 16);\r
-\r
- if(xmax>=xmin)\r
- {\r
- posX=left_u;\r
- posY=left_v;\r
-\r
- num=(xmax-xmin);\r
- if(num==0) num=1;\r
- difX=(right_u-posX)/num;\r
- difY=(right_v-posY)/num;\r
- difX2=difX<<1;\r
- difY2=difY<<1;\r
-\r
- if(xmin<drawX)\r
- {j=drawX-xmin;xmin=drawX;posX+=j*difX;posY+=j*difY;}\r
- xmax--;if(drawW<xmax) xmax=drawW;\r
-\r
- for(j=xmin;j<xmax;j+=2)\r
- {\r
- GetTextureTransColG32((uint32_t *)&psxVuw[(i<<10)+j],\r
- (((int)psxVuw[(((((posY+difY)>>16)%TWin.Position.y1)+GlobalTextAddrY+TWin.Position.y0)<<10)+\r
- (((posX+difX)>>16)%TWin.Position.x1)+GlobalTextAddrX+TWin.Position.x0])<<16)|\r
- psxVuw[((((posY>>16)%TWin.Position.y1)+GlobalTextAddrY+TWin.Position.y0)<<10)+\r
- ((posX>>16)%TWin.Position.x1)+GlobalTextAddrX+TWin.Position.x0]);\r
-\r
- posX+=difX2;\r
- posY+=difY2;\r
- }\r
- if(j==xmax)\r
- GetTextureTransColG(&psxVuw[(i<<10)+j],\r
- psxVuw[((((posY>>16)%TWin.Position.y1)+GlobalTextAddrY+TWin.Position.y0)<<10)+\r
- ((posX>>16)%TWin.Position.x1)+GlobalTextAddrX+TWin.Position.x0]);\r
- }\r
- if(NextRow_FT4()) return;\r
- }\r
-}\r
-\r
-////////////////////////////////////////////////////////////////////////\r
-\r
-void drawPoly4TD_TW_S(short x1, short y1, short x2, short y2, short x3, short y3, short x4, short y4, short tx1, short ty1, short tx2, short ty2, short tx3, short ty3, short tx4, short ty4)\r
-{\r
- int num; \r
- int i,j,xmin,xmax,ymin,ymax;\r
- int difX, difY, difX2, difY2;\r
- int posX, posY;\r
-\r
- if(x1>drawW && x2>drawW && x3>drawW && x4>drawW) return;\r
- if(y1>drawH && y2>drawH && y3>drawH && y4>drawH) return;\r
- if(x1<drawX && x2<drawX && x3<drawX && x4<drawX) return;\r
- if(y1<drawY && y2<drawY && y3<drawY && y4<drawY) return;\r
- if(drawY>=drawH) return;\r
- if(drawX>=drawW) return; \r
-\r
- if(!SetupSections_FT4(x1,y1,x2,y2,x3,y3,x4,y4,tx1,ty1,tx2,ty2,tx3,ty3,tx4,ty4)) return;\r
-\r
- ymax=Ymax;\r
-\r
- for(ymin=Ymin;ymin<drawY;ymin++)\r
- if(NextRow_FT4()) return;\r
-\r
-#ifdef FASTSOLID\r
-\r
- if(!bCheckMask && !DrawSemiTrans)\r
- {\r
- for (i=ymin;i<=ymax;i++)\r
- {\r
- xmin=(left_x >> 16);\r
- xmax=(right_x >> 16);\r
-\r
- if(xmax>=xmin)\r
- {\r
- posX=left_u;\r
- posY=left_v;\r
-\r
- num=(xmax-xmin);\r
- if(num==0) num=1;\r
- difX=(right_u-posX)/num;\r
- difY=(right_v-posY)/num;\r
- difX2=difX<<1;\r
- difY2=difY<<1;\r
-\r
- if(xmin<drawX)\r
- {j=drawX-xmin;xmin=drawX;posX+=j*difX;posY+=j*difY;}\r
- xmax--;if(drawW<xmax) xmax=drawW;\r
-\r
- for(j=xmin;j<xmax;j+=2)\r
- {\r
- GetTextureTransColG32_S((uint32_t *)&psxVuw[(i<<10)+j],\r
- (((int)psxVuw[(((((posY+difY)>>16)%TWin.Position.y1)+GlobalTextAddrY+TWin.Position.y0)<<10)+\r
- (((posX+difX)>>16)%TWin.Position.x1)+GlobalTextAddrX+TWin.Position.x0])<<16)|\r
- psxVuw[((((posY>>16)%TWin.Position.y1)+GlobalTextAddrY)<<10)+TWin.Position.y0+\r
- ((posX>>16)%TWin.Position.x1)+GlobalTextAddrX+TWin.Position.x0]);\r
-\r
- posX+=difX2;\r
- posY+=difY2;\r
- }\r
- if(j==xmax)\r
- GetTextureTransColG_S(&psxVuw[(i<<10)+j],\r
- psxVuw[((((posY>>16)%TWin.Position.y1)+GlobalTextAddrY+TWin.Position.y0)<<10)+\r
- ((posX>>16)%TWin.Position.x1)+GlobalTextAddrX+TWin.Position.x0]);\r
- }\r
- if(NextRow_FT4()) return;\r
- }\r
- return;\r
- }\r
-\r
-#endif\r
-\r
- for (i=ymin;i<=ymax;i++)\r
- {\r
- xmin=(left_x >> 16);\r
- xmax=(right_x >> 16);\r
-\r
- if(xmax>=xmin)\r
- {\r
- posX=left_u;\r
- posY=left_v;\r
-\r
- num=(xmax-xmin);\r
- if(num==0) num=1;\r
- difX=(right_u-posX)/num;\r
- difY=(right_v-posY)/num;\r
- difX2=difX<<1;\r
- difY2=difY<<1;\r
-\r
- if(xmin<drawX)\r
- {j=drawX-xmin;xmin=drawX;posX+=j*difX;posY+=j*difY;}\r
- xmax--;if(drawW<xmax) xmax=drawW;\r
-\r
- for(j=xmin;j<xmax;j+=2)\r
- {\r
- GetTextureTransColG32_SPR((uint32_t *)&psxVuw[(i<<10)+j],\r
- (((int)psxVuw[(((((posY+difY)>>16)%TWin.Position.y1)+GlobalTextAddrY+TWin.Position.y0)<<10)+\r
- (((posX+difX)>>16)%TWin.Position.x1)+GlobalTextAddrX+TWin.Position.x0])<<16)|\r
- psxVuw[((((posY>>16)%TWin.Position.y1)+GlobalTextAddrY+TWin.Position.y0)<<10)+\r
- ((posX>>16)%TWin.Position.x1)+GlobalTextAddrX+TWin.Position.x0]);\r
-\r
- posX+=difX2;\r
- posY+=difY2;\r
- }\r
- if(j==xmax)\r
- GetTextureTransColG_SPR(&psxVuw[(i<<10)+j],\r
- psxVuw[((((posY>>16)%TWin.Position.y1)+GlobalTextAddrY+TWin.Position.y0)<<10)+\r
- ((posX>>16)%TWin.Position.x1)+GlobalTextAddrX+TWin.Position.x0]);\r
- }\r
- if(NextRow_FT4()) return;\r
- }\r
-}\r
-\r
-////////////////////////////////////////////////////////////////////////\r
-// POLY 3/4 G-SHADED\r
-////////////////////////////////////////////////////////////////////////\r
- \r
-__inline void drawPoly3Gi(short x1,short y1,short x2,short y2,short x3,short y3, int rgb1, int rgb2, int rgb3)\r
-{\r
- int i,j,xmin,xmax,ymin,ymax;\r
- int cR1,cG1,cB1;\r
- int difR,difB,difG,difR2,difB2,difG2;\r
-\r
- if(x1>drawW && x2>drawW && x3>drawW) return;\r
- if(y1>drawH && y2>drawH && y3>drawH) return;\r
- if(x1<drawX && x2<drawX && x3<drawX) return;\r
- if(y1<drawY && y2<drawY && y3<drawY) return;\r
- if(drawY>=drawH) return;\r
- if(drawX>=drawW) return; \r
-\r
- if(!SetupSections_G(x1,y1,x2,y2,x3,y3,rgb1,rgb2,rgb3)) return;\r
-\r
- ymax=Ymax;\r
-\r
- for(ymin=Ymin;ymin<drawY;ymin++)\r
- if(NextRow_G()) return;\r
-\r
- difR=delta_right_R;\r
- difG=delta_right_G;\r
- difB=delta_right_B;\r
- difR2=difR<<1;\r
- difG2=difG<<1;\r
- difB2=difB<<1;\r
-\r
-#ifdef FASTSOLID\r
-\r
- if(!bCheckMask && !DrawSemiTrans && iDither!=2)\r
- {\r
- for (i=ymin;i<=ymax;i++)\r
- {\r
- xmin=(left_x >> 16);\r
- xmax=(right_x >> 16)-1;if(drawW<xmax) xmax=drawW;\r
-\r
- if(xmax>=xmin)\r
- {\r
- cR1=left_R;\r
- cG1=left_G;\r
- cB1=left_B;\r
-\r
- if(xmin<drawX)\r
- {j=drawX-xmin;xmin=drawX;cR1+=j*difR;cG1+=j*difG;cB1+=j*difB;}\r
-\r
- for(j=xmin;j<xmax;j+=2) \r
- {\r
- *((uint32_t *)&psxVuw[(i<<10)+j])=\r
- ((((cR1+difR) <<7)&0x7c000000)|(((cG1+difG) << 2)&0x03e00000)|(((cB1+difB)>>3)&0x001f0000)|\r
- (((cR1) >> 9)&0x7c00)|(((cG1) >> 14)&0x03e0)|(((cB1) >> 19)&0x001f))|lSetMask;\r
- \r
- cR1+=difR2;\r
- cG1+=difG2;\r
- cB1+=difB2;\r
- }\r
- if(j==xmax)\r
- psxVuw[(i<<10)+j]=(((cR1 >> 9)&0x7c00)|((cG1 >> 14)&0x03e0)|((cB1 >> 19)&0x001f))|sSetMask;\r
- }\r
- if(NextRow_G()) return;\r
- }\r
- return;\r
- }\r
-\r
-#endif\r
-\r
- if(iDither==2)\r
- for (i=ymin;i<=ymax;i++)\r
- {\r
- xmin=(left_x >> 16);\r
- xmax=(right_x >> 16)-1;if(drawW<xmax) xmax=drawW;\r
-\r
- if(xmax>=xmin)\r
- {\r
- cR1=left_R;\r
- cG1=left_G;\r
- cB1=left_B;\r
-\r
- if(xmin<drawX)\r
- {j=drawX-xmin;xmin=drawX;cR1+=j*difR;cG1+=j*difG;cB1+=j*difB;}\r
-\r
- for(j=xmin;j<=xmax;j++) \r
- {\r
- GetShadeTransCol_Dither(&psxVuw[(i<<10)+j],(cB1>>16),(cG1>>16),(cR1>>16));\r
-\r
- cR1+=difR;\r
- cG1+=difG;\r
- cB1+=difB;\r
- }\r
- }\r
- if(NextRow_G()) return;\r
- }\r
- else\r
- for (i=ymin;i<=ymax;i++)\r
- {\r
- xmin=(left_x >> 16);\r
- xmax=(right_x >> 16)-1;if(drawW<xmax) xmax=drawW;\r
-\r
- if(xmax>=xmin)\r
- {\r
- cR1=left_R;\r
- cG1=left_G;\r
- cB1=left_B;\r
-\r
- if(xmin<drawX)\r
- {j=drawX-xmin;xmin=drawX;cR1+=j*difR;cG1+=j*difG;cB1+=j*difB;}\r
-\r
- for(j=xmin;j<=xmax;j++) \r
- {\r
- GetShadeTransCol(&psxVuw[(i<<10)+j],((cR1 >> 9)&0x7c00)|((cG1 >> 14)&0x03e0)|((cB1 >> 19)&0x001f));\r
-\r
- cR1+=difR;\r
- cG1+=difG;\r
- cB1+=difB;\r
- }\r
- }\r
- if(NextRow_G()) return;\r
- }\r
-\r
-}\r
-\r
-////////////////////////////////////////////////////////////////////////\r
-\r
-void drawPoly3G(int rgb1, int rgb2, int rgb3)\r
-{\r
- drawPoly3Gi(lx0,ly0,lx1,ly1,lx2,ly2,rgb1,rgb2,rgb3);\r
-}\r
-\r
-// draw two g-shaded tris for right psx shading emulation\r
-\r
-void drawPoly4G(int rgb1, int rgb2, int rgb3, int rgb4)\r
-{\r
- drawPoly3Gi(lx1,ly1,lx3,ly3,lx2,ly2,\r
- rgb2,rgb4,rgb3);\r
- drawPoly3Gi(lx0,ly0,lx1,ly1,lx2,ly2,\r
- rgb1,rgb2,rgb3);\r
-}\r
-\r
-////////////////////////////////////////////////////////////////////////\r
-// POLY 3/4 G-SHADED TEX PAL4\r
-////////////////////////////////////////////////////////////////////////\r
-\r
-void drawPoly3TGEx4(short x1, short y1, short x2, short y2, short x3, short y3, short tx1, short ty1, short tx2, short ty2, short tx3, short ty3, short clX, short clY,int col1, int col2, int col3)\r
-{\r
- int i,j,xmin,xmax,ymin,ymax;\r
- int cR1,cG1,cB1;\r
- int difR,difB,difG,difR2,difB2,difG2;\r
- int difX, difY,difX2, difY2;\r
- int posX,posY,YAdjust,clutP,XAdjust;\r
- short tC1,tC2;\r
-\r
- if(x1>drawW && x2>drawW && x3>drawW) return;\r
- if(y1>drawH && y2>drawH && y3>drawH) return;\r
- if(x1<drawX && x2<drawX && x3<drawX) return;\r
- if(y1<drawY && y2<drawY && y3<drawY) return;\r
- if(drawY>=drawH) return;\r
- if(drawX>=drawW) return; \r
-\r
- if(!SetupSections_GT(x1,y1,x2,y2,x3,y3,tx1,ty1,tx2,ty2,tx3,ty3,col1,col2,col3)) return;\r
-\r
- ymax=Ymax;\r
-\r
- for(ymin=Ymin;ymin<drawY;ymin++)\r
- if(NextRow_GT()) return;\r
-\r
- clutP=(clY<<10)+clX;\r
-\r
- YAdjust=((GlobalTextAddrY)<<11)+(GlobalTextAddrX<<1);\r
-\r
- difR=delta_right_R;\r
- difG=delta_right_G;\r
- difB=delta_right_B;\r
- difR2=difR<<1;\r
- difG2=difG<<1;\r
- difB2=difB<<1;\r
-\r
- difX=delta_right_u;difX2=difX<<1;\r
- difY=delta_right_v;difY2=difY<<1;\r
-\r
-#ifdef FASTSOLID\r
-\r
- if(!bCheckMask && !DrawSemiTrans && !iDither)\r
- {\r
- for (i=ymin;i<=ymax;i++)\r
- {\r
- xmin=((left_x) >> 16);\r
- xmax=((right_x) >> 16)-1; //!!!!!!!!!!!!!\r
- if(drawW<xmax) xmax=drawW;\r
-\r
- if(xmax>=xmin)\r
- {\r
- posX=left_u;\r
- posY=left_v;\r
- cR1=left_R;\r
- cG1=left_G;\r
- cB1=left_B;\r
-\r
- if(xmin<drawX)\r
- {j=drawX-xmin;xmin=drawX;posX+=j*difX;posY+=j*difY;cR1+=j*difR;cG1+=j*difG;cB1+=j*difB;}\r
-\r
- for(j=xmin;j<xmax;j+=2) \r
- {\r
- XAdjust=(posX>>16);\r
- tC1 = psxVub[((posY>>5)&(int)0xFFFFF800)+YAdjust+(XAdjust>>1)];\r
- tC1=(tC1>>((XAdjust&1)<<2))&0xf;\r
- XAdjust=((posX+difX)>>16);\r
- tC2 = psxVub[(((posY+difY)>>5)&(int)0xFFFFF800)+YAdjust+\r
- (XAdjust>>1)];\r
- tC2=(tC2>>((XAdjust&1)<<2))&0xf;\r
-\r
- GetTextureTransColGX32_S((uint32_t *)&psxVuw[(i<<10)+j],\r
- psxVuw[clutP+tC1]|\r
- ((int)psxVuw[clutP+tC2])<<16,\r
- (cB1>>16)|((cB1+difB)&0xff0000),\r
- (cG1>>16)|((cG1+difG)&0xff0000),\r
- (cR1>>16)|((cR1+difR)&0xff0000));\r
- posX+=difX2;\r
- posY+=difY2;\r
- cR1+=difR2;\r
- cG1+=difG2;\r
- cB1+=difB2;\r
- }\r
- if(j==xmax)\r
- {\r
- XAdjust=(posX>>16);\r
- tC1 = psxVub[((posY>>5)&(int)0xFFFFF800)+YAdjust+(XAdjust>>1)];\r
- tC1=(tC1>>((XAdjust&1)<<2))&0xf;\r
- GetTextureTransColGX_S(&psxVuw[(i<<10)+j], \r
- psxVuw[clutP+tC1],\r
- (cB1>>16),(cG1>>16),(cR1>>16));\r
- }\r
- }\r
- if(NextRow_GT()) \r
- {\r
- return;\r
- }\r
- }\r
- return;\r
- }\r
-\r
-#endif\r
-\r
- for (i=ymin;i<=ymax;i++)\r
- {\r
- xmin=(left_x >> 16);\r
- xmax=(right_x >> 16)-1; //!!!!!!!!!!!!!!!!\r
- if(drawW<xmax) xmax=drawW;\r
-\r
- if(xmax>=xmin)\r
- {\r
- posX=left_u;\r
- posY=left_v;\r
- cR1=left_R;\r
- cG1=left_G;\r
- cB1=left_B;\r
-\r
- if(xmin<drawX)\r
- {j=drawX-xmin;xmin=drawX;posX+=j*difX;posY+=j*difY;cR1+=j*difR;cG1+=j*difG;cB1+=j*difB;}\r
-\r
- for(j=xmin;j<=xmax;j++) \r
- {\r
- XAdjust=(posX>>16);\r
- tC1 = psxVub[((posY>>5)&(int)0xFFFFF800)+YAdjust+(XAdjust>>1)];\r
- tC1=(tC1>>((XAdjust&1)<<2))&0xf;\r
- if(iDither)\r
- GetTextureTransColGX_Dither(&psxVuw[(i<<10)+j], \r
- psxVuw[clutP+tC1],\r
- (cB1>>16),(cG1>>16),(cR1>>16));\r
- else\r
- GetTextureTransColGX(&psxVuw[(i<<10)+j], \r
- psxVuw[clutP+tC1],\r
- (cB1>>16),(cG1>>16),(cR1>>16));\r
- posX+=difX;\r
- posY+=difY;\r
- cR1+=difR;\r
- cG1+=difG;\r
- cB1+=difB;\r
- }\r
- }\r
- if(NextRow_GT()) \r
- {\r
- return;\r
- }\r
- }\r
-}\r
-\r
-////////////////////////////////////////////////////////////////////////\r
-\r
-void drawPoly3TGEx4_IL(short x1, short y1, short x2, short y2, short x3, short y3, short tx1, short ty1, short tx2, short ty2, short tx3, short ty3, short clX, short clY,int col1, int col2, int col3)\r
-{\r
- int i,j,xmin,xmax,ymin,ymax,n_xi,n_yi,TXV;\r
- int cR1,cG1,cB1;\r
- int difR,difB,difG,difR2,difB2,difG2;\r
- int difX, difY,difX2, difY2;\r
- int posX,posY,YAdjust,clutP,XAdjust;\r
- short tC1,tC2;\r
-\r
- if(x1>drawW && x2>drawW && x3>drawW) return;\r
- if(y1>drawH && y2>drawH && y3>drawH) return;\r
- if(x1<drawX && x2<drawX && x3<drawX) return;\r
- if(y1<drawY && y2<drawY && y3<drawY) return;\r
- if(drawY>=drawH) return;\r
- if(drawX>=drawW) return; \r
-\r
- if(!SetupSections_GT(x1,y1,x2,y2,x3,y3,tx1,ty1,tx2,ty2,tx3,ty3,col1,col2,col3)) return;\r
-\r
- ymax=Ymax;\r
-\r
- for(ymin=Ymin;ymin<drawY;ymin++)\r
- if(NextRow_GT()) return;\r
-\r
- clutP=(clY<<10)+clX;\r
-\r
- YAdjust=(GlobalTextAddrY<<10)+GlobalTextAddrX;\r
-\r
- difR=delta_right_R;\r
- difG=delta_right_G;\r
- difB=delta_right_B;\r
- difR2=difR<<1;\r
- difG2=difG<<1;\r
- difB2=difB<<1;\r
-\r
- difX=delta_right_u;difX2=difX<<1;\r
- difY=delta_right_v;difY2=difY<<1;\r
-\r
-#ifdef FASTSOLID\r
-\r
- if(!bCheckMask && !DrawSemiTrans && !iDither)\r
- {\r
- for (i=ymin;i<=ymax;i++)\r
- {\r
- xmin=((left_x) >> 16);\r
- xmax=((right_x) >> 16)-1; //!!!!!!!!!!!!!\r
- if(drawW<xmax) xmax=drawW;\r
-\r
- if(xmax>=xmin)\r
- {\r
- posX=left_u;\r
- posY=left_v;\r
- cR1=left_R;\r
- cG1=left_G;\r
- cB1=left_B;\r
-\r
- if(xmin<drawX)\r
- {j=drawX-xmin;xmin=drawX;posX+=j*difX;posY+=j*difY;cR1+=j*difR;cG1+=j*difG;cB1+=j*difB;}\r
-\r
- for(j=xmin;j<xmax;j+=2) \r
- {\r
- XAdjust=(posX>>16);\r
-\r
- TXV=posY>>16;\r
- n_xi = ( ( XAdjust >> 2 ) & ~0x3c ) + ( ( TXV << 2 ) & 0x3c );\r
- n_yi = ( TXV & ~0xf ) + ( ( XAdjust >> 4 ) & 0xf );\r
- \r
- tC1= (psxVuw[(n_yi<<10)+YAdjust+n_xi] >> ((XAdjust & 0x03)<<2)) & 0x0f ;\r
-\r
- XAdjust=((posX+difX)>>16);\r
-\r
- TXV=(posY+difY)>>16;\r
- n_xi = ( ( XAdjust >> 2 ) & ~0x3c ) + ( ( TXV << 2 ) & 0x3c );\r
- n_yi = ( TXV & ~0xf ) + ( ( XAdjust >> 4 ) & 0xf );\r
-\r
- tC2= (psxVuw[(n_yi<<10)+YAdjust+n_xi] >> ((XAdjust & 0x03)<<2)) & 0x0f ;\r
-\r
- GetTextureTransColGX32_S((uint32_t *)&psxVuw[(i<<10)+j],\r
- psxVuw[clutP+tC1]|\r
- ((int)psxVuw[clutP+tC2])<<16,\r
- (cB1>>16)|((cB1+difB)&0xff0000),\r
- (cG1>>16)|((cG1+difG)&0xff0000),\r
- (cR1>>16)|((cR1+difR)&0xff0000));\r
- posX+=difX2;\r
- posY+=difY2;\r
- cR1+=difR2;\r
- cG1+=difG2;\r
- cB1+=difB2;\r
- }\r
- if(j==xmax)\r
- {\r
- XAdjust=(posX>>16);\r
-\r
- TXV=posY>>16;\r
- n_xi = ( ( XAdjust >> 2 ) & ~0x3c ) + ( ( TXV << 2 ) & 0x3c );\r
- n_yi = ( TXV & ~0xf ) + ( ( XAdjust >> 4 ) & 0xf );\r
-\r
- tC1= (psxVuw[(n_yi<<10)+YAdjust+n_xi] >> ((XAdjust & 0x03)<<2)) & 0x0f ;\r
-\r
- GetTextureTransColGX_S(&psxVuw[(i<<10)+j], \r
- psxVuw[clutP+tC1],\r
- (cB1>>16),(cG1>>16),(cR1>>16));\r
- }\r
- }\r
- if(NextRow_GT()) \r
- {\r
- return;\r
- }\r
- }\r
- return;\r
- }\r
-\r
-#endif\r
-\r
- for (i=ymin;i<=ymax;i++)\r
- {\r
- xmin=(left_x >> 16);\r
- xmax=(right_x >> 16)-1; //!!!!!!!!!!!!!!!!\r
- if(drawW<xmax) xmax=drawW;\r
-\r
- if(xmax>=xmin)\r
- {\r
- posX=left_u;\r
- posY=left_v;\r
- cR1=left_R;\r
- cG1=left_G;\r
- cB1=left_B;\r
-\r
- if(xmin<drawX)\r
- {j=drawX-xmin;xmin=drawX;posX+=j*difX;posY+=j*difY;cR1+=j*difR;cG1+=j*difG;cB1+=j*difB;}\r
-\r
- for(j=xmin;j<=xmax;j++) \r
- {\r
- XAdjust=(posX>>16);\r
-\r
- TXV=posY>>16;\r
- n_xi = ( ( XAdjust >> 2 ) & ~0x3c ) + ( ( TXV << 2 ) & 0x3c );\r
- n_yi = ( TXV & ~0xf ) + ( ( XAdjust >> 4 ) & 0xf );\r
-\r
- tC1= (psxVuw[(n_yi<<10)+YAdjust+n_xi] >> ((XAdjust & 0x03)<<2)) & 0x0f ;\r
-\r
- if(iDither)\r
- GetTextureTransColGX_Dither(&psxVuw[(i<<10)+j], \r
- psxVuw[clutP+tC1],\r
- (cB1>>16),(cG1>>16),(cR1>>16));\r
- else\r
- GetTextureTransColGX(&psxVuw[(i<<10)+j], \r
- psxVuw[clutP+tC1],\r
- (cB1>>16),(cG1>>16),(cR1>>16));\r
- posX+=difX;\r
- posY+=difY;\r
- cR1+=difR;\r
- cG1+=difG;\r
- cB1+=difB;\r
- }\r
- }\r
- if(NextRow_GT()) \r
- {\r
- return;\r
- }\r
- }\r
-}\r
-\r
-////////////////////////////////////////////////////////////////////////\r
-\r
-void drawPoly3TGEx4_TW(short x1, short y1, short x2, short y2, short x3, short y3, short tx1, short ty1, short tx2, short ty2, short tx3, short ty3, short clX, short clY, int col1, int col2, int col3)\r
-{\r
- int i, j, xmin, xmax, ymin, ymax;\r
- int cR1, cG1, cB1;\r
- int difR, difB, difG, difR2, difB2, difG2;\r
- int difX, difY,difX2, difY2;\r
- int posX, posY, YAdjust, clutP, XAdjust;\r
- short tC1,tC2;\r
-\r
- if(x1>drawW && x2>drawW && x3>drawW) return;\r
- if(y1>drawH && y2>drawH && y3>drawH) return;\r
- if(x1<drawX && x2<drawX && x3<drawX) return;\r
- if(y1<drawY && y2<drawY && y3<drawY) return;\r
- if(drawY>=drawH) return;\r
- if(drawX>=drawW) return; \r
-\r
- if(!SetupSections_GT(x1,y1,x2,y2,x3,y3,tx1,ty1,tx2,ty2,tx3,ty3,col1,col2,col3)) return;\r
-\r
- ymax=Ymax;\r
-\r
- for(ymin=Ymin;ymin<drawY;ymin++)\r
- if(NextRow_GT()) return;\r
-\r
- clutP=(clY<<10)+clX;\r
-\r
- YAdjust=((GlobalTextAddrY)<<11)+(GlobalTextAddrX<<1);\r
- YAdjust+=(TWin.Position.y0<<11)+(TWin.Position.x0>>1);\r
-\r
- difR=delta_right_R;\r
- difG=delta_right_G;\r
- difB=delta_right_B;\r
- difR2=difR<<1;\r
- difG2=difG<<1;\r
- difB2=difB<<1;\r
-\r
- difX=delta_right_u;difX2=difX<<1;\r
- difY=delta_right_v;difY2=difY<<1;\r
-\r
-#ifdef FASTSOLID\r
-\r
- if(!bCheckMask && !DrawSemiTrans && !iDither)\r
- {\r
- for (i=ymin;i<=ymax;i++)\r
- {\r
- xmin=((left_x) >> 16);\r
- xmax=((right_x) >> 16)-1; //!!!!!!!!!!!!!\r
- if(drawW<xmax) xmax=drawW;\r
-\r
- if(xmax>=xmin)\r
- {\r
- posX=left_u;\r
- posY=left_v;\r
- cR1=left_R;\r
- cG1=left_G;\r
- cB1=left_B;\r
-\r
- if(xmin<drawX)\r
- {j=drawX-xmin;xmin=drawX;posX+=j*difX;posY+=j*difY;cR1+=j*difR;cG1+=j*difG;cB1+=j*difB;}\r
-\r
- for(j=xmin;j<xmax;j+=2) \r
- {\r
- XAdjust=(posX>>16)%TWin.Position.x1;\r
- tC1 = psxVub[(((posY>>16)%TWin.Position.y1)<<11)+\r
- YAdjust+(XAdjust>>1)];\r
- tC1=(tC1>>((XAdjust&1)<<2))&0xf;\r
- XAdjust=((posX+difX)>>16)%TWin.Position.x1;\r
- tC2 = psxVub[((((posY+difY)>>16)%TWin.Position.y1)<<11)+\r
- YAdjust+(XAdjust>>1)];\r
- tC2=(tC2>>((XAdjust&1)<<2))&0xf;\r
- GetTextureTransColGX32_S((uint32_t *)&psxVuw[(i<<10)+j],\r
- psxVuw[clutP+tC1]|\r
- ((int)psxVuw[clutP+tC2])<<16,\r
- (cB1>>16)|((cB1+difB)&0xff0000),\r
- (cG1>>16)|((cG1+difG)&0xff0000),\r
- (cR1>>16)|((cR1+difR)&0xff0000));\r
- posX+=difX2;\r
- posY+=difY2;\r
- cR1+=difR2;\r
- cG1+=difG2;\r
- cB1+=difB2;\r
- }\r
- if(j==xmax)\r
- {\r
- XAdjust=(posX>>16)%TWin.Position.x1;\r
- tC1 = psxVub[(((posY>>16)%TWin.Position.y1)<<11)+\r
- YAdjust+(XAdjust>>1)];\r
- tC1=(tC1>>((XAdjust&1)<<2))&0xf;\r
- GetTextureTransColGX_S(&psxVuw[(i<<10)+j], \r
- psxVuw[clutP+tC1],\r
- (cB1>>16),(cG1>>16),(cR1>>16));\r
- }\r
- }\r
- if(NextRow_GT()) \r
- {\r
- return;\r
- }\r
- }\r
- return;\r
- }\r
-\r
-#endif\r
-\r
- for (i=ymin;i<=ymax;i++)\r
- {\r
- xmin=(left_x >> 16);\r
- xmax=(right_x >> 16)-1; //!!!!!!!!!!!!!!!!\r
- if(drawW<xmax) xmax=drawW;\r
-\r
- if(xmax>=xmin)\r
- {\r
- posX=left_u;\r
- posY=left_v;\r
- cR1=left_R;\r
- cG1=left_G;\r
- cB1=left_B;\r
-\r
- if(xmin<drawX)\r
- {j=drawX-xmin;xmin=drawX;posX+=j*difX;posY+=j*difY;cR1+=j*difR;cG1+=j*difG;cB1+=j*difB;}\r
-\r
- for(j=xmin;j<=xmax;j++) \r
- {\r
- XAdjust=(posX>>16)%TWin.Position.x1;\r
- tC1 = psxVub[(((posY>>16)%TWin.Position.y1)<<11)+\r
- YAdjust+(XAdjust>>1)];\r
- tC1=(tC1>>((XAdjust&1)<<2))&0xf;\r
- if(iDither)\r
- GetTextureTransColGX_Dither(&psxVuw[(i<<10)+j], \r
- psxVuw[clutP+tC1],\r
- (cB1>>16),(cG1>>16),(cR1>>16));\r
- else\r
- GetTextureTransColGX(&psxVuw[(i<<10)+j], \r
- psxVuw[clutP+tC1],\r
- (cB1>>16),(cG1>>16),(cR1>>16));\r
- posX+=difX;\r
- posY+=difY;\r
- cR1+=difR;\r
- cG1+=difG;\r
- cB1+=difB;\r
- }\r
- }\r
- if(NextRow_GT()) \r
- {\r
- return;\r
- }\r
- }\r
-}\r
-\r
-////////////////////////////////////////////////////////////////////////\r
-\r
-// note: the psx is doing g-shaded quads as two g-shaded tris,\r
-// like the following func... sadly texturing is not 100%\r
-// correct that way, so small texture distortions can \r
-// happen... \r
-\r
-void drawPoly4TGEx4_TRI_IL(short x1, short y1, short x2, short y2, short x3, short y3, short x4, short y4, \r
- short tx1, short ty1, short tx2, short ty2, short tx3, short ty3, short tx4, short ty4, \r
- short clX, short clY,\r
- int col1, int col2, int col3, int col4)\r
-{\r
- drawPoly3TGEx4_IL(x2,y2,x3,y3,x4,y4,\r
- tx2,ty2,tx3,ty3,tx4,ty4,\r
- clX,clY,\r
- col2,col4,col3);\r
- drawPoly3TGEx4_IL(x1,y1,x2,y2,x4,y4,\r
- tx1,ty1,tx2,ty2,tx4,ty4,\r
- clX,clY,\r
- col1,col2,col3);\r
-}\r
-\r
-#ifdef POLYQUAD3GT\r
-\r
-void drawPoly4TGEx4_TRI(short x1, short y1, short x2, short y2, short x3, short y3, short x4, short y4, \r
- short tx1, short ty1, short tx2, short ty2, short tx3, short ty3, short tx4, short ty4, \r
- short clX, short clY,\r
- int col1, int col2, int col3, int col4)\r
-{\r
- drawPoly3TGEx4(x2,y2,x3,y3,x4,y4,\r
- tx2,ty2,tx3,ty3,tx4,ty4,\r
- clX,clY,\r
- col2,col4,col3);\r
- drawPoly3TGEx4(x1,y1,x2,y2,x4,y4,\r
- tx1,ty1,tx2,ty2,tx4,ty4,\r
- clX,clY,\r
- col1,col2,col3);\r
-}\r
-\r
-#endif\r
- \r
-////////////////////////////////////////////////////////////////////////\r
-\r
-void drawPoly4TGEx4(short x1, short y1, short x2, short y2, short x3, short y3, short x4, short y4, \r
- short tx1, short ty1, short tx2, short ty2, short tx3, short ty3, short tx4, short ty4, \r
- short clX, short clY,\r
- int col1, int col2, int col4, int col3)\r
-{\r
- int num; \r
- int i,j,xmin,xmax,ymin,ymax;\r
- int cR1,cG1,cB1;\r
- int difR,difB,difG,difR2,difB2,difG2;\r
- int difX, difY, difX2, difY2;\r
- int posX,posY,YAdjust,clutP,XAdjust;\r
- short tC1,tC2;\r
-\r
- if(x1>drawW && x2>drawW && x3>drawW && x4>drawW) return;\r
- if(y1>drawH && y2>drawH && y3>drawH && y4>drawH) return;\r
- if(x1<drawX && x2<drawX && x3<drawX && x4<drawX) return;\r
- if(y1<drawY && y2<drawY && y3<drawY && y4<drawY) return;\r
- if(drawY>=drawH) return;\r
- if(drawX>=drawW) return; \r
-\r
- if(!SetupSections_GT4(x1,y1,x2,y2,x3,y3,x4,y4,tx1,ty1,tx2,ty2,tx3,ty3,tx4,ty4,col1,col2,col3,col4)) return;\r
-\r
- ymax=Ymax;\r
-\r
- for(ymin=Ymin;ymin<drawY;ymin++)\r
- if(NextRow_GT4()) return;\r
-\r
- clutP=(clY<<10)+clX;\r
-\r
- YAdjust=((GlobalTextAddrY)<<11)+(GlobalTextAddrX<<1);\r
-\r
-\r
-#ifdef FASTSOLID\r
-\r
- if(!bCheckMask && !DrawSemiTrans && !iDither)\r
- {\r
- for (i=ymin;i<=ymax;i++)\r
- {\r
- xmin=(left_x >> 16);\r
- xmax=(right_x >> 16);\r
-\r
- if(xmax>=xmin)\r
- {\r
- posX=left_u;\r
- posY=left_v;\r
-\r
- num=(xmax-xmin);\r
- if(num==0) num=1;\r
- difX=(right_u-posX)/num;\r
- difY=(right_v-posY)/num;\r
- difX2=difX<<1;\r
- difY2=difY<<1;\r
-\r
- cR1=left_R;\r
- cG1=left_G;\r
- cB1=left_B;\r
- difR=(right_R-cR1)/num;\r
- difG=(right_G-cG1)/num;\r
- difB=(right_B-cB1)/num;\r
- difR2=difR<<1;\r
- difG2=difG<<1;\r
- difB2=difB<<1;\r
-\r
- if(xmin<drawX)\r
- {j=drawX-xmin;xmin=drawX;posX+=j*difX;posY+=j*difY;cR1+=j*difR;cG1+=j*difG;cB1+=j*difB;}\r
- xmax--;if(drawW<xmax) xmax=drawW;\r
-\r
- for(j=xmin;j<xmax;j+=2)\r
- {\r
- XAdjust=(posX>>16);\r
- tC1 = psxVub[((posY>>5)&(int)0xFFFFF800)+YAdjust+(XAdjust>>1)];\r
- tC1=(tC1>>((XAdjust&1)<<2))&0xf;\r
- XAdjust=((posX+difX)>>16);\r
- tC2 = psxVub[(((posY+difY)>>5)&(int)0xFFFFF800)+YAdjust+\r
- (XAdjust>>1)];\r
- tC2=(tC2>>((XAdjust&1)<<2))&0xf;\r
-\r
- GetTextureTransColGX32_S((uint32_t *)&psxVuw[(i<<10)+j],\r
- psxVuw[clutP+tC1]|\r
- ((int)psxVuw[clutP+tC2])<<16,\r
- (cB1>>16)|((cB1+difB)&0xff0000),\r
- (cG1>>16)|((cG1+difG)&0xff0000),\r
- (cR1>>16)|((cR1+difR)&0xff0000));\r
- posX+=difX2;\r
- posY+=difY2;\r
- cR1+=difR2;\r
- cG1+=difG2;\r
- cB1+=difB2;\r
- }\r
- if(j==xmax)\r
- {\r
- XAdjust=(posX>>16);\r
- tC1 = psxVub[((posY>>5)&(int)0xFFFFF800)+YAdjust+\r
- (XAdjust>>1)];\r
- tC1=(tC1>>((XAdjust&1)<<2))&0xf;\r
-\r
- GetTextureTransColGX_S(&psxVuw[(i<<10)+j], \r
- psxVuw[clutP+tC1],\r
- (cB1>>16),(cG1>>16),(cR1>>16));\r
- }\r
- }\r
- if(NextRow_GT4()) return;\r
- }\r
- return;\r
- }\r
-\r
-#endif\r
-\r
- for (i=ymin;i<=ymax;i++)\r
- {\r
- xmin=(left_x >> 16);\r
- xmax=(right_x >> 16);\r
-\r
- if(xmax>=xmin)\r
- {\r
- posX=left_u;\r
- posY=left_v;\r
-\r
- num=(xmax-xmin);\r
- if(num==0) num=1;\r
- difX=(right_u-posX)/num;\r
- difY=(right_v-posY)/num;\r
- difX2=difX<<1;\r
- difY2=difY<<1;\r
-\r
- cR1=left_R;\r
- cG1=left_G;\r
- cB1=left_B;\r
- difR=(right_R-cR1)/num;\r
- difG=(right_G-cG1)/num;\r
- difB=(right_B-cB1)/num;\r
- difR2=difR<<1;\r
- difG2=difG<<1;\r
- difB2=difB<<1;\r
-\r
- if(xmin<drawX)\r
- {j=drawX-xmin;xmin=drawX;posX+=j*difX;posY+=j*difY;cR1+=j*difR;cG1+=j*difG;cB1+=j*difB;}\r
- xmax--;if(drawW<xmax) xmax=drawW;\r
-\r
- for(j=xmin;j<=xmax;j++)\r
- {\r
- XAdjust=(posX>>16);\r
- tC1 = psxVub[((posY>>5)&(int)0xFFFFF800)+YAdjust+\r
- (XAdjust>>1)];\r
- tC1=(tC1>>((XAdjust&1)<<2))&0xf;\r
- if(iDither)\r
- GetTextureTransColGX_Dither(&psxVuw[(i<<10)+j], \r
- psxVuw[clutP+tC1],\r
- (cB1>>16),(cG1>>16),(cR1>>16));\r
- else\r
- GetTextureTransColGX(&psxVuw[(i<<10)+j], \r
- psxVuw[clutP+tC1],\r
- (cB1>>16),(cG1>>16),(cR1>>16));\r
- posX+=difX;\r
- posY+=difY;\r
- cR1+=difR;\r
- cG1+=difG;\r
- cB1+=difB;\r
- }\r
- }\r
- if(NextRow_GT4()) return;\r
- }\r
-}\r
-\r
-////////////////////////////////////////////////////////////////////////\r
-\r
-void drawPoly4TGEx4_TW(short x1, short y1, short x2, short y2, short x3, short y3, short x4, short y4, \r
- short tx1, short ty1, short tx2, short ty2, short tx3, short ty3, short tx4, short ty4, \r
- short clX, short clY,\r
- int col1, int col2, int col3, int col4)\r
-{\r
- drawPoly3TGEx4_TW(x2,y2,x3,y3,x4,y4,\r
- tx2,ty2,tx3,ty3,tx4,ty4,\r
- clX,clY,\r
- col2,col4,col3);\r
-\r
- drawPoly3TGEx4_TW(x1,y1,x2,y2,x4,y4,\r
- tx1,ty1,tx2,ty2,tx4,ty4,\r
- clX,clY,\r
- col1,col2,col3);\r
-}\r
-\r
-////////////////////////////////////////////////////////////////////////\r
-// POLY 3/4 G-SHADED TEX PAL8\r
-////////////////////////////////////////////////////////////////////////\r
-\r
-void drawPoly3TGEx8(short x1, short y1, short x2, short y2, short x3, short y3, short tx1, short ty1, short tx2, short ty2, short tx3, short ty3, short clX, short clY, int col1, int col2, int col3)\r
-{\r
- int i,j,xmin,xmax,ymin,ymax;\r
- int cR1,cG1,cB1;\r
- int difR,difB,difG,difR2,difB2,difG2;\r
- int difX, difY,difX2, difY2;\r
- int posX,posY,YAdjust,clutP;\r
- short tC1,tC2;\r
-\r
- if(x1>drawW && x2>drawW && x3>drawW) return;\r
- if(y1>drawH && y2>drawH && y3>drawH) return;\r
- if(x1<drawX && x2<drawX && x3<drawX) return;\r
- if(y1<drawY && y2<drawY && y3<drawY) return;\r
- if(drawY>=drawH) return;\r
- if(drawX>=drawW) return; \r
-\r
- if(!SetupSections_GT(x1,y1,x2,y2,x3,y3,tx1,ty1,tx2,ty2,tx3,ty3,col1,col2,col3)) return;\r
-\r
- ymax=Ymax;\r
-\r
- for(ymin=Ymin;ymin<drawY;ymin++)\r
- if(NextRow_GT()) return;\r
-\r
- clutP=(clY<<10)+clX;\r
-\r
- YAdjust=((GlobalTextAddrY)<<11)+(GlobalTextAddrX<<1);\r
-\r
- difR=delta_right_R;\r
- difG=delta_right_G;\r
- difB=delta_right_B;\r
- difR2=difR<<1;\r
- difG2=difG<<1;\r
- difB2=difB<<1;\r
- difX=delta_right_u;difX2=difX<<1;\r
- difY=delta_right_v;difY2=difY<<1;\r
-\r
-#ifdef FASTSOLID\r
-\r
- if(!bCheckMask && !DrawSemiTrans && !iDither)\r
- {\r
- for (i=ymin;i<=ymax;i++)\r
- {\r
- xmin=(left_x >> 16);\r
- xmax=(right_x >> 16)-1; // !!!!!!!!!!!!!\r
- if(drawW<xmax) xmax=drawW;\r
-\r
- if(xmax>=xmin)\r
- {\r
- posX=left_u;\r
- posY=left_v;\r
- cR1=left_R;\r
- cG1=left_G;\r
- cB1=left_B;\r
-\r
- if(xmin<drawX)\r
- {j=drawX-xmin;xmin=drawX;posX+=j*difX;posY+=j*difY;cR1+=j*difR;cG1+=j*difG;cB1+=j*difB;}\r
-\r
- for(j=xmin;j<xmax;j+=2)\r
- {\r
- tC1 = psxVub[((posY>>5)&(int)0xFFFFF800)+YAdjust+((posX>>16))];\r
- tC2 = psxVub[(((posY+difY)>>5)&(int)0xFFFFF800)+YAdjust+\r
- (((posX+difX)>>16))];\r
- GetTextureTransColGX32_S((uint32_t *)&psxVuw[(i<<10)+j],\r
- psxVuw[clutP+tC1]|\r
- ((int)psxVuw[clutP+tC2])<<16,\r
- (cB1>>16)|((cB1+difB)&0xff0000),\r
- (cG1>>16)|((cG1+difG)&0xff0000),\r
- (cR1>>16)|((cR1+difR)&0xff0000));\r
- posX+=difX2;\r
- posY+=difY2;\r
- cR1+=difR2;\r
- cG1+=difG2;\r
- cB1+=difB2;\r
- }\r
- if(j==xmax)\r
- {\r
- tC1 = psxVub[((posY>>5)&(int)0xFFFFF800)+YAdjust+((posX>>16))];\r
- GetTextureTransColGX_S(&psxVuw[(i<<10)+j], \r
- psxVuw[clutP+tC1],\r
- (cB1>>16),(cG1>>16),(cR1>>16));\r
- }\r
- }\r
- if(NextRow_GT()) \r
- {\r
- return;\r
- }\r
- }\r
- return;\r
- }\r
-\r
-#endif\r
-\r
- for (i=ymin;i<=ymax;i++)\r
- {\r
- xmin=(left_x >> 16);\r
- xmax=(right_x >> 16)-1; //!!!!!!!!!!!!!!!!!!!!!!!\r
- if(drawW<xmax) xmax=drawW;\r
-\r
- if(xmax>=xmin)\r
- {\r
- posX=left_u;\r
- posY=left_v;\r
- cR1=left_R;\r
- cG1=left_G;\r
- cB1=left_B;\r
-\r
- if(xmin<drawX)\r
- {j=drawX-xmin;xmin=drawX;posX+=j*difX;posY+=j*difY;cR1+=j*difR;cG1+=j*difG;cB1+=j*difB;}\r
-\r
- for(j=xmin;j<=xmax;j++)\r
- {\r
- tC1 = psxVub[((posY>>5)&(int)0xFFFFF800)+YAdjust+((posX>>16))];\r
- if(iDither)\r
- GetTextureTransColGX_Dither(&psxVuw[(i<<10)+j], \r
- psxVuw[clutP+tC1],\r
- (cB1>>16),(cG1>>16),(cR1>>16));\r
- else\r
- GetTextureTransColGX(&psxVuw[(i<<10)+j], \r
- psxVuw[clutP+tC1],\r
- (cB1>>16),(cG1>>16),(cR1>>16));\r
- posX+=difX;\r
- posY+=difY;\r
- cR1+=difR;\r
- cG1+=difG;\r
- cB1+=difB;\r
- }\r
- }\r
- if(NextRow_GT()) \r
- {\r
- return;\r
- }\r
- }\r
-}\r
-\r
-////////////////////////////////////////////////////////////////////////\r
-\r
-void drawPoly3TGEx8_IL(short x1, short y1, short x2, short y2, short x3, short y3, short tx1, short ty1, short tx2, short ty2, short tx3, short ty3, short clX, short clY, int col1, int col2, int col3)\r
-{\r
- int i,j,xmin,xmax,ymin,ymax,n_xi,n_yi,TXV,TXU;\r
- int cR1,cG1,cB1;\r
- int difR,difB,difG,difR2,difB2,difG2;\r
- int difX, difY,difX2, difY2;\r
- int posX,posY,YAdjust,clutP;\r
- short tC1,tC2;\r
-\r
- if(x1>drawW && x2>drawW && x3>drawW) return;\r
- if(y1>drawH && y2>drawH && y3>drawH) return;\r
- if(x1<drawX && x2<drawX && x3<drawX) return;\r
- if(y1<drawY && y2<drawY && y3<drawY) return;\r
- if(drawY>=drawH) return;\r
- if(drawX>=drawW) return; \r
-\r
- if(!SetupSections_GT(x1,y1,x2,y2,x3,y3,tx1,ty1,tx2,ty2,tx3,ty3,col1,col2,col3)) return;\r
-\r
- ymax=Ymax;\r
-\r
- for(ymin=Ymin;ymin<drawY;ymin++)\r
- if(NextRow_GT()) return;\r
-\r
- clutP=(clY<<10)+clX;\r
-\r
- YAdjust=(GlobalTextAddrY<<10)+GlobalTextAddrX;\r
-\r
- difR=delta_right_R;\r
- difG=delta_right_G;\r
- difB=delta_right_B;\r
- difR2=difR<<1;\r
- difG2=difG<<1;\r
- difB2=difB<<1;\r
- difX=delta_right_u;difX2=difX<<1;\r
- difY=delta_right_v;difY2=difY<<1;\r
-\r
-#ifdef FASTSOLID\r
-\r
- if(!bCheckMask && !DrawSemiTrans && !iDither)\r
- {\r
- for (i=ymin;i<=ymax;i++)\r
- {\r
- xmin=(left_x >> 16);\r
- xmax=(right_x >> 16)-1; // !!!!!!!!!!!!!\r
- if(drawW<xmax) xmax=drawW;\r
-\r
- if(xmax>=xmin)\r
- {\r
- posX=left_u;\r
- posY=left_v;\r
- cR1=left_R;\r
- cG1=left_G;\r
- cB1=left_B;\r
-\r
- if(xmin<drawX)\r
- {j=drawX-xmin;xmin=drawX;posX+=j*difX;posY+=j*difY;cR1+=j*difR;cG1+=j*difG;cB1+=j*difB;}\r
-\r
- for(j=xmin;j<xmax;j+=2)\r
- {\r
- TXU=posX>>16;\r
- TXV=posY>>16;\r
- n_xi = ( ( TXU >> 1 ) & ~0x78 ) + ( ( TXU << 2 ) & 0x40 ) + ( ( TXV << 3 ) & 0x38 );\r
- n_yi = ( TXV & ~0x7 ) + ( ( TXU >> 5 ) & 0x7 );\r
-\r
- tC1= (psxVuw[(n_yi<<10)+YAdjust+n_xi] >> ((TXU & 0x01)<<3)) & 0xff;\r
-\r
- TXU=(posX+difX)>>16;\r
- TXV=(posY+difY)>>16;\r
- n_xi = ( ( TXU >> 1 ) & ~0x78 ) + ( ( TXU << 2 ) & 0x40 ) + ( ( TXV << 3 ) & 0x38 );\r
- n_yi = ( TXV & ~0x7 ) + ( ( TXU >> 5 ) & 0x7 );\r
-\r
- tC2= (psxVuw[(n_yi<<10)+YAdjust+n_xi] >> ((TXU & 0x01)<<3)) & 0xff;\r
-\r
- GetTextureTransColGX32_S((uint32_t *)&psxVuw[(i<<10)+j],\r
- psxVuw[clutP+tC1]|\r
- ((int)psxVuw[clutP+tC2])<<16,\r
- (cB1>>16)|((cB1+difB)&0xff0000),\r
- (cG1>>16)|((cG1+difG)&0xff0000),\r
- (cR1>>16)|((cR1+difR)&0xff0000));\r
- posX+=difX2;\r
- posY+=difY2;\r
- cR1+=difR2;\r
- cG1+=difG2;\r
- cB1+=difB2;\r
- }\r
- if(j==xmax)\r
- {\r
- TXU=posX>>16;\r
- TXV=posY>>16;\r
- n_xi = ( ( TXU >> 1 ) & ~0x78 ) + ( ( TXU << 2 ) & 0x40 ) + ( ( TXV << 3 ) & 0x38 );\r
- n_yi = ( TXV & ~0x7 ) + ( ( TXU >> 5 ) & 0x7 );\r
-\r
- tC1= (psxVuw[(n_yi<<10)+YAdjust+n_xi] >> ((TXU & 0x01)<<3)) & 0xff;\r
-\r
- GetTextureTransColGX_S(&psxVuw[(i<<10)+j], \r
- psxVuw[clutP+tC1],\r
- (cB1>>16),(cG1>>16),(cR1>>16));\r
- }\r
- }\r
- if(NextRow_GT()) \r
- {\r
- return;\r
- }\r
- }\r
- return;\r
- }\r
-\r
-#endif\r
-\r
- for (i=ymin;i<=ymax;i++)\r
- {\r
- xmin=(left_x >> 16);\r
- xmax=(right_x >> 16)-1; //!!!!!!!!!!!!!!!!!!!!!!!\r
- if(drawW<xmax) xmax=drawW;\r
-\r
- if(xmax>=xmin)\r
- {\r
- posX=left_u;\r
- posY=left_v;\r
- cR1=left_R;\r
- cG1=left_G;\r
- cB1=left_B;\r
-\r
- if(xmin<drawX)\r
- {j=drawX-xmin;xmin=drawX;posX+=j*difX;posY+=j*difY;cR1+=j*difR;cG1+=j*difG;cB1+=j*difB;}\r
-\r
- for(j=xmin;j<=xmax;j++)\r
- {\r
- TXU=posX>>16;\r
- TXV=posY>>16;\r
- n_xi = ( ( TXU >> 1 ) & ~0x78 ) + ( ( TXU << 2 ) & 0x40 ) + ( ( TXV << 3 ) & 0x38 );\r
- n_yi = ( TXV & ~0x7 ) + ( ( TXU >> 5 ) & 0x7 );\r
-\r
- tC1= (psxVuw[(n_yi<<10)+YAdjust+n_xi] >> ((TXU & 0x01)<<3)) & 0xff;\r
-\r
- if(iDither)\r
- GetTextureTransColGX_Dither(&psxVuw[(i<<10)+j], \r
- psxVuw[clutP+tC1],\r
- (cB1>>16),(cG1>>16),(cR1>>16));\r
- else\r
- GetTextureTransColGX(&psxVuw[(i<<10)+j], \r
- psxVuw[clutP+tC1],\r
- (cB1>>16),(cG1>>16),(cR1>>16));\r
- posX+=difX;\r
- posY+=difY;\r
- cR1+=difR;\r
- cG1+=difG;\r
- cB1+=difB;\r
- }\r
- }\r
- if(NextRow_GT()) \r
- {\r
- return;\r
- }\r
- }\r
-}\r
-\r
-////////////////////////////////////////////////////////////////////////\r
-\r
-void drawPoly3TGEx8_TW(short x1, short y1, short x2, short y2, short x3, short y3, short tx1, short ty1, short tx2, short ty2, short tx3, short ty3, short clX, short clY, int col1, int col2, int col3)\r
-{\r
- int i,j,xmin,xmax,ymin,ymax;\r
- int cR1,cG1,cB1;\r
- int difR,difB,difG,difR2,difB2,difG2;\r
- int difX, difY,difX2, difY2;\r
- int posX,posY,YAdjust,clutP;\r
- short tC1,tC2;\r
-\r
- if(x1>drawW && x2>drawW && x3>drawW) return;\r
- if(y1>drawH && y2>drawH && y3>drawH) return;\r
- if(x1<drawX && x2<drawX && x3<drawX) return;\r
- if(y1<drawY && y2<drawY && y3<drawY) return;\r
- if(drawY>=drawH) return;\r
- if(drawX>=drawW) return; \r
-\r
- if(!SetupSections_GT(x1,y1,x2,y2,x3,y3,tx1,ty1,tx2,ty2,tx3,ty3,col1,col2,col3)) return;\r
-\r
- ymax=Ymax;\r
-\r
- for(ymin=Ymin;ymin<drawY;ymin++)\r
- if(NextRow_GT()) return;\r
-\r
- clutP=(clY<<10)+clX;\r
-\r
- YAdjust=((GlobalTextAddrY)<<11)+(GlobalTextAddrX<<1);\r
- YAdjust+=(TWin.Position.y0<<11)+(TWin.Position.x0);\r
-\r
- difR=delta_right_R;\r
- difG=delta_right_G;\r
- difB=delta_right_B;\r
- difR2=difR<<1;\r
- difG2=difG<<1;\r
- difB2=difB<<1;\r
- difX=delta_right_u;difX2=difX<<1;\r
- difY=delta_right_v;difY2=difY<<1;\r
-\r
-#ifdef FASTSOLID\r
-\r
- if(!bCheckMask && !DrawSemiTrans && !iDither)\r
- {\r
- for (i=ymin;i<=ymax;i++)\r
- {\r
- xmin=(left_x >> 16);\r
- xmax=(right_x >> 16)-1; // !!!!!!!!!!!!!\r
- if(drawW<xmax) xmax=drawW;\r
-\r
- if(xmax>=xmin)\r
- {\r
- posX=left_u;\r
- posY=left_v;\r
- cR1=left_R;\r
- cG1=left_G;\r
- cB1=left_B;\r
-\r
- if(xmin<drawX)\r
- {j=drawX-xmin;xmin=drawX;posX+=j*difX;posY+=j*difY;cR1+=j*difR;cG1+=j*difG;cB1+=j*difB;}\r
-\r
- for(j=xmin;j<xmax;j+=2)\r
- {\r
- tC1 = psxVub[(((posY>>16)%TWin.Position.y1)<<11)+\r
- YAdjust+((posX>>16)%TWin.Position.x1)];\r
- tC2 = psxVub[((((posY+difY)>>16)%TWin.Position.y1)<<11)+\r
- YAdjust+(((posX+difX)>>16)%TWin.Position.x1)];\r
- \r
- GetTextureTransColGX32_S((uint32_t *)&psxVuw[(i<<10)+j],\r
- psxVuw[clutP+tC1]|\r
- ((int)psxVuw[clutP+tC2])<<16,\r
- (cB1>>16)|((cB1+difB)&0xff0000),\r
- (cG1>>16)|((cG1+difG)&0xff0000),\r
- (cR1>>16)|((cR1+difR)&0xff0000));\r
- posX+=difX2;\r
- posY+=difY2;\r
- cR1+=difR2;\r
- cG1+=difG2;\r
- cB1+=difB2;\r
- }\r
- if(j==xmax)\r
- {\r
- tC1 = psxVub[(((posY>>16)%TWin.Position.y1)<<11)+\r
- YAdjust+((posX>>16)%TWin.Position.x1)];\r
- GetTextureTransColGX_S(&psxVuw[(i<<10)+j], \r
- psxVuw[clutP+tC1],\r
- (cB1>>16),(cG1>>16),(cR1>>16));\r
- }\r
- }\r
- if(NextRow_GT()) \r
- {\r
- return;\r
- }\r
- }\r
- return;\r
- }\r
-\r
-#endif\r
-\r
- for (i=ymin;i<=ymax;i++)\r
- {\r
- xmin=(left_x >> 16);\r
- xmax=(right_x >> 16)-1; //!!!!!!!!!!!!!!!!!!!!!!!\r
- if(drawW<xmax) xmax=drawW;\r
-\r
- if(xmax>=xmin)\r
- {\r
- posX=left_u;\r
- posY=left_v;\r
- cR1=left_R;\r
- cG1=left_G;\r
- cB1=left_B;\r
-\r
- if(xmin<drawX)\r
- {j=drawX-xmin;xmin=drawX;posX+=j*difX;posY+=j*difY;cR1+=j*difR;cG1+=j*difG;cB1+=j*difB;}\r
-\r
- for(j=xmin;j<=xmax;j++)\r
- {\r
- tC1 = psxVub[(((posY>>16)%TWin.Position.y1)<<11)+\r
- YAdjust+((posX>>16)%TWin.Position.x1)];\r
- if(iDither)\r
- GetTextureTransColGX_Dither(&psxVuw[(i<<10)+j], \r
- psxVuw[clutP+tC1],\r
- (cB1>>16),(cG1>>16),(cR1>>16));\r
- else\r
- GetTextureTransColGX(&psxVuw[(i<<10)+j], \r
- psxVuw[clutP+tC1],\r
- (cB1>>16),(cG1>>16),(cR1>>16));\r
- posX+=difX;\r
- posY+=difY;\r
- cR1+=difR;\r
- cG1+=difG;\r
- cB1+=difB;\r
- }\r
- }\r
- if(NextRow_GT()) \r
- {\r
- return;\r
- }\r
- }\r
-}\r
-\r
-////////////////////////////////////////////////////////////////////////\r
-\r
-// note: two g-shaded tris: small texture distortions can happen\r
-\r
-void drawPoly4TGEx8_TRI_IL(short x1, short y1, short x2, short y2, short x3, short y3, short x4, short y4, \r
- short tx1, short ty1, short tx2, short ty2, short tx3, short ty3, short tx4, short ty4, \r
- short clX, short clY,\r
- int col1, int col2, int col3, int col4)\r
-{\r
- drawPoly3TGEx8_IL(x2,y2,x3,y3,x4,y4,\r
- tx2,ty2,tx3,ty3,tx4,ty4,\r
- clX,clY,\r
- col2,col4,col3);\r
- drawPoly3TGEx8_IL(x1,y1,x2,y2,x4,y4,\r
- tx1,ty1,tx2,ty2,tx4,ty4,\r
- clX,clY,\r
- col1,col2,col3);\r
-}\r
-\r
-#ifdef POLYQUAD3GT\r
- \r
-void drawPoly4TGEx8_TRI(short x1, short y1, short x2, short y2, short x3, short y3, short x4, short y4, \r
- short tx1, short ty1, short tx2, short ty2, short tx3, short ty3, short tx4, short ty4, \r
- short clX, short clY,\r
- int col1, int col2, int col3, int col4)\r
-{\r
- drawPoly3TGEx8(x2,y2,x3,y3,x4,y4,\r
- tx2,ty2,tx3,ty3,tx4,ty4,\r
- clX,clY,\r
- col2,col4,col3);\r
- drawPoly3TGEx8(x1,y1,x2,y2,x4,y4,\r
- tx1,ty1,tx2,ty2,tx4,ty4,\r
- clX,clY,\r
- col1,col2,col3);\r
-}\r
-\r
-#endif\r
-\r
-void drawPoly4TGEx8(short x1, short y1, short x2, short y2, short x3, short y3, short x4, short y4, \r
- short tx1, short ty1, short tx2, short ty2, short tx3, short ty3, short tx4, short ty4, \r
- short clX, short clY,\r
- int col1, int col2, int col4, int col3)\r
-{\r
- int num; \r
- int i,j,xmin,xmax,ymin,ymax;\r
- int cR1,cG1,cB1;\r
- int difR,difB,difG,difR2,difB2,difG2;\r
- int difX, difY, difX2, difY2;\r
- int posX,posY,YAdjust,clutP;\r
- short tC1,tC2;\r
-\r
- if(x1>drawW && x2>drawW && x3>drawW && x4>drawW) return;\r
- if(y1>drawH && y2>drawH && y3>drawH && y4>drawH) return;\r
- if(x1<drawX && x2<drawX && x3<drawX && x4<drawX) return;\r
- if(y1<drawY && y2<drawY && y3<drawY && y4<drawY) return;\r
- if(drawY>=drawH) return;\r
- if(drawX>=drawW) return; \r
-\r
- if(!SetupSections_GT4(x1,y1,x2,y2,x3,y3,x4,y4,tx1,ty1,tx2,ty2,tx3,ty3,tx4,ty4,col1,col2,col3,col4)) return;\r
-\r
- ymax=Ymax;\r
-\r
- for(ymin=Ymin;ymin<drawY;ymin++)\r
- if(NextRow_GT4()) return;\r
-\r
- clutP=(clY<<10)+clX;\r
-\r
- YAdjust=((GlobalTextAddrY)<<11)+(GlobalTextAddrX<<1);\r
-\r
-#ifdef FASTSOLID\r
-\r
- if(!bCheckMask && !DrawSemiTrans && !iDither)\r
- {\r
- for (i=ymin;i<=ymax;i++)\r
- {\r
- xmin=(left_x >> 16);\r
- xmax=(right_x >> 16);\r
-\r
- if(xmax>=xmin)\r
- {\r
- posX=left_u;\r
- posY=left_v;\r
-\r
- num=(xmax-xmin);\r
- if(num==0) num=1;\r
- difX=(right_u-posX)/num;\r
- difY=(right_v-posY)/num;\r
- difX2=difX<<1;\r
- difY2=difY<<1;\r
-\r
- cR1=left_R;\r
- cG1=left_G;\r
- cB1=left_B;\r
- difR=(right_R-cR1)/num;\r
- difG=(right_G-cG1)/num;\r
- difB=(right_B-cB1)/num;\r
- difR2=difR<<1;\r
- difG2=difG<<1;\r
- difB2=difB<<1;\r
-\r
- if(xmin<drawX)\r
- {j=drawX-xmin;xmin=drawX;posX+=j*difX;posY+=j*difY;cR1+=j*difR;cG1+=j*difG;cB1+=j*difB;}\r
- xmax--;if(drawW<xmax) xmax=drawW;\r
-\r
- for(j=xmin;j<xmax;j+=2)\r
- {\r
- tC1 = psxVub[((posY>>5)&(int)0xFFFFF800)+YAdjust+(posX>>16)];\r
- tC2 = psxVub[(((posY+difY)>>5)&(int)0xFFFFF800)+YAdjust+\r
- ((posX+difX)>>16)];\r
-\r
- GetTextureTransColGX32_S((uint32_t *)&psxVuw[(i<<10)+j],\r
- psxVuw[clutP+tC1]|\r
- ((int)psxVuw[clutP+tC2])<<16,\r
- (cB1>>16)|((cB1+difB)&0xff0000),\r
- (cG1>>16)|((cG1+difG)&0xff0000),\r
- (cR1>>16)|((cR1+difR)&0xff0000));\r
- posX+=difX2;\r
- posY+=difY2;\r
- cR1+=difR2;\r
- cG1+=difG2;\r
- cB1+=difB2;\r
- }\r
- if(j==xmax)\r
- {\r
- tC1 = psxVub[((posY>>5)&(int)0xFFFFF800)+YAdjust+(posX>>16)];\r
- GetTextureTransColGX_S(&psxVuw[(i<<10)+j], \r
- psxVuw[clutP+tC1],\r
- (cB1>>16),(cG1>>16),(cR1>>16));\r
- }\r
- }\r
- if(NextRow_GT4()) return;\r
- }\r
- return;\r
- }\r
-\r
-#endif\r
-\r
- for (i=ymin;i<=ymax;i++)\r
- {\r
- xmin=(left_x >> 16);\r
- xmax=(right_x >> 16);\r
-\r
- if(xmax>=xmin)\r
- {\r
- posX=left_u;\r
- posY=left_v;\r
-\r
- num=(xmax-xmin);\r
- if(num==0) num=1;\r
- difX=(right_u-posX)/num;\r
- difY=(right_v-posY)/num;\r
- difX2=difX<<1;\r
- difY2=difY<<1;\r
-\r
- cR1=left_R;\r
- cG1=left_G;\r
- cB1=left_B;\r
- difR=(right_R-cR1)/num;\r
- difG=(right_G-cG1)/num;\r
- difB=(right_B-cB1)/num;\r
- difR2=difR<<1;\r
- difG2=difG<<1;\r
- difB2=difB<<1;\r
-\r
- if(xmin<drawX)\r
- {j=drawX-xmin;xmin=drawX;posX+=j*difX;posY+=j*difY;cR1+=j*difR;cG1+=j*difG;cB1+=j*difB;}\r
- xmax--;if(drawW<xmax) xmax=drawW;\r
-\r
- for(j=xmin;j<=xmax;j++)\r
- {\r
- tC1 = psxVub[((posY>>5)&(int)0xFFFFF800)+YAdjust+(posX>>16)];\r
- if(iDither)\r
- GetTextureTransColGX_Dither(&psxVuw[(i<<10)+j], \r
- psxVuw[clutP+tC1],\r
- (cB1>>16),(cG1>>16),(cR1>>16));\r
- else\r
- GetTextureTransColGX(&psxVuw[(i<<10)+j], \r
- psxVuw[clutP+tC1],\r
- (cB1>>16),(cG1>>16),(cR1>>16));\r
- posX+=difX;\r
- posY+=difY;\r
- cR1+=difR;\r
- cG1+=difG;\r
- cB1+=difB;\r
- }\r
- }\r
- if(NextRow_GT4()) return;\r
- }\r
-}\r
-\r
-////////////////////////////////////////////////////////////////////////\r
-\r
-void drawPoly4TGEx8_TW(short x1, short y1, short x2, short y2, short x3, short y3, short x4, short y4, \r
- short tx1, short ty1, short tx2, short ty2, short tx3, short ty3, short tx4, short ty4, \r
- short clX, short clY,\r
- int col1, int col2, int col3, int col4)\r
-{\r
- drawPoly3TGEx8_TW(x2,y2,x3,y3,x4,y4,\r
- tx2,ty2,tx3,ty3,tx4,ty4,\r
- clX,clY,\r
- col2,col4,col3);\r
- drawPoly3TGEx8_TW(x1,y1,x2,y2,x4,y4,\r
- tx1,ty1,tx2,ty2,tx4,ty4,\r
- clX,clY,\r
- col1,col2,col3);\r
-}\r
-\r
-////////////////////////////////////////////////////////////////////////\r
-// POLY 3 G-SHADED TEX 15 BIT\r
-////////////////////////////////////////////////////////////////////////\r
-\r
-void drawPoly3TGD(short x1, short y1, short x2, short y2, short x3, short y3, short tx1, short ty1, short tx2, short ty2, short tx3, short ty3, int col1, int col2, int col3)\r
-{\r
- int i,j,xmin,xmax,ymin,ymax;\r
- int cR1,cG1,cB1;\r
- int difR,difB,difG,difR2,difB2,difG2;\r
- int difX, difY,difX2, difY2;\r
- int posX,posY;\r
-\r
- if(x1>drawW && x2>drawW && x3>drawW) return;\r
- if(y1>drawH && y2>drawH && y3>drawH) return;\r
- if(x1<drawX && x2<drawX && x3<drawX) return;\r
- if(y1<drawY && y2<drawY && y3<drawY) return;\r
- if(drawY>=drawH) return;\r
- if(drawX>=drawW) return; \r
-\r
- if(!SetupSections_GT(x1,y1,x2,y2,x3,y3,tx1,ty1,tx2,ty2,tx3,ty3,col1,col2,col3)) return;\r
-\r
- ymax=Ymax;\r
-\r
- for(ymin=Ymin;ymin<drawY;ymin++)\r
- if(NextRow_GT()) return;\r
-\r
- difR=delta_right_R;\r
- difG=delta_right_G;\r
- difB=delta_right_B;\r
- difR2=difR<<1;\r
- difG2=difG<<1;\r
- difB2=difB<<1;\r
- difX=delta_right_u;difX2=difX<<1;\r
- difY=delta_right_v;difY2=difY<<1;\r
-\r
-#ifdef FASTSOLID\r
-\r
- if(!bCheckMask && !DrawSemiTrans && !iDither)\r
- { \r
- for (i=ymin;i<=ymax;i++)\r
- {\r
- xmin=(left_x >> 16);\r
- xmax=(right_x >> 16)-1; //!!!!!!!!!!!!!!!!!!!!\r
- if(drawW<xmax) xmax=drawW;\r
-\r
- if(xmax>=xmin)\r
- {\r
- posX=left_u;\r
- posY=left_v;\r
- cR1=left_R;\r
- cG1=left_G;\r
- cB1=left_B;\r
-\r
- if(xmin<drawX)\r
- {j=drawX-xmin;xmin=drawX;posX+=j*difX;posY+=j*difY;cR1+=j*difR;cG1+=j*difG;cB1+=j*difB;}\r
-\r
- for(j=xmin;j<xmax;j+=2)\r
- {\r
- GetTextureTransColGX32_S((uint32_t *)&psxVuw[(i<<10)+j],\r
- (((int)psxVuw[((((posY+difY)>>16)+GlobalTextAddrY)<<10)+((posX+difX)>>16)+GlobalTextAddrX])<<16)|\r
- psxVuw[(((posY>>16)+GlobalTextAddrY)<<10)+((posX)>>16)+GlobalTextAddrX],\r
- (cB1>>16)|((cB1+difB)&0xff0000),\r
- (cG1>>16)|((cG1+difG)&0xff0000),\r
- (cR1>>16)|((cR1+difR)&0xff0000));\r
- posX+=difX2;\r
- posY+=difY2;\r
- cR1+=difR2;\r
- cG1+=difG2;\r
- cB1+=difB2;\r
- }\r
- if(j==xmax)\r
- GetTextureTransColGX_S(&psxVuw[(i<<10)+j],\r
- psxVuw[(((posY>>16)+GlobalTextAddrY)<<10)+(posX>>16)+GlobalTextAddrX],\r
- (cB1>>16),(cG1>>16),(cR1>>16));\r
- }\r
- if(NextRow_GT()) \r
- {\r
- return;\r
- }\r
- }\r
- return;\r
- }\r
-\r
-#endif\r
-\r
- for (i=ymin;i<=ymax;i++)\r
- {\r
- xmin=(left_x >> 16);\r
- xmax=(right_x >> 16)-1; //!!!!!!!!!!!!!!!!!!\r
- if(drawW<xmax) xmax=drawW;\r
-\r
- if(xmax>=xmin)\r
- {\r
- posX=left_u;\r
- posY=left_v;\r
- cR1=left_R;\r
- cG1=left_G;\r
- cB1=left_B;\r
-\r
- if(xmin<drawX)\r
- {j=drawX-xmin;xmin=drawX;posX+=j*difX;posY+=j*difY;cR1+=j*difR;cG1+=j*difG;cB1+=j*difB;}\r
-\r
- for(j=xmin;j<=xmax;j++)\r
- {\r
- if(iDither)\r
- GetTextureTransColGX_Dither(&psxVuw[(i<<10)+j],\r
- psxVuw[(((posY>>16)+GlobalTextAddrY)<<10)+(posX>>16)+GlobalTextAddrX],\r
- (cB1>>16),(cG1>>16),(cR1>>16));\r
- else\r
- GetTextureTransColGX(&psxVuw[(i<<10)+j],\r
- psxVuw[(((posY>>16)+GlobalTextAddrY)<<10)+(posX>>16)+GlobalTextAddrX],\r
- (cB1>>16),(cG1>>16),(cR1>>16));\r
- posX+=difX;\r
- posY+=difY;\r
- cR1+=difR;\r
- cG1+=difG;\r
- cB1+=difB;\r
- }\r
- }\r
- if(NextRow_GT()) \r
- {\r
- return;\r
- }\r
- }\r
-}\r
-\r
-////////////////////////////////////////////////////////////////////////\r
-\r
-void drawPoly3TGD_TW(short x1, short y1, short x2, short y2, short x3, short y3, short tx1, short ty1, short tx2, short ty2, short tx3, short ty3, int col1, int col2, int col3)\r
-{\r
- int i,j,xmin,xmax,ymin,ymax;\r
- int cR1,cG1,cB1;\r
- int difR,difB,difG,difR2,difB2,difG2;\r
- int difX, difY,difX2, difY2;\r
- int posX,posY;\r
-\r
- if (x1>drawW && x2>drawW && x3>drawW) return;\r
- if (y1>drawH && y2>drawH && y3>drawH) return;\r
- if (x1<drawX && x2<drawX && x3<drawX) return;\r
- if (y1<drawY && y2<drawY && y3<drawY) return;\r
- if (drawY >= drawH) return;\r
- if (drawX >= drawW) return; \r
-\r
- if (!SetupSections_GT(x1,y1,x2,y2,x3,y3,tx1,ty1,tx2,ty2,tx3,ty3,col1,col2,col3)) return;\r
-\r
- ymax = Ymax;\r
-\r
- for(ymin = Ymin; ymin < drawY; ymin++)\r
- if(NextRow_GT()) return;\r
-\r
- difR = delta_right_R;\r
- difG = delta_right_G;\r
- difB = delta_right_B;\r
- difR2 = difR<<1;\r
- difG2 = difG<<1;\r
- difB2 = difB<<1;\r
- difX = delta_right_u; difX2 = difX<<1;\r
- difY = delta_right_v; difY2 = difY<<1;\r
-\r
-#ifdef FASTSOLID\r
-\r
- if (!bCheckMask && !DrawSemiTrans && !iDither)\r
- { \r
- for (i = ymin; i <= ymax; i++)\r
- {\r
- xmin = (left_x >> 16);\r
- xmax = (right_x >> 16) - 1; //!!!!!!!!!!!!!!!!!!!!\r
- if(drawW<xmax) xmax=drawW;\r
-\r
- if(xmax>=xmin)\r
- {\r
- posX=left_u;\r
- posY=left_v;\r
- cR1=left_R;\r
- cG1=left_G;\r
- cB1=left_B;\r
-\r
- if(xmin<drawX)\r
- {j=drawX-xmin;xmin=drawX;posX+=j*difX;posY+=j*difY;cR1+=j*difR;cG1+=j*difG;cB1+=j*difB;}\r
-\r
- for(j=xmin;j<xmax;j+=2)\r
- {\r
- GetTextureTransColGX32_S((uint32_t *)&psxVuw[(i<<10)+j],\r
- (((int)psxVuw[(((((posY+difY)>>16)%TWin.Position.y1)+GlobalTextAddrY+TWin.Position.y0)<<10)+\r
- (((posX+difX)>>16)%TWin.Position.x1)+GlobalTextAddrX+TWin.Position.x0])<<16)|\r
- psxVuw[((((posY>>16)%TWin.Position.y1)+GlobalTextAddrY+TWin.Position.y0)<<10)+\r
- (((posX)>>16)%TWin.Position.x1)+GlobalTextAddrX+TWin.Position.x0],\r
- (cB1>>16)|((cB1+difB)&0xff0000),\r
- (cG1>>16)|((cG1+difG)&0xff0000),\r
- (cR1>>16)|((cR1+difR)&0xff0000));\r
- posX+=difX2;\r
- posY+=difY2;\r
- cR1+=difR2;\r
- cG1+=difG2;\r
- cB1+=difB2;\r
- }\r
- if(j==xmax)\r
- GetTextureTransColGX_S(&psxVuw[(i<<10)+j],\r
- psxVuw[((((posY>>16)%TWin.Position.y1)+GlobalTextAddrY+TWin.Position.y0)<<10)+\r
- ((posX>>16)%TWin.Position.x1)+GlobalTextAddrX+TWin.Position.x0],\r
- (cB1>>16),(cG1>>16),(cR1>>16));\r
- }\r
- if(NextRow_GT()) \r
- {\r
- return;\r
- }\r
- }\r
- return;\r
- }\r
-\r
-#endif\r
-\r
- for (i=ymin;i<=ymax;i++)\r
- {\r
- xmin=(left_x >> 16);\r
- xmax=(right_x >> 16)-1; //!!!!!!!!!!!!!!!!!!\r
- if(drawW<xmax) xmax=drawW;\r
-\r
- if(xmax>=xmin)\r
- {\r
- posX=left_u;\r
- posY=left_v;\r
- cR1=left_R;\r
- cG1=left_G;\r
- cB1=left_B;\r
-\r
- if(xmin<drawX)\r
- {j=drawX-xmin;xmin=drawX;posX+=j*difX;posY+=j*difY;cR1+=j*difR;cG1+=j*difG;cB1+=j*difB;}\r
-\r
- for(j=xmin;j<=xmax;j++)\r
- {\r
- if(iDither)\r
- GetTextureTransColGX_Dither(&psxVuw[(i<<10)+j],\r
- psxVuw[((((posY>>16)%TWin.Position.y1)+GlobalTextAddrY+TWin.Position.y0)<<10)+\r
- ((posX>>16)%TWin.Position.x1)+GlobalTextAddrX+TWin.Position.x0],\r
- (cB1>>16),(cG1>>16),(cR1>>16));\r
- else\r
- GetTextureTransColGX(&psxVuw[(i<<10)+j],\r
- psxVuw[((((posY>>16)%TWin.Position.y1)+GlobalTextAddrY+TWin.Position.y0)<<10)+\r
- ((posX>>16)%TWin.Position.x1)+GlobalTextAddrX+TWin.Position.x0],\r
- (cB1>>16),(cG1>>16),(cR1>>16));\r
- posX+=difX;\r
- posY+=difY;\r
- cR1+=difR;\r
- cG1+=difG;\r
- cB1+=difB;\r
- }\r
- }\r
- if(NextRow_GT()) \r
- {\r
- return;\r
- }\r
- }\r
-}\r
-\r
-////////////////////////////////////////////////////////////////////////\r
-\r
-// note: two g-shaded tris: small texture distortions can happen\r
-\r
-#ifdef POLYQUAD3GT\r
-\r
-void drawPoly4TGD_TRI(short x1, short y1, short x2, short y2, short x3, short y3, short x4, short y4, short tx1, short ty1, short tx2, short ty2, short tx3, short ty3, short tx4, short ty4, int col1, int col2, int col3, int col4)\r
-{\r
- drawPoly3TGD(x2,y2,x3,y3,x4,y4,\r
- tx2,ty2,tx3,ty3,tx4,ty4,\r
- col2,col4,col3);\r
- drawPoly3TGD(x1,y1,x2,y2,x4,y4,\r
- tx1,ty1,tx2,ty2,tx4,ty4,\r
- col1,col2,col3);\r
-}\r
-\r
-#endif\r
-\r
-void drawPoly4TGD(short x1, short y1, short x2, short y2, short x3, short y3, short x4, short y4, short tx1, short ty1, short tx2, short ty2, short tx3, short ty3, short tx4, short ty4, int col1, int col2, int col4, int col3)\r
-{\r
- int num; \r
- int i,j,xmin,xmax,ymin,ymax;\r
- int cR1,cG1,cB1;\r
- int difR,difB,difG,difR2,difB2,difG2;\r
- int difX, difY, difX2, difY2;\r
- int posX,posY;\r
-\r
- if(x1>drawW && x2>drawW && x3>drawW && x4>drawW) return;\r
- if(y1>drawH && y2>drawH && y3>drawH && y4>drawH) return;\r
- if(x1<drawX && x2<drawX && x3<drawX && x4<drawX) return;\r
- if(y1<drawY && y2<drawY && y3<drawY && y4<drawY) return;\r
- if(drawY>=drawH) return;\r
- if(drawX>=drawW) return; \r
-\r
- if(!SetupSections_GT4(x1,y1,x2,y2,x3,y3,x4,y4,tx1,ty1,tx2,ty2,tx3,ty3,tx4,ty4,col1,col2,col3,col4)) return;\r
-\r
- ymax = Ymax;\r
-\r
- for (ymin = Ymin; ymin < drawY; ymin++)\r
- if (NextRow_GT4()) return;\r
-\r
-#ifdef FASTSOLID\r
-\r
- if(!bCheckMask && !DrawSemiTrans && !iDither)\r
- {\r
- for (i = ymin; i <= ymax; i++)\r
- {\r
- xmin = (left_x >> 16);\r
- xmax = (right_x >> 16);\r
-\r
- if(xmax >= xmin)\r
- {\r
- posX = left_u;\r
- posY = left_v;\r
-\r
- num = (xmax-xmin);\r
- if(num==0) num=1;\r
- difX=(right_u-posX)/num;\r
- difY=(right_v-posY)/num;\r
- difX2=difX<<1;\r
- difY2=difY<<1;\r
-\r
- cR1=left_R;\r
- cG1=left_G;\r
- cB1=left_B;\r
- difR=(right_R-cR1)/num;\r
- difG=(right_G-cG1)/num;\r
- difB=(right_B-cB1)/num;\r
- difR2=difR<<1;\r
- difG2=difG<<1;\r
- difB2=difB<<1;\r
-\r
- if(xmin<drawX)\r
- {j=drawX-xmin;xmin=drawX;posX+=j*difX;posY+=j*difY;cR1+=j*difR;cG1+=j*difG;cB1+=j*difB;}\r
- xmax--;if(drawW<xmax) xmax=drawW;\r
-\r
- for(j=xmin;j<xmax;j+=2)\r
- {\r
- GetTextureTransColGX32_S((uint32_t *)&psxVuw[(i<<10)+j],\r
- (((int)psxVuw[((((posY+difY)>>16)+GlobalTextAddrY)<<10)+((posX+difX)>>16)+GlobalTextAddrX])<<16)|\r
- psxVuw[(((posY>>16)+GlobalTextAddrY)<<10)+((posX)>>16)+GlobalTextAddrX],\r
- (cB1>>16)|((cB1+difB)&0xff0000),\r
- (cG1>>16)|((cG1+difG)&0xff0000),\r
- (cR1>>16)|((cR1+difR)&0xff0000));\r
- posX+=difX2;\r
- posY+=difY2;\r
- cR1+=difR2;\r
- cG1+=difG2;\r
- cB1+=difB2;\r
- }\r
- if(j==xmax)\r
- GetTextureTransColGX_S(&psxVuw[(i<<10)+j],\r
- psxVuw[(((posY>>16)+GlobalTextAddrY)<<10)+(posX>>16)+GlobalTextAddrX],\r
- (cB1>>16),(cG1>>16),(cR1>>16));\r
- }\r
- if(NextRow_GT4()) return;\r
- }\r
- return;\r
- }\r
-\r
-#endif\r
-\r
- for (i=ymin;i<=ymax;i++)\r
- {\r
- xmin=(left_x >> 16);\r
- xmax=(right_x >> 16);\r
-\r
- if(xmax>=xmin)\r
- {\r
- posX=left_u;\r
- posY=left_v;\r
-\r
- num=(xmax-xmin);\r
- if(num==0) num=1;\r
- difX=(right_u-posX)/num;\r
- difY=(right_v-posY)/num;\r
- difX2=difX<<1;\r
- difY2=difY<<1;\r
-\r
- cR1=left_R;\r
- cG1=left_G;\r
- cB1=left_B;\r
- difR=(right_R-cR1)/num;\r
- difG=(right_G-cG1)/num;\r
- difB=(right_B-cB1)/num;\r
- difR2=difR<<1;\r
- difG2=difG<<1;\r
- difB2=difB<<1;\r
-\r
- if(xmin<drawX)\r
- {j=drawX-xmin;xmin=drawX;posX+=j*difX;posY+=j*difY;cR1+=j*difR;cG1+=j*difG;cB1+=j*difB;}\r
- xmax--;if(drawW<xmax) xmax=drawW;\r
-\r
- for(j=xmin;j<=xmax;j++)\r
- {\r
- if(iDither)\r
- GetTextureTransColGX(&psxVuw[(i<<10)+j],\r
- psxVuw[(((posY>>16)+GlobalTextAddrY)<<10)+(posX>>16)+GlobalTextAddrX],\r
- (cB1>>16),(cG1>>16),(cR1>>16));\r
- else\r
- GetTextureTransColGX(&psxVuw[(i<<10)+j],\r
- psxVuw[(((posY>>16)+GlobalTextAddrY)<<10)+(posX>>16)+GlobalTextAddrX],\r
- (cB1>>16),(cG1>>16),(cR1>>16));\r
- posX+=difX;\r
- posY+=difY;\r
- cR1+=difR;\r
- cG1+=difG;\r
- cB1+=difB;\r
- }\r
- }\r
- if(NextRow_GT4()) return;\r
- }\r
-}\r
-\r
-////////////////////////////////////////////////////////////////////////\r
-\r
-void drawPoly4TGD_TW(short x1, short y1, short x2, short y2, short x3, short y3, short x4, short y4, short tx1, short ty1, short tx2, short ty2, short tx3, short ty3, short tx4, short ty4, int col1, int col2, int col3, int col4)\r
-{\r
- drawPoly3TGD_TW(x2,y2,x3,y3,x4,y4,\r
- tx2,ty2,tx3,ty3,tx4,ty4,\r
- col2,col4,col3);\r
- drawPoly3TGD_TW(x1,y1,x2,y2,x4,y4,\r
- tx1,ty1,tx2,ty2,tx4,ty4,\r
- col1,col2,col3);\r
-}\r
-\r
-////////////////////////////////////////////////////////////////////////\r
-////////////////////////////////////////////////////////////////////////\r
-////////////////////////////////////////////////////////////////////////\r
-////////////////////////////////////////////////////////////////////////\r
-////////////////////////////////////////////////////////////////////////\r
-////////////////////////////////////////////////////////////////////////\r
-\r
-\r
-/*\r
-// no real rect test, but it does its job the way I need it\r
-__inline BOOL IsNoRect(void)\r
-{\r
- if(lx0==lx1 && lx2==lx3) return FALSE;\r
- if(lx0==lx2 && lx1==lx3) return FALSE;\r
- if(lx0==lx3 && lx1==lx2) return FALSE;\r
- return TRUE; \r
-}\r
-*/\r
-\r
-// real rect test\r
-__inline BOOL IsNoRect(void)\r
-{\r
- //if(!(dwActFixes&0x200)) return FALSE;\r
-\r
- if(ly0==ly1)\r
- {\r
- if(lx1==lx3 && ly3==ly2 && lx2==lx0) return FALSE;\r
- if(lx1==lx2 && ly2==ly3 && lx3==lx0) return FALSE;\r
- return TRUE;\r
- }\r
- \r
- if(ly0==ly2)\r
- {\r
- if(lx2==lx3 && ly3==ly1 && lx1==lx0) return FALSE;\r
- if(lx2==lx1 && ly1==ly3 && lx3==lx0) return FALSE;\r
- return TRUE;\r
- }\r
- \r
- if(ly0==ly3)\r
- {\r
- if(lx3==lx2 && ly2==ly1 && lx1==lx0) return FALSE;\r
- if(lx3==lx1 && ly1==ly2 && lx2==lx0) return FALSE;\r
- return TRUE;\r
- }\r
- return TRUE;\r
-}\r
-\r
-////////////////////////////////////////////////////////////////////////\r
-\r
-void drawPoly3FT(unsigned char *baseAddr)\r
-{\r
- uint32_t *gpuData = ((uint32_t *) baseAddr);\r
-\r
- if(GlobalTextIL && GlobalTextTP<2)\r
- {\r
- if(GlobalTextTP==0)\r
- drawPoly3TEx4_IL(lx0,ly0,lx1,ly1,lx2,ly2,\r
- (gpuData[2] & 0x000000ff), ((gpuData[2]>>8) & 0x000000ff), (gpuData[4] & 0x000000ff), ((gpuData[4]>>8) & 0x000000ff),(gpuData[6] & 0x000000ff), ((gpuData[6]>>8) & 0x000000ff), \r
- ((gpuData[2]>>12) & 0x3f0), ((gpuData[2]>>22) & iGPUHeightMask));\r
- else\r
- drawPoly3TEx8_IL(lx0,ly0,lx1,ly1,lx2,ly2,\r
- (gpuData[2] & 0x000000ff), ((gpuData[2]>>8) & 0x000000ff), (gpuData[4] & 0x000000ff), ((gpuData[4]>>8) & 0x000000ff),(gpuData[6] & 0x000000ff), ((gpuData[6]>>8) & 0x000000ff), \r
- ((gpuData[2]>>12) & 0x3f0), ((gpuData[2]>>22) & iGPUHeightMask));\r
- return;\r
- }\r
-\r
- if(!bUsingTWin)// && !(dwActFixes&0x100))\r
- {\r
- switch(GlobalTextTP) // depending on texture mode\r
- {\r
- case 0:\r
- drawPoly3TEx4(lx0,ly0,lx1,ly1,lx2,ly2,\r
- (gpuData[2] & 0x000000ff), ((gpuData[2]>>8) & 0x000000ff), (gpuData[4] & 0x000000ff), ((gpuData[4]>>8) & 0x000000ff),(gpuData[6] & 0x000000ff), ((gpuData[6]>>8) & 0x000000ff), \r
- ((gpuData[2]>>12) & 0x3f0), ((gpuData[2]>>22) & iGPUHeightMask));\r
- return;\r
- case 1:\r
- drawPoly3TEx8(lx0,ly0,lx1,ly1,lx2,ly2,\r
- (gpuData[2] & 0x000000ff), ((gpuData[2]>>8) & 0x000000ff), (gpuData[4] & 0x000000ff), ((gpuData[4]>>8) & 0x000000ff),(gpuData[6] & 0x000000ff), ((gpuData[6]>>8) & 0x000000ff), \r
- ((gpuData[2]>>12) & 0x3f0), ((gpuData[2]>>22) & iGPUHeightMask));\r
- return;\r
- case 2:\r
- drawPoly3TD(lx0,ly0,lx1,ly1,lx2,ly2,(gpuData[2] & 0x000000ff), ((gpuData[2]>>8) & 0x000000ff), (gpuData[4] & 0x000000ff), ((gpuData[4]>>8) & 0x000000ff),(gpuData[6] & 0x000000ff), ((gpuData[6]>>8) & 0x000000ff));\r
- return;\r
- }\r
- return;\r
- }\r
-\r
- switch(GlobalTextTP) // depending on texture mode\r
- {\r
- case 0:\r
- drawPoly3TEx4_TW(lx0,ly0,lx1,ly1,lx2,ly2,\r
- (gpuData[2] & 0x000000ff), ((gpuData[2]>>8) & 0x000000ff), (gpuData[4] & 0x000000ff), ((gpuData[4]>>8) & 0x000000ff),(gpuData[6] & 0x000000ff), ((gpuData[6]>>8) & 0x000000ff), \r
- ((gpuData[2]>>12) & 0x3f0), ((gpuData[2]>>22) & iGPUHeightMask));\r
- return;\r
- case 1:\r
- drawPoly3TEx8_TW(lx0,ly0,lx1,ly1,lx2,ly2,\r
- (gpuData[2] & 0x000000ff), ((gpuData[2]>>8) & 0x000000ff), (gpuData[4] & 0x000000ff), ((gpuData[4]>>8) & 0x000000ff),(gpuData[6] & 0x000000ff), ((gpuData[6]>>8) & 0x000000ff), \r
- ((gpuData[2]>>12) & 0x3f0), ((gpuData[2]>>22) & iGPUHeightMask));\r
- return;\r
- case 2:\r
- drawPoly3TD_TW(lx0,ly0,lx1,ly1,lx2,ly2,(gpuData[2] & 0x000000ff), ((gpuData[2]>>8) & 0x000000ff), (gpuData[4] & 0x000000ff), ((gpuData[4]>>8) & 0x000000ff),(gpuData[6] & 0x000000ff), ((gpuData[6]>>8) & 0x000000ff));\r
- return;\r
- }\r
-}\r
-\r
-////////////////////////////////////////////////////////////////////////\r
-\r
-void drawPoly4FT(unsigned char *baseAddr)\r
-{\r
- uint32_t *gpuData = ((uint32_t *) baseAddr);\r
-\r
- if(GlobalTextIL && GlobalTextTP<2)\r
- {\r
- if(GlobalTextTP==0)\r
- drawPoly4TEx4_IL(lx0,ly0,lx1,ly1,lx3,ly3,lx2,ly2,\r
- (gpuData[2] & 0x000000ff), ((gpuData[2]>>8) & 0x000000ff), (gpuData[4] & 0x000000ff), ((gpuData[4]>>8) & 0x000000ff),(gpuData[8] & 0x000000ff), ((gpuData[8]>>8) & 0x000000ff),(gpuData[6] & 0x000000ff), ((gpuData[6]>>8) & 0x000000ff), ((gpuData[2]>>12) & 0x3f0), ((gpuData[2]>>22) & iGPUHeightMask));\r
- else\r
- drawPoly4TEx8_IL(lx0,ly0,lx1,ly1,lx3,ly3,lx2,ly2,\r
- (gpuData[2] & 0x000000ff), ((gpuData[2]>>8) & 0x000000ff), (gpuData[4] & 0x000000ff), ((gpuData[4]>>8) & 0x000000ff),(gpuData[8] & 0x000000ff), ((gpuData[8]>>8) & 0x000000ff),(gpuData[6] & 0x000000ff), ((gpuData[6]>>8) & 0x000000ff), ((gpuData[2]>>12) & 0x3f0), ((gpuData[2]>>22) & iGPUHeightMask));\r
- return;\r
- }\r
-\r
- if(!bUsingTWin)\r
- {\r
-#ifdef POLYQUAD3GT\r
- if(IsNoRect())\r
- {\r
- switch (GlobalTextTP)\r
- {\r
- case 0:\r
- drawPoly4TEx4_TRI(lx0,ly0,lx1,ly1,lx3,ly3,lx2,ly2,\r
- (gpuData[2] & 0x000000ff), ((gpuData[2]>>8) & 0x000000ff), (gpuData[4] & 0x000000ff), ((gpuData[4]>>8) & 0x000000ff),(gpuData[8] & 0x000000ff), ((gpuData[8]>>8) & 0x000000ff),(gpuData[6] & 0x000000ff), ((gpuData[6]>>8) & 0x000000ff), ((gpuData[2]>>12) & 0x3f0), ((gpuData[2]>>22) & iGPUHeightMask));\r
- return;\r
- case 1:\r
- drawPoly4TEx8_TRI(lx0,ly0,lx1,ly1,lx3,ly3,lx2,ly2,\r
- (gpuData[2] & 0x000000ff), ((gpuData[2]>>8) & 0x000000ff), (gpuData[4] & 0x000000ff), ((gpuData[4]>>8) & 0x000000ff),(gpuData[8] & 0x000000ff), ((gpuData[8]>>8) & 0x000000ff),(gpuData[6] & 0x000000ff), ((gpuData[6]>>8) & 0x000000ff), ((gpuData[2]>>12) & 0x3f0), ((gpuData[2]>>22) & iGPUHeightMask));\r
- return;\r
- case 2:\r
- drawPoly4TD_TRI(lx0,ly0,lx1,ly1,lx3,ly3,lx2,ly2,(gpuData[2] & 0x000000ff), ((gpuData[2]>>8) & 0x000000ff), (gpuData[4] & 0x000000ff), ((gpuData[4]>>8) & 0x000000ff),(gpuData[8] & 0x000000ff), ((gpuData[8]>>8) & 0x000000ff),(gpuData[6] & 0x000000ff), ((gpuData[6]>>8) & 0x000000ff));\r
- return;\r
- }\r
- return;\r
- }\r
-#endif\r
- \r
- switch (GlobalTextTP)\r
- {\r
- case 0: // grandia investigations needed\r
- drawPoly4TEx4(lx0,ly0,lx1,ly1,lx3,ly3,lx2,ly2,\r
- (gpuData[2] & 0x000000ff), ((gpuData[2]>>8) & 0x000000ff), (gpuData[4] & 0x000000ff), ((gpuData[4]>>8) & 0x000000ff),(gpuData[8] & 0x000000ff), ((gpuData[8]>>8) & 0x000000ff),(gpuData[6] & 0x000000ff), ((gpuData[6]>>8) & 0x000000ff), ((gpuData[2]>>12) & 0x3f0), ((gpuData[2]>>22) & iGPUHeightMask));\r
- return;\r
- case 1:\r
- drawPoly4TEx8(lx0,ly0,lx1,ly1,lx3,ly3,lx2,ly2,\r
- (gpuData[2] & 0x000000ff), ((gpuData[2]>>8) & 0x000000ff), (gpuData[4] & 0x000000ff), ((gpuData[4]>>8) & 0x000000ff),(gpuData[8] & 0x000000ff), ((gpuData[8]>>8) & 0x000000ff),(gpuData[6] & 0x000000ff), ((gpuData[6]>>8) & 0x000000ff), ((gpuData[2]>>12) & 0x3f0), ((gpuData[2]>>22) & iGPUHeightMask));\r
- return;\r
- case 2:\r
- drawPoly4TD(lx0,ly0,lx1,ly1,lx3,ly3,lx2,ly2,(gpuData[2] & 0x000000ff), ((gpuData[2]>>8) & 0x000000ff), (gpuData[4] & 0x000000ff), ((gpuData[4]>>8) & 0x000000ff),(gpuData[8] & 0x000000ff), ((gpuData[8]>>8) & 0x000000ff),(gpuData[6] & 0x000000ff), ((gpuData[6]>>8) & 0x000000ff));\r
- return;\r
- }\r
- return;\r
- }\r
-\r
- switch (GlobalTextTP)\r
- {\r
- case 0:\r
- drawPoly4TEx4_TW(lx0,ly0,lx1,ly1,lx3,ly3,lx2,ly2,\r
- (gpuData[2] & 0x000000ff), ((gpuData[2]>>8) & 0x000000ff), (gpuData[4] & 0x000000ff), ((gpuData[4]>>8) & 0x000000ff),(gpuData[8] & 0x000000ff), ((gpuData[8]>>8) & 0x000000ff),(gpuData[6] & 0x000000ff), ((gpuData[6]>>8) & 0x000000ff), ((gpuData[2]>>12) & 0x3f0), ((gpuData[2]>>22) & iGPUHeightMask));\r
- return;\r
- case 1:\r
- drawPoly4TEx8_TW(lx0,ly0,lx1,ly1,lx3,ly3,lx2,ly2,\r
- (gpuData[2] & 0x000000ff), ((gpuData[2]>>8) & 0x000000ff), (gpuData[4] & 0x000000ff), ((gpuData[4]>>8) & 0x000000ff),(gpuData[8] & 0x000000ff), ((gpuData[8]>>8) & 0x000000ff),(gpuData[6] & 0x000000ff), ((gpuData[6]>>8) & 0x000000ff), ((gpuData[2]>>12) & 0x3f0), ((gpuData[2]>>22) & iGPUHeightMask));\r
- return;\r
- case 2:\r
- drawPoly4TD_TW(lx0,ly0,lx1,ly1,lx3,ly3,lx2,ly2,(gpuData[2] & 0x000000ff), ((gpuData[2]>>8) & 0x000000ff), (gpuData[4] & 0x000000ff), ((gpuData[4]>>8) & 0x000000ff),(gpuData[8] & 0x000000ff), ((gpuData[8]>>8) & 0x000000ff),(gpuData[6] & 0x000000ff), ((gpuData[6]>>8) & 0x000000ff));\r
- return;\r
- }\r
-}\r
-\r
-////////////////////////////////////////////////////////////////////////\r
-\r
-void drawPoly3GT(unsigned char * baseAddr)\r
-{\r
- uint32_t *gpuData = ((uint32_t *) baseAddr);\r
-\r
- if(GlobalTextIL && GlobalTextTP<2)\r
- {\r
- if(GlobalTextTP==0)\r
- drawPoly3TGEx4_IL(lx0,ly0,lx1,ly1,lx2,ly2,\r
- (gpuData[2] & 0x000000ff), ((gpuData[2]>>8) & 0x000000ff), (gpuData[5] & 0x000000ff), ((gpuData[5]>>8) & 0x000000ff),(gpuData[8] & 0x000000ff), ((gpuData[8]>>8) & 0x000000ff), \r
- ((gpuData[2]>>12) & 0x3f0), ((gpuData[2]>>22) & iGPUHeightMask),\r
- gpuData[0],gpuData[3],gpuData[6]);\r
- else\r
- drawPoly3TGEx8_IL(lx0,ly0,lx1,ly1,lx2,ly2,\r
- (gpuData[2] & 0x000000ff), ((gpuData[2]>>8) & 0x000000ff), (gpuData[5] & 0x000000ff), ((gpuData[5]>>8) & 0x000000ff),(gpuData[8] & 0x000000ff), ((gpuData[8]>>8) & 0x000000ff), \r
- ((gpuData[2]>>12) & 0x3f0), ((gpuData[2]>>22) & iGPUHeightMask),\r
- gpuData[0],gpuData[3],gpuData[6]);\r
- return;\r
- }\r
-\r
- if(!bUsingTWin)\r
- {\r
- switch (GlobalTextTP)\r
- {\r
- case 0:\r
- drawPoly3TGEx4(lx0,ly0,lx1,ly1,lx2,ly2,\r
- (gpuData[2] & 0x000000ff), ((gpuData[2]>>8) & 0x000000ff), (gpuData[5] & 0x000000ff), ((gpuData[5]>>8) & 0x000000ff),(gpuData[8] & 0x000000ff), ((gpuData[8]>>8) & 0x000000ff), \r
- ((gpuData[2]>>12) & 0x3f0), ((gpuData[2]>>22) & iGPUHeightMask),\r
- gpuData[0],gpuData[3],gpuData[6]);\r
- return;\r
- case 1:\r
- drawPoly3TGEx8(lx0,ly0,lx1,ly1,lx2,ly2,\r
- (gpuData[2] & 0x000000ff), ((gpuData[2]>>8) & 0x000000ff), (gpuData[5] & 0x000000ff), ((gpuData[5]>>8) & 0x000000ff),(gpuData[8] & 0x000000ff), ((gpuData[8]>>8) & 0x000000ff), \r
- ((gpuData[2]>>12) & 0x3f0), ((gpuData[2]>>22) & iGPUHeightMask),\r
- gpuData[0],gpuData[3],gpuData[6]);\r
- return;\r
- case 2:\r
- drawPoly3TGD(lx0,ly0,lx1,ly1,lx2,ly2,(gpuData[2] & 0x000000ff), ((gpuData[2]>>8) & 0x000000ff), (gpuData[5] & 0x000000ff), ((gpuData[5]>>8) & 0x000000ff),(gpuData[8] & 0x000000ff), ((gpuData[8]>>8) & 0x000000ff),gpuData[0],gpuData[3],gpuData[6]);\r
- return;\r
- }\r
- return;\r
- }\r
-\r
- switch(GlobalTextTP)\r
- {\r
- case 0:\r
- drawPoly3TGEx4_TW(lx0,ly0,lx1,ly1,lx2,ly2,\r
- (gpuData[2] & 0x000000ff), ((gpuData[2]>>8) & 0x000000ff), (gpuData[5] & 0x000000ff), ((gpuData[5]>>8) & 0x000000ff),(gpuData[8] & 0x000000ff), ((gpuData[8]>>8) & 0x000000ff), \r
- ((gpuData[2]>>12) & 0x3f0), ((gpuData[2]>>22) & iGPUHeightMask),\r
- gpuData[0],gpuData[3],gpuData[6]);\r
- return;\r
- case 1:\r
- drawPoly3TGEx8_TW(lx0,ly0,lx1,ly1,lx2,ly2,\r
- (gpuData[2] & 0x000000ff), ((gpuData[2]>>8) & 0x000000ff), (gpuData[5] & 0x000000ff), ((gpuData[5]>>8) & 0x000000ff),(gpuData[8] & 0x000000ff), ((gpuData[8]>>8) & 0x000000ff), \r
- ((gpuData[2]>>12) & 0x3f0), ((gpuData[2]>>22) & iGPUHeightMask),\r
- gpuData[0],gpuData[3],gpuData[6]);\r
- return;\r
- case 2:\r
- drawPoly3TGD_TW(lx0,ly0,lx1,ly1,lx2,ly2,(gpuData[2] & 0x000000ff), ((gpuData[2]>>8) & 0x000000ff), (gpuData[5] & 0x000000ff), ((gpuData[5]>>8) & 0x000000ff),(gpuData[8] & 0x000000ff), ((gpuData[8]>>8) & 0x000000ff),gpuData[0],gpuData[3],gpuData[6]);\r
- return;\r
- }\r
-} \r
-\r
-////////////////////////////////////////////////////////////////////////\r
-\r
-void drawPoly4GT(unsigned char *baseAddr)\r
-{\r
- uint32_t *gpuData = ((uint32_t *) baseAddr);\r
-\r
- if(GlobalTextIL && GlobalTextTP<2)\r
- {\r
- if(GlobalTextTP==0)\r
- drawPoly4TGEx4_TRI_IL(lx0,ly0,lx1,ly1,lx3,ly3,lx2,ly2,\r
- (gpuData[2] & 0x000000ff), ((gpuData[2]>>8) & 0x000000ff), (gpuData[5] & 0x000000ff), ((gpuData[5]>>8) & 0x000000ff),(gpuData[11] & 0x000000ff), ((gpuData[11]>>8) & 0x000000ff),(gpuData[8] & 0x000000ff), ((gpuData[8]>>8) & 0x000000ff),\r
- ((gpuData[2]>>12) & 0x3f0),((gpuData[2]>>22) & iGPUHeightMask),\r
- gpuData[0],gpuData[3],gpuData[6],gpuData[9]);\r
- else\r
- drawPoly4TGEx8_TRI_IL(lx0,ly0,lx1,ly1,lx3,ly3,lx2,ly2,\r
- (gpuData[2] & 0x000000ff), ((gpuData[2]>>8) & 0x000000ff), (gpuData[5] & 0x000000ff), ((gpuData[5]>>8) & 0x000000ff),(gpuData[11] & 0x000000ff), ((gpuData[11]>>8) & 0x000000ff),(gpuData[8] & 0x000000ff), ((gpuData[8]>>8) & 0x000000ff),\r
- ((gpuData[2]>>12) & 0x3f0),((gpuData[2]>>22) & iGPUHeightMask),\r
- gpuData[0],gpuData[3],gpuData[6],gpuData[9]);\r
- return;\r
- }\r
-\r
- if(!bUsingTWin)\r
- {\r
-#ifdef POLYQUAD3GT\r
- if(IsNoRect())\r
- {\r
- switch (GlobalTextTP)\r
- {\r
- case 0:\r
- drawPoly4TGEx4_TRI(lx0,ly0,lx1,ly1,lx3,ly3,lx2,ly2,\r
- (gpuData[2] & 0x000000ff), ((gpuData[2]>>8) & 0x000000ff), (gpuData[5] & 0x000000ff), ((gpuData[5]>>8) & 0x000000ff),(gpuData[11] & 0x000000ff), ((gpuData[11]>>8) & 0x000000ff),(gpuData[8] & 0x000000ff), ((gpuData[8]>>8) & 0x000000ff),\r
- ((gpuData[2]>>12) & 0x3f0),((gpuData[2]>>22) & iGPUHeightMask),\r
- gpuData[0],gpuData[3],gpuData[6],gpuData[9]);\r
-\r
- return;\r
- case 1:\r
- drawPoly4TGEx8_TRI(lx0,ly0,lx1,ly1,lx3,ly3,lx2,ly2,\r
- (gpuData[2] & 0x000000ff), ((gpuData[2]>>8) & 0x000000ff), (gpuData[5] & 0x000000ff), ((gpuData[5]>>8) & 0x000000ff),(gpuData[11] & 0x000000ff), ((gpuData[11]>>8) & 0x000000ff),(gpuData[8] & 0x000000ff), ((gpuData[8]>>8) & 0x000000ff),\r
- ((gpuData[2]>>12) & 0x3f0),((gpuData[2]>>22) & iGPUHeightMask),\r
- gpuData[0],gpuData[3],gpuData[6],gpuData[9]);\r
- return;\r
- case 2:\r
- drawPoly4TGD_TRI(lx0,ly0,lx1,ly1,lx3,ly3,lx2,ly2,(gpuData[2] & 0x000000ff),((gpuData[2]>>8) & 0x000000ff), (gpuData[5] & 0x000000ff), ((gpuData[5]>>8) & 0x000000ff),(gpuData[11] & 0x000000ff), ((gpuData[11]>>8) & 0x000000ff),(gpuData[8] & 0x000000ff), ((gpuData[8]>>8) & 0x000000ff),gpuData[0],gpuData[3],gpuData[6],gpuData[9]);\r
- return;\r
- }\r
- return;\r
- }\r
-#endif\r
-\r
- switch (GlobalTextTP)\r
- {\r
- case 0:\r
- drawPoly4TGEx4(lx0,ly0,lx1,ly1,lx3,ly3,lx2,ly2,\r
- (gpuData[2] & 0x000000ff), ((gpuData[2]>>8) & 0x000000ff), (gpuData[5] & 0x000000ff), ((gpuData[5]>>8) & 0x000000ff),(gpuData[11] & 0x000000ff), ((gpuData[11]>>8) & 0x000000ff),(gpuData[8] & 0x000000ff), ((gpuData[8]>>8) & 0x000000ff),\r
- ((gpuData[2]>>12) & 0x3f0),((gpuData[2]>>22) & iGPUHeightMask),\r
- gpuData[0],gpuData[3],gpuData[6],gpuData[9]);\r
-\r
- return;\r
- case 1:\r
- drawPoly4TGEx8(lx0,ly0,lx1,ly1,lx3,ly3,lx2,ly2,\r
- (gpuData[2] & 0x000000ff), ((gpuData[2]>>8) & 0x000000ff), (gpuData[5] & 0x000000ff), ((gpuData[5]>>8) & 0x000000ff),(gpuData[11] & 0x000000ff), ((gpuData[11]>>8) & 0x000000ff),(gpuData[8] & 0x000000ff), ((gpuData[8]>>8) & 0x000000ff),\r
- ((gpuData[2]>>12) & 0x3f0),((gpuData[2]>>22) & iGPUHeightMask),\r
- gpuData[0],gpuData[3],gpuData[6],gpuData[9]);\r
- return;\r
- case 2:\r
- drawPoly4TGD(lx0,ly0,lx1,ly1,lx3,ly3,lx2,ly2,(gpuData[2] & 0x000000ff),((gpuData[2]>>8) & 0x000000ff), (gpuData[5] & 0x000000ff), ((gpuData[5]>>8) & 0x000000ff),(gpuData[11] & 0x000000ff), ((gpuData[11]>>8) & 0x000000ff),(gpuData[8] & 0x000000ff), ((gpuData[8]>>8) & 0x000000ff),gpuData[0],gpuData[3],gpuData[6],gpuData[9]);\r
- return;\r
- }\r
- return;\r
- }\r
- \r
- switch (GlobalTextTP)\r
- {\r
- case 0:\r
- drawPoly4TGEx4_TW(lx0,ly0,lx1,ly1,lx3,ly3,lx2,ly2,\r
- (gpuData[2] & 0x000000ff), ((gpuData[2]>>8) & 0x000000ff), (gpuData[5] & 0x000000ff), ((gpuData[5]>>8) & 0x000000ff),(gpuData[11] & 0x000000ff), ((gpuData[11]>>8) & 0x000000ff),(gpuData[8] & 0x000000ff), ((gpuData[8]>>8) & 0x000000ff),\r
- ((gpuData[2]>>12) & 0x3f0),((gpuData[2]>>22) & iGPUHeightMask),\r
- gpuData[0],gpuData[3],gpuData[6],gpuData[9]);\r
- return;\r
- case 1:\r
- drawPoly4TGEx8_TW(lx0,ly0,lx1,ly1,lx3,ly3,lx2,ly2,\r
- (gpuData[2] & 0x000000ff), ((gpuData[2]>>8) & 0x000000ff), (gpuData[5] & 0x000000ff), ((gpuData[5]>>8) & 0x000000ff),(gpuData[11] & 0x000000ff), ((gpuData[11]>>8) & 0x000000ff),(gpuData[8] & 0x000000ff), ((gpuData[8]>>8) & 0x000000ff),\r
- ((gpuData[2]>>12) & 0x3f0),((gpuData[2]>>22) & iGPUHeightMask),\r
- gpuData[0],gpuData[3],gpuData[6],gpuData[9]);\r
- return;\r
- case 2:\r
- drawPoly4TGD_TW(lx0,ly0,lx1,ly1,lx3,ly3,lx2,ly2,(gpuData[2] & 0x000000ff),((gpuData[2]>>8) & 0x000000ff), (gpuData[5] & 0x000000ff), ((gpuData[5]>>8) & 0x000000ff),(gpuData[11] & 0x000000ff), ((gpuData[11]>>8) & 0x000000ff),(gpuData[8] & 0x000000ff), ((gpuData[8]>>8) & 0x000000ff),gpuData[0],gpuData[3],gpuData[6],gpuData[9]);\r
- return;\r
- }\r
-}\r
- \r
-////////////////////////////////////////////////////////////////////////\r
-// SPRITE FUNCS\r
-////////////////////////////////////////////////////////////////////////\r
-\r
-void DrawSoftwareSpriteTWin(unsigned char * baseAddr, int w, int h)\r
-{ \r
- uint32_t *gpuData = (uint32_t *)baseAddr;\r
- short sx0,sy0,sx1,sy1,sx2,sy2,sx3,sy3;\r
- short tx0,ty0,tx1,ty1,tx2,ty2,tx3,ty3;\r
-\r
- sx0=lx0;\r
- sy0=ly0;\r
-\r
- sx0=sx3=sx0+PSXDisplay.DrawOffset.x;\r
- sx1=sx2=sx0+w;\r
- sy0=sy1=sy0+PSXDisplay.DrawOffset.y;\r
- sy2=sy3=sy0+h;\r
- \r
- tx0=tx3=gpuData[2]&0xff;\r
- tx1=tx2=tx0+w;\r
- ty0=ty1=(gpuData[2]>>8)&0xff;\r
- ty2=ty3=ty0+h;\r
-\r
- switch (GlobalTextTP)\r
- {\r
- case 0:\r
- drawPoly4TEx4_TW_S(sx0,sy0,sx1,sy1,sx2,sy2,sx3,sy3,\r
- tx0,ty0,tx1,ty1,tx2,ty2,tx3,ty3, \r
- ((gpuData[2]>>12) & 0x3f0), ((gpuData[2]>>22) & iGPUHeightMask));\r
- return;\r
- case 1:\r
- drawPoly4TEx8_TW_S(sx0,sy0,sx1,sy1,sx2,sy2,sx3,sy3,\r
- tx0,ty0,tx1,ty1,tx2,ty2,tx3,ty3, \r
- ((gpuData[2]>>12) & 0x3f0), ((gpuData[2]>>22) & iGPUHeightMask));\r
- return;\r
- case 2:\r
- drawPoly4TD_TW_S(sx0,sy0,sx1,sy1,sx2,sy2,sx3,sy3,\r
- tx0,ty0,tx1,ty1,tx2,ty2,tx3,ty3);\r
- return;\r
- }\r
-} \r
-\r
-////////////////////////////////////////////////////////////////////////\r
-\r
-void DrawSoftwareSpriteMirror(unsigned char * baseAddr, int w, int h)\r
-{\r
- int sprtY,sprtX,sprtW,sprtH,lXDir,lYDir;\r
- int clutY0,clutX0,clutP,textX0,textY0,sprtYa,sprCY,sprCX,sprA;\r
- short tC;\r
- uint32_t *gpuData = (uint32_t *)baseAddr;\r
- sprtY = ly0;\r
- sprtX = lx0;\r
- sprtH = h;\r
- sprtW = w;\r
- clutY0 = (gpuData[2]>>22) & iGPUHeightMask;\r
- clutX0 = (gpuData[2]>>12) & 0x3f0;\r
- clutP = (clutY0<<11) + (clutX0<<1);\r
- textY0 = ((gpuData[2]>>8) & 0x000000ff) + GlobalTextAddrY;\r
- textX0 = (gpuData[2] & 0x000000ff);\r
-\r
- sprtX+=PSXDisplay.DrawOffset.x;\r
- sprtY+=PSXDisplay.DrawOffset.y;\r
-\r
-// while (sprtX>1023) sprtX-=1024;\r
-// while (sprtY>MAXYLINESMIN1) sprtY-=MAXYLINES;\r
-\r
- if(sprtX>drawW)\r
- {\r
-// if((sprtX+sprtW)>1023) sprtX-=1024;\r
-// else return;\r
- return;\r
- }\r
-\r
- if(sprtY>drawH)\r
- {\r
-// if ((sprtY+sprtH)>MAXYLINESMIN1) sprtY-=MAXYLINES;\r
-// else return;\r
- return;\r
- }\r
-\r
- if(sprtY<drawY)\r
- {\r
- if((sprtY+sprtH)<drawY) return;\r
- sprtH-=(drawY-sprtY);\r
- textY0+=(drawY-sprtY);\r
- sprtY=drawY;\r
- }\r
-\r
- if(sprtX<drawX)\r
- {\r
- if((sprtX+sprtW)<drawX) return;\r
- sprtW-=(drawX-sprtX);\r
- textX0+=(drawX-sprtX);\r
- sprtX=drawX;\r
- }\r
-\r
- if((sprtY+sprtH)>drawH) sprtH=drawH-sprtY+1;\r
- if((sprtX+sprtW)>drawW) sprtW=drawW-sprtX+1;\r
-\r
- if(usMirror&0x1000) lXDir=-1; else lXDir=1;\r
- if(usMirror&0x2000) lYDir=-1; else lYDir=1;\r
-\r
- switch (GlobalTextTP)\r
- {\r
- case 0: // texture is 4-bit\r
- \r
- sprtW=sprtW/2;\r
- textX0=(GlobalTextAddrX<<1)+(textX0>>1);\r
- sprtYa=(sprtY<<10);\r
- clutP=(clutY0<<10)+clutX0;\r
- for (sprCY=0;sprCY<sprtH;sprCY++)\r
- for (sprCX=0;sprCX<sprtW;sprCX++)\r
- {\r
- tC= psxVub[((textY0+(sprCY*lYDir))<<11) + textX0 +(sprCX*lXDir)];\r
- sprA=sprtYa+(sprCY<<10)+sprtX + (sprCX<<1);\r
- GetTextureTransColG_SPR(&psxVuw[sprA],psxVuw[clutP+((tC>>4)&0xf)]);\r
- GetTextureTransColG_SPR(&psxVuw[sprA+1],psxVuw[clutP+(tC&0xf)]);\r
- }\r
- return;\r
-\r
- case 1: \r
-\r
- clutP>>=1;\r
- for(sprCY=0;sprCY<sprtH;sprCY++)\r
- for(sprCX=0;sprCX<sprtW;sprCX++)\r
- { \r
- tC = psxVub[((textY0+(sprCY*lYDir))<<11)+(GlobalTextAddrX<<1) + textX0 + (sprCX*lXDir)] & 0xff;\r
- GetTextureTransColG_SPR(&psxVuw[((sprtY+sprCY)<<10)+sprtX + sprCX],psxVuw[clutP+tC]);\r
- }\r
- return;\r
-\r
-\r
- case 2:\r
-\r
- for (sprCY=0;sprCY<sprtH;sprCY++)\r
- for (sprCX=0;sprCX<sprtW;sprCX++)\r
- { \r
- GetTextureTransColG_SPR(&psxVuw[((sprtY+sprCY)<<10)+sprtX+sprCX],\r
- psxVuw[((textY0+(sprCY*lYDir))<<10)+GlobalTextAddrX + textX0 +(sprCX*lXDir)]);\r
- }\r
- return;\r
- }\r
-}\r
-\r
-////////////////////////////////////////////////////////////////////////\r
-\r
-void DrawSoftwareSprite_IL(unsigned char * baseAddr,short w,short h,int tx,int ty)\r
-{\r
- int sprtY,sprtX,sprtW,sprtH,tdx,tdy;\r
- uint32_t *gpuData = (uint32_t *)baseAddr;\r
-\r
- sprtY = ly0;\r
- sprtX = lx0;\r
- sprtH = h;\r
- sprtW = w;\r
-\r
- sprtX+=PSXDisplay.DrawOffset.x;\r
- sprtY+=PSXDisplay.DrawOffset.y;\r
-\r
- if(sprtX>drawW) return;\r
- if(sprtY>drawH) return;\r
-\r
- tdx=tx+sprtW;\r
- tdy=ty+sprtH;\r
-\r
- sprtW+=sprtX;\r
- sprtH+=sprtY;\r
-\r
- // Pete is too lazy to make a faster version ;)\r
-\r
- if(GlobalTextTP==0)\r
- drawPoly4TEx4_IL(sprtX,sprtY,sprtX,sprtH,sprtW,sprtH,sprtW,sprtY,\r
- tx,ty, tx,tdy, tdx,tdy, tdx,ty, \r
- (gpuData[2]>>12) & 0x3f0, ((gpuData[2]>>22) & iGPUHeightMask));\r
-\r
-\r
- else\r
- drawPoly4TEx8_IL(sprtX,sprtY,sprtX,sprtH,sprtW,sprtH,sprtW,sprtY,\r
- tx,ty, tx,tdy, tdx,tdy, tdx,ty, \r
- (gpuData[2]>>12) & 0x3f0, ((gpuData[2]>>22) & iGPUHeightMask));\r
-}\r
-\r
-////////////////////////////////////////////////////////////////////////\r
-\r
-void DrawSoftwareSprite(unsigned char *baseAddr, short w, short h, int tx, int ty)\r
-{\r
- int sprtY, sprtX, sprtW, sprtH;\r
- int clutY0, clutX0, clutP, textX0, textY0, sprtYa, sprCY, sprCX, sprA;\r
- short tC, tC2;\r
- uint32_t *gpuData = (uint32_t *)baseAddr;\r
- unsigned char *pV;\r
- BOOL bWT,bWS;\r
-\r
- if(GlobalTextIL && GlobalTextTP<2)\r
- {DrawSoftwareSprite_IL(baseAddr,w,h,tx,ty);return;}\r
-\r
- sprtY = ly0;\r
- sprtX = lx0;\r
- sprtH = h;\r
- sprtW = w;\r
- clutY0 = (gpuData[2]>>22) & iGPUHeightMask;\r
- clutX0 = (gpuData[2]>>12) & 0x3f0;\r
-\r
- clutP = (clutY0<<11) + (clutX0<<1);\r
-\r
- textY0 =ty+ GlobalTextAddrY;\r
- textX0 =tx;\r
-\r
- sprtX+=PSXDisplay.DrawOffset.x;\r
- sprtY+=PSXDisplay.DrawOffset.y;\r
-\r
- //while (sprtX>1023) sprtX-=1024;\r
- //while (sprtY>MAXYLINESMIN1) sprtY-=MAXYLINES;\r
-\r
- if(sprtX>drawW)\r
- {\r
-// if((sprtX+sprtW)>1023) sprtX-=1024;\r
-// else return;\r
- return;\r
- }\r
-\r
- if(sprtY>drawH)\r
- {\r
-// if ((sprtY+sprtH)>MAXYLINESMIN1) sprtY-=MAXYLINES;\r
-// else return;\r
- return;\r
- }\r
-\r
- if(sprtY<drawY)\r
- {\r
- if((sprtY+sprtH)<drawY) return;\r
- sprtH-=(drawY-sprtY);\r
- textY0+=(drawY-sprtY);\r
- sprtY=drawY;\r
- }\r
-\r
- if(sprtX<drawX)\r
- {\r
- if((sprtX+sprtW)<drawX) return;\r
-\r
- sprtW-=(drawX-sprtX);\r
- textX0+=(drawX-sprtX);\r
- sprtX=drawX;\r
- }\r
-\r
- if((sprtY+sprtH)>drawH) sprtH=drawH-sprtY+1;\r
- if((sprtX+sprtW)>drawW) sprtW=drawW-sprtX+1;\r
-\r
-\r
- bWT=FALSE;\r
- bWS=FALSE;\r
-\r
- switch (GlobalTextTP)\r
- {\r
- case 0:\r
-\r
- if(textX0&1) {bWS=TRUE;sprtW--;}\r
- if(sprtW&1) bWT=TRUE;\r
- \r
- sprtW=sprtW>>1;\r
- textX0=(GlobalTextAddrX<<1)+(textX0>>1)+(textY0<<11);\r
- sprtYa=(sprtY<<10)+sprtX;\r
- clutP=(clutY0<<10)+clutX0;\r
-\r
-#ifdef FASTSOLID\r
- \r
- if(!bCheckMask && !DrawSemiTrans)\r
- {\r
- for (sprCY=0;sprCY<sprtH;sprCY++)\r
- {\r
- sprA=sprtYa+(sprCY<<10);\r
- pV=&psxVub[(sprCY<<11)+textX0];\r
-\r
- if(bWS)\r
- {\r
- tC=*pV++;\r
- GetTextureTransColG_S(&psxVuw[sprA++],psxVuw[clutP+((tC>>4)&0xf)]);\r
- }\r
-\r
- for (sprCX=0;sprCX<sprtW;sprCX++,sprA+=2)\r
- { \r
- tC=*pV++;\r
-\r
- GetTextureTransColG32_S((uint32_t *)&psxVuw[sprA],\r
- (((int)psxVuw[clutP+((tC>>4)&0xf)])<<16)|\r
- psxVuw[clutP+(tC&0x0f)]);\r
- }\r
-\r
- if(bWT)\r
- {\r
- tC=*pV;\r
- GetTextureTransColG_S(&psxVuw[sprA],psxVuw[clutP+(tC&0x0f)]);\r
- }\r
- }\r
- return;\r
- }\r
-\r
-#endif\r
-\r
- for (sprCY=0;sprCY<sprtH;sprCY++)\r
- {\r
- sprA=sprtYa+(sprCY<<10);\r
- pV=&psxVub[(sprCY<<11)+textX0];\r
-\r
- if(bWS)\r
- {\r
- tC=*pV++;\r
- GetTextureTransColG_SPR(&psxVuw[sprA++],psxVuw[clutP+((tC>>4)&0xf)]);\r
- }\r
-\r
- for (sprCX=0;sprCX<sprtW;sprCX++,sprA+=2)\r
- { \r
- tC=*pV++;\r
-\r
- GetTextureTransColG32_SPR((uint32_t *)&psxVuw[sprA],\r
- (((int)psxVuw[clutP+((tC>>4)&0xf)])<<16)|\r
- psxVuw[clutP+(tC&0x0f)]);\r
- }\r
-\r
- if(bWT)\r
- {\r
- tC=*pV;\r
- GetTextureTransColG_SPR(&psxVuw[sprA],psxVuw[clutP+(tC&0x0f)]);\r
- }\r
- }\r
- return;\r
-\r
- case 1:\r
- clutP>>=1;sprtW--;\r
- textX0+=(GlobalTextAddrX<<1) + (textY0<<11);\r
-\r
-#ifdef FASTSOLID\r
-\r
- if(!bCheckMask && !DrawSemiTrans)\r
- {\r
- for(sprCY=0;sprCY<sprtH;sprCY++)\r
- {\r
- sprA=((sprtY+sprCY)<<10)+sprtX;\r
- pV=&psxVub[(sprCY<<11)+textX0];\r
- for(sprCX=0;sprCX<sprtW;sprCX+=2,sprA+=2)\r
- { \r
- tC = *pV++;tC2 = *pV++;\r
- GetTextureTransColG32_S((uint32_t *)&psxVuw[sprA],\r
- (((int)psxVuw[clutP+tC2])<<16)|\r
- psxVuw[clutP+tC]);\r
- }\r
- if(sprCX==sprtW)\r
- GetTextureTransColG_S(&psxVuw[sprA],psxVuw[clutP+(*pV)]);\r
- }\r
- return;\r
- }\r
-\r
-#endif\r
-\r
- for(sprCY=0;sprCY<sprtH;sprCY++)\r
- {\r
- sprA=((sprtY+sprCY)<<10)+sprtX;\r
- pV=&psxVub[(sprCY<<11)+textX0];\r
- for(sprCX=0;sprCX<sprtW;sprCX+=2,sprA+=2)\r
- { \r
- tC = *pV++;tC2 = *pV++;\r
- GetTextureTransColG32_SPR((uint32_t *)&psxVuw[sprA],\r
- (((int)psxVuw[clutP+tC2])<<16)|\r
- psxVuw[clutP+tC]);\r
- }\r
- if(sprCX==sprtW)\r
- GetTextureTransColG_SPR(&psxVuw[sprA],psxVuw[clutP+(*pV)]);\r
- }\r
- return;\r
-\r
- case 2:\r
-\r
- textX0+=(GlobalTextAddrX) + (textY0<<10);\r
- sprtW--;\r
-\r
-#ifdef FASTSOLID\r
-\r
- if(!bCheckMask && !DrawSemiTrans)\r
- {\r
- for (sprCY=0;sprCY<sprtH;sprCY++)\r
- {\r
- sprA=((sprtY+sprCY)<<10)+sprtX;\r
-\r
- for (sprCX=0;sprCX<sprtW;sprCX+=2,sprA+=2)\r
- { \r
- GetTextureTransColG32_S((uint32_t *)&psxVuw[sprA],\r
- (((int)psxVuw[(sprCY<<10) + textX0 + sprCX +1])<<16)|\r
- psxVuw[(sprCY<<10) + textX0 + sprCX]);\r
- }\r
- if(sprCX==sprtW)\r
- GetTextureTransColG_S(&psxVuw[sprA],\r
- psxVuw[(sprCY<<10) + textX0 + sprCX]);\r
-\r
- }\r
- return;\r
- }\r
-\r
-#endif\r
-\r
- for (sprCY=0;sprCY<sprtH;sprCY++)\r
- {\r
- sprA=((sprtY+sprCY)<<10)+sprtX;\r
-\r
- for (sprCX=0;sprCX<sprtW;sprCX+=2,sprA+=2)\r
- { \r
- GetTextureTransColG32_SPR((uint32_t *)&psxVuw[sprA],\r
- (((int)psxVuw[(sprCY<<10) + textX0 + sprCX +1])<<16)|\r
- psxVuw[(sprCY<<10) + textX0 + sprCX]);\r
- }\r
- if(sprCX==sprtW)\r
- GetTextureTransColG_SPR(&psxVuw[sprA],\r
- psxVuw[(sprCY<<10) + textX0 + sprCX]);\r
-\r
- }\r
- return;\r
- } \r
-}\r
- \r
-///////////////////////////////////////////////////////////////////////\r
-\r
-/////////////////////////////////////////////////////////////////\r
-/////////////////////////////////////////////////////////////////\r
-/////////////////////////////////////////////////////////////////\r
-// LINE FUNCS\r
-////////////////////////////////////////////////////////////////////////\r
-/////////////////////////////////////////////////////////////////\r
-/////////////////////////////////////////////////////////////////\r
-\r
-\r
-///////////////////////////////////////////////////////////////////////\r
-\r
-void Line_E_SE_Shade(int x0, int y0, int x1, int y1, uint32_t rgb0, uint32_t rgb1)\r
-{\r
- int dx, dy, incrE, incrSE, d;\r
- uint32_t r0, g0, b0, r1, g1, b1;\r
- int dr, dg, db;\r
-\r
- r0 = (rgb0 & 0x00ff0000);\r
- g0 = (rgb0 & 0x0000ff00) << 8;\r
- b0 = (rgb0 & 0x000000ff) << 16;\r
- r1 = (rgb1 & 0x00ff0000);\r
- g1 = (rgb1 & 0x0000ff00) << 8;\r
- b1 = (rgb1 & 0x000000ff) << 16;\r
-\r
- dx = x1 - x0;\r
- dy = y1 - y0;\r
-\r
- if (dx > 0)\r
- {\r
- dr = ((int)r1 - (int)r0) / dx;\r
- dg = ((int)g1 - (int)g0) / dx;\r
- db = ((int)b1 - (int)b0) / dx;\r
- }\r
- else\r
- {\r
- dr = ((int)r1 - (int)r0);\r
- dg = ((int)g1 - (int)g0);\r
- db = ((int)b1 - (int)b0);\r
- }\r
-\r
- d = 2*dy - dx; /* Initial value of d */\r
- incrE = 2*dy; /* incr. used for move to E */\r
- incrSE = 2*(dy - dx); /* incr. used for move to SE */\r
-\r
- if ((x0>=drawX)&&(x0<drawW)&&(y0>=drawY)&&(y0<drawH))\r
- GetShadeTransCol(&psxVuw[(y0<<10)+x0],(unsigned short)(((r0 >> 9)&0x7c00)|((g0 >> 14)&0x03e0)|((b0 >> 19)&0x001f)));\r
- while(x0 < x1)\r
- {\r
- if (d <= 0)\r
- {\r
- d = d + incrE; /* Choose E */\r
- }\r
- else\r
- {\r
- d = d + incrSE; /* Choose SE */\r
- y0++;\r
- }\r
- x0++;\r
-\r
- r0+=dr;\r
- g0+=dg;\r
- b0+=db;\r
-\r
- if ((x0>=drawX)&&(x0<drawW)&&(y0>=drawY)&&(y0<drawH))\r
- GetShadeTransCol(&psxVuw[(y0<<10)+x0],(unsigned short)(((r0 >> 9)&0x7c00)|((g0 >> 14)&0x03e0)|((b0 >> 19)&0x001f)));\r
- }\r
-}\r
-\r
-///////////////////////////////////////////////////////////////////////\r
-\r
-void Line_S_SE_Shade(int x0, int y0, int x1, int y1, uint32_t rgb0, uint32_t rgb1)\r
-{\r
- int dx, dy, incrS, incrSE, d;\r
- uint32_t r0, g0, b0, r1, g1, b1;\r
- int dr, dg, db;\r
-\r
- r0 = (rgb0 & 0x00ff0000);\r
- g0 = (rgb0 & 0x0000ff00) << 8;\r
- b0 = (rgb0 & 0x000000ff) << 16;\r
- r1 = (rgb1 & 0x00ff0000);\r
- g1 = (rgb1 & 0x0000ff00) << 8;\r
- b1 = (rgb1 & 0x000000ff) << 16;\r
-\r
- dx = x1 - x0;\r
- dy = y1 - y0;\r
-\r
- if (dy > 0)\r
- {\r
- dr = ((int)r1 - (int)r0) / dy;\r
- dg = ((int)g1 - (int)g0) / dy;\r
- db = ((int)b1 - (int)b0) / dy;\r
- }\r
- else\r
- {\r
- dr = ((int)r1 - (int)r0);\r
- dg = ((int)g1 - (int)g0);\r
- db = ((int)b1 - (int)b0);\r
- }\r
-\r
- d = 2*dx - dy; /* Initial value of d */\r
- incrS = 2*dx; /* incr. used for move to S */\r
- incrSE = 2*(dx - dy); /* incr. used for move to SE */\r
-\r
- if ((x0>=drawX)&&(x0<drawW)&&(y0>=drawY)&&(y0<drawH))\r
- GetShadeTransCol(&psxVuw[(y0<<10)+x0],(unsigned short)(((r0 >> 9)&0x7c00)|((g0 >> 14)&0x03e0)|((b0 >> 19)&0x001f)));\r
- while(y0 < y1)\r
- {\r
- if (d <= 0)\r
- {\r
- d = d + incrS; /* Choose S */\r
- }\r
- else\r
- {\r
- d = d + incrSE; /* Choose SE */\r
- x0++;\r
- }\r
- y0++;\r
-\r
- r0+=dr;\r
- g0+=dg;\r
- b0+=db;\r
-\r
- if ((x0>=drawX)&&(x0<drawW)&&(y0>=drawY)&&(y0<drawH))\r
- GetShadeTransCol(&psxVuw[(y0<<10)+x0],(unsigned short)(((r0 >> 9)&0x7c00)|((g0 >> 14)&0x03e0)|((b0 >> 19)&0x001f)));\r
- }\r
-}\r
-\r
-///////////////////////////////////////////////////////////////////////\r
-\r
-void Line_N_NE_Shade(int x0, int y0, int x1, int y1, uint32_t rgb0, uint32_t rgb1)\r
-{\r
- int dx, dy, incrN, incrNE, d;\r
- uint32_t r0, g0, b0, r1, g1, b1;\r
- int dr, dg, db;\r
-\r
- r0 = (rgb0 & 0x00ff0000);\r
- g0 = (rgb0 & 0x0000ff00) << 8;\r
- b0 = (rgb0 & 0x000000ff) << 16;\r
- r1 = (rgb1 & 0x00ff0000);\r
- g1 = (rgb1 & 0x0000ff00) << 8;\r
- b1 = (rgb1 & 0x000000ff) << 16;\r
-\r
- dx = x1 - x0;\r
- dy = -(y1 - y0);\r
-\r
- if (dy > 0)\r
- {\r
- dr = ((uint32_t)r1 - (uint32_t)r0) / dy;\r
- dg = ((uint32_t)g1 - (uint32_t)g0) / dy;\r
- db = ((uint32_t)b1 - (uint32_t)b0) / dy;\r
- }\r
- else\r
- {\r
- dr = ((uint32_t)r1 - (uint32_t)r0);\r
- dg = ((uint32_t)g1 - (uint32_t)g0);\r
- db = ((uint32_t)b1 - (uint32_t)b0);\r
- }\r
-\r
- d = 2*dx - dy; /* Initial value of d */\r
- incrN = 2*dx; /* incr. used for move to N */\r
- incrNE = 2*(dx - dy); /* incr. used for move to NE */\r
-\r
- if ((x0>=drawX)&&(x0<drawW)&&(y0>=drawY)&&(y0<drawH))\r
- GetShadeTransCol(&psxVuw[(y0<<10)+x0],(unsigned short)(((r0 >> 9)&0x7c00)|((g0 >> 14)&0x03e0)|((b0 >> 19)&0x001f)));\r
- while(y0 > y1)\r
- {\r
- if (d <= 0)\r
- {\r
- d = d + incrN; /* Choose N */\r
- }\r
- else\r
- {\r
- d = d + incrNE; /* Choose NE */\r
- x0++;\r
- }\r
- y0--;\r
-\r
- r0+=dr;\r
- g0+=dg;\r
- b0+=db;\r
-\r
- if ((x0>=drawX)&&(x0<drawW)&&(y0>=drawY)&&(y0<drawH))\r
- GetShadeTransCol(&psxVuw[(y0<<10)+x0],(unsigned short)(((r0 >> 9)&0x7c00)|((g0 >> 14)&0x03e0)|((b0 >> 19)&0x001f)));\r
- }\r
-}\r
-\r
-///////////////////////////////////////////////////////////////////////\r
-\r
-void Line_E_NE_Shade(int x0, int y0, int x1, int y1, uint32_t rgb0, uint32_t rgb1)\r
-{\r
- int dx, dy, incrE, incrNE, d;\r
- uint32_t r0, g0, b0, r1, g1, b1;\r
- int dr, dg, db;\r
-\r
- r0 = (rgb0 & 0x00ff0000);\r
- g0 = (rgb0 & 0x0000ff00) << 8;\r
- b0 = (rgb0 & 0x000000ff) << 16;\r
- r1 = (rgb1 & 0x00ff0000);\r
- g1 = (rgb1 & 0x0000ff00) << 8;\r
- b1 = (rgb1 & 0x000000ff) << 16;\r
-\r
- dx = x1 - x0;\r
- dy = -(y1 - y0);\r
-\r
- if (dx > 0)\r
- {\r
- dr = ((int)r1 - (int)r0) / dx;\r
- dg = ((int)g1 - (int)g0) / dx;\r
- db = ((int)b1 - (int)b0) / dx;\r
- }\r
- else\r
- {\r
- dr = ((int)r1 - (int)r0);\r
- dg = ((int)g1 - (int)g0);\r
- db = ((int)b1 - (int)b0);\r
- }\r
-\r
- d = 2*dy - dx; /* Initial value of d */\r
- incrE = 2*dy; /* incr. used for move to E */\r
- incrNE = 2*(dy - dx); /* incr. used for move to NE */\r
-\r
- if ((x0>=drawX)&&(x0<drawW)&&(y0>=drawY)&&(y0<drawH))\r
- GetShadeTransCol(&psxVuw[(y0<<10)+x0],(unsigned short)(((r0 >> 9)&0x7c00)|((g0 >> 14)&0x03e0)|((b0 >> 19)&0x001f)));\r
- while(x0 < x1)\r
- {\r
- if (d <= 0)\r
- {\r
- d = d + incrE; /* Choose E */\r
- }\r
- else\r
- {\r
- d = d + incrNE; /* Choose NE */\r
- y0--;\r
- }\r
- x0++;\r
-\r
- r0+=dr;\r
- g0+=dg;\r
- b0+=db;\r
-\r
- if ((x0>=drawX)&&(x0<drawW)&&(y0>=drawY)&&(y0<drawH))\r
- GetShadeTransCol(&psxVuw[(y0<<10)+x0],(unsigned short)(((r0 >> 9)&0x7c00)|((g0 >> 14)&0x03e0)|((b0 >> 19)&0x001f)));\r
- }\r
-}\r
-\r
-///////////////////////////////////////////////////////////////////////\r
-\r
-void VertLineShade(int x, int y0, int y1, uint32_t rgb0, uint32_t rgb1)\r
-{\r
- int y, dy;\r
- uint32_t r0, g0, b0, r1, g1, b1;\r
- int dr, dg, db;\r
-\r
- r0 = (rgb0 & 0x00ff0000);\r
- g0 = (rgb0 & 0x0000ff00) << 8;\r
- b0 = (rgb0 & 0x000000ff) << 16;\r
- r1 = (rgb1 & 0x00ff0000);\r
- g1 = (rgb1 & 0x0000ff00) << 8;\r
- b1 = (rgb1 & 0x000000ff) << 16;\r
-\r
- dy = (y1 - y0);\r
-\r
- if (dy > 0)\r
- {\r
- dr = ((int)r1 - (int)r0) / dy;\r
- dg = ((int)g1 - (int)g0) / dy;\r
- db = ((int)b1 - (int)b0) / dy;\r
- }\r
- else\r
- {\r
- dr = ((int)r1 - (int)r0);\r
- dg = ((int)g1 - (int)g0);\r
- db = ((int)b1 - (int)b0);\r
- }\r
-\r
- if (y0 < drawY)\r
- {\r
- r0+=dr*(drawY - y0);\r
- g0+=dg*(drawY - y0);\r
- b0+=db*(drawY - y0);\r
- y0 = drawY;\r
- }\r
-\r
- if (y1 > drawH)\r
- y1 = drawH;\r
-\r
- for (y = y0; y <= y1; y++)\r
- {\r
- GetShadeTransCol(&psxVuw[(y<<10)+x],(unsigned short)(((r0 >> 9)&0x7c00)|((g0 >> 14)&0x03e0)|((b0 >> 19)&0x001f)));\r
- r0+=dr;\r
- g0+=dg;\r
- b0+=db;\r
- }\r
-}\r
-\r
-///////////////////////////////////////////////////////////////////////\r
-\r
-void HorzLineShade(int y, int x0, int x1, uint32_t rgb0, uint32_t rgb1)\r
-{\r
- int x, dx;\r
- uint32_t r0, g0, b0, r1, g1, b1;\r
- int dr, dg, db;\r
-\r
- r0 = (rgb0 & 0x00ff0000);\r
- g0 = (rgb0 & 0x0000ff00) << 8;\r
- b0 = (rgb0 & 0x000000ff) << 16;\r
- r1 = (rgb1 & 0x00ff0000);\r
- g1 = (rgb1 & 0x0000ff00) << 8;\r
- b1 = (rgb1 & 0x000000ff) << 16;\r
-\r
- dx = (x1 - x0);\r
-\r
- if (dx > 0)\r
- {\r
- dr = ((int)r1 - (int)r0) / dx;\r
- dg = ((int)g1 - (int)g0) / dx;\r
- db = ((int)b1 - (int)b0) / dx;\r
- }\r
- else\r
- {\r
- dr = ((int)r1 - (int)r0);\r
- dg = ((int)g1 - (int)g0);\r
- db = ((int)b1 - (int)b0);\r
- }\r
-\r
- if (x0 < drawX)\r
- {\r
- r0+=dr*(drawX - x0);\r
- g0+=dg*(drawX - x0);\r
- b0+=db*(drawX - x0);\r
- x0 = drawX;\r
- }\r
-\r
- if (x1 > drawW)\r
- x1 = drawW;\r
-\r
- for (x = x0; x <= x1; x++)\r
- {\r
- GetShadeTransCol(&psxVuw[(y<<10)+x],(unsigned short)(((r0 >> 9)&0x7c00)|((g0 >> 14)&0x03e0)|((b0 >> 19)&0x001f)));\r
- r0+=dr;\r
- g0+=dg;\r
- b0+=db;\r
- }\r
-}\r
-\r
-///////////////////////////////////////////////////////////////////////\r
-\r
-void Line_E_SE_Flat(int x0, int y0, int x1, int y1, unsigned short colour)\r
-{\r
- int dx, dy, incrE, incrSE, d, x, y;\r
-\r
- dx = x1 - x0;\r
- dy = y1 - y0;\r
- d = 2*dy - dx; /* Initial value of d */\r
- incrE = 2*dy; /* incr. used for move to E */\r
- incrSE = 2*(dy - dx); /* incr. used for move to SE */\r
- x = x0;\r
- y = y0;\r
- if ((x>=drawX)&&(x<drawW)&&(y>=drawY)&&(y<drawH))\r
- GetShadeTransCol(&psxVuw[(y<<10)+x], colour);\r
- while(x < x1)\r
- {\r
- if (d <= 0)\r
- {\r
- d = d + incrE; /* Choose E */\r
- x++;\r
- }\r
- else\r
- {\r
- d = d + incrSE; /* Choose SE */\r
- x++;\r
- y++;\r
- }\r
- if ((x>=drawX)&&(x<drawW)&&(y>=drawY)&&(y<drawH))\r
- GetShadeTransCol(&psxVuw[(y<<10)+x], colour);\r
- }\r
-}\r
-\r
-///////////////////////////////////////////////////////////////////////\r
-\r
-void Line_S_SE_Flat(int x0, int y0, int x1, int y1, unsigned short colour)\r
-{\r
- int dx, dy, incrS, incrSE, d, x, y;\r
-\r
- dx = x1 - x0;\r
- dy = y1 - y0;\r
- d = 2*dx - dy; /* Initial value of d */\r
- incrS = 2*dx; /* incr. used for move to S */\r
- incrSE = 2*(dx - dy); /* incr. used for move to SE */\r
- x = x0;\r
- y = y0;\r
- if ((x>=drawX)&&(x<drawW)&&(y>=drawY)&&(y<drawH))\r
- GetShadeTransCol(&psxVuw[(y<<10)+x], colour);\r
- while(y < y1)\r
- {\r
- if (d <= 0)\r
- {\r
- d = d + incrS; /* Choose S */\r
- y++;\r
- }\r
- else\r
- {\r
- d = d + incrSE; /* Choose SE */\r
- x++;\r
- y++;\r
- }\r
- if ((x>=drawX)&&(x<drawW)&&(y>=drawY)&&(y<drawH))\r
- GetShadeTransCol(&psxVuw[(y<<10)+x], colour);\r
- }\r
-}\r
-\r
-///////////////////////////////////////////////////////////////////////\r
-\r
-void Line_N_NE_Flat(int x0, int y0, int x1, int y1, unsigned short colour)\r
-{\r
- int dx, dy, incrN, incrNE, d, x, y;\r
-\r
- dx = x1 - x0;\r
- dy = -(y1 - y0);\r
- d = 2*dx - dy; /* Initial value of d */\r
- incrN = 2*dx; /* incr. used for move to N */\r
- incrNE = 2*(dx - dy); /* incr. used for move to NE */\r
- x = x0;\r
- y = y0;\r
- if ((x>=drawX)&&(x<drawW)&&(y>=drawY)&&(y<drawH))\r
- GetShadeTransCol(&psxVuw[(y<<10)+x], colour);\r
- while(y > y1)\r
- {\r
- if (d <= 0)\r
- {\r
- d = d + incrN; /* Choose N */\r
- y--;\r
- }\r
- else\r
- {\r
- d = d + incrNE; /* Choose NE */\r
- x++;\r
- y--;\r
- }\r
- if ((x>=drawX)&&(x<drawW)&&(y>=drawY)&&(y<drawH))\r
- GetShadeTransCol(&psxVuw[(y<<10)+x], colour);\r
- }\r
-}\r
-\r
-///////////////////////////////////////////////////////////////////////\r
-\r
-void Line_E_NE_Flat(int x0, int y0, int x1, int y1, unsigned short colour)\r
-{\r
- int dx, dy, incrE, incrNE, d, x, y;\r
-\r
- dx = x1 - x0;\r
- dy = -(y1 - y0);\r
- d = 2*dy - dx; /* Initial value of d */\r
- incrE = 2*dy; /* incr. used for move to E */\r
- incrNE = 2*(dy - dx); /* incr. used for move to NE */\r
- x = x0;\r
- y = y0;\r
- if ((x>=drawX)&&(x<drawW)&&(y>=drawY)&&(y<drawH))\r
- GetShadeTransCol(&psxVuw[(y<<10)+x], colour);\r
- while(x < x1)\r
- {\r
- if (d <= 0)\r
- {\r
- d = d + incrE; /* Choose E */\r
- x++;\r
- }\r
- else\r
- {\r
- d = d + incrNE; /* Choose NE */\r
- x++;\r
- y--;\r
- }\r
- if ((x>=drawX)&&(x<drawW)&&(y>=drawY)&&(y<drawH))\r
- GetShadeTransCol(&psxVuw[(y<<10)+x], colour);\r
- }\r
-}\r
-\r
-///////////////////////////////////////////////////////////////////////\r
-\r
-void VertLineFlat(int x, int y0, int y1, unsigned short colour)\r
-{\r
- int y;\r
-\r
- if (y0 < drawY)\r
- y0 = drawY;\r
-\r
- if (y1 > drawH)\r
- y1 = drawH;\r
-\r
- for (y = y0; y <= y1; y++)\r
- GetShadeTransCol(&psxVuw[(y<<10)+x], colour);\r
-}\r
-\r
-///////////////////////////////////////////////////////////////////////\r
-\r
-void HorzLineFlat(int y, int x0, int x1, unsigned short colour)\r
-{\r
- int x;\r
-\r
- if (x0 < drawX)\r
- x0 = drawX;\r
-\r
- if (x1 > drawW)\r
- x1 = drawW;\r
-\r
- for (x = x0; x <= x1; x++)\r
- GetShadeTransCol(&psxVuw[(y<<10)+x], colour);\r
-}\r
-\r
-///////////////////////////////////////////////////////////////////////\r
-\r
-/* Bresenham Line drawing function */\r
-void DrawSoftwareLineShade(int rgb0, int rgb1)\r
-{\r
- short x0, y0, x1, y1, xt, yt;\r
- int rgbt;\r
- double m, dy, dx;\r
-\r
- if(lx0>drawW && lx1>drawW) return;\r
- if(ly0>drawH && ly1>drawH) return;\r
- if(lx0<drawX && lx1<drawX) return;\r
- if(ly0<drawY && ly1<drawY) return;\r
- if(drawY>=drawH) return;\r
- if(drawX>=drawW) return; \r
-\r
- x0 = lx0;\r
- y0 = ly0;\r
- x1 = lx1;\r
- y1 = ly1;\r
-\r
- dx = x1 - x0;\r
- dy = y1 - y0;\r
-\r
- if (dx == 0)\r
- {\r
- if (dy > 0)\r
- VertLineShade(x0, y0, y1, rgb0, rgb1);\r
- else\r
- VertLineShade(x0, y1, y0, rgb1, rgb0);\r
- }\r
- else\r
- if (dy == 0)\r
- {\r
- if (dx > 0)\r
- HorzLineShade(y0, x0, x1, rgb0, rgb1);\r
- else\r
- HorzLineShade(y0, x1, x0, rgb1, rgb0);\r
- }\r
- else\r
- {\r
- if (dx < 0)\r
- {\r
- xt = x0;\r
- yt = y0;\r
- rgbt = rgb0;\r
- x0 = x1;\r
- y0 = y1;\r
- rgb0 = rgb1;\r
- x1 = xt;\r
- y1 = yt;\r
- rgb1 = rgbt;\r
-\r
- dx = x1 - x0;\r
- dy = y1 - y0;\r
- }\r
-\r
- m = dy/dx;\r
-\r
- if (m >= 0)\r
- {\r
- if (m > 1)\r
- Line_S_SE_Shade(x0, y0, x1, y1, rgb0, rgb1);\r
- else\r
- Line_E_SE_Shade(x0, y0, x1, y1, rgb0, rgb1);\r
- }\r
- else\r
- if (m < -1)\r
- Line_N_NE_Shade(x0, y0, x1, y1, rgb0, rgb1);\r
- else\r
- Line_E_NE_Shade(x0, y0, x1, y1, rgb0, rgb1);\r
- }\r
-}\r
-\r
-///////////////////////////////////////////////////////////////////////\r
-\r
-void DrawSoftwareLineFlat(int rgb)\r
-{\r
- short x0, y0, x1, y1, xt, yt;\r
- double m, dy, dx;\r
- unsigned short colour = 0;\r
- \r
- if(lx0>drawW && lx1>drawW) return;\r
- if(ly0>drawH && ly1>drawH) return;\r
- if(lx0<drawX && lx1<drawX) return;\r
- if(ly0<drawY && ly1<drawY) return;\r
- if(drawY>=drawH) return;\r
- if(drawX>=drawW) return; \r
-\r
- colour = ((rgb & 0x00f80000)>>9) | ((rgb & 0x0000f800)>>6) | ((rgb & 0x000000f8)>>3);\r
-\r
- x0 = lx0;\r
- y0 = ly0;\r
- x1 = lx1;\r
- y1 = ly1;\r
-\r
- dx = x1 - x0;\r
- dy = y1 - y0;\r
-\r
- if (dx == 0)\r
- {\r
- if (dy == 0)\r
- return; // Nothing to draw\r
- else if (dy > 0)\r
- VertLineFlat(x0, y0, y1, colour);\r
- else\r
- VertLineFlat(x0, y1, y0, colour);\r
- }\r
- else\r
- if (dy == 0)\r
- {\r
- if (dx > 0)\r
- HorzLineFlat(y0, x0, x1, colour);\r
- else\r
- HorzLineFlat(y0, x1, x0, colour);\r
- }\r
- else\r
- {\r
- if (dx < 0)\r
- {\r
- xt = x0;\r
- yt = y0;\r
- x0 = x1;\r
- y0 = y1;\r
- x1 = xt;\r
- y1 = yt;\r
-\r
- dx = x1 - x0;\r
- dy = y1 - y0;\r
- }\r
-\r
- m = dy/dx;\r
-\r
- if (m >= 0)\r
- {\r
- if (m > 1)\r
- Line_S_SE_Flat(x0, y0, x1, y1, colour);\r
- else\r
- Line_E_SE_Flat(x0, y0, x1, y1, colour);\r
- }\r
- else\r
- if (m < -1)\r
- Line_N_NE_Flat(x0, y0, x1, y1, colour);\r
- else\r
- Line_E_NE_Flat(x0, y0, x1, y1, colour);\r
- }\r
-}\r
-\r
-///////////////////////////////////////////////////////////////////////\r