gpt4 book ai didi

c++ - 避免调用 glBindTexture()?

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:00:04 25 4
gpt4 key购买 nike

我的游戏渲染了许多立方体,这些立方体随机具有 12 种纹理中的一种。我已经对几何体进行了 Z 排序,因此我不能只使用 texture1 然后 2 然后 3 等渲染所有立方体......因为这会破坏 z 排序。我已经跟踪了以前的纹理,它们是 == 然后我不调用 glbindtexture,但它仍然调用了太多次。我还能做什么?

谢谢

最佳答案

最终和最快的方法是拥有一组纹理(普通纹理或立方体贴图)。然后使用 GLSL 内置 gl_InstanceIDgl_PrimitiveID

使用此实现,您只需绑定(bind)一次纹理数组。

这当然需要使用 gpu_shader4 和 texture_array 扩展:

我已经使用过这种机制(使用 D3D10,但原则也适用)并且效果很好。

我必须在 sprite(9x9 或 15x15 像素 IIRC 的恒定屏幕尺寸的 3D 点)上映射不同的纹理,表明每个纹理对用户来说具有不同的含义。

编辑:

如果您对所有着色器的东西不满意,我会简单地按纹理对立方体进行排序,而不是对几何体进行 Z 排序。然后衡量性能提升。

另外,我会尝试添加一个 pre-Z pass,您只在 Z 缓冲区中渲染所有立方体,然后渲染正常场景,看看它是否加快速度(如果片段绑定(bind),它可能会有所帮助)。

关于c++ - 避免调用 glBindTexture()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3689970/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com