这是所有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位置?
当你在屏幕上画东西时,你不直接画它们.相反,它们首先被吸引到所谓的"后缓冲区".这是一块内存(缓冲区),每个像素包含四个字节,每个像素的每个颜色分量(红色,绿色,蓝色和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时).这是因为它告诉驱动程序您不关心缓冲区的现有值.这允许驱动程序进行优化,因为它不必重建(复制)原始内存块.