opengl显示列表如何工作
时间: 2023-10-04 15:09:15 浏览: 52
OpenGL显示列表是一种优化技术,它可以将一组OpenGL命令序列保存在一个OpenGL对象中,以便在需要时进行重用。当调用显示列表时,OpenGL不会重新解释命令序列,而是直接执行已保存的命令序列。
下面是OpenGL显示列表的工作流程:
1. 创建显示列表:使用glGenLists函数创建一个新的显示列表对象,并使用glNewList函数开始记录OpenGL命令序列。
2. 记录OpenGL命令:使用任何OpenGL命令来定义显示列表中的图形对象。这些命令将被保存在显示列表中。
3. 结束记录:使用glEndList函数停止记录OpenGL命令序列,并将其保存在显示列表对象中。
4. 调用显示列表:使用glCallList函数调用显示列表。OpenGL将直接执行保存的命令序列,而不是重新解释和执行命令。
5. 删除显示列表:使用glDeleteLists函数删除显示列表对象,释放与其关联的内存。
总的来说,OpenGL显示列表可以提高图形渲染性能,特别是当需要多次绘制相同的对象时。然而,对于动态对象,如每帧都需要更新的对象,使用显示列表可能会带来额外的开销。
相关问题
opengl显示列表代码实现
以下是一个简单的OpenGL显示列表的示例代码:
// 创建一个显示列表
GLuint myList = glGenLists(1);
glNewList(myList, GL_COMPILE);
// 绘制图形
glBegin(GL_TRIANGLES);
glVertex3f(-1.0f, -1.0f, 0.0f);
glVertex3f(1.0f, -1.0f, 0.0f);
glVertex3f(0.0f, 1.0f, 0.0f);
glEnd();
// 结束显示列表
glEndList();
// 调用显示列表
glCallList(myList);
// 删除显示列表
glDeleteLists(myList, 1);
在这个示例中,我们首先使用glGenLists函数创建一个新的显示列表,并使用glNewList函数开始定义它。在这个显示列表中,我们使用glBegin和glEnd函数定义一个简单的三角形。然后,我们使用glEndList函数结束显示列表的定义。
在我们需要调用显示列表的地方,我们使用glCallList函数来绘制我们之前定义的三角形。最后,我们使用glDeleteLists函数删除我们创建的显示列表。
请注意,这只是一个简单的示例,您可以使用更复杂的OpenGL命令来定义更复杂的显示列表。
Qt OpenGL 3.3显示列表代码
好的,下面是一个简单的使用Qt和OpenGL 3.3创建和使用显示列表的代码示例:
```c++
// 在头文件中定义显示列表的ID
GLuint m_displayListID;
// 在初始化函数中创建显示列表
void initializeGL()
{
// 生成一个唯一的ID作为显示列表的标识符
m_displayListID = glGenLists(1);
// 开始记录显示列表
glNewList(m_displayListID, GL_COMPILE);
// 在此添加需要打包的OpenGL命令序列
glBegin(GL_TRIANGLES);
glVertex3f(-1.0f, -1.0f, 0.0f);
glVertex3f(1.0f, -1.0f, 0.0f);
glVertex3f(0.0f, 1.0f, 0.0f);
glEnd();
// 结束记录显示列表
glEndList();
}
// 在绘制函数中调用显示列表
void paintGL()
{
// 清空屏幕
glClear(GL_COLOR_BUFFER_BIT);
// 调用显示列表
glCallList(m_displayListID);
// 刷新窗口
glFlush();
}
```
以上就是一个简单的使用Qt和OpenGL 3.3创建和使用显示列表的代码示例,希望对您有所帮助。需要注意的是,这只是一个简单的示例,实际应用中需要根据具体情况进行修改。
相关推荐
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![application/x-rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)