-# ifdef FREEGLUT_GLES1
- /* Solid drawing is the same for OpenGL 1.x and OpenGL ES 1.x, just
- * no edge flags for ES.
- * WireFrame drawing will have to be done per face though, using
- * GL_LINE_LOOP and issuing one draw call per face. For triangles,
- * we use glDrawArrays directly on the vertex data for each face,
- * while for shapes that are composed of quads or pentagons, we use
- * glDrawElements with index vector {0,1,2,5} or {0,1,2,8,5},
- * respectively.
- * We use the first parameter in glDrawArrays or glDrawElements to
- * go from face to face.
- */
- if (useWireMode)
- {
- /* setup reading the right elements from vertex array */
- GLubyte vertIdx4[4] = {0,1,2,5};
- GLubyte vertIdx5[5] = {0,1,2,8,5};
- GLubyte *indices = NULL;
- int vertStride, i, j;
-
- switch (numEdgePerFace)
- {
- case 3:
- vertStride = 3; /* there are 3 vertices for each face in the array */
- break;
- case 4:
- indices = vertIdx4;
- vertStride = 6; /* there are 6 vertices for each face in the array */
- break;
- case 5:
- indices = vertIdx5;
- vertStride = 9; /* there are 9 vertices for each face in the array */
- break;
- }
-
- glEnableClientState(GL_VERTEX_ARRAY);
- glEnableClientState(GL_NORMAL_ARRAY);
-
- glVertexPointer(3, GL_DOUBLE, 0, vertices);
- glNormalPointer(GL_DOUBLE, 0, normals);
-
- if (numEdgePerFace==3)
- for (i=0; i<numFaces; i++)
- glDrawArrays(GL_LINE_LOOP, i*vertStride, numEdgePerFace);
- else
- {
- GLubyte *vertIndices = malloc(numEdgePerFace*sizeof(GLubyte));
- for (i=0; i<numFaces; i++)
- {
- for (j=0; j< numEdgePerFace; j++)
- vertIndices[j] = indices[j]+i*vertStride;
-
- glDrawElements(GL_LINE_LOOP, numEdgePerFace, GL_UNSIGNED_BYTE, vertIndices);
- }
- free(vertIndices);
- }