13.07.2015 Views

Manual de Apoio 2010

Manual de Apoio 2010

Manual de Apoio 2010

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

Capítulo 11Conceitos Avançados11.1 Display ListsOs comandos (funções) especificados no código do nosso programa em OpenGL, não são inconsequentes, sãonormalmente compilados para um conjunto <strong>de</strong> instruções que são colocadas num buffer. Quando apropriado, obuffer <strong>de</strong> comandos é enviado para o hardware.Para cenários geometricamente complexos, este processo po<strong>de</strong> ser reptido milhares <strong>de</strong> vezes, antes que umasimples imagem seja <strong>de</strong>senhada no ecrã. Em várias situações, a geometria repete-se <strong>de</strong> frame para frame, o querepresenta um overhead <strong>de</strong>snecessário <strong>de</strong> processamento.O OpenGL oferece a possibilida<strong>de</strong> <strong>de</strong> agregar um conjunto <strong>de</strong> comandos numa lista pré-processada. Esta lista<strong>de</strong> comandos po<strong>de</strong>, mais tar<strong>de</strong> ser copiada para o command buffer, poupando o tempo da chamada e compilaçãodos comandos.Esta lista <strong>de</strong> comandos pré-processados é chamada <strong>de</strong> display list. O código necessário à criação <strong>de</strong> displaylists po<strong>de</strong>rá ser:int name = ...; // I<strong>de</strong>ntificador da listagl. glNewList (name , GL2 . GL_COMPILE );// Comandos OpenGLgl. glEndList ();A função glNewList cria a display list i<strong>de</strong>ntificada pelo valor <strong>de</strong> name, armazenando os comandos até que éencontrada a função glEndList. O parâmetro GL2.GL COMPILE, diz ao OpenGL para compilar esta lista. Esteprocesso é normalmente levado a cabo na inicialização do nosso programa (função init()) e mais tar<strong>de</strong> a lista éinvocada durante o processo <strong>de</strong> ren<strong>de</strong>rização.O parâmetro name po<strong>de</strong>rá tomar qualquer valor inteiro (unsigned int). No caso <strong>de</strong> ser especificado duasvezes o mesmo valor ao invocar glNewList, a lista actualmente associada ao i<strong>de</strong>ntificador, é substituída pelanova especificação.A fim <strong>de</strong> evitar a substituição aci<strong>de</strong>ntal <strong>de</strong> uma lista previamente criada, po<strong>de</strong>mos pedir ao OpenGL que gereum conjunto <strong>de</strong> i<strong>de</strong>ntificadores (um para cada lista).int NumLists = 3;// ...int first = gl. glGenLists ( NumLists );O código em cima gera os i<strong>de</strong>ntificadors para 3 display lists consecutivas, on<strong>de</strong> first será o valor do primeiroi<strong>de</strong>ntificador. Para especificarmos a lista <strong>de</strong> comandos para as listas recém-criadas, po<strong>de</strong>mos escrever:int first = gl. glGenLists ( NumLists );int second = first + 1;int third = first + 2;gl. glNewList ( first , GL2 . GL_COMPILE );// Desenhar Geometria (1)gl. glEndList ();gl. glNewList ( second , GL2 . GL_COMPILE );// Desenhar Geometria (2)gl. glEndList ();gl. glNewList ( third , GL2 . GL_COMPILE );111

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!