我有以下情况:
function init() {
callFunction1();
callFunction2();
}
是不可靠的(我相信它实际上已经打破了Apple的Intel HD Graphics 3000驱动程序,因为它给出了错误的结果,但在Linux,同一设备上得到了正确的结果)并且速度很慢(再次在Apple驱动程序上)对于我的芯片,快速使用Linux)。为了解决最后一个问题,我决定使用带有渲染到纹理方法的framebuffers“手动”进行mipmap生成。
然而,我仍然坚持应该如何处理填充以使扫描线成为四个字节的倍数,同时在着色器中进行合适的mipmap采样。如果没有mipmap,我会使用glGenerateMipmaps()
来uniform vec2
乘以uv
,以便补偿纹理右侧的几列填充。现在,问题是在mipmap的每个级别,我都必须进行填充以使扫描线4字节对齐;但是这个填充在每个级别都可以不同,这需要我为每个级别使用不同的uv
- 乘数,这是我在着色器中无法做到的事情,因为我想使用自动LOD(级别)细节)采样时的选择。
我想这个问题等同于:“在我的场景中,成功的glGenerateMipmaps
算法做了什么?”关于这个功能的文件非常简短。实际上,我很惊讶Linux驱动程序在我的复杂场景中正确地完成了工作。
我的方案中不可接受的简单解决方案(因为内存使用量增加):
答案 0 :(得分:2)
我在纹理的右侧添加了一些填充,以确保纹理扫描线是4个字节的倍数。
好吧,别这样做了。你链接的文章并没有说"总是让你的纹理对齐到4个字节"。它表示要确保上传的纹理数据中的字节对齐与您为OpenGL提供的像素包字节对齐相匹配。
只需将纹理大小设置为您需要的大小,然后使用正确的对齐方式上传数据。纹理宽度不需要是4的倍数。