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

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

ARB_uniform_buffer_object扩展要点总结

1.Uniform buffer object(ubo)是一种buffer object,所以也可以支持dma方式的数据传输,从而可以提高cpu端执行命令的效率 2.Uniform buffer o...

OpenGL FBO (Frame Buffer Object) 帧缓冲对象

OpenGL中的几个重要缓冲系统有VBO(Vertex Buffer Object), PBO(Pixel Buffer Object),FBO(Frame Buffer Object),其中VBO和...

chapter 9.5: memory object和buffer allocation

创建mem obj和buffer的方法     1.一个函数同时分配buffer和memory obj     2.创建一个memory obj,然后把它和一个已存在的buffer关联 创建请求...

[转]OpenGL Frame Buffer Object (FBO)

Related Topics:Pixel Buffer Object (PBO)Download:fbo.zip , fboDepth.zip , fboStencil.zipOverviewCr...

GPU深度发掘(三)::OpenGL Frame Buffer Object 201

GPU深度发掘(三)::OpenGL Frame Buffer Object 201   作者: Rob 'phantom' Jones  译者:华文广 更新:2007/6/15 介绍 ...

[转]OpenGL Pixel Buffer Object (PBO)

Related Topics:Vertex Buffer Object (VBO) , Frame Buffer Object (FBO)Download:pboUnpack.zip , pboP...

最简单的 UBO(Uniform Buffer Object) 【OpenGL】【GLSL】

一、引入 Uniform Buffer Object / Uniform Block 的 原因1)  如果程序涉及了多个 Shader 程序,而且它们使用同一个Uniform变量,那么你就需要为每个 ...

【OpenGL】OpenGL帧缓存对象(FBO:Frame Buffer Object)

翻译的,如果不正确,敬请谅解和指正。 OpenGL Frame BufferObject(FBO) Overview:     在OpenGL渲染管线中,几何数据和纹理经过多次转化和多次测试,最...

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

本文介绍OpenGL中的统一缓冲区对象(UBO)
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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