2011-07-25 41 views
1

私はこのようになりますディスプレイリストを生成し、ほとんどのセグメントを持っている:OpenGLのエラー1282()

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(無効な操作で、またはそのようなもの)。なぜ私は分からない。 glNewListからリストを構築するすべてのコマンドの後にglGetErrorをチェックしましたが、常に同じ(ゼロ)です。この表示リストは3つのうちの1つであり、そのうちの1つはokです(glGetErrorでテストされ、ゼロを返します)。だから、このリストの何かがドライバーに頭痛を与えているのです。

アイデア?

m_TexLeftなどは0,0,1,1,025(左上、上端、右下)で、m_Start、m_Endは0,100です。GetBaseListは、glGenLists(3)を呼び出して得られた整数を返します正確な値は257です)。

正直言って何が間違っているのか分かりません。

答えて

5

変換行列操作をglBegin/glEndペアから移動する必要があります。これは、documentationの言葉です:

glBeginとglEndの間でGLコマンドのサブセットのみを使用できます。 コマンドはglVertex、glColor、glIndex、glNormal、glTexCoord、 glEvalCoord、glEvalPoint、glArrayElement、glMaterial、およびglEdgeFlagです。 また、glCallListまたはglCallListsを使用して、上記のコマンドだけを含む 表示リストを実行することもできます。 glBeginとglEndの間で他の GLコマンドが実行された場合、エラーフラグは に設定され、コマンドは無視されます。

とエラーセクションの下:

GL_INVALID_OPERATIONはglVertex、 glColor、glIndex、glNormal、glTexCoord、glEvalCoord、glEvalPoint、 glArrayElement、glMaterial、glEdgeFlag、glCallList、以外のコマンド場合に生成されますまたはglCallListsは、glBeginの実行と対応するglEndの実行との間で実行される です。

+0

ああ、はい。私は彼らが何をやっているのかは分からない。私はもともと8年前にこれを書いていましたが、長年のドライバーの改善は、このリストを実行すると、このコードが今や崩れずに継続することを意味しています。これは今コンパイルするので、ありがとう。 – Robinson

関連する問題