gpt4 book ai didi

cocoa - 创建 NSOpenGLView 时出错

转载 作者:行者123 更新时间:2023-12-03 16:48:14 40 4
gpt4 key购买 nike

我正在尝试使用 Cocoa API 创建一个 OpenGL 应用程序,现在一切正常,除了一件事。当调整主窗口大小时,GL 上下文似乎没有正确更新。

这是用于设置窗口和渲染上下文的代码。

主窗口:


m_window = [[NSWindow 分配] initWithContentRect:window_rect
样式掩码:( NSClosableWindowMask |
NSMiniaturizedWindowMask | NSMiniaturizedWindowMask
NSTitleWindowMask | NSTitleWindowMask | NSTitleWindowMask NSResizableWindowMask )
支持:NSBackingStoreBuffered defer:YES];



window_title = [NSString stringWithCString:m_window_title->c_str()
编码:NSUTF8StringEncoding];

window_color = [NSColor colorWithCaliberatedRed:m_window_color->getRed()
绿色:m_window_color->getGreen()
蓝色:m_window_color->getBlue()
alpha:m_window_color->getAlpha()];

如果(m_centered)
{
[m_窗口中心];
}

[m_window setTitle:window_title];
[m_window setBackgroundColor:window_color];
[m_window setOneShot:YES];
[m_window setOpaque:YES];
[m_window setDelegate:window_delegate];
[m_window setAcceptsMouseMovedEvents:YES];

OpenGL View :


NSOpenGLPixelFormatAttribute attrs[] = {NSOpenGLPFADoubleBuffer, NSOpenGLPFAWindow, NULL};



pixel_format = [[NSOpenGLPixelFormat alloc] initWithAttributes:attrs];

m_view = [[NSOpenGLView alloc] initWithFrame:[m_window contentRectForFrameRect:[m_window frame]]
像素格式:像素格式];
[像素格式发布];

GLint 暗淡[2] = {GB_DEF_WINDOW_WIDTH, GB_DEF_WINDOW_HEIGHT};
CGLContextObj ctx = (CGLContextObj) [[m_view openGLContext] CGLContextObj];
CGLSetParameter(ctx, kCGLCPSurfaceBackingSize, 暗淡);
CGLEnable(ctx, kCGLCESurfaceBackingSize);

[[m_view openGLContext] makeCurrentContext];
[m_window setContentView:m_view];

这应该可以工作,但是当调整窗口大小以及更新 OpenGL View 和视口(viewport)后,后台缓冲区内容似乎无法正确重新缩放。这有什么问题吗?

感谢您的回复。

最佳答案

以下控制后台缓冲区的大小:

GLint dim[2] = {GB_DEF_WINDOW_WIDTH, GB_DEF_WINDOW_HEIGHT};

如何更改这些将影响后台缓冲区的大小。检查您的代码以设置这些值。当您调整大小时,假设您使窗口变薄,那么您必须更改宽度值,使其具有与窗口相同的宽高比。

请记住,后台缓冲区的内容不需要与显示它们的最终 View 的大小相同。如果存在差异,则缓冲区的内容将被缩放以适应。如果纵横比不同,您最终可能会出现奇怪的拉伸(stretch)。

关于cocoa - 创建 NSOpenGLView 时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4120083/

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