- float vert[4][4], st[4][2];
- rmeshinfo_t m;
- memset(&m, 0, sizeof(m));
- m.transparent = false;
- m.blendfunc1 = GL_ONE;
- m.blendfunc2 = GL_ZERO;
- m.numtriangles = 2;
- m.numverts = 4;
- m.index = skyboxindex;
- m.vertex = &vert[0][0];
- m.vertexstep = sizeof(float[4]);
- m.cr = 1;
- m.cg = 1;
- m.cb = 1;
- m.ca = 1;
- m.texcoords[0] = &st[0][0];
- m.texcoordstep[0] = sizeof(float[2]);
- m.tex[0] = R_GetTexture(skyboxside[3]); // front
- 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(&m);
- m.tex[0] = R_GetTexture(skyboxside[1]); // back
- 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(&m);
- m.tex[0] = R_GetTexture(skyboxside[0]); // right
- 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(&m);
- m.tex[0] = R_GetTexture(skyboxside[2]); // left
- 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(&m);
- m.tex[0] = R_GetTexture(skyboxside[4]); // up
- 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(&m);
- m.tex[0] = R_GetTexture(skyboxside[5]); // down
- 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(&m);
+ 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);