使用 JOGL 使用 vbo 渲染许多纹理
render many textures with vbo using JOGL
我有很多小图,这些图可以拼成一张大图。
现在,我使用 VBO 来执行此操作并且它是有效的。部分渲染函数是这样的:
for (int i = 0; i < mListTexData.size(); i++) {
gl.glBindTexture(GL2.GL_TEXTURE_2D, mTexturesIDs.get(i));
gl.glDrawArrays(GL2.GL_QUADS, i*4, 4);
}
不知道有没有更方便的方法。
谢谢
你有多种可能性:
使用图集,一个大纹理,其中包含所有小纹理,例如 this。您当然可以更新它,即覆盖(部分)它。
优点:一种独特的最终纹理绑定
缺点:必须计算每个子图像的所有纹理坐标
您可以使用几个纹理数组,一个对应不同的大小。然后你将 select 正确的图像与统一变量或顶点属性。
优点:很少有纹理绑定。
缺点:如果必须删除纹理,则必须销毁-重新创建它(您可能希望创建具有硬编码长度的纹理数组)
你只是继续做你已经在做的事。
亲:最简单的方法。我强烈建议你这样开始。配置文件,找出这是否是瓶颈,如果是,则进行改进。
缺点:根据您的情况可能效率低下
Ps:GL_QUADS
已弃用,请使用普通 GL_TRIANGLES
我有很多小图,这些图可以拼成一张大图。 现在,我使用 VBO 来执行此操作并且它是有效的。部分渲染函数是这样的:
for (int i = 0; i < mListTexData.size(); i++) {
gl.glBindTexture(GL2.GL_TEXTURE_2D, mTexturesIDs.get(i));
gl.glDrawArrays(GL2.GL_QUADS, i*4, 4);
}
不知道有没有更方便的方法。 谢谢
你有多种可能性:
使用图集,一个大纹理,其中包含所有小纹理,例如 this。您当然可以更新它,即覆盖(部分)它。 优点:一种独特的最终纹理绑定 缺点:必须计算每个子图像的所有纹理坐标
您可以使用几个纹理数组,一个对应不同的大小。然后你将 select 正确的图像与统一变量或顶点属性。 优点:很少有纹理绑定。 缺点:如果必须删除纹理,则必须销毁-重新创建它(您可能希望创建具有硬编码长度的纹理数组)
你只是继续做你已经在做的事。 亲:最简单的方法。我强烈建议你这样开始。配置文件,找出这是否是瓶颈,如果是,则进行改进。 缺点:根据您的情况可能效率低下
Ps:GL_QUADS
已弃用,请使用普通 GL_TRIANGLES