OpenGL ES之如何传输一个超大数组给着色器程序

举报
Serendipity·y 发表于 2022/06/28 23:45:06 2022/06/28
【摘要】 一、前言 在 OpenGL ES 图形图像处理中,会经常遇到一种情况:如何将一个超大的数组传给着色器程序?目前常用的有三种方式: 使用将数组加载到 2D 纹理的方式,然后使用 te...

一、前言

  • 在 OpenGL ES 图形图像处理中,会经常遇到一种情况:如何将一个超大的数组传给着色器程序?目前常用的有三种方式:
    • 使用将数组加载到 2D 纹理的方式,然后使用 texelFetch 取数据;
    • 使用 uniform 缓冲区对象,即 UBO;
    • 使用纹理缓冲区对象,即 TBO。

二、将数组加载到纹理

  • 使用将数组加载到纹理的方式来传输大数组,是最容易想到的一种方式。要想精确地换取每个像素的值,这个时候就不能使用采样函数 texture,因为采样函数会涉及归一化、过滤以及插值等复杂操作,基本无法得到某一确切像素的值。
  • 这个时候就需要使用纹素获取函数 texlFetch ,texlFetch 是 OpenGL ES 3.0 引入的 API ,它将纹理视为图像,可以精确访问像素的内容,可以类比通过索引来获取数组某个元素的值:
vec4 texelFetch(sampler2D sampler, ivec2 P, int lod)
  
 

    文章来源: blog.csdn.net,作者:╰つ栺尖篴夢ゞ,版权归原作者所有,如需转载,请联系作者。

    原文链接:blog.csdn.net/Forever_wj/article/details/125435392

    【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
    • 点赞
    • 收藏
    • 关注作者

    评论(0

    0/1000
    抱歉,系统识别当前为高风险访问,暂不支持该操作

    全部回复

    上滑加载中

    设置昵称

    在此一键设置昵称,即可参与社区互动!

    *长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

    *长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。