- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试创建一种在全屏和窗口之间切换的方法。我试图在继承自 NSOpenGLView 的类中执行此操作,
基本上遵循
this blogpost
。从窗口到全屏,这一次有效;尝试返回以各种方式失败:窗口屏幕没有更新,或者我什至无法切换到窗口,但全屏只是空白。不管怎样,尝试来回几次(将其映射到“f”键),程序经常锁定,在最坏的情况下,我必须重新启动计算机。我已附上以下方法的代码;出于调试目的,我将全帧矩形设置得小得多,这样如果卡住,应用程序就永远不会全屏。
fullscreen example在 Apple 开发人员示例中建议使用 Controller ,并且不要从继承的 NSOpenGLView 中进入全屏。
我的问题:
请注意,对于这两个引用文献,我必须假设 10.8 的情况没有改变(两个引用文献似乎都适用于 10.6)。
代码如下:
@implementation MyOpenGLView
[...]
- (void)toggleFullscreen
{
mainWindow = [self window];
if (isFullscreen) {
[fullscreenWindow close];
[mainWindow setAcceptsMouseMovedEvents:YES];
[mainWindow setContentView: self];
[mainWindow makeKeyAndOrderFront: self];
[mainWindow makeFirstResponder: self];
isFullscreen = false;
} else {
[mainWindow setAcceptsMouseMovedEvents:NO];
//NSRect fullscreenFrame = [[NSScreen mainScreen] frame];
NSRect fullscreenFrame = { {300, 300}, {300, 300} };
fullscreenWindow = [[NSWindow alloc] initWithContentRect:fullscreenFrame
styleMask:NSBorderlessWindowMask
backing:NSBackingStoreBuffered
defer:NO];
if (fullscreenWindow) {
[fullscreenWindow setAcceptsMouseMovedEvents:YES];
[fullscreenWindow setTitle:@"Full screen"];
[fullscreenWindow setReleasedWhenClosed: YES];
[fullscreenWindow setContentView: self];
[fullscreenWindow makeKeyAndOrderFront: self];
//[fullscreenWindow setOpaque:YES];
//[fullscreenWindow setHidesOnDeactivate:YES];
// Set the window level to be just above the menu bar
//[fullScreenWindow setLevel:NSMainMenuWindowLevel+1];
// Set the window level to be just below the screen saver
[fullscreenWindow setLevel:NSScreenSaverWindowLevel-1];
[fullscreenWindow makeFirstResponder:self];
isFullscreen = true;
} else {
NSLog(@"Error: could not switch to full screen.");
}
}
}
[...]
@end
最佳答案
我现在认为这不能做,也不应该做。当窗口化时,渲染上下文是一个窗口,与全屏渲染时的屏幕不同。因此,在切换时,每次切换都必须重新设置。
可以简单地使用最新 OS X 变体中的 native 全屏选项。这(大概)会将包含窗口放大到全屏尺寸,同时删除框架、边框和按钮。因此,您仍然渲染到一个窗口,尽管它看起来是全屏的。
我不确定此选项是否会使速度变慢:中间有一个窗口层,这可能会比直接渲染到屏幕慢。
对于好奇的人来说,实现 native 全屏非常简单(至少在 10.8 和 10.9 中):在 XCode 中,选择 .xib
文件,在编辑器侧边栏中选择(主)窗口,然后选择右侧的属性选择器。您可以在“不支持”、“主窗口”或“辅助窗口”之间找到“全屏”选项。这将自动将全屏切换添加到窗口。更简洁的是,现在选择主菜单 -> 侧边栏中的查看菜单,在底部的检查器中找到“全屏菜单项”(有一个搜索栏),将其拖到编辑器中的“查看”菜单中,然后瞧,它将有一个快捷方式并自动连接到窗口的全屏选项(选择新的“ View ”菜单项并查看“连接”检查器,它已为您连接)。
测试这一切的一个好方法是获取 full screen example我链接了我的问题,并按照上面的建议进行编辑。使用默认控制命令 F 快捷键在全屏之间来回切换将全屏显示 opengl View 和其下方带有文本的框架。使用示例中编码的全屏选项将切换 openglview 以使用全屏,而不需要任何额外的(Cocoa)框架、按钮或文本。
关于cocoa - NSOpenGLView 从 View 内切换到全屏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16529733/
我正在使用 Cocoa 窗口和 NSOpenGLView 尝试 OpenGL 3.2。但是我无法让 NSOpenGLView 绘制红色。我只得到一个白色的窗口。这是我的代码(在 NSOpenGLVie
我一直在尝试让 NSOpenGLView 在调整窗口大小时正确调整大小,但我不断收到无法解释的奇怪行为。看起来像这样: 原始(一开始的样子): 调整大小后: 这是我的调整大小代码: - (void)r
我已经重写了 NSOpenGLView 来处理键盘事件。事件检测工作正常,但每次我按下一个键时,我都会听到恼人的碰撞声。我怎样才能让我的观点冷静下来? 这是我的 keyUp: 方法的样子: -(voi
我有一个 NSWindow 子类 (GameWindow),其中包含一个 NSOpenGLView 子类 (GameView)。 应用程序是窗口化的(不会全屏显示)。 GameView 中的 Open
我目前正在尝试以编程方式创建一个简单的 cocoa NSWindow,而不是使用界面生成器(我有这样做的理由)。这是一个快速测试: int main(int argc, char** argv)
我需要在现有应用程序中的 NSOpenGLView 之上显示一些 Cocoa 小部件。我按照 Apple 的 LayerBackedOpenGLView 示例代码中的示例进行操作。 NSOpenGLV
我正在尝试使用 Cocoa API 创建一个 OpenGL 应用程序,现在一切正常,除了一件事。当调整主窗口大小时,GL 上下文似乎没有正确更新。 这是用于设置窗口和渲染上下文的代码。 主窗口: m_
我创建了一个带有 NSOpenGLView 的窗口,我正在将 openGL 内容渲染到其中。 我想向 View 添加一些按钮和文本字段:我可以使用界面生成器(或代码)添加 NSTextFields 和
我有一个旧的基于 AGL 的 OpenGL 窗口系统,我正在更新它以使用 NSOpenGLView。使用它的引擎需要在单独的线程中以自己的循环运行,我无法让它工作。使用 AGL,我在循环线程中创建了上
我有一个名为 ModelView 的类,它继承自 NSOpenGLView。当我的程序运行时,我按如下方式将 ModelView 附加到主窗口。 - (void)applicationDidFinis
我正在尝试创建一种在全屏和窗口之间切换的方法。我试图在继承自 NSOpenGLView 的类中执行此操作, 基本上遵循 this blogpost 。从窗口到全屏,这一次有效;尝试返回以各种方式失败:
我想在纹理大小更改时更新我的 NSOpenGLView 窗口。没关系。发生这种情况时我注册了事件,但无法调整 OpenGLView 的大小。正在更改的值是 w 和 h。 -(void)initOp
我有一个 480x320 NSOpenGLView,我想将其放大到 960x640,但像素显示为尺寸的两倍(并且清晰)。 如果我打电话 [myglview setFrame:CGRectMake(0,
我有一个 NSOpenGLView 和 OpenGL 代码,可与在主循环中运行的 NSTimer 一起使用(调用 setNeedsDisplay 和 drawRect)。我想使用 CVDisplayL
我已将 NSOpenGLView 添加到我的 MainMenu.xib 文件中,并实现了 drawRect 来绘制它,这效果很好,所以到目前为止一切顺利。 如何检测屏幕上的触摸?我想我也许可以在 In
这就是我想用我的 NSOpenGLView 做的事情。目前 NSOpenGLView 覆盖了窗口的整个区域,我想在 NSOpenGLView 顶部添加按钮、nsviews 和图像。我浏览了网页,发现
我正在尝试修改 Apple MultiGPUIOSurface 示例(特别是文件 http://developer.apple.com/library/mac/#samplecode/MultiGPU
当我将 NSOpenglView 放入 NSSplitView 时,拖动拆分器时出现问题。openGLView 和 SplitView 正在异步调整大小。我在苹果邮件列表线程中找到了解决方案 http
我有一个在 Mac OS X 上渲染 OpenGL 内容的应用程序。最初它是渲染到 NSOpenGLView,然后我将它更改为渲染到 CAOpenGLLayer 子类。 当我这样做时,我看到了巨大的性
我正在尝试检查我的 NSOpenGLView 是否具有有效的上下文,但似乎对 openGLContext 的调用无法帮助我解决这个问题。 openGLContext 似乎总是返回一个 NsOpenGl
我是一名优秀的程序员,十分优秀!