Ошибка OpenGL 1282 с glEndList () - PullRequest
1 голос
/ 25 июля 2011

У меня есть небольшой сегмент, который генерирует список отображения, который выглядит следующим образом:

glNewList ( CDisplayList :: GetBaseList () + 2, GL_COMPILE );
{
    glBegin ( GL_QUADS );           
        glPushMatrix ();

            //
            // Move to slightly lower position.
            //

            glTranslatef ( 0.0f, -1.1f, 0.0f ); 
            glColor4f ( 1.0f, 1.0f, 1.0f, 1.0f );

            //
            // Front facing.
            //

            glTexCoord2f ( m_TexLeft,   m_TexBottom );  glVertex3f ( m_Start, -0.1f, 0.0f );            
            glTexCoord2f ( m_TexRight,  m_TexBottom );  glVertex3f ( m_End, -0.1f, 0.0f );          
            glTexCoord2f ( m_TexRight,  m_TexTop );     glVertex3f ( m_End, -1.3f, 0.0f );          
            glTexCoord2f ( m_TexLeft,   m_TexTop );     glVertex3f ( m_Start, -1.3f, 0.0f );    

            //
            // Back facing.
            //

            glTexCoord2f ( m_TexLeft,   m_TexTop );     glVertex3f ( m_Start, -1.3f, 0.0f );
            glTexCoord2f ( m_TexRight,  m_TexTop );     glVertex3f ( m_End, -1.3f, 0.0f );          
            glTexCoord2f ( m_TexRight,  m_TexBottom );  glVertex3f ( m_End, -0.1f, 0.0f );                          
            glTexCoord2f ( m_TexLeft,   m_TexBottom );  glVertex3f ( m_Start, -0.1f, 0.0f );                            
        glPopMatrix ();
    glEnd ();
}
glEndList ();   

GLenum e = glGetError();

Значение «e» в конце здесь всегда равно 1282 (недопустимая операция или что-то в этом роде). Я не уверен почему. Я проверял glGetError после каждой команды, строящей список, начиная с glNewList и далее, и он всегда один и тот же (ноль). Этот список отображения является одним из 3 - 2 из которых был построен нормально ранее (протестировано с glGetError и возвращает ноль). Поэтому что-то в этом списке вызывает головную боль у водителя.

Есть идеи?

Обратите внимание, что m_TexLeft и т. Д. Равен 0, 0, 1, 0,125 (слева, сверху, справа, снизу) и m_Start, m_End равен 0, 100. GetBaseList возвращает целое число, полученное путем вызова glGenLists (3) (точно значение 257).

Не могу понять, что с ним не так, если честно.

1 Ответ

5 голосов
/ 25 июля 2011

Вам необходимо переместить манипуляции с матрицей преобразования из пары glBegin / glEnd. Вот что говорит документация :

Только подмножество команд GL может использоваться между glBegin и glEnd. Команды: glVertex, glColor, glIndex, glNormal, glTexCoord, glEvalCoord, glEvalPoint, glArrayElement, glMaterial и glEdgeFlag. Также допустимо использовать glCallList или glCallLists для выполнения отображать списки, которые включают только предыдущие команды. Если какой-либо другой Команда GL выполняется между glBegin и glEnd, флаг ошибки установить и команда игнорируется.

А в разделе Ошибки:

GL_INVALID_OPERATION генерируется, если команда отлична от glVertex, glColor, glIndex, glNormal, glTexCoord, glEvalCoord, glEvalPoint, glArrayElement, glMaterial, glEdgeFlag, glCallList или glCallLists является выполняется между выполнением glBegin и соответствующим план исполнения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...