gpt4 book ai didi

macos - OpenGL 无法在 macOS Mojave 上渲染

转载 作者:行者123 更新时间:2023-12-04 18:56:10 31 4
gpt4 key购买 nike

如果您创建 NSView和自定义 NSOpenGLContext在 macOS Mojave 上,窗口在调整大小之前不会被渲染。但是,如果您使用 NSOpenGLView,一切正常。反而。
我看到很多在渲染或调用 [NSOpenGLContext update] 之前以编程方式( http://people.bath.ac.uk/abscjkw/ComputerPrograms/C++programs/OpenGL/MojaveOpenGL.cpp )调整窗口大小的技巧。两次(https://github.com/go-gl/glfw/pull/229/commits/9e6129a572227a13ff9acb4904443d2ae7d66e77),但它们看起来真的很老套且不可靠。

最佳答案

我反汇编了 Apple 的框架,发现它们改变了 OpenGL 渲染在 Mojave 上的工作方式。似乎即使您通过设置 NSView 禁用分层支持的wantsLayerNO , NSView仍然会创建图层并将其附加到您在 Mojave 上的 View 中。在渲染到它之前调整窗口大小是可行的,因为这通常会导致调用 [NSOpenGLContext update] .调用更新两次有效,因为在第一帧 NSView没有附加任何图层,更新方法只在第二帧上执行任何操作,图层在那里,[NSOpenGLContext update]实际上初始化帧缓冲区。

所以解决办法是调用[NSOpenGLContext update]每当层的NSView是这样设置的:

@interface OpenGLView: ViewMacOS
{
NSOpenGLContext* _openGLContext;
}
@end

@implementation OpenGLView

-(void)setLayer:(CALayer*)layer
{
[super setLayer:layer];

[_openGLContext update];
}

@end

我对其进行了测试,它可以在 Mojave 和旧版本的 macOS 上运行( [NSView setLayer:] 在 macOS 10.13 和旧版本上不被调用)。这是我为 Ouzel 引擎所做的完整提交: https://github.com/elnormous/ouzel/commit/7e708636189d970bad6b013ecd5375cfe693f3f3

关于macos - OpenGL 无法在 macOS Mojave 上渲染,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52938516/

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