OpenGL 显示列表:用于绘制 2D 精灵?
使用显示列表来绘制纹理矩形是好还是坏主意?
仅当精灵使用的纹理发生变化时,才会重新编译显示列表。
Is it a good or bad idea to use display lists for drawing textured rectangles?
The display list would be re-compiled only if the texture the sprite is using changes.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
对于绘制单个精灵,这样做没有真正的问题,但假设您使用 glRotate/glTranslate 来定位精灵,那么它也没有任何优势。很多游戏都是这样编写的。
在我的游戏中,我使用带有 GL_DYNAMIC_DRAW 的顶点缓冲区对象来存储共享每个纹理图集的所有精灵。我更新 CPU 上的垂直位置,并在一次绘制调用中发送整批数据。我可以使用这种方法绘制更多的精灵。如果我需要绘制更多,我可以在顶点着色器中完成位置。
另外,请记住 OpenGL ES2 不支持显示列表,因此如果您正在考虑移植到 ES2 设备,则必须重新进行操作。 (iPhone/iPad 支持 ES1,但不能与 ES2 混合搭配,可以使用显示列表或着色器,但不能同时使用两者)。
For drawing a single sprite, there's no real problem in doing it that way, but there's no advantage to it either, assuming you're using glRotate/glTranslate to position the sprite. Plenty of games have been written that way.
In my games, I use a vertex buffer object with GL_DYNAMIC_DRAW to store all the sprites which share each texture atlas. I update the vert positions on the CPU and send the whole batch in one draw call. I can draw many more sprites using this approach. I could do the positions in a vertex shader if I needed to draw even more.
Also, keep in mind that OpenGL ES2 doesn't support display lists, so if you're thinking of porting to an ES2 device you'd have to re-do it. (iPhone/iPad support ES1 but you can't mix and match with ES2, you can use display lists OR shaders but not both).