OpenGL FrameBufferCopy相關Api比較
glCopyPixels,glReadPixels,glCopyTexImage2D,glFramebufferTexture2D
標題所述的openGL api都是與提取frame buffer中的像素有關,那么它們有何區別呢?
1.void glCopyPixels(GLint x, GLint y, GLsizei width, GLsizei height, GLenum type)
描述:
將屏幕(opengGL程序窗口)中的指定區域復制到當前光柵位置(glRasterPos)對應的frame buffer中。可以理解為把直接把屏幕上的像素拷貝到frame buffer中,沒有經過內存。
參數:
x,y:左下角的窗口坐標,單位是像素。
width,height:復制矩形的長寬,單位是像素。
type:GL_COLOR, GL_DEPTH, and GL_STENCIL
2.void glReadPixels(GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLvoid * data)
描述:
從幀緩沖中讀取一個像素塊到內存data中。
參數:
x,y:左下角的窗口坐標,單位是像素。
width,height:復制矩形的長寬,單位是像素。
format:像素數據的格式,GL_COLOR_INDEX, GL_STENCIL_INDEX, GL_DEPTH_COMPONENT, GL_RED, GL_GREEN, GL_BLUE, GL_ALPHA, GL_RGB, GL_BGR, GL_RGBA, GL_BGRA, GL_LUMINANCE, and GL_LUMINANCE_ALPHA.
type:像素數據的類型,GL_UNSIGNED_BYTE, GL_BYTE, GL_BITMAP, GL_UNSIGNED_SHORT, GL_SHORT, GL_UNSIGNED_INT, GL_INT, GL_FLOAT等
data:返回的像素數據。
3.void glCopyTexImage2D(GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border)
描述:
從frame buffer中復制一個二維紋理子對象,效果相當於glTexImage2D,只是數據源不同。
參數:
target:指定目標紋理,GL_TEXTURE_2D, GL_TEXTURE_CUBE_MAP_POSITIVE_X, GL_TEXTURE_CUBE_MAP_NEGATIVE_X, GL_TEXTURE_CUBE_MAP_POSITIVE_Y, GL_TEXTURE_CUBE_MAP_NEGATIVE_Y, GL_TEXTURE_CUBE_MAP_POSITIVE_Z, or GL_TEXTURE_CUBE_MAP_NEGATIVE_Z.
level:指定層次細節數,一般為0.
internalformat:紋理的內部格式,GL_ALPHA, GL_ALPHA4, GL_ALPHA8, GL_ALPHA12, GL_ALPHA16, GL_COMPRESSED_ALPHA, GL_COMPRESSED_LUMINANCE, GL_COMPRESSED_LUMINANCE_ALPHA, GL_COMPRESSED_INTENSITY等
x,y,width,height:確定拷貝的矩形區域。
border:邊界寬度,0or1
4.void glFramebufferTexture2D(GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level)
描述:
應用FBO渲染到紋理(glGenTextures),直接繪制到紋理中。glCopyTexImage2D是渲染到FrameBuffer->復制FrameBuffer中的像素產生紋理。glFramebufferTexture2D直接渲染生成紋理,做全屏渲染(比如全屏模糊)時比glCopyTexImage2D高效
的多。FBO可以參考VBO, PBO與FBO(三)
參數:
target:GL_DRAW_FRAMEBUFFER, GL_READ_FRAMEBUFFER, or GL_FRAMEBUFFER.
attachment:連接點名字,GL_COLOR_ATTACHMENTi, GL_DEPTH_ATTACHMENT, GL_STENCIL_ATTACHMENT or GL_DEPTH_STENCIL_ATTACHMENT.
textarget:不詳
texture:glGenTextures產生的紋理id
level:mipmap level of texture to attach.