- rmeshstate_t m;
-
-#define R_SkyBoxPolyVec(i,s,t,x,y,z) \
- varray_vertex[i * 4 + 0] = (x) * 16.0f;\
- varray_vertex[i * 4 + 1] = (y) * 16.0f;\
- varray_vertex[i * 4 + 2] = (z) * 16.0f;\
- varray_texcoord[0][i * 4 + 0] = (s);\
- varray_texcoord[0][i * 4 + 1] = (t);
-
- memset(&m, 0, sizeof(m));
- m.blendfunc1 = GL_ONE;
- m.blendfunc2 = GL_ZERO;
- m.depthdisable = true; // don't modify or read zbuffer
- m.tex[0] = R_GetTexture(skyboxside[3]); // front
- R_Mesh_State(&m);
-
- GL_Color(r_colorscale, r_colorscale, r_colorscale, 1);
-
- R_SkyBoxPolyVec(0, 1, 0, 1, -1, 1);
- R_SkyBoxPolyVec(1, 1, 1, 1, -1, -1);
- R_SkyBoxPolyVec(2, 0, 1, 1, 1, -1);
- R_SkyBoxPolyVec(3, 0, 0, 1, 1, 1);
- R_Mesh_Draw(4, 2, polygonelements);
- m.tex[0] = R_GetTexture(skyboxside[1]); // back
- R_Mesh_State(&m);
- R_SkyBoxPolyVec(0, 1, 0, -1, 1, 1);
- R_SkyBoxPolyVec(1, 1, 1, -1, 1, -1);
- R_SkyBoxPolyVec(2, 0, 1, -1, -1, -1);
- R_SkyBoxPolyVec(3, 0, 0, -1, -1, 1);
- R_Mesh_Draw(4, 2, polygonelements);
- m.tex[0] = R_GetTexture(skyboxside[0]); // right
- R_Mesh_State(&m);
- R_SkyBoxPolyVec(0, 1, 0, 1, 1, 1);
- R_SkyBoxPolyVec(1, 1, 1, 1, 1, -1);
- R_SkyBoxPolyVec(2, 0, 1, -1, 1, -1);
- R_SkyBoxPolyVec(3, 0, 0, -1, 1, 1);
- R_Mesh_Draw(4, 2, polygonelements);
- m.tex[0] = R_GetTexture(skyboxside[2]); // left
- R_Mesh_State(&m);
- R_SkyBoxPolyVec(0, 1, 0, -1, -1, 1);
- R_SkyBoxPolyVec(1, 1, 1, -1, -1, -1);
- R_SkyBoxPolyVec(2, 0, 1, 1, -1, -1);
- R_SkyBoxPolyVec(3, 0, 0, 1, -1, 1);
- R_Mesh_Draw(4, 2, polygonelements);
- m.tex[0] = R_GetTexture(skyboxside[4]); // up
- R_Mesh_State(&m);
- R_SkyBoxPolyVec(0, 1, 0, 1, -1, 1);
- R_SkyBoxPolyVec(1, 1, 1, 1, 1, 1);
- R_SkyBoxPolyVec(2, 0, 1, -1, 1, 1);
- R_SkyBoxPolyVec(3, 0, 0, -1, -1, 1);
- R_Mesh_Draw(4, 2, polygonelements);
- m.tex[0] = R_GetTexture(skyboxside[5]); // down
- R_Mesh_State(&m);
- R_SkyBoxPolyVec(0, 1, 0, 1, 1, -1);
- R_SkyBoxPolyVec(1, 1, 1, 1, -1, -1);
- R_SkyBoxPolyVec(2, 0, 1, -1, -1, -1);
- R_SkyBoxPolyVec(3, 0, 0, -1, 1, -1);
- R_Mesh_Draw(4, 2, polygonelements);
+ int i;
+ // FIXME: fixed function path can't properly handle r_view.colorscale > 1
+ GL_Color(1 * r_view.colorscale, 1 * r_view.colorscale, 1 * r_view.colorscale, 1);
+ GL_BlendFunc(GL_ONE, GL_ZERO);
+ GL_CullFace(GL_NONE);
+ GL_DepthMask(false);
+ GL_DepthRange(0, 1);
+ GL_PolygonOffset(0, 0);
+ GL_DepthTest(false); // don't modify or read zbuffer
+ R_Mesh_VertexPointer(skyboxvertex3f, 0, 0);
+ R_Mesh_ColorPointer(NULL, 0, 0);
+ R_Mesh_ResetTextureState();
+ R_Mesh_TexCoordPointer(0, 2, skyboxtexcoord2f, 0, 0);
+ GL_LockArrays(0, 6*4);
+ for (i = 0;i < 6;i++)
+ {
+ R_Mesh_TexBind(0, R_GetTexture(skyboxside[i]));
+ R_Mesh_Draw(0, 6*4, 2, skyboxelements + i * 6, 0, 0);
+ }
+
+ if(r_refdef.fogenabled)
+ {
+ GL_BlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
+ GL_Color(r_refdef.fogcolor[0] * r_view.colorscale, r_refdef.fogcolor[1] * r_view.colorscale, r_refdef.fogcolor[2] * r_view.colorscale, 1 - FogForDistance(r_refdef.fog_end));
+ for (i = 0;i < 6;i++)
+ {
+ R_Mesh_TexBind(0, 0);
+ R_Mesh_Draw(0, 6*4, 2, skyboxelements + i * 6, 0, 0);
+ }
+ }
+
+ GL_LockArrays(0, 0);