如何使用glCopyImage2D

Ada*_*dam 8 opengl textures

我正在尝试类似的东西

glEnable(texture_2d)
glBindTexture
glCopyTexImage2D
glDisable(GL_TEXTURE_2D);
Run Code Online (Sandbox Code Playgroud)

我认为glCopyTexImage2D不适用于两个图像的非幂,所以这是一个问题; 我也试过glReadPixels,但它对我来说太慢了.

Piv*_*vot 9

如果glReadPixels对你来说太慢了,那么glCopyTexImage2DglCopyTexSubImage2D不会更快.在支持帧缓冲对象(如iOS)的平台上,将GPU渲染图像数据导入纹理的推荐(即更快)方法是使用该纹理作为帧缓冲对象的颜色附件并直接渲染到其中.也就是说,如果你仍然想要采用这种方法,那么你需要做的就是修复它:

首先,你将错误的论点传递给了glCopyTexImage2D.第三个论点internalformat应该是GL_RGBA代替0.如果你在打电话glGetError后打电话glCopyTexImage2D,你可能会得到GL_INVALID_OPERATION.有关glCopyTexImage2DglCopyTexSubImage2D的信息,请参见OpenGL ES 1.1手册页.

其次,正如您已经观察到的那样,glCopyTexImage2D要求其宽度和高度参数也是2的幂.处理这个的正确方法是使用glTexImage2D(你可以NULLpixels这里传递)来分配纹理图像,然后使用glCopyTexSubImage2D将帧缓冲内容复制到矩形中.请注意,glCopyTexSubImage2D不接受internalformat参数 - 因为它正在更新纹理的子矩形,它使用纹理的现有格式.

为了记录,glGetTexImage在OpenGL ES 1.1或2.0中不存在,这就是你获得隐式声明的原因.