gpt4 book ai didi

cocoa - NSOpenPanel 破坏了我的 SDL/OpenGL 应用程序

转载 作者:行者123 更新时间:2023-12-03 16:27:10 25 4
gpt4 key购买 nike

我正在制作一个小型 SDL/OpenGL 游戏,其中用户可以使用 cocoa 打开文件对话框 (NSOpenPanel) 选择 map /关卡。然而,这样做时,我在每次 glClear 上都会收到错误“无效的帧缓冲区操作”。当我获取帧缓冲区的状态(使用glCheckFramebufferStatus)时,它是GL_FRAMEBUFFER_UNDEFINED(0x8219)。我还注意到,我不需要显示打开的面板(使用 runModal),而只需创建它,以免发生错误。可以在 SDL_SetVideoMode 之前创建它,但不能在 SDL_SetVideoMode 之后创建。奇怪的是, NSSavePanel 根本不会导致这些问题。有什么想法吗?

编辑:添加了一些代码来显示精简的 test-init 方法:

SDL_Init( SDL_INIT_VIDEO );
m_pScreen = SDL_SetVideoMode( 800, 600, 32, SDL_OPENGL );

// this section causes the problem. Works well if I change the NSOpenPanel to a NSSavePanel
@autoreleasepool {
NSOpenPanel *openPanel = [[NSOpenPanel openPanel] retain];
[openPanel runModal];
[openPanel release];
}

int number = glCheckFramebufferStatus(GL_FRAMEBUFFER);
assert(number == GL_FRAMEBUFFER_COMPLETE); // crash here

最佳答案

这通常是因为没有当前上下文而发生。操作系统提供的代码(例如 NSOpenPanel)有时会更改当前的 OpenGL 上下文,或将当前上下文保留为未定义。当发生这种情况时,您必须确保将上下文设置回您正在绘制的上下文。我在上周处理的一些代码中遇到了同样的问题! :-)

关于cocoa - NSOpenPanel 破坏了我的 SDL/OpenGL 应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13987148/

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