这可能是所有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
的含义是什么呢?从docs中,我得到GL是一个包装了OpenGL es2.0的所有方法的接口,所以我可以调用方法。GL_COLOR_BUFFER_BIT
的意思令我费解。它应该重新生成当前为彩色书写启用的内存..。这是否意味着它会抹掉所有的图像?它会擦除ShapeRenderer对象吗?屏幕上是否有不属于彩色书写的内容,并且在使用此常量时不会被擦除?GL_DEPTH_BUFFER_BIT是否擦除纹理的Z-位置?
发布于 2015-12-08 11:51:12
当你在屏幕上画东西时,你不会直接画它们。相反,他们首先被吸引到所谓的“回缓冲”。这是一个内存块(一个缓冲区),它包含屏幕上每个像素的4个字节,每个像素的每个颜色组件(红色、绿色、蓝色和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
应该是您在呈现方法中所做的第一件事(例如,在绑定FBO时)。这是因为它告诉驱动程序您不关心缓冲区的现有值。这允许驱动程序进行优化,因为它不需要重构(复制)原始内存块。
https://stackoverflow.com/questions/34164309
复制相似问题