• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

ios - 如何使用 OpenGL ES 2.0 将巨大的数组传递给 iOS 上的着色器?

[复制链接]
菜鸟教程小白 发表于 2022-12-12 09:43:52 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题

我只需要将一个巨大的 Int 数组(计数 1521)传递给我的动画着色器。 首先,我把它当作制服,但它似乎太大了。

然后,我发现Passing a list of values to fragment shader 我没有足够的声誉发表评论,所以我不得不提出另一个问题。我对那些API不熟悉,我都试过了

  • 1D 纹理:我找不到任何有效的 API。
  • 统一缓冲区对象:大多数示例都清晰易懂,但在带有 ES 2.0 的 iOS 上不可用
  • 缓冲区纹理:我认为它非常接近,但在带有 ES 2.0 的 iOS 上似乎缺少 glTexBuffer 和 GL_TEXTURE_BUFFER
  • 着色器存储缓冲区对象:这是 GL 4.3 的东西,对于 ES 2.0 来说太新了

请帮帮我,我只需要在着色器中访问该数组。

这就是我正在做的:

// i var
GLint *randomArray; 
GLuint _randomArrayTexture;
GLuint _randomArrayUnifrom;

// init texture
randomArray = (GLint*)malloc(1521 * sizeof(GLint)); 
    for (int i=0; i<1521; i++) {
        randomArray[i] = array[i].intValue;
    }

glGenTextures(0, &_randomArrayTexture);
glBindTexture(GL_TEXTURE_2D, _randomArrayTexture);

glTexImage2D(GL_TEXTURE_2D, 0, GL_ALPHA, 1521, 1, 0, GL_ALPHA, GL_INT, randomArray);
glBindTexture(GL_TEXTURE_2D, 0);

_randomArrayUnifrom = glGetUniformLocation(_program, "randomArray"); // after shader compiled

// before draw
glActiveTexture(GL_TEXTURE1);
glBindTexture(GL_TEXTURE_2D, _randomArrayTexture);
glUniform1i(_randomArrayUnifrom, 1);
glBindTexture(GL_TEXTURE_2D, 0);

// the thing in shader
uniform sampler2D randomArray;
texture2D(randomArray, vec2(0.1, 0.0)); 
// Could I access the texture with real index (not uniformed) such as vec2(1109, 0)



Best Answer-推荐答案


我建议您使用 glTexImage2D 模拟一维纹理,其宽度为数组计数(或二的下一个幂),高度为 1。

关于ios - 如何使用 OpenGL ES 2.0 将巨大的数组传递给 iOS 上的着色器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33673414/

回复

使用道具 举报

懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关注0

粉丝2

帖子830918

发布主题
阅读排行 更多
广告位

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap