+/**
+ * Draw geometric shape in wire mode (only edges)
+ *
+ * Arguments:
+ * GLfloat *vertices, GLfloat *normals, GLsizei numVertices
+ * The vertex coordinate and normal buffers, and the number of entries in
+ * those
+ * GLushort *vertIdxs
+ * a vertex indices buffer, optional (never passed for the polyhedra)
+ * GLsizei numParts, GLsizei numVertPerPart
+ * polyhedra: number of faces, and the number of vertices for drawing
+ * each face
+ * non-polyhedra: number of edges to draw for first subdivision (not
+ * necessarily equal to number of subdivisions requested by user, e.g.
+ * as each subdivision is enclosed by two edges), and number of
+ * vertices for drawing each
+ * numParts * numVertPerPart gives the number of entries in the vertex
+ * array vertIdxs
+ * GLenum vertexMode
+ * vertex drawing mode (e.g. always GL_LINE_LOOP for polyhedra, varies
+ * for others)
+ * GLushort *vertIdxs2, GLsizei numParts2, GLsizei numVertPerPart2
+ * non-polyhedra only: same as the above, but now for subdivisions along
+ * the other axis. Always drawn as GL_LINE_LOOP.
+ *
+ * Feel free to contribute better naming ;)
+ */
+static void fghDrawGeometryWire(GLfloat *vertices, GLfloat *normals, GLsizei numVertices,
+ GLushort *vertIdxs, GLsizei numParts, GLsizei numVertPerPart, GLenum vertexMode,
+ GLushort *vertIdxs2, GLsizei numParts2, GLsizei numVertPerPart2
+ )
+{
+ GLint attribute_v_coord = fgStructure.CurrentWindow->Window.attribute_v_coord;
+ GLint attribute_v_normal = fgStructure.CurrentWindow->Window.attribute_v_normal;
+
+ if (fgState.HasOpenGL20 && (attribute_v_coord != -1 || attribute_v_normal != -1))
+ /* User requested a 2.0 draw */
+ fghDrawGeometryWire20(vertices, normals, numVertices,
+ vertIdxs, numParts, numVertPerPart, vertexMode,
+ vertIdxs2, numParts2, numVertPerPart2,
+ attribute_v_coord, attribute_v_normal);
+#ifndef GL_ES_VERSION_2_0
+ else
+ fghDrawGeometryWire11(vertices, normals,
+ vertIdxs, numParts, numVertPerPart, vertexMode,
+ vertIdxs2, numParts2, numVertPerPart2);
+#endif
+}
+
+/* Draw the geometric shape with filled triangles
+ *
+ * Arguments:
+ * GLfloat *vertices, GLfloat *normals, GLsizei numVertices
+ * The vertex coordinate and normal buffers, and the number of entries in
+ * those
+ * GLushort *vertIdxs
+ * a vertex indices buffer, optional (not passed for the polyhedra with
+ * triangular faces)
+ * GLsizei numParts, GLsizei numVertPerPart
+ * polyhedra: not used for polyhedra with triangular faces
+ (numEdgePerFace==3), as each vertex+normal pair is drawn only once,
+ so no vertex indices are used.
+ Else, the shape was triangulated (DECOMPOSE_TO_TRIANGLE), leading to
+ reuse of some vertex+normal pairs, and thus the need to draw with
+ glDrawElements. numParts is always 1 in this case (we can draw the
+ whole object with one call to glDrawElements as the vertex index
+ array contains separate triangles), and numVertPerPart indicates
+ the number of vertex indices in the vertex array.
+ * non-polyhedra: number of parts (GL_TRIANGLE_STRIPs) to be drawn
+ separately (numParts calls to glDrawElements) to create the object.
+ numVertPerPart indicates the number of vertex indices to be
+ processed at each draw call.
+ * numParts * numVertPerPart gives the number of entries in the vertex
+ * array vertIdxs