问题标签 [nsopenglview]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
macos - OpenGL:可以看穿一堵墙,但看不到另一堵墙
我不知道这是深度缓冲区问题还是其他问题。我可以看穿一堵墙,但看不到另一堵墙:
现在,当我旋转时,第二面墙变得更加突出:
我在 Interface Builder 中启用了深度缓冲区。我的 OGL 启用如下所示:
有什么建议么。我注释掉了其他启用,因为它们似乎没有帮助。
根据要求,这是投影和模型视图设置:
osx-mountain-lion - 在 NSDocument (OS X) 中创建 NSOpenGLView
我正在创建一个音乐教育应用程序,它可以读取乐谱 - 而不是音频文件 - 并且需要呈现一个动画图形屏幕。我创建了一个基于文档的应用程序来轻松访问文件,现在我让它读取和解析文件,并且我将所有歌曲数据存储在我的 Obj-C 类中。我的 xib 中还有一个 textview,我可以在其中写入歌曲属性和其他文本花絮。现在我想要第二个视图,它需要图形化和动画化,用于音乐。我是 Xcode 新手,但有一些 openGL 经验。我的设置是最新的操作系统和 Xcode 版本。
当我尝试将 OpenGL 视图拖到 IB 中的窗口中时,我收到一个奇怪的错误/警告,上面写着“不支持的配置 - 启用 One Shot 内存的窗口中的 NSOpenGLView”(这很奇怪),并且当我运行应用程序。
我在此站点或其他任何地方的 NSdocuments 中找不到太多对 OpenGL 视图的引用,这让我觉得我可能正在尝试做一些不应该做的事情。有人对我有什么建议吗?我不应该使用基于文档的应用程序吗?我应该使用openGL以外的东西吗?或者,在这种情况下,也许我需要 100% 以编程方式构建 openGL 视图和视图控制器?对一些适用的示例/教程的任何建议或指示都会有很大的帮助。
objective-c - 如何在 NSOpenGLView 上绘制 RGB 图像缓冲区或 CVPixelBufferRef?
我有NSOpenGLView
来自AVFoundation
. 我想使用Viewframes
在我的表单上显示视频。OpenGL
objective-c - 带有 Cocoa 的 OpenGL:尝试调用 CGLLockContext([[self openGLContext] CGLContextObj]) 时没有匹配的函数调用;
我正在学习 OpenGL。为了获得 OpenGL 上下文设置,我遵循 Apple 的GlEssentials示例。GlContext 被锁定在 draw 方法中,如下所示:
当我尝试CGLLockContext
在视图类中使用与上面完全相同的参数调用时,出现以下错误:
快速插入类型转换解决了这个问题:
问题是为什么?在 Apples 示例中,没有这种类型转换它可以正常工作。
macos - NSOpenGLContext 破坏另一个上下文的纹理
我正在使用 NSOpenGLContext 来优化绘图 AU 插件。有多个插件,每个插件都可以有多个实例。所以每个插件都会创建一个全局 NSOpenGLContext 并将特定的 NSView 上下文附加到它,这样就不需要复制纹理。
问题:当我打开一个插件时,没问题。我打开一个不同的,没关系。现在我释放第一个,它破坏了所有资源 => 第二个失去了它的纹理!
我检查了两个上下文不同,共享不同,它们都在 lockFocus 和 drawRect 中使用 makeCurrentContext。任何想法这里有什么问题?
顺便说一句。我在使用 AGL 和 WGL(在 Windows 上)时得到了同样的东西,两者都没有问题,所以它就像往常一样只是 Cocoa。
objective-c - 调整窗口大小后未调用 NSOpenGLView drawRect
我在浮动 NSPanel 中有一个 NSOpenGLView 对象,我使用 glDrawPixels 渲染图像。在调整窗口大小之前,一切正常。当调用 NSPanel 对象的调整大小函数时,我通过返回固定大小来阻止调整大小,但是当光标单击在窗口边缘并尝试调整窗口大小时,窗口不会调整大小,但在按住几秒钟后,OpenGL 视图的自动更新停止被调用。
以下是简化的步骤列表:
- 自动调用drawRect
- 用户尝试调整窗口大小(单击并拖动几秒钟)
- drawRect 停止自动调用。(reshape 函数中的 setNeedsDisplay 或 [openglcontext update] 无济于事)
我的 OpenGLContext 设置为以下格式:
在drawRect中:
有谁知道让drawRect自动更新重新启动的解决方案?我知道,或者我可以完全摆脱自动更新并使用 NSNotificationCenter 或使用 NSTimer 自己调用它,但如果我可以使用默认的 OpenGL 上下文和默认更新方法,我更愿意。提前感谢您的帮助!
- - - - - 编辑 - - - - - -
我找到了上述问题的可能解决方案,但我意识到还有另一个问题,即更新会突然停止。上述解决方案的问题不是一个优雅的问题,但它确实有效。我基本上禁用了启用调整大小蒙版的窗口样式蒙版。任何人都知道为什么 drawRect 会随机停止?有时它会完全渲染,但有时它会冻结并且永远不会继续。
objective-c - 删除子视图后,包含 NSOpenGLView 的 NSView 不会重绘
我有一个 Mac OS X (10.9) 应用程序,它为我的主 NSWindow 的contentView
属性提供了一个自定义 NSView。自定义视图唯一要做的就是覆盖drawRect:
,使其透明。透明度是必需的,以便我的 NSOpenGLView 可见(见下文):
有contentView
一个 NSOpenGLView 作为子视图,其表面顺序设置为 -1(它在主 NSWindow 的“下方”,它也是透明的):
然后我实例化一个 WebView 并将其放置为这个自定义视图的子视图:
WebView 是窗口中的一个小框(在 NSOpenGLView 的顶部),用于登录服务。一旦登录发生,它应该会消失,只显示 NSOpenGLView。
这就是问题所在:当我调用时[_webview removeFromSuperview];
不会contentView
重绘;因此,WebView 仍然在屏幕上绘制(尽管不响应鼠标或键盘)。如果我使用鼠标调整所有内容所在的窗口大小,则contentView
重绘(我在日志中看到消息)并且 WebView 的内容消失。此外,如果我不将 NSOpenGLView 添加为子视图,则 WebView 会按原样消失。
删除子视图后不应该contentView
着火吗?drawRect
即使我使用setNeedsDisplay:
或setNeedsLayout:
删除 WebView 后contentView
仍然没有重绘。
macos - 同步两个 NSOpenGLView 的 flushBuffer
我正在开发一个由两个NSOpengGLView
s (leftGLView
和rightGLView
) 并排放置在 NSWindow contentView 内的 OSX 应用程序。这两个视图不共享NSOpenGLContext
但都是双缓冲的,并将缓冲区交换与监视器回溯同步。
ACVDisplayLink
已设置并链接到第一个的NSOpenGLContext
and (比如左侧)。NSOpenGLPixelFormat
NSOpenGLView
在 CVDisplayLink 回调中,我使用以下代码绘制到两个视图:
这种方法的问题是两者flushBuffer
并不总是同步的。右侧 NSOpenGLView 有时会比左侧更新晚(可能在下一次显示器刷新期间)。这并不完全出乎意料,因为苹果文档中关于-flushBuffer
状态:
根据交换间隔上下文属性(参见 NSOpenGLCPSwapInterval),复制可能发生在监视器的垂直回溯期间,而不是在调用 flushBuffer 之后立即发生。一个隐式的 glFlush 在它返回之前由 flushBuffer 完成。为了获得最佳性能,应用程序不应在调用 flushBuffer 之前立即调用 glFlush。后续的 OpenGL 命令可以在调用 flushBuffer 后立即发出,但直到缓冲区复制完成后才会执行。
但是,在这种情况下,我有两个不同的NSOpenGLContext
缓冲区,因此应该可以将两个缓冲区一起刷新。
为了进一步研究这一点,我假设-flushBuffer
仅在交换(或复制)缓冲区后才返回,并且由于这仅与监视器回溯同步发生,因此对 flushBuffer 的第二次调用在该回溯上发生为时已晚。这可以解释我观察到的行为。因此,我尝试分离一个辅助线程来执行 flushBuffer 调用,但没有任何区别。
我终于尝试使用两种不同CVDisplayLink
的 s,一种用于左侧 GLView,另一种用于右侧。然而,这种技术似乎也没有解决问题,并且增加了保持两个 CVDisplayLink 线程同步的额外复杂性。
有没有办法让这两个flushBuffer
在两个 NSOpenGLViews 之间同步发生?
macos - 缩小窗口后 NSOpenglView 出现在 NSView 前面
我在 NSOpenGLView 上显示了一个 NSView。我正在使用“setWantsLayer:YES”来强制 NSView 出现在 opengl 上下文中。但是当我最小化窗口并再次将其最小化时,NSView 不再超过 NSOpenGLView。
有没有办法防止这种行为?
image - nsopenglview 图像缩放,缩放以适合视图中的图像
对openGL来说是全新的。我有这段代码,它使用 OpenGL 显示我的图像。
我面临的问题是我的图像尺寸是 5184x3456px,但我的视图尺寸是 800x600。我如何将我的图像放在我的视图中。一直试图理解代码,但无处可去。
尝试使用 glScalef(0.8, 0.8, 0.8); 但它做了什么,它缩放了它所显示的屏幕部分。