NeHe OpenGL Lesson12 – Display Lists
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.
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· DeepSeek 开源周回顾「GitHub 热点速览」
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了