Не удается получить список отображения для работы - PullRequest
0 голосов
/ 05 октября 2010

Прежде всего, как обычно, спасибо всем за отличную поддержку со стороны сообщества SO.

Итак, я написал код для рисования 6 gl_quads (для формирования куба). Первоначально этот код был нарисован немедленно (явно сделал 24 вызова вершин в функции отображения). Я хотел бы поместить их в список отображения. Я прочитал учебник о списках отображения и дал ему шанс. Проблема в том, что ничего не появляется, и у меня есть glulookat, который определенно указывает в направлении куба (проверено в непосредственном режиме). Так что в основном код работает отлично, когда не используются списки отображения, но не работает, когда я пытаюсь использовать список.

Хорошо, хватит, давайте посмотрим на код:

2nd EDIT- Перемещены вызовы glGenLists в initGl, и все работает нормально. Спасибо всем

* EDIT- * Вызов glGenList выполняется глобально:

GLuint skybox = glGenLists(1);

И я все еще получаю тот же результат. Ничто не выводит на экран.

Настройка списка (в функции initgl):

glViewport(0,0,WINDOW_WIDTH,WINDOW_HEIGHT); 
glEnable(GL_DEPTH_TEST);    // Enables Depth Testing
glDepthFunc(GL_LEQUAL);

glMatrixMode(GL_PROJECTION);    //setup the projection matrix
glLoadIdentity();
gluPerspective(45, WINDOW_WIDTH/WINDOW_HEIGHT,.1,200.0);

glMatrixMode(GL_MODELVIEW); //switch to modelview
glLoadIdentity();
gluLookAt(-2,2,2,0,0,0,0,1,0);
glClearColor(0, 0, 0, 0);

glNewList(skybox, GL_COMPILE_AND_EXECUTE); //draw the list once to compile/store
drawEnv(); //draw 6 quads
glEndList(); //end list

функция отображения (опускается неактуальный код):

/* Clear buffers */
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

//-----Draw Skybox------
glEnable(GL_TEXTURE_2D);
glPushMatrix();  //save env settings (I've tried removing this push/pop pair with same results
glCallList(skybox);
glPopMatrix();
glDisable(GL_TEXTURE_2D);

И функция drawEnv ():

//---------------------------
//--------RIGHT WALL---------
//---------------------------
//This code draws correctly if I move this to the display function (immediate drawing)  
glBindTexture(GL_TEXTURE_2D,rightTextureId);
glBegin(GL_QUADS);  
glTexCoord2f(0.0, 0.0);     glVertex3f( 1.0f, 1.0f, 1.0f);   //V2
glTexCoord2f(0.0, 1.0);     glVertex3f( 1.0f,-1.0f, 1.0f);   //V1
glTexCoord2f(1.0, 1.0);     glVertex3f( 1.0f,-1.0f,-1.0f);   //V3
glTexCoord2f(1.0, 0.0);     glVertex3f( 1.0f, 1.0f,-1.0f);   //V4
glEnd();

//repeat 5 more times

1 Ответ

2 голосов
/ 05 октября 2010

Вы почти у цели, вам просто нужно сначала позвонить с glGenLists() на и создать непрерывный набор пустых списков отображения .

GLuint listID;
listID = glGenLists( 1 ); // generate 1 display list
glNewList( listID, GL_COMPILE );
// whatever you want in the display list
glEndList();

// call the display list
glCallList( listID );

Вы также должны выполнить некоторую проверку ошибок, чтобы убедиться, что glGenLists() вернул верный список отображения.

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