菜鸟教程小白 发表于 2022-12-12 09:43:52

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


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

<p>然后,我发现<a href="https://stackoverflow.com/questions/7954927/glsl-passing-a-list-of-values-to-fragment-shader" rel="noreferrer noopener nofollow">Passing a list of values to fragment shader</a>
我没有足够的声誉发表评论,所以我不得不提出另一个问题。我对那些API不熟悉,我都试过了</p>

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

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

<p>这就是我正在做的:</p>

<pre><code>// i var
GLint *randomArray;
GLuint _randomArrayTexture;
GLuint _randomArrayUnifrom;

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

glGenTextures(0, &amp;_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, &#34;randomArray&#34;); // 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)
</code></pre></p>
                                    <br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
                                            <p><p>我建议您使用 <code>glTexImage2D</code> 模拟一维纹理,其宽度为数组计数(或二的下一个幂),高度为 1。</p></p>
                                   
                                                <p style="font-size: 20px;">关于ios - 如何使用 OpenGL ES 2.0 将巨大的数组传递给 iOS 上的着色器?,我们在Stack Overflow上找到一个类似的问题:
                                                        <a href="https://stackoverflow.com/questions/33673414/" rel="noreferrer noopener nofollow" style="color: red;">
                                                                https://stackoverflow.com/questions/33673414/
                                                        </a>
                                                </p>
                                       
页: [1]
查看完整版本: ios - 如何使用 OpenGL ES 2.0 将巨大的数组传递给 iOS 上的着色器?