OGeek|极客世界-中国程序员成长平台

标题: ios - 如何使用 OpenGL ES 2.0 将巨大的数组传递给 iOS 上的着色器? [打印本页]

作者: 菜鸟教程小白    时间: 2022-12-12 09:43
标题: ios - 如何使用 OpenGL ES 2.0 将巨大的数组传递给 iOS 上的着色器?

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

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

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

这就是我正在做的:

// 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/






欢迎光临 OGeek|极客世界-中国程序员成长平台 (http://ogeek.cn/) Powered by Discuz! X3.4