gpt4 book ai didi

performance - OS X 上的 OpenGL 核心配置文件令人难以置信的减速

转载 作者:行者123 更新时间:2023-12-04 15:12:43 25 4
gpt4 key购买 nike

我在我的引擎中添加了一个新的 GL 渲染器,它使用核心配置文件。虽然它在 Windows 和/或 nvidia 卡上运行良好,但在 OS X 上却慢了 10 倍(3 fps 而不是 30)。奇怪的是,我的兼容性配置文件渲染器运行良好。

我用 Instruments 和 GL profiler 收集了一些痕迹:

https://www.dropbox.com/sh/311fg9wu0zrarzm/31CGvUcf2q

它表明应用程序将时间花在 glDrawRangeElements 中。
我尝试了以下事情:

  • 改用 glDrawElements(无效)
  • 翻转剔除(对速度没有影响)
  • 禁用一些 GL_DYNAMIC_DRAW 缓冲区(无效)
  • 绘制时在 VAO 后绑定(bind)索引缓冲区(无效)
  • 将索引转换为 4 字节(无效)
  • 使用 GL_BGRA 纹理(无效)

  • 我没有尝试将我的顶点对齐到 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];

    尝试了以下规范:
  • Radeon 6630M,OS X 10.7.5
  • Radeon 6750M,OS X 10.7.5
  • geforce GT 330M,OS X 10.8.3

  • 你有什么想法我可能做错了吗?同样,它适用于兼容性配置文件(虽然不使用 VAO)。

    更新 : 向苹果报告。

    更新 : Apple 并不在乎这个问题...反正我创建了一个小测试程序,它实际上很好。现在我将调用堆栈与 Instruments 进行了比较,发现在使用引擎时,glDrawRangeElements 进行了两次调用:
  • gleDrawArraysOrElements_ExecCore
  • gleDrawArraysOrElements_Entries_Body

  • 而在测试程序中它只调用第二个。现在第一个调用执行类似于立即模式渲染(gleFlushPrimitivesTCLFunc,gleRunVertexSubmitterImmediate)的操作,因此显然会导致速度下降。

    最佳答案

    最后,我能够重现减速。这简直太疯狂了……这显然是由在“my_Position”属性上调用 glBindAttribLocation 引起的。现在我做了一些测试:

  • 1 是默认值(由 glGetAttribLocation 返回)
  • 如果我将其设置为零,则没有问题
  • 如果我将它设置为 1,渲染会变慢
  • 如果我将它设置为更大的数字,它又会变慢

  • 显然我重新链接程序(检查代码)。这在实现中不是问题,我也用“正常”值对其进行了测试。

    测试程序:

    https://www.dropbox.com/s/dgg48g1fwgyc5h0/SLOWDOWN_REPRO.zip

    如何重现:
  • 使用 XCode
  • 打开
  • 打开 common/gext.h(不要被名字打扰)
  • 将 GLDECLUSAGE_POSITION 常量从 0 修改为 1
  • 编译并运行 => 慢
  • 变回零 => 好
  • 关于performance - OS X 上的 OpenGL 核心配置文件令人难以置信的减速,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16415037/

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