Hi, I’ve got a strange problem:
I am rendering a bunch of triangles.
If I put each triangle in its own glBegin()-glEnd()-block, no error occurs:
foreach(Triangle* t, triangles)
{
t->glRender();
}
//...
void Triangle::glRender()
{
glBegin(GL_TRIANGLES);
glMultiTexCoord2fARB(GL_TEXTURE0_ARB, _c1->p1xNormalized()*0.75f, 1.0f-_c1->p1yNormalized());
qt_glMultiTexCoord2fARB(GL_TEXTURE1_ARB, _c1->p1xNormalized()*0.75f, 1.0f-_c1->p1yNormalized());
glVertex3f(_c1->p2x(), _c1->p2y(),0);
qt_glMultiTexCoord2fARB(GL_TEXTURE0_ARB, _c2->p1xNormalized()*0.75f, 1.0f-_c2->p1yNormalized());
qt_glMultiTexCoord2fARB(GL_TEXTURE1_ARB, _c2->p1xNormalized()*0.75f, 1.0f-_c2->p1yNormalized());
glVertex3f(_c2->p2x(), _c2->p2y(),0);
qt_glMultiTexCoord2fARB(GL_TEXTURE0_ARB, _c3->p1xNormalized()*0.75f, 1.0f-_c3->p1yNormalized());
qt_glMultiTexCoord2fARB(GL_TEXTURE1_ARB, _c3->p1xNormalized()*0.75f, 1.0f-_c3->p1yNormalized());
glVertex3f(_c3->p2x(), _c3->p2y(),0);
glEnd();
}
But what should be more efficient is to only have one glBegin()-End() like that:
glBegin(GL_TRIANGLES);
foreach(Triangle* t, triangles)
{
t->glRender();
}
glEnd();
//...
void Triangle::glRender()
{
glMultiTexCoord2fARB(GL_TEXTURE0_ARB, _c1->p1xNormalized()*0.75f, 1.0f-_c1->p1yNormalized());
qt_glMultiTexCoord2fARB(GL_TEXTURE1_ARB, _c1->p1xNormalized()*0.75f, 1.0f-_c1->p1yNormalized());
glVertex3f(_c1->p2x(), _c1->p2y(),0);
qt_glMultiTexCoord2fARB(GL_TEXTURE0_ARB, _c2->p1xNormalized()*0.75f, 1.0f-_c2->p1yNormalized());
qt_glMultiTexCoord2fARB(GL_TEXTURE1_ARB, _c2->p1xNormalized()*0.75f, 1.0f-_c2->p1yNormalized());
glVertex3f(_c2->p2x(), _c2->p2y(),0);
qt_glMultiTexCoord2fARB(GL_TEXTURE0_ARB, _c3->p1xNormalized()*0.75f, 1.0f-_c3->p1yNormalized());
qt_glMultiTexCoord2fARB(GL_TEXTURE1_ARB, _c3->p1xNormalized()*0.75f, 1.0f-_c3->p1yNormalized());
glVertex3f(_c3->p2x(), _c3->p2y(),0);
}
The error that I am complaining about now is as follows:
Using the second implementation, glGetError returns only once after the first run of this code a GL_INVALID_OPERATION!!!
Again: this INVALID_OPERATION is only thrown once (per process lifecycle). But also the displayed stuff looks correct. I do not want to deploy code that throws an error, can you please help me?
I made sure that no texture is uninitialized or empty, also I checked that a multiple of 3 vertecies are handed over to the gl-system. Also glGetError is not called withing the glBegin-End block, it is the first statement after glEnd().
Thanks in advance,
Best regards,
Oliver