Asy*_*lum 6 opengl macos profile performance core
我在我的引擎中添加了一个新的GL渲染器,它使用核心配置文件.虽然它在Windows 和/或nvidia卡上运行良好,但它在OS X上慢了10倍(3 fps而不是30).奇怪的是,我的兼容性配置文件渲染器运行正常.
我用仪器和GL分析器收集了一些痕迹:
https://www.dropbox.com/sh/311fg9wu0zrarzm/31CGvUcf2q
它表明应用程序将时间花在glDrawRangeElements上.我尝试了以下事项:
我没有尝试的是将我的顶点对齐到16字节边界和/或将索引转换为4字节,但严重的是,如果这将是问题那么为什么标准允许它呢?
我正在创建这样的上下文:
NSOpenGLPixelFormatAttribute attributes[] =
{
NSOpenGLPFAColorSize, 24,
NSOpenGLPFAAlphaSize, 8,
NSOpenGLPFADepthSize, 24,
NSOpenGLPFAStencilSize, 8,
NSOpenGLPFADoubleBuffer,
NSOpenGLPFAAccelerated,
NSOpenGLPFANoRecovery,
NSOpenGLPFAOpenGLProfile, NSOpenGLProfileVersion3_2Core,
0
};
NSOpenGLPixelFormat* format = [[NSOpenGLPixelFormat alloc] initWithAttributes:attributes];
NSOpenGLContext* context = [[NSOpenGLContext alloc] initWithFormat:format shareContext:nil];
[self.view setOpenGLContext:context];
[context makeCurrentContext];
Run Code Online (Sandbox Code Playgroud)
试过以下规格:
你有什么想法我可能做错了吗?同样,它与兼容性配置文件一起工作正常(但不使用VAO).
更新:向Apple报告.
更新:苹果公司不会对这个问题感到厌恶...无论如何,我创建了一个实际上很好的小测试程序.现在我将调用堆栈与Instruments进行了比较,发现在使用引擎时,glDrawRangeElements会进行两次调用:
而在测试程序中它只调用第二个.现在第一次调用就像立即模式渲染(gleFlushPrimitivesTCLFunc,gleRunVertexSubmitterImmediate),所以显然会减速.
最后,我能够重现减速情况。这太疯狂了......这显然是由在“my_Position”属性上调用glBindAttribLocation引起的。现在我做了一些测试:
显然我重新链接了程序(检查代码)。这在实现中不是问题,我也用“正常”值对其进行了测试。
测试程序:
https://www.dropbox.com/s/dgg48g1fwgyc5h0/SLOWDOWN_REPRO.zip
如何重现:
| 归档时间: |
|
| 查看次数: |
2326 次 |
| 最近记录: |