zoukankan      html  css  js  c++  java
  • 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.

     

     

     

  • 相关阅读:
    LOJ.114.K大异或和(线性基)
    BZOJ.2115.[WC2011]Xor(线性基)
    BZOJ.2460.[BeiJing2011]元素(线性基 贪心)
    Codeforces Round #494 (Div 3) (A~E)
    Codeforces Round #493 (Div 2) (A~E)
    BZOJ.3238.[AHOI2013]差异(后缀自动机 树形DP/后缀数组 单调栈)
    BZOJ.4180.字符串计数(后缀自动机 二分 矩阵快速幂/倍增Floyd)
    BZOJ.1396.识别子串(后缀自动机/后缀数组 线段树)
    BZOJ.3489.A simple rmq problem(主席树 Heap)
    BZOJ.4566.[HAOI2016]找相同字符(后缀自动机)
  • 原文地址:https://www.cnblogs.com/BigFeng/p/5087584.html
Copyright © 2011-2022 走看看