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.

     

     

     

  • 相关阅读:
    ubuntun16.04不支持intel的最新网卡,升级到17.10后解决
    python网络爬虫之使用scrapy下载文件
    Django之QuerySet 创建对象
    一起来学linux:磁盘与文件系统:
    python自动化运维九:Playbook
    一起来学linux:FTP服务器搭建
    Learning Scrapy 中文版翻译 第二章
    python自动化运维八:Ansible
    linux c编程:make编译一
    【原创】大叔经验分享(27)linux服务器升级glibc故障恢复
  • 原文地址:https://www.cnblogs.com/BigFeng/p/5087584.html
Copyright © 2011-2022 走看看