void RenderFace(Q3Face face) { Q3Shader shader = m_shaders[face.Shader]; if (!TestSurfaceflag(shader.SurfaceFlags, Q3SurfaceFlags.Sky)) if (!TestSurfaceflag(shader.SurfaceFlags, Q3SurfaceFlags.NonSolid)) if (!TestSurfaceflag(shader.SurfaceFlags, Q3SurfaceFlags.NoDraw)) if (!TestSurfaceflag(shader.SurfaceFlags, Q3SurfaceFlags.Skip)) if (!TestContentflag(shader.ContentFlags, Q3ContentFlags.Translucent)) switch (face.Type) { case Q3FaceType.Normal: Gl.glAlphaFunc(Gl.GL_GREATER, 0f); RenderPolygonFace(face); break; case Q3FaceType.Mesh: Gl.glAlphaFunc(Gl.GL_GREATER, 0.4f); Gl.glDisable(Gl.GL_CULL_FACE); RenderPolygonFace(face); Gl.glEnable(Gl.GL_CULL_FACE); break; case Q3FaceType.Flare: break; case Q3FaceType.Patch: break; } }
void RenderPolygonFace(Q3Face face) { uint[] indexes = new uint[face.ElemCount]; for (int i = 0; i < face.ElemCount; i++) indexes[i] = (uint)m_elements[face.ElemStart + i] + (uint)face.VertStart; Gl.glDrawElements(Gl.GL_TRIANGLES, face.ElemCount, Gl.GL_UNSIGNED_INT, indexes); }