When I am rendering with

 glPolygonMode(GL_*, GL_LINE);
 glBegin(GL_TRIANGLE_STRIP);
 for (int i=0; i<(some even number greater than 2); i++)
   glVertex3fv(vec[i]);

The very last line does not get rendered.  Vertex arrays
don't have this problem.  See the attached test program.

-- 
Scott McMillan                        mailto:[EMAIL PROTECTED]
Cambridge Research Associates         http://www.cambridge.com
1430 Spring Hill Road, Ste. 200       Voice: (703) 790-0505 x7235
McLean, VA 22102                      Fax:   (703) 790-0370
#include <GL/gl.h>
#include <GL/glu.h>
#include <GL/glut.h>
#include <stdio.h>

int fill_flag = 0;
int vertex_arrays_flag = 0;
GLfloat vertices[8][3] = {{-3, 1, -10},
                          {-3,-1, -10},
                          {-1, 1, -10},
                          {-1,-1, -10},
                          { 1, 1, -10},
                          { 1,-1, -10},
                          { 3, 1, -10},
                          { 3,-1, -10}};

void init(void)
{
    glClearColor(0.0, 0.0, 0.0, 0.0);
    glPolygonMode(GL_FRONT, GL_LINE);
}

void display(void)
{
    int i;
    glClear(GL_COLOR_BUFFER_BIT);

    if (fill_flag == 0)
       glPolygonMode(GL_FRONT, GL_LINE);
    else
       glPolygonMode(GL_FRONT, GL_FILL);

    if (vertex_arrays_flag == 0)
    {
       glBegin(GL_TRIANGLE_STRIP);
       for (i=0; i<8; i++)
       {
          glVertex3fv(vertices[i]);
       }
       glEnd();
    }
    else
    {
       glEnableClientState(GL_VERTEX_ARRAY);
       glVertexPointer(3, GL_FLOAT, 0, vertices);
       glDrawArrays(GL_TRIANGLE_STRIP, 0, 8);
       glDisableClientState(GL_VERTEX_ARRAY);
    }

    glutSwapBuffers();
}

void reshape(int w, int h)
{
    glViewport(0, 0, (GLsizei)w, (GLsizei)h);
    glMatrixMode(GL_PROJECTION);
    glLoadIdentity();
    gluPerspective(60.0, (GLfloat)w/(GLfloat)h, 1.0, 100.0);
    glMatrixMode(GL_MODELVIEW);
    glLoadIdentity();
}

void keyboard(unsigned char key, int x, int y)
{
    switch (key)
    {
       case 27:
          exit(0);
          break;

       case 'f':
          fill_flag = 1 - fill_flag;
          fprintf(stderr, "fill_flag = %d\n", fill_flag);
          break;

       case 'v':
          vertex_arrays_flag = 1 - vertex_arrays_flag;
          fprintf(stderr, "Using vertex arrays: %d\n", vertex_arrays_flag);
          break;
    }
}

int main(int argc, char *argv[])
{
    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB);
    glutInitWindowSize(500,500);
    glutInitWindowPosition(50,50);
    glutCreateWindow(argv[0]);
    init();
    glutDisplayFunc(display);
    glutIdleFunc(display);
    glutReshapeFunc(reshape);
    glutKeyboardFunc(keyboard);
    glutMainLoop();
    return 0;
}

Reply via email to