gpu-gles: schtruck/fpse merge: ClientState optimization
authornotaz <notasas@gmail.com>
Mon, 16 Jan 2012 22:54:43 +0000 (00:54 +0200)
committernotaz <notasas@gmail.com>
Wed, 18 Jan 2012 23:42:10 +0000 (01:42 +0200)
avoids at least a function call overhead, yeah

plugins/gpu-gles/gpuPrim.c

index 5d17f2d..e9f4ca2 100644 (file)
@@ -90,6 +90,19 @@ BOOL          bUseFixes;
 \r
 long          drawX,drawY,drawW,drawH;                 // offscreen drawing checkers\r
 short         sxmin,sxmax,symin,symax;\r
+unsigned int CSVERTEX=0,CSCOLOR=0,CSTEXTURE=0;\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
 // Update global TP infos\r
@@ -193,22 +206,23 @@ v[3].xyz.y = fpoint(vertex3->y);
 v[3].xyz.z = fpoint(vertex3->z);\r
 v[3].st.x = fpoint(vertex3->sow);\r
 v[3].st.y = fpoint(vertex3->tow);\r
-\r
-glEnableClientState(GL_TEXTURE_COORD_ARRAY);\r
-glEnableClientState(GL_VERTEX_ARRAY);\r
-glTexCoordPointer(2, GL_FLOAT, sizeof(v[0]), &v[0].st);\r
-glVertexPointer(3, GL_FLOAT, sizeof(v[0]), &v[0].xyz);\r
-glDrawArrays(GL_TRIANGLE_STRIP, 0, 4);\r
-glDisableClientState(GL_TEXTURE_COORD_ARRAY);\r
-glDisableClientState(GL_VERTEX_ARRAY); \r
+if (CSCOLOR==1) glDisableClientState(GL_COLOR_ARRAY);glError();\r
+if (CSTEXTURE==0) glEnableClientState(GL_TEXTURE_COORD_ARRAY);glError();\r
+if (CSVERTEX==0) glEnableClientState(GL_VERTEX_ARRAY);glError();\r
+glTexCoordPointer(2, GL_FLOAT, sizeof(v[0]), &v[0].st);glError();\r
+glVertexPointer(3, GL_FLOAT, sizeof(v[0]), &v[0].xyz);glError();\r
+glDrawArrays(GL_TRIANGLE_STRIP, 0, 4);glError();\r
+CSTEXTURE=CSVERTEX=1;\r
+CSCOLOR=0;\r
 }\r
 \r
 ///////////////////////////////////////////////////////// \r
 \r
-__inline void PRIMdrawTexturedTri(OGLVertex* vertex1, OGLVertex* vertex2, \r
+void PRIMdrawTexturedTri(OGLVertex* vertex1, OGLVertex* vertex2,\r
                                   OGLVertex* vertex3) \r
 {\r
 Vertex v[3];\r
+if (vertex1->x==0&&vertex1->y==0&&vertex2->x==0&&vertex2->y==0&&vertex3->x==0&&vertex3->y==0) return;\r
 \r
 v[0].xyz.x = fpoint(vertex1->x);\r
 v[0].xyz.y = fpoint(vertex1->y);\r
@@ -227,24 +241,25 @@ v[2].xyz.y = fpoint(vertex3->y);
 v[2].xyz.z = fpoint(vertex3->z);\r
 v[2].st.x = fpoint(vertex3->sow);\r
 v[2].st.y = fpoint(vertex3->tow);\r
-\r
-glEnableClientState(GL_TEXTURE_COORD_ARRAY);\r
-glEnableClientState(GL_VERTEX_ARRAY);\r
-glTexCoordPointer(2, GL_FLOAT, sizeof(v[0]), &v[0].st);\r
-glVertexPointer(3, GL_FLOAT, sizeof(v[0]), &v[0].xyz);\r
-glDrawArrays(GL_TRIANGLES, 0, 3);\r
-glDisableClientState(GL_TEXTURE_COORD_ARRAY);\r
-glDisableClientState(GL_VERTEX_ARRAY);\r
+if (CSCOLOR==1) glDisableClientState(GL_COLOR_ARRAY);glError();\r
+if (CSTEXTURE==0) glEnableClientState(GL_TEXTURE_COORD_ARRAY);glError();\r
+if (CSVERTEX==0) glEnableClientState(GL_VERTEX_ARRAY);glError();\r
+glTexCoordPointer(2, GL_FLOAT, sizeof(v[0]), &v[0].st);glError();\r
+glVertexPointer(3, GL_FLOAT, sizeof(v[0]), &v[0].xyz);glError();\r
+glDrawArrays(GL_TRIANGLES, 0, 3);glError();\r
+CSTEXTURE=CSVERTEX=1;\r
+CSCOLOR=0;\r
 \r
 }\r
 \r
 ///////////////////////////////////////////////////////// \r
 \r
-__inline void PRIMdrawTexGouraudTriColor(OGLVertex* vertex1, OGLVertex* vertex2, \r
+void PRIMdrawTexGouraudTriColor(OGLVertex* vertex1, OGLVertex* vertex2,\r
                                          OGLVertex* vertex3) \r
 {\r
 \r
 Vertex2 v[3];\r
+if (vertex1->x==0&&vertex1->y==0&&vertex2->x==0&&vertex2->y==0&&vertex3->x==0&&vertex3->y==0) return;\r
 \r
 v[0].xyz.x = fpoint(vertex1->x);\r
 v[0].xyz.y = fpoint(vertex1->y);\r
@@ -276,26 +291,25 @@ v[2].rgba.g = vertex3->c.col[1];
 v[2].rgba.b = vertex3->c.col[2];\r
 v[2].rgba.a = vertex3->c.col[3];\r
 \r
-glEnableClientState(GL_TEXTURE_COORD_ARRAY);\r
-glEnableClientState(GL_VERTEX_ARRAY);\r
-glEnableClientState(GL_COLOR_ARRAY);\r
+if (CSTEXTURE==0) glEnableClientState(GL_TEXTURE_COORD_ARRAY);glError();\r
+if (CSVERTEX==0) glEnableClientState(GL_VERTEX_ARRAY);glError();\r
+if (CSCOLOR==0) glEnableClientState(GL_COLOR_ARRAY);glError();\r
 \r
-glTexCoordPointer(2, GL_FLOAT, sizeof(v[0]), &v[0].st);\r
-glVertexPointer(3, GL_FLOAT, sizeof(v[0]), &v[0].xyz);\r
-glColorPointer(4, GL_UNSIGNED_BYTE, sizeof(v[0]), &v[0].rgba);\r
+glTexCoordPointer(2, GL_FLOAT, sizeof(v[0]), &v[0].st);glError();\r
+glVertexPointer(3, GL_FLOAT, sizeof(v[0]), &v[0].xyz);glError();\r
+glColorPointer(4, GL_UNSIGNED_BYTE, sizeof(v[0]), &v[0].rgba);glError();\r
 \r
-glDrawArrays(GL_TRIANGLES, 0, 3);\r
-glDisableClientState(GL_TEXTURE_COORD_ARRAY);\r
-glDisableClientState(GL_VERTEX_ARRAY);\r
-glDisableClientState(GL_COLOR_ARRAY);\r
+glDrawArrays(GL_TRIANGLES, 0, 3);glError();\r
+CSTEXTURE=CSVERTEX=CSCOLOR=1;\r
 }\r
 \r
 ///////////////////////////////////////////////////////// \r
 \r
-__inline void PRIMdrawTexGouraudTriColorQuad(OGLVertex* vertex1, OGLVertex* vertex2, \r
+void PRIMdrawTexGouraudTriColorQuad(OGLVertex* vertex1, OGLVertex* vertex2,\r
                                              OGLVertex* vertex3, OGLVertex* vertex4) \r
 {\r
 Vertex2 v[4];\r
+if (vertex1->x==0&&vertex1->y==0&&vertex2->x==0&&vertex2->y==0&&vertex3->x==0&&vertex3->y==0&&vertex4->x==0&&vertex4->y==0) return;\r
 \r
 v[0].xyz.x = fpoint(vertex1->x);\r
 v[0].xyz.y = fpoint(vertex1->y);\r
@@ -337,25 +351,24 @@ v[3].rgba.g = vertex3->c.col[1];
 v[3].rgba.b = vertex3->c.col[2];\r
 v[3].rgba.a = vertex3->c.col[3];\r
 \r
-glEnableClientState(GL_TEXTURE_COORD_ARRAY);\r
-glEnableClientState(GL_VERTEX_ARRAY);\r
-glEnableClientState(GL_COLOR_ARRAY);\r
+if (CSTEXTURE==0) glEnableClientState(GL_TEXTURE_COORD_ARRAY);glError();\r
+if (CSVERTEX==0) glEnableClientState(GL_VERTEX_ARRAY);glError();\r
+if (CSCOLOR==0) glEnableClientState(GL_COLOR_ARRAY);glError();\r
 \r
-glTexCoordPointer(2, GL_FLOAT, sizeof(v[0]), &v[0].st);\r
-glVertexPointer(3, GL_FLOAT, sizeof(v[0]), &v[0].xyz);\r
-glColorPointer(4, GL_UNSIGNED_BYTE, sizeof(v[0]), &v[0].rgba);\r
+glTexCoordPointer(2, GL_FLOAT, sizeof(v[0]), &v[0].st);glError();\r
+glVertexPointer(3, GL_FLOAT, sizeof(v[0]), &v[0].xyz);glError();\r
+glColorPointer(4, GL_UNSIGNED_BYTE, sizeof(v[0]), &v[0].rgba);glError();\r
 \r
-glDrawArrays(GL_TRIANGLE_STRIP, 0, 4);\r
-glDisableClientState(GL_TEXTURE_COORD_ARRAY);\r
-glDisableClientState(GL_VERTEX_ARRAY);\r
-glDisableClientState(GL_COLOR_ARRAY);\r
+glDrawArrays(GL_TRIANGLE_STRIP, 0, 4);glError();\r
+CSTEXTURE=CSVERTEX=CSCOLOR=1;\r
 }\r
 \r
 ///////////////////////////////////////////////////////// \r
 \r
-__inline void PRIMdrawTri(OGLVertex* vertex1, OGLVertex* vertex2, OGLVertex* vertex3) \r
+void PRIMdrawTri(OGLVertex* vertex1, OGLVertex* vertex2, OGLVertex* vertex3)\r
 {\r
 Vec3f v[3];\r
+if (vertex1->x==0&&vertex1->y==0&&vertex2->x==0&&vertex2->y==0&&vertex3->x==0&&vertex3->y==0) return;\r
 \r
 v[0].x = fpoint(vertex1->x);\r
 v[0].y = fpoint(vertex1->y);\r
@@ -369,18 +382,24 @@ v[2].x = fpoint(vertex3->x);
 v[2].y = fpoint(vertex3->y);\r
 v[2].z = fpoint(vertex3->z);\r
 \r
-glEnableClientState(GL_VERTEX_ARRAY);\r
-glVertexPointer(3, GL_FLOAT, sizeof(v[0]), &v[0]);\r
-glDrawArrays(GL_TRIANGLES, 0, 3);\r
-glDisableClientState(GL_VERTEX_ARRAY);\r
+if (CSVERTEX==0) glEnableClientState(GL_VERTEX_ARRAY);glError();\r
+if (CSTEXTURE==1) glDisableClientState(GL_TEXTURE_COORD_ARRAY);glError();\r
+if (CSCOLOR==1) glDisableClientState(GL_COLOR_ARRAY);glError();\r
+\r
+glVertexPointer(3, GL_FLOAT, sizeof(v[0]), &v[0]);glError();\r
+glDrawArrays(GL_TRIANGLES, 0, 3);glError();\r
+CSVERTEX=1;\r
+CSTEXTURE=CSCOLOR=0;\r
+\r
 }\r
 \r
 ///////////////////////////////////////////////////////// \r
 \r
-__inline void PRIMdrawTri2(OGLVertex* vertex1, OGLVertex* vertex2, \r
+void PRIMdrawTri2(OGLVertex* vertex1, OGLVertex* vertex2,\r
                            OGLVertex* vertex3, OGLVertex* vertex4) \r
 {\r
 Vec3f v[4];\r
+if (vertex1->x==0&&vertex1->y==0&&vertex2->x==0&&vertex2->y==0&&vertex3->x==0&&vertex3->y==0&&vertex4->x==0&&vertex4->y==0) return;\r
 \r
 v[0].x = fpoint(vertex1->x);\r
 v[0].y = fpoint(vertex1->y);\r
@@ -398,18 +417,23 @@ v[3].x = fpoint(vertex4->x);
 v[3].y = fpoint(vertex4->y);\r
 v[3].z = fpoint(vertex4->z);\r
 \r
-glEnableClientState(GL_VERTEX_ARRAY);\r
-glVertexPointer(3, GL_FLOAT, sizeof(v[0]), &v[0]);\r
-glDrawArrays(GL_TRIANGLE_STRIP, 0, 4);\r
-glDisableClientState(GL_VERTEX_ARRAY);\r
+if (CSVERTEX==0) glEnableClientState(GL_VERTEX_ARRAY);glError();\r
+if (CSTEXTURE==1) glDisableClientState(GL_TEXTURE_COORD_ARRAY);glError();\r
+if (CSCOLOR==1) glDisableClientState(GL_COLOR_ARRAY);glError();\r
+\r
+glVertexPointer(3, GL_FLOAT, sizeof(v[0]), &v[0]);glError();\r
+glDrawArrays(GL_TRIANGLE_STRIP, 0, 4);glError();\r
+CSVERTEX=1;\r
+CSTEXTURE=CSCOLOR=0;\r
 }\r
 \r
 ///////////////////////////////////////////////////////// \r
 \r
-__inline void PRIMdrawGouraudTriColor(OGLVertex* vertex1, OGLVertex* vertex2, \r
+void PRIMdrawGouraudTriColor(OGLVertex* vertex1, OGLVertex* vertex2,\r
                                       OGLVertex* vertex3) \r
 {\r
 Vertex2 v[3];\r
+if (vertex1->x==0&&vertex1->y==0&&vertex2->x==0&&vertex2->y==0&&vertex3->x==0&&vertex3->y==0) return;\r
 \r
 v[0].xyz.x = fpoint(vertex1->x);\r
 v[0].xyz.y = fpoint(vertex1->y);\r
@@ -435,23 +459,25 @@ v[2].rgba.g = vertex3->c.col[1];
 v[2].rgba.b = vertex3->c.col[2];\r
 v[2].rgba.a = vertex3->c.col[3];\r
 \r
-glEnableClientState(GL_VERTEX_ARRAY);\r
-glEnableClientState(GL_COLOR_ARRAY);\r
+if (CSVERTEX==0) glEnableClientState(GL_VERTEX_ARRAY);glError();\r
+if (CSCOLOR==0) glEnableClientState(GL_COLOR_ARRAY);glError();\r
+if (CSTEXTURE==1) glDisableClientState(GL_TEXTURE_COORD_ARRAY);glError();\r
 \r
-glVertexPointer(3, GL_FLOAT, sizeof(v[0]), &v[0].xyz);\r
-glColorPointer(4, GL_UNSIGNED_BYTE, sizeof(v[0]), &v[0].rgba);\r
+glVertexPointer(3, GL_FLOAT, sizeof(v[0]), &v[0].xyz);glError();\r
+glColorPointer(4, GL_UNSIGNED_BYTE, sizeof(v[0]), &v[0].rgba);glError();\r
 \r
-glDrawArrays(GL_TRIANGLES, 0, 3);\r
-glDisableClientState(GL_VERTEX_ARRAY);\r
-glDisableClientState(GL_COLOR_ARRAY);\r
+glDrawArrays(GL_TRIANGLES, 0, 3);glError();\r
+CSVERTEX=CSCOLOR=1;\r
+CSTEXTURE=0;\r
 }\r
 \r
 ///////////////////////////////////////////////////////// \r
 \r
-__inline void PRIMdrawGouraudTri2Color(OGLVertex* vertex1, OGLVertex* vertex2, \r
+void PRIMdrawGouraudTri2Color(OGLVertex* vertex1, OGLVertex* vertex2,\r
                                        OGLVertex* vertex3, OGLVertex* vertex4) \r
 {\r
 Vertex2 v[4];\r
+if (vertex1->x==0&&vertex1->y==0&&vertex2->x==0&&vertex2->y==0&&vertex3->x==0&&vertex3->y==0&&vertex4->x==0&&vertex4->y==0) return;\r
 \r
 v[0].xyz.x = fpoint(vertex1->x);\r
 v[0].xyz.y = fpoint(vertex1->y);\r
@@ -485,22 +511,24 @@ v[3].rgba.g = vertex4->c.col[1];
 v[3].rgba.b = vertex4->c.col[2];\r
 v[3].rgba.a = vertex4->c.col[3];\r
 \r
-glEnableClientState(GL_VERTEX_ARRAY);\r
-glEnableClientState(GL_COLOR_ARRAY);\r
+if (CSTEXTURE==1) glDisableClientState(GL_TEXTURE_COORD_ARRAY);glError();\r
+if (CSVERTEX==0) glEnableClientState(GL_VERTEX_ARRAY);glError();\r
+if (CSCOLOR==0) glEnableClientState(GL_COLOR_ARRAY);glError();\r
 \r
-glVertexPointer(3, GL_FLOAT, sizeof(v[0]), &v[0].xyz);\r
-glColorPointer(4, GL_UNSIGNED_BYTE, sizeof(v[0]), &v[0].rgba);\r
+glVertexPointer(3, GL_FLOAT, sizeof(v[0]), &v[0].xyz);glError();\r
+glColorPointer(4, GL_UNSIGNED_BYTE, sizeof(v[0]), &v[0].rgba);glError();\r
 \r
-glDrawArrays(GL_TRIANGLE_STRIP, 0, 4);\r
-glDisableClientState(GL_VERTEX_ARRAY);\r
-glDisableClientState(GL_COLOR_ARRAY);\r
+glDrawArrays(GL_TRIANGLE_STRIP, 0, 4);glError();\r
+CSTEXTURE=0;\r
+CSVERTEX=CSCOLOR=1;\r
 }\r
 \r
 ///////////////////////////////////////////////////////// \r
 \r
-__inline void PRIMdrawFlatLine(OGLVertex* vertex1, OGLVertex* vertex2,OGLVertex* vertex3, OGLVertex* vertex4)\r
+void PRIMdrawFlatLine(OGLVertex* vertex1, OGLVertex* vertex2,OGLVertex* vertex3, OGLVertex* vertex4)\r
 {\r
 Vertex2 v[4];\r
+if (vertex1->x==0&&vertex1->y==0&&vertex2->x==0&&vertex2->y==0&&vertex3->x==0&&vertex3->y==0&&vertex4->x==0&&vertex4->y==0) return;\r
 \r
 v[0].xyz.x = fpoint(vertex1->x);\r
 v[0].xyz.y = fpoint(vertex1->y);\r
@@ -534,24 +562,27 @@ v[3].rgba.g = vertex1->c.col[1];
 v[3].rgba.b = vertex1->c.col[2];\r
 v[3].rgba.a = vertex1->c.col[3];\r
 \r
-glEnableClientState(GL_VERTEX_ARRAY);\r
-glEnableClientState(GL_COLOR_ARRAY);\r
+if (CSTEXTURE==1) glDisableClientState(GL_TEXTURE_COORD_ARRAY);glError();\r
+if (CSVERTEX==0) glEnableClientState(GL_VERTEX_ARRAY);glError();\r
+if (CSCOLOR==0) glEnableClientState(GL_COLOR_ARRAY);glError();\r
 \r
-glVertexPointer(3, GL_FLOAT, sizeof(v[0]), &v[0].xyz);\r
-glColorPointer(4, GL_UNSIGNED_BYTE, sizeof(v[0]), &v[0].rgba);\r
+glVertexPointer(3, GL_FLOAT, sizeof(v[0]), &v[0].xyz);glError();\r
+glColorPointer(4, GL_UNSIGNED_BYTE, sizeof(v[0]), &v[0].rgba);glError();\r
 \r
-glDrawArrays(GL_TRIANGLE_STRIP, 0, 4);\r
-glDisableClientState(GL_VERTEX_ARRAY);\r
-glDisableClientState(GL_COLOR_ARRAY);\r
+glDrawArrays(GL_TRIANGLE_STRIP, 0, 4);glError();\r
+\r
+CSTEXTURE=0;\r
+CSVERTEX=CSCOLOR=1;\r
 \r
 \r
 }\r
 \r
 ///////////////////////////////////////////////////////// \r
      \r
-__inline void PRIMdrawGouraudLine(OGLVertex* vertex1, OGLVertex* vertex2,OGLVertex* vertex3, OGLVertex* vertex4)\r
+void PRIMdrawGouraudLine(OGLVertex* vertex1, OGLVertex* vertex2,OGLVertex* vertex3, OGLVertex* vertex4)\r
 {\r
        Vertex2 v[4];\r
+if (vertex1->x==0&&vertex1->y==0&&vertex2->x==0&&vertex2->y==0&&vertex3->x==0&&vertex3->y==0&&vertex4->x==0&&vertex4->y==0) return;\r
 \r
 v[0].xyz.x = fpoint(vertex1->x);\r
 v[0].xyz.y = fpoint(vertex1->y);\r
@@ -585,23 +616,25 @@ v[2].rgba.g = vertex4->c.col[1];
 v[2].rgba.b = vertex4->c.col[2];\r
 v[2].rgba.a = vertex4->c.col[3];\r
 \r
-glEnableClientState(GL_VERTEX_ARRAY);\r
-glEnableClientState(GL_COLOR_ARRAY);\r
+if (CSTEXTURE==1) glDisableClientState(GL_TEXTURE_COORD_ARRAY);glError();\r
+if (CSVERTEX==0) glEnableClientState(GL_VERTEX_ARRAY);glError();\r
+if (CSCOLOR==0) glEnableClientState(GL_COLOR_ARRAY);glError();\r
 \r
-glVertexPointer(3, GL_FLOAT, sizeof(v[0]), &v[0].xyz);\r
-glColorPointer(4, GL_UNSIGNED_BYTE, sizeof(v[0]), &v[0].rgba);\r
+glVertexPointer(3, GL_FLOAT, sizeof(v[0]), &v[0].xyz);glError();\r
+glColorPointer(4, GL_UNSIGNED_BYTE, sizeof(v[0]), &v[0].rgba);glError();\r
 \r
-glDrawArrays(GL_TRIANGLE_STRIP, 0, 4);\r
-glDisableClientState(GL_VERTEX_ARRAY);\r
-glDisableClientState(GL_COLOR_ARRAY);\r
+glDrawArrays(GL_TRIANGLE_STRIP, 0, 4);glError();\r
+CSTEXTURE=0;\r
+CSVERTEX=CSCOLOR=1;\r
 }\r
 \r
 ///////////////////////////////////////////////////////// \r
              \r
-__inline void PRIMdrawQuad(OGLVertex* vertex1, OGLVertex* vertex2, \r
+void PRIMdrawQuad(OGLVertex* vertex1, OGLVertex* vertex2,\r
                            OGLVertex* vertex3, OGLVertex* vertex4) \r
 {\r
 Vec3f v[4];\r
+if (vertex1->x==0&&vertex1->y==0&&vertex2->x==0&&vertex2->y==0&&vertex3->x==0&&vertex3->y==0&&vertex4->x==0&&vertex4->y==0) return;\r
 \r
 v[0].x = fpoint(vertex1->x);\r
 v[0].y = fpoint(vertex1->y);\r
@@ -619,10 +652,15 @@ v[3].x = fpoint(vertex3->x);
 v[3].y = fpoint(vertex3->y);\r
 v[3].z = fpoint(vertex3->z);\r
 \r
-glEnableClientState(GL_VERTEX_ARRAY);\r
-glVertexPointer(3, GL_FLOAT, sizeof(v[0]), &v[0]);\r
-glDrawArrays(GL_TRIANGLE_STRIP, 0, 4);\r
-glDisableClientState(GL_VERTEX_ARRAY);\r
+if (CSTEXTURE==1) glDisableClientState(GL_TEXTURE_COORD_ARRAY);glError();\r
+if (CSVERTEX==0) glEnableClientState(GL_VERTEX_ARRAY);glError();\r
+if (CSCOLOR==1) glDisableClientState(GL_COLOR_ARRAY);glError();\r
+\r
+glVertexPointer(3, GL_FLOAT, sizeof(v[0]), &v[0]);glError();\r
+glDrawArrays(GL_TRIANGLE_STRIP, 0, 4);glError();\r
+CSTEXTURE=0;\r
+CSVERTEX=1;\r
+CSCOLOR=0;\r
 }\r
 \r
 ////////////////////////////////////////////////////////////////////////                                          \r
@@ -815,7 +853,7 @@ void SetSemiTransMulti(int Pass)
 // Set several rendering stuff including blending \r
 ////////////////////////////////////////////////////////////////////////\r
 \r
-__inline void SetZMask3O(void)\r
+void SetZMask3O(void)\r
 {\r
  if(iUseMask && DrawSemiTrans && !iSetMask)\r
   {\r
@@ -824,7 +862,7 @@ __inline void SetZMask3O(void)
   }\r
 }\r
 \r
-__inline void SetZMask3(void)\r
+void SetZMask3(void)\r
 {\r
  if(iUseMask)\r
   {\r
@@ -838,7 +876,7 @@ __inline void SetZMask3(void)
   }\r
 }\r
 \r
-__inline void SetZMask3NT(void)\r
+void SetZMask3NT(void)\r
 {\r
  if(iUseMask)\r
   {\r
@@ -854,7 +892,7 @@ __inline void SetZMask3NT(void)
 \r
 ////////////////////////////////////////////////////////////////////////\r
 \r
-__inline void SetZMask4O(void)\r
+ void SetZMask4O(void)\r
 {\r
  if(iUseMask && DrawSemiTrans && !iSetMask)\r
   {\r
@@ -863,7 +901,7 @@ __inline void SetZMask4O(void)
   }\r
 }\r
 \r
-__inline void SetZMask4(void)\r
+ void SetZMask4(void)\r
 {\r
  if(iUseMask)\r
   {\r
@@ -877,7 +915,7 @@ __inline void SetZMask4(void)
   }\r
 }\r
 \r
-__inline void SetZMask4NT(void)\r
+ void SetZMask4NT(void)\r
 {\r
  if(iUseMask)\r
   {\r
@@ -891,7 +929,7 @@ __inline void SetZMask4NT(void)
   }\r
 }\r
 \r
-__inline void SetZMask4SP(void)\r
+ void SetZMask4SP(void)\r
 {\r
  if(iUseMask)\r
   {\r
@@ -912,7 +950,7 @@ __inline void SetZMask4SP(void)
 \r
 ////////////////////////////////////////////////////////////////////////\r
 \r
-__inline void SetRenderState(unsigned long DrawAttributes)\r
+ void SetRenderState(unsigned long DrawAttributes)\r
 {\r
  bDrawNonShaded = (SHADETEXBIT(DrawAttributes)) ? TRUE : FALSE;\r
  DrawSemiTrans = (SEMITRANSBIT(DrawAttributes)) ? TRUE : FALSE;\r
@@ -920,7 +958,7 @@ __inline void SetRenderState(unsigned long DrawAttributes)
 \r
 ////////////////////////////////////////////////////////////////////////                                          \r
 \r
-__inline void SetRenderColor(unsigned long DrawAttributes)\r
+ void SetRenderColor(unsigned long DrawAttributes)\r
 {\r
  if(bDrawNonShaded) {g_m1=g_m2=g_m3=128;}\r
  else\r