/* * The pseudo code in the BAD block below asserts in the Mesa library when the display lists are * executed on line 391 of tnl/t_vertex.c: assert(a[j].inputstride == vptr->stride) * * The pseudo code in the second GOOD block below does not assert. The only * difference between the two code blocks is the swapped glBegin and glColor4fv */ /* * BAD block */ { /* * Assign X_Display with your X Display value. */ static Display *X_Display = NULL; /* * Assign GLx_visinfo with whatever you * store the GLx visual in. This is usually * is the result from calling glXChoosVisual */ static XVisualInfo *GLx_visinfo; /* * Assign Main_WorkArea_WorkArea with the * OpenGL drawing area. Usually this is * from a call to XtCreateWidget with the * glwMDrawingAreaWidgetClass. */ static Widget Main_WorkArea_WorkArea = NULL; /* * Remaining varabiles will be assigned for you. */ static GLXContext MainWorkArea_GLContext; /* WARNING: context changed but not yet support in log file! */ /* glXCreateContext(X_Display, GLx_visinfo, 0, GL_TRUE); */ /* WARNING: context changed but not yet support in log file! */ /* glXMakeCurrent(X_Display, XtWindow(DrawAreaWidget), *GLContextPtr); */ glDrawBuffer(GL_BACK); glFinish(); /* flushing */ { glFlush(); } GLuint list1 GLuint list2 GLuint list3 GLuint list4 /* RedrawAllFrames */ { list1 = glGenLists(1); glNewList(list1, GL_COMPILE); glDisable(GL_SCISSOR_TEST); {static GLint v[]={INVALID_DIMENSION, INVALID_DIMENSION, INVALID_DIMENSION}; glGetIntegerv(GL_MAX_VIEWPORT_DIMS, v); /* retvals:v={4096,4096,-1} */} glViewport(0,0,850,705); glMatrixMode(GL_PROJECTION); glLoadIdentity(); glOrtho(0,850,-705,-0,-1,1); glMatrixMode(GL_MODELVIEW); glLoadIdentity(); glScaled(1,-1,1); glTranslated(0.375,0.375,0); glClearColor(0.588235, 0.588235, 0.588235, 0); glClear(GL_COLOR_BUFFER_BIT); glEndList(); /* flushing */ { glFlush(); } glCallList(list1); /* RenderEntireFrame */ { /* RenderFrameBeforeData */ { list2 = glGenLists(1); glNewList(list2, GL_COMPILE); /* Setup3DView */ { glMatrixMode(GL_PROJECTION); glLoadIdentity(); glOrtho(-1.16333,1.16043,-1.03407,1.03701,9.19379,10.9708); glMatrixMode(GL_MODELVIEW); glViewport(24,0,802,705); glScissor(24,0,802,705); glEnable(GL_SCISSOR_TEST); glLoadIdentity(); glLightModelf(GL_LIGHT_MODEL_TWO_SIDE,(GLfloat)1.0); {static GLfloat a[]={0,0,0,1}; glLightModelfv(GL_LIGHT_MODEL_AMBIENT,a);} glEnable(GL_LIGHT0); {static GLfloat a[]={0.25,0.25,0.25,1}; glLightfv(GL_LIGHT0,GL_AMBIENT,a);} {static GLfloat a[]={0.75,0.75,0.75,1}; glLightfv(GL_LIGHT0,GL_DIFFUSE,a);} {static GLfloat a[]={1,1,1,1}; glLightfv(GL_LIGHT0,GL_SPECULAR,a);} {static GLfloat a[]={0.4,0.4,0.4,1}; glMaterialfv(GL_FRONT_AND_BACK,GL_SPECULAR,a);} glMateriali(GL_FRONT_AND_BACK, GL_SHININESS, 13); {static GLfloat a[]={0.2,0.2,0.959166,0}; glLightfv(GL_LIGHT0,GL_POSITION,a);} glEnable(GL_COLOR_MATERIAL); glColorMaterial(GL_FRONT_AND_BACK,GL_AMBIENT_AND_DIFFUSE); glFrontFace(GL_CCW); glRotated(0,0,0,1); glRotated(-71.4745,1,0,0); glRotated(224.926,0,0,1); glTranslated(-7.22896,-7.30547,-3.72175); glEnable(GL_DEPTH_TEST); glClear(GL_DEPTH_BUFFER_BIT); glEnable(GL_POLYGON_OFFSET_FILL); glPolygonOffset(1,1); } glEndList(); glCallList(list2); /* flushing */ { glFlush(); } } /* RenderFrameData */ { list3 = glGenLists(1); glNewList(list3, GL_COMPILE); glDepthMask(GL_FALSE); glEnable(GL_BLEND); glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); glPolygonMode(GL_FRONT_AND_BACK,GL_FILL); glEnable(GL_LIGHTING); glShadeModel(GL_SMOOTH); {static GLfloat a[]={0,0.4,1,0.5}; glColor4fv(a);} glBegin(GL_POLYGON); glNormal3d(-1,0,0); glVertex3d(0,0,0.1); {static GLfloat a[]={1,0,0,0.5}; glColor4fv(a);} glNormal3d(-1,0,0); glVertex3d(0,0,1.1); glNormal3d(-1,0,0); glVertex3d(0,0.5,1.1); {static GLfloat a[]={0,0.4,1,0.5}; glColor4fv(a);} glNormal3d(-1,0,0); glVertex3d(0,0.5,0.1); glEnd(); {static GLfloat a[]={0,0.823529,0,0.5}; glColor4fv(a);} glBegin(GL_POLYGON); glNormal3d(0,0,1); glVertex3d(0,0,0); glNormal3d(0,0,1); glVertex3d(1,0,0); glNormal3d(0,0,1); glVertex3d(1,1,0); glNormal3d(0,0,1); glVertex3d(0,1,0); glEnd(); {static GLfloat a[]={0,0.4,1,0.5}; glColor4fv(a);} glBegin(GL_POLYGON); glNormal3d(-1,0,0); glVertex3d(0,0.5,0.1); {static GLfloat a[]={1,0,0,0.5}; glColor4fv(a);} glNormal3d(-1,0,0); glVertex3d(0,0.5,1.1); glNormal3d(-1,0,0); glVertex3d(0,1,1.1); {static GLfloat a[]={0,0.4,1,0.5}; glColor4fv(a);} glNormal3d(-1,0,0); glVertex3d(0,1,0.1); glEnd(); glDepthMask(GL_TRUE); glDisable(GL_BLEND); glEndList(); glCallList(list3); /* flushing */ { glFlush(); } } /* RenderFrameAfterData */ { list4 = glGenLists(1); glNewList(list4, GL_COMPILE); /* Finish3DView */ { glDisable(GL_POLYGON_OFFSET_FILL); glDisable(GL_DEPTH_TEST); } glEndList(); glCallList(list4); /* flushing */ { glFlush(); } } } /* flushing */ { glFlush(); } } glXSwapBuffers(X_Display, glXGetCurrentDrawable()); /* flushing */ { glFlush(); } /* WARNING: context changed but not yet support in log file! */ /* glXMakeCurrent(X_Display, None, NULL); */ /* WARNING: context changed but not yet support in log file! */ /* glXMakeCurrent(X_Display, XtWindow(DrawAreaWidget), *GLContextPtr); */ glDeleteLists(list2, 1); glDeleteLists(list3, 1); glDeleteLists(list4, 1); glDeleteLists(list1, 1); /* flushing */ { glFinish(); } } /* * GOOD block */ { /* * Assign X_Display with your X Display value. */ static Display *X_Display = NULL; /* * Assign GLx_visinfo with whatever you * store the GLx visual in. This is usually * is the result from calling glXChoosVisual */ static XVisualInfo *GLx_visinfo; /* * Assign Main_WorkArea_WorkArea with the * OpenGL drawing area. Usually this is * from a call to XtCreateWidget with the * glwMDrawingAreaWidgetClass. */ static Widget Main_WorkArea_WorkArea = NULL; /* * Remaining varabiles will be assigned for you. */ static GLXContext MainWorkArea_GLContext; /* WARNING: context changed but not yet support in log file! */ /* glXCreateContext(X_Display, GLx_visinfo, 0, GL_TRUE); */ /* WARNING: context changed but not yet support in log file! */ /* glXMakeCurrent(X_Display, XtWindow(DrawAreaWidget), *GLContextPtr); */ glDrawBuffer(GL_BACK); glFinish(); /* flushing */ { glFlush(); } GLuint list1 GLuint list2 GLuint list3 GLuint list4 /* RedrawAllFrames */ { list1 = glGenLists(1); glNewList(list1, GL_COMPILE); glDisable(GL_SCISSOR_TEST); {static GLint v[]={INVALID_DIMENSION, INVALID_DIMENSION, INVALID_DIMENSION}; glGetIntegerv(GL_MAX_VIEWPORT_DIMS, v); /* retvals:v={4096,4096,-1} */} glViewport(0,0,850,705); glMatrixMode(GL_PROJECTION); glLoadIdentity(); glOrtho(0,850,-705,-0,-1,1); glMatrixMode(GL_MODELVIEW); glLoadIdentity(); glScaled(1,-1,1); glTranslated(0.375,0.375,0); glClearColor(0.588235, 0.588235, 0.588235, 0); glClear(GL_COLOR_BUFFER_BIT); glEndList(); /* flushing */ { glFlush(); } glCallList(list1); /* RenderEntireFrame */ { /* RenderFrameBeforeData */ { list2 = glGenLists(1); glNewList(list2, GL_COMPILE); /* Setup3DView */ { glMatrixMode(GL_PROJECTION); glLoadIdentity(); glOrtho(-1.16333,1.16043,-1.03407,1.03701,9.19379,10.9708); glMatrixMode(GL_MODELVIEW); glViewport(24,0,802,705); glScissor(24,0,802,705); glEnable(GL_SCISSOR_TEST); glLoadIdentity(); glLightModelf(GL_LIGHT_MODEL_TWO_SIDE,(GLfloat)1.0); {static GLfloat a[]={0,0,0,1}; glLightModelfv(GL_LIGHT_MODEL_AMBIENT,a);} glEnable(GL_LIGHT0); {static GLfloat a[]={0.25,0.25,0.25,1}; glLightfv(GL_LIGHT0,GL_AMBIENT,a);} {static GLfloat a[]={0.75,0.75,0.75,1}; glLightfv(GL_LIGHT0,GL_DIFFUSE,a);} {static GLfloat a[]={1,1,1,1}; glLightfv(GL_LIGHT0,GL_SPECULAR,a);} {static GLfloat a[]={0.4,0.4,0.4,1}; glMaterialfv(GL_FRONT_AND_BACK,GL_SPECULAR,a);} glMateriali(GL_FRONT_AND_BACK, GL_SHININESS, 13); {static GLfloat a[]={0.2,0.2,0.959166,0}; glLightfv(GL_LIGHT0,GL_POSITION,a);} glEnable(GL_COLOR_MATERIAL); glColorMaterial(GL_FRONT_AND_BACK,GL_AMBIENT_AND_DIFFUSE); glFrontFace(GL_CCW); glRotated(0,0,0,1); glRotated(-71.4745,1,0,0); glRotated(224.926,0,0,1); glTranslated(-7.22896,-7.30547,-3.72175); glEnable(GL_DEPTH_TEST); glClear(GL_DEPTH_BUFFER_BIT); glEnable(GL_POLYGON_OFFSET_FILL); glPolygonOffset(1,1); } glEndList(); glCallList(list2); /* flushing */ { glFlush(); } } /* RenderFrameData */ { list3 = glGenLists(1); glNewList(list3, GL_COMPILE); glDepthMask(GL_FALSE); glEnable(GL_BLEND); glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); glPolygonMode(GL_FRONT_AND_BACK,GL_FILL); glEnable(GL_LIGHTING); glShadeModel(GL_SMOOTH); glBegin(GL_POLYGON); {static GLfloat a[]={0,0.4,1,0.5}; glColor4fv(a);} glNormal3d(-1,0,0); glVertex3d(0,0,0.1); {static GLfloat a[]={1,0,0,0.5}; glColor4fv(a);} glNormal3d(-1,0,0); glVertex3d(0,0,1.1); glNormal3d(-1,0,0); glVertex3d(0,0.5,1.1); {static GLfloat a[]={0,0.4,1,0.5}; glColor4fv(a);} glNormal3d(-1,0,0); glVertex3d(0,0.5,0.1); glEnd(); {static GLfloat a[]={0,0.823529,0,0.5}; glColor4fv(a);} glBegin(GL_POLYGON); glNormal3d(0,0,1); glVertex3d(0,0,0); glNormal3d(0,0,1); glVertex3d(1,0,0); glNormal3d(0,0,1); glVertex3d(1,1,0); glNormal3d(0,0,1); glVertex3d(0,1,0); glEnd(); glBegin(GL_POLYGON); {static GLfloat a[]={0,0.4,1,0.5}; glColor4fv(a);} glNormal3d(-1,0,0); glVertex3d(0,0.5,0.1); {static GLfloat a[]={1,0,0,0.5}; glColor4fv(a);} glNormal3d(-1,0,0); glVertex3d(0,0.5,1.1); glNormal3d(-1,0,0); glVertex3d(0,1,1.1); {static GLfloat a[]={0,0.4,1,0.5}; glColor4fv(a);} glNormal3d(-1,0,0); glVertex3d(0,1,0.1); glEnd(); glDepthMask(GL_TRUE); glDisable(GL_BLEND); glEndList(); glCallList(list3); /* flushing */ { glFlush(); } } /* RenderFrameAfterData */ { list4 = glGenLists(1); glNewList(list4, GL_COMPILE); /* Finish3DView */ { glDisable(GL_POLYGON_OFFSET_FILL); glDisable(GL_DEPTH_TEST); } glEndList(); glCallList(list4); /* flushing */ { glFlush(); } } } /* flushing */ { glFlush(); } } glXSwapBuffers(X_Display, glXGetCurrentDrawable()); /* flushing */ { glFlush(); } /* WARNING: context changed but not yet support in log file! */ /* glXMakeCurrent(X_Display, None, NULL); */ /* WARNING: context changed but not yet support in log file! */ /* glXMakeCurrent(X_Display, XtWindow(DrawAreaWidget), *GLContextPtr); */ glDeleteLists(list2, 1); glDeleteLists(list3, 1); glDeleteLists(list4, 1); glDeleteLists(list1, 1); /* flushing */ { glFinish(); } }