NeHe OpenGL Lesson12 – Display Lists

本文深入探讨OpenGL显示列表的使用及优化技巧,展示如何通过预渲染命令缓存提升图形工作站性能,减少材料切换时间,实现固定管线下的颜色混合。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

screen_shot5-300x237 This lesson shows us how to use the OpenGL display list. Display list is a special feature with OpenGL, that D3D does not have.
A Display list is an OpenGL commands optimized cache. Some of it’s command will be optimized to display card supported commands. Some commands like matrix set up will pre-calculating. And it will resident on the server side instead of client side, this will improve the speed significantly by avoid transferring the OpenGL command from client to server again and again. Of course, running the graphic part on the server only work for the early graphic workstation. The porn of display list is that, it is fully static. You could not modify a display list content after you create and set up one.

 

Not all thing could be put into the display list could be used to improve the performance. The following are some items that you could put into the display list:
1) matrix set up and operation;
2) vertex data, like the vertex position, texture coordinates, vertex normal;
3) material set up, put the material switch in the display list could reduce material switch time. Render states switching is time wasting, you could improve the whole performance by sorting materials;
4) texture object;
5) polygon fill mode.

 

Steps to create and use display list are very easy:

box=glGenLists(2);                         
    glNewList(box,GL_COMPILE);  
     // glBegin(), glEnd(), some 3D API rendering commands used here
    glEndList();

The above code used to create display list. As you see, it seems something pre-render into the display list. To use this display list:

glCallList(box);

The above line of code will be called in the DrawScene. This will make the display list content display on the main scene.

 

Another interested point is about using glEnable(GL_COLOR_MATERIAL). This will make the color set by glColor3f blend with the texture. A full combination to make all thing happen is like this:

glEnable(GL_LIGHT0);
glEnable(GL_LIGHTING);                                // Enable Lighting
glEnable(GL_COLOR_MATERIAL);                        // Enable Material Coloring
……
glColor3fv(boxcol[yloop-1]); // work with GL_COLOR_MATERIAL setting
glCallList(box);

As you see, we may have lighting, material, color from glColor3fv, textures. A lots of stuffs come together, so how about the final color will be? How about OpenGL built-in functions handle them with fixed pipeline? If you use programmable render pipeline like vertex shader or pixel shader, you will not have such headache problem. You could define your own rules of applying all those stuffs, also with a very clear map. But comes to fixed pipeline, it seems more complicated.  An article for deep further presented here.

 

The full source code could be found here.

转载于:https://www.cnblogs.com/open-coder/archive/2012/08/23/2653371.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值