菜鸟教程小白 发表于 2022-12-12 14:52:34

android - 使用 glTexImage2D 绘制 63*63 图像


                                            <p><p>在android中,使用这个代码是有效的:</p>

<pre><code>glTexImage2D(GL_TEXTURE_2D, 0, GL_BGRA_EXT, content.width, content.height, 0, GL_BGRA_EXT, GL_UNSIGNED_BYTE, content.pixels);
</code></pre>

<p>但在 iOS 中不行,这段代码只能绘制 64 *64(2 的幂)</p>

<pre><code>glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, content.width, content.height, 0, GL_BGRA_EXT, GL_UNSIGNED_BYTE, content.pixels);
</code></pre>

<p>我该怎么办?</p>

<p>非常感谢!!!</p></p>
                                    <br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
                                            <p><p>在您的 <code>glTexImage2D</code> 调用之前使用它:</p>

<pre><code>// Use tightly packed data
glPixelStorei(GL_UNPACK_ALIGNMENT, 1);
</code></pre>

<p>更多信息在这里:<a href="http://www.khronos.org/opengles/sdk/1.1/docs/man/glPixelStorei.xml" rel="noreferrer noopener nofollow">http://www.khronos.org/opengles/sdk/1.1/docs/man/glPixelStorei.xml</a> </p>

<p>[...]GL_PACK_ALIGNMENT
指定内存中每个像素行开头的对齐要求。允许的值为 1(字节对齐)、2(与偶数字节对齐的行)、4(字对齐)和 8(行从双字边界开始)。初始值为 4。[...]</p>

<p>这可能不适用于所有设备。但是现在任何针对的严肃设备都应该支持它。
然而,这种方法的一个缺点是,OpenGL 读取缓冲区一次只能读取一个字节。因此,当使用 1 而不是默认值 4 时,对 <code>glTexImage2D</code> 的调用可能会慢 4 倍左右。当然,数据在内存中没有正确对齐,但这应该不是问题。
我不得不推荐使用大小为 2 次方的纹理,因为使用 63x63 纹理的缺点比仅加载 64x64 纹理和调整纹理坐标要糟糕得多。</p></p>
                                   
                                                <p style="font-size: 20px;">关于android - 使用 glTexImage2D 绘制 63*63 图像,我们在Stack Overflow上找到一个类似的问题:
                                                        <a href="https://stackoverflow.com/questions/19023397/" rel="noreferrer noopener nofollow" style="color: red;">
                                                                https://stackoverflow.com/questions/19023397/
                                                        </a>
                                                </p>
                                       
页: [1]
查看完整版本: android - 使用 glTexImage2D 绘制 63*63 图像