+
+float spritetexcoord2f[4*2] = {0, 1, 0, 0, 1, 0, 1, 1};
+
+void R_DrawSprite(int blendfunc1, int blendfunc2, rtexture_t *texture, int depthdisable, const vec3_t origin, const vec3_t left, const vec3_t up, float scalex1, float scalex2, float scaley1, float scaley2, float cr, float cg, float cb, float ca)
+{
+ float diff[3];
+ rmeshstate_t m;
+
+ if (fogenabled)
+ {
+ VectorSubtract(origin, r_vieworigin, diff);
+ ca *= 1 - exp(fogdensity/DotProduct(diff,diff));
+ }
+
+ R_Mesh_Matrix(&r_identitymatrix);
+ GL_Color(cr, cg, cb, ca);
+ GL_VertexPointer(varray_vertex3f);
+ GL_BlendFunc(blendfunc1, blendfunc2);
+ GL_DepthMask(false);
+ GL_DepthTest(!depthdisable);
+
+ memset(&m, 0, sizeof(m));
+ m.tex[0] = R_GetTexture(texture);
+ m.pointer_texcoord[0] = spritetexcoord2f;
+ R_Mesh_State_Texture(&m);
+
+ varray_vertex3f[ 0] = origin[0] + left[0] * scalex2 + up[0] * scaley1;
+ varray_vertex3f[ 1] = origin[1] + left[1] * scalex2 + up[1] * scaley1;
+ varray_vertex3f[ 2] = origin[2] + left[2] * scalex2 + up[2] * scaley1;
+ varray_vertex3f[ 3] = origin[0] + left[0] * scalex2 + up[0] * scaley2;
+ varray_vertex3f[ 4] = origin[1] + left[1] * scalex2 + up[1] * scaley2;
+ varray_vertex3f[ 5] = origin[2] + left[2] * scalex2 + up[2] * scaley2;
+ varray_vertex3f[ 6] = origin[0] + left[0] * scalex1 + up[0] * scaley2;
+ varray_vertex3f[ 7] = origin[1] + left[1] * scalex1 + up[1] * scaley2;
+ varray_vertex3f[ 8] = origin[2] + left[2] * scalex1 + up[2] * scaley2;
+ varray_vertex3f[ 9] = origin[0] + left[0] * scalex1 + up[0] * scaley1;
+ varray_vertex3f[10] = origin[1] + left[1] * scalex1 + up[1] * scaley1;
+ varray_vertex3f[11] = origin[2] + left[2] * scalex1 + up[2] * scaley1;
+ R_Mesh_Draw(4, 2, polygonelements);
+}
+