Texture Buffer Object

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

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值