While using glEnable( GL_LINE_SMOOTH ) for drawing nice antialiased wireframe, I found one bug.
Here is how I draw my objects:
void Init() // called only then context created
{
// …
glEnable( GL_LINE_SMOOTH );
glHint( GL_LINE_SMOOTH_HINT, GL_NICEST );
glBlendFunc( GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA );
glEnable( GL_POLYGON_OFFSET_FILL );
glPolygonOffset( 1.f, 1.f );
// …
}void Draw() // in render function - called for each frame
{
// … glClear, set up matrices, etc.// draw filled objects
for( i = 0; i < g_objects.size(); i++ )
{
glColor4ubv( (const GLubyte*)&g_objects[i].m_color );// PROBLEM HERE - // glGet*( GL_CURRENT_COLOR ) returns g_objects[i].m_color, // but triangles draw using color (0.5,0.5,0.5,1) - set in previous frame - see bottom glVertexPointer( ... ); glNormalPointer( ... ); glDrawRangeElements( GL_TRIANGLES, ... );
}
// draw wireframe objects
glEnable( GL_BLEND );
glDepthFunc( GL_LEQUAL );
for( i = 0; i < g_objects.size(); i++ )
{
glColor4ubv( (const GLubyte*)&g_objects[i].m_wireColor );
// wireframe always has right color
glVertexPointer( … );
glNormalPointer( … );
glDrawRangeElements( GL_LINES, … );
}glColor4f( 0.5, 0.5, 0.5, 1 );
// … draw some lines - gridglDisable( GL_BLEND );
glDepthFunc( GL_LESS );// …
}
But if I insert
-8<---------------------
glBegin( GL_LINES );
glEnd();
-8<---------------------
after glColor - where '// PROBLEM HERE ’ is placed - all work fine and triangles have right color. -> If GL_LINE_SMOOTH is enabled, then color will be actually set only then drawing lines.
This only happens with GL_LINE_SMOOTH enabled and I didn’t find any limitations on LINE_SMOOTH in the gl spec, so I assume this is a bug.
Card: NVidia GF2MX400
Drivers: 43.45 & 40.41
System: WinXP