OpenGL FrameBufferCopy相關Api比較(glCopyPixels,glReadPixels,glCopyTexImage2D,glFramebufferTexture2D)


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.

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM