关闭

Texture Buffer Object

193人阅读 评论(0) 收藏 举报
分类:

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

0
0

猜你在找
深度学习基础与TensorFlow实践
【在线峰会】前端开发重点难点技术剖析与创新实践
【在线峰会】一天掌握物联网全栈开发之道
【在线峰会】如何高质高效的进行Android技术开发
机器学习40天精英计划
Python数据挖掘与分析速成班
微信小程序开发实战
JFinal极速开发企业实战
备战2017软考 系统集成项目管理工程师 学习套餐
Python大型网络爬虫项目开发实战(全套)
查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:5349次
    • 积分:306
    • 等级:
    • 排名:千里之外
    • 原创:23篇
    • 转载:0篇
    • 译文:0篇
    • 评论:0条
    文章分类