当前位置:  开发笔记 > 编程语言 > 正文

GL_COLOR_BUFFER_BIT重新生成哪个内存?

如何解决《GL_COLOR_BUFFER_BIT重新生成哪个内存?》经验,为你挑选了1个好方法。

这是所有libgdx应用程序可能具有的代码:

Gdx.gl.glClearColor( 1, 0, 0, 1 );
Gdx.gl.glClear( GL20.GL_COLOR_BUFFER_BIT );

要么

Gdx.gl.glClear(GL20.GL_DEPTH_BUFFER_BIT);

这将设置颜色,屏幕将被刷新(第一行)而不是刷新它(第二行).但这是什么意思GL20.GL_COLOR_BUFFER_BIT?从我得到的文档中,GL是一个包含OpenGL ES 2.0所有方法的接口,它就在那里我可以调用方法.这个意思GL_COLOR_BUFFER_BIT让我感到困惑.它应该重新生成当前为彩色写入启用的内存......是否意味着它会擦除所有图像?它会擦除ShapeRenderer对象吗?屏幕上的任何内容都不是彩色写入的一部分,并且在使用此常量时不会被删除?GL_DEPTH_BUFFER_BIT是否会擦除纹理的Z位置?



1> Xoppa..:

当你在屏幕上画东西时,你不直接画它们.相反,它们首先被吸引到所谓的"后缓冲区".这是一块内存(缓冲区),每个像素包含四个字节,每个像素的每个颜色分量(红色,绿色,蓝色和alpha)一个字节.当您准备好绘图时(当渲染方法完成时),此缓冲区将立即显示在屏幕上.

缓冲区的现有值很重要.例如,当您在屏幕上绘制图像然后在其上绘制半透明图像时,结果是两个图像的混合.第一个图像被绘制到后缓冲区,导致后缓冲区的内存包含该图像的像素数据.接下来绘制第二个图像并将其混合在后缓冲区的现有数据之上.

内存块的每个字节总是有一个值,例如0表示黑色,255表示白色等.即使你没有向缓冲区绘制任何内容,它也必须有一些值.调用glClear(GL20.GL_COLOR_BUFFER_BIT)指示GPU使用某个指定值(颜色)填充整个后台缓冲区.可以使用调用来设置此值glClearColor.注意,glClearColor每次调用时都不必glClear调用,驱动程序会记住以前的值.

除了用于屏幕颜色值的后缓冲区(颜色缓冲区)之外,GPU还可以具有其他类型的缓冲区,其中一个是深度缓冲区.这又是每个像素几个字节的内存块,但这次它包含每个像素的深度值.这使得例如在3D渲染时可以确保没有绘制在其他对象后面的对象.需要使用清除此缓冲区GL20.GL_DEPTH_BUFFER_BIT.

请注意,您可以使用按位或操作将它们清除在一起: Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT | GL20.GL_DEPTH_BUFFER_BIT);

实际上,调用glClear应该是你在render方法中做的第一件事(或者在绑定FBO时).这是因为它告诉驱动程序您不关心缓冲区的现有值.这允许驱动程序进行优化,因为它不必重建(复制)原始内存块.

推荐阅读
地之南_816
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有