Texture Buffer Object

原创 2016年08月02日 10:56:45

Texture Buffer Object(TBO),是这一种特殊的一维纹理。需要和缓存对象关联使用,在着色器中可以访问缓冲对象管理的内存数据。

初始化

//***********************************************************
//FUNCTION::
void CTBOApp::__createTexturetBufferObject()
{
    glm::vec3 TBOData[3] = {glm::vec3(1.0, 0.0, 0.0), glm::vec3(0.0, 1.0, 0.0), glm::vec3(0.0, 0.0, 1.0)}; 

    glGenBuffers(1, &m_TextureBuffer);
    glBindBuffer(GL_TEXTURE_BUFFER, m_TextureBuffer);
    glBufferData(GL_TEXTURE_BUFFER, sizeof(TBOData), TBOData, GL_STATIC_DRAW);
    glBindBuffer(GL_TEXTURE_BUFFER, 0);

    glGenTextures(1, &m_Texture);
    glBindTexture(GL_TEXTURE_BUFFER, m_Texture);
    glTexBuffer(GL_TEXTURE_BUFFER, GL_R32F, m_TextureBuffer);//buffer缓存对象关联到激活的纹理单元target的缓存纹理。
    glBindTexture(GL_TEXTURE_BUFFER, 0);
}

首先是生成缓存对象,其次是生成缓存纹理,并且绑定到前面上次的缓存对象上。这样就可以通过缓存纹理访问缓存对象里存储的数据。

Fragment Shader

#version 450 core

layout (location = 0) out vec4 FragColor;

uniform samplerBuffer uTBOTex;

void main()
{
    int offset = 0;
    float R = texelFetch(uTBOTex, offset + 0).r;
    float G = texelFetch(uTBOTex, offset + 4).r;
    float B = texelFetch(uTBOTex, offset + 8).r;

    FragColor = vec4(R, G, B, 1.0);
}

注意vec4 texelFectch(samplerBuffer s, int coord);绑定到s的纹理中查询纹理坐标coord的一个纹素。缓存纹理使用的是未归一化的整数纹理坐标。

参考资料

【1】https://www.opengl.org/wiki/Buffer_Texture
【2】https://gist.github.com/roxlu/5090067

【第二弹】OpenGL深入学习之缓冲区

1.      《OpenGL超级宝典第5版》 2.      首先缓冲区在OpenGL的用处以及优势? 缓冲区能够迅速方便地将数据从一个渲染管线移动到另一个渲染管线,以及从一个对象绑定到另一个对...
  • hunter_wwq
  • hunter_wwq
  • 2013年11月24日 18:08
  • 7736

[OpenGL 超级宝典][笔记] 8.1 纹理缓冲区(TBO)

纹理缓冲区(TBO)当一个缓冲区对象绑定GL_TEXTURE_BUFFER绑定点时,我们称之为纹理缓冲区(TBO). 作用: 能够直接直译来自其它渲染结果如变换反馈,像素读取操作,顶点数据,提高性能。...
  • comedate
  • comedate
  • 2017年05月31日 22:29
  • 542

[OpenGL] 高级着色器应用之 统一缓冲区对象(Uniform Buffer Object)

本文介绍OpenGL中的统一缓冲区对象(UBO)
  • comedate
  • comedate
  • 2017年05月14日 22:41
  • 365

Opengl之缓存映射

GLuint buffer; FILE *f; size_t filesize; //打开文件并确定它的大小 f = fopen("data.dat", "rb"); //设置文件f的位置,...
  • SHIYUEDYX
  • SHIYUEDYX
  • 2016年10月13日 14:27
  • 249

OpenGL中的Frame Buffer Object 理解

概点击打开链接要 在OpenGL的渲染管线中,几何数据和纹理通过一系列变换和测试,最终被渲染成屏幕上的二维像素。那些用于存储颜色值和测试结果的二维数组的几何被称为帧缓冲区(frame buffer)。...
  • xiaoquan9653
  • xiaoquan9653
  • 2016年05月31日 19:26
  • 736

关于TextureBuffer作为输出的一个小细节

glsl中要将结果输出到一块texture buffer上时,在每一帧前都要进行纹理空间的重新分配,如下代码中的glTexBufferRange, glBindTexture(GL_TEX...
  • u013939659
  • u013939659
  • 2014年03月18日 19:50
  • 597

Texture Buffer Object

Texture Buffer Object(TBO),是这一种特殊的一维纹理。需要和缓存对象关联使用,在着色器中可以访问缓冲对象管理的内存数据。初始化//***********************...
  • freehyan
  • freehyan
  • 2016年08月02日 10:56
  • 404

OpenGL笔记之缓冲区对象(基础篇上)

OpenGL笔记 缓冲区对象是一个强大的概念,它允许应用程序快速方便地将数据从一个渲染管线移动到另一个渲染管线,以及从一个对象绑定到另一个对象。 缓冲区有许多不同的用途,它能保存顶点数据、像素数据...
  • lance710825
  • lance710825
  • 2017年09月29日 22:29
  • 108

buffer object VAO VBO FBO TEXTURE OBJECT Frame Buffer 理解

三个逆操作函数: gluUnProject glReadPixels glGetTexImage()三个函数代表了三种基本的数据类型,即 顶点属性数据、像素数据以及纹理对象数据。 BU...
  • u010473136
  • u010473136
  • 2016年12月11日 20:35
  • 141

Const Buffer,Texture Buffer

申请缓冲区 void ConstBufferPool::requestSlot( uint32 hash, ConstBufferPoolUser *user, bool wantsExtraBuff...
  • kuangben2000
  • kuangben2000
  • 2017年02月06日 21:44
  • 106
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Texture Buffer Object
举报原因:
原因补充:

(最多只允许输入30个字)