问题标签 [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.

0 投票
2 回答
527 浏览

objective-c - 将焦点从 NSTextField 更改为 NSOpenGLView?

我正在使用 Interface Builder 在 Mac 上为 OpenGL 模拟开发一个接口。所有 OpenGL 的东西都是用 C++ 编写的(我很清楚)。不幸的是我对Objective-C一无所知。

基本上,我有一些 NSTextField 显示屏幕上选择的对象的信息。使用这些文本字段,用户可以在屏幕上操作对象,然后有一个保存按钮和一个恢复按钮(保存新值或恢复原始值)

我有这一切工作。我的问题是当我将数据输入到 NSTextField 时,窗口的“焦点”似乎仍然在 NSTextField 上(蓝色边框仍然围绕它)。

我使用键盘与 NSOpenGLView 中的项目进行交互,当我点击保存或恢复按钮时,我需要将焦点传递回 NSOpenGLView。

对不起,如果这是一个非常简单的问题

谢谢

大卫

0 投票
3 回答
3568 浏览

cocoa - 如何从视图控制器对象绘制到 NSOpenGLView?

在 IB 中,我在窗口中放置了一个 NSOpenGLView 实例。

我在一个自定义的 NSViewController 中有我的所有绘图代码,如下所示:

一切都被链接起来,“drawFrame”被调用,但我没有在屏幕上看到任何东西。它总是白色的。我应该检查什么?

0 投票
1 回答
1471 浏览

opengl - 如何在 Mac OS 中的 NSOpenGLView 和全屏上下文之间共享纹理?

我正在开发一个使用 2D 纹理创建动画万花筒的应用程序。它开始显示到 NSOpenGLView。我正在添加一个切换到全屏模式的选项。

我更喜欢将 OS 10.5 方法用于全屏,这样我就可以支持 10.5,但我认为如果我使用“在 Mac OS X v10 中创建全屏应用程序”下的文档中描述的方法,我会面临同样的问题.6"。

NSOpenGLContext init 方法 initWithFormat:shareContext: 接受一个可选指针,指向“另一个 OpenGL 图形上下文,其纹理命名空间和显示列表要与接收者共享”。

我用来创建全屏 OpenGL 上下文的代码很简单:

但是,它似乎不起作用。

我的应用只使用一种纹理,所以我一开始不使用 glGenTextures 和 glBindTexture。相反,我只是将单个当前纹理用于上下文。

我尝试更改代码以使用 glGenTextures 创建命名纹理,希望在切换到全屏上下文后可以绑定命名纹理,但没有骰子。两种方法都给出了相同的结果——纹理在全屏环境中不起作用。

我没有收到任何错误,但是用纹理绘制不会做任何事情。

每次切换到全屏模式时,我都被迫重新创建纹理。这很糟糕,因为纹理可能非常大(取决于用户加载的图像大小,直到最大纹理大小。)这迫使我将一个非常大的对象的两个副本加载到 VRAM 中。更糟糕的是,在某些情况下,我必须进行字节转换才能使字节顺序正确。在大纹理上这需要几秒钟,这会在进入全屏模式时导致“怀孕暂停”。

在 NSOpenGLView 和全屏 OpenGL 上下文之间共享纹理是否缺少一些技巧?

0 投票
1 回答
1640 浏览

cocoa - NSOpenGLView 可可(再次)

我是整个 Cocoa/Objective-C 恶意软件的新手(但在 *nix 上有多年的 C/C++ 经验)。

我正在尝试创建一个充满 NSOpenGLView 的基本 Cocoa 应用程序。我有:

缝隙.mm

和chink.h

我有一个 .xib 设置像

https://skitch.com/cront/ri625/chinkxib

其中 'chink View' 设置为窗口和文件所有者的委托。

我收到一个“无效的可绘制”错误(甚至在应用程序完成启动之前),据我了解,这意味着它试图在窗口之前实例化 opengl 视图(尽管我可能错了)。

我想要的是解决创建窗口并在其中设置opengl视图的问题。完成此操作后,我编写 OGL 绝对没有问题(就像我说的,我知道 C++)但是所有这些 NS 调用 gunk 对我来说都是陌生的。

我不是在寻找“你为什么不在 SDL/GLUT 中这样做”的答案。只是使其正确创建窗口的代码。

0 投票
1 回答
750 浏览

objective-c - OpenGL深度测试问题

我在 mac 上遇到了 OpenGL 的问题,我认为问题出在深度测试上。

所以,对于我的问题:我没有解释,而是做了两个截图:我的场景从远处:http ://c0848462.cdn.cloudfiles.rackspacecloud.com/dd2267e27ad7d0206526b208cf2ea6910bcd00b4fa.jpg 从附近:http://c0848462.cdn.cloudfiles .rackspacecloud.com/dd2267e27a561b5f02344dca57508dddce21d2315f.jpg

如果我不画绿色地板,一切看起来(有点)都很好。但是,像这样,它看起来还是很可怕的。

以下是我用来设置 Opengl 的三个代码块:

0 投票
1 回答
825 浏览

opengl-es - 在 Mac 上使用 OpenGL ES

使用 OpenGL ES 进行 OS X 开发是否可能而且不太复杂。我已经编写 Mac 应用程序三年了,我准备开始学习 OpenGL,但我想使用 OpenGL ES,因为有很多关于将它与 Xcode 和 Objective-C 一起使用的信息以及我的一些代码示例发现它似乎比完整的 OpenGL 更容易学习。谢谢!

0 投票
1 回答
1658 浏览

cocoa - -setWantsLayer 导致 NSOpenGLView 失真

这就是我想用我的 NSOpenGLView 做的事情。目前 NSOpenGLView 覆盖了窗口的整个区域,我想在 NSOpenGLView 之上添加按钮、nsview 和图像。我浏览了网络,发现这[myOpenGLView setWantsLayer:YES];可以让我做类似[myOpenGLView addSubView:someView].

这是我得到的结果:

在此处输入图像描述

(有点不好的例子,因为我在看 Family Guy,但证明了视频内存缓冲区在这里被截获的事实)

如您所见,它正在将一些视频内存缓冲区扭曲到窗口上。现在我正在做一些调试,问题出在-setWantsLayer. 一旦我在代码中注释掉该行,所有的 OpenGL 内容就会正确显示。

这是我应该得到的:

在此处输入图像描述

所以我的问题是,如何同时正确显示我的 OpenGL 视图-addSubViews

Apple 有一个非常好的示例项目,名为“LayerBackedOpenGLView”(http://developer.apple.com/library/mac/#samplecode/LayerBackedOpenGLView/Introduction/Intro.html),我一直在寻找它现在是美好的时光,我不知道我在做什么不同。我确实注意到的一件事是,Apple 没有使用 NSOpenGLView,而是使用 NSView 并将该类更改为子类 NSOpenGLView 的自定义类,而我使用 NSOpenGLView 并将该类更改为再次子类化 NSOpenGLView 的自定义类。不确定这是否会导致任何问题,但如果我将其更改为 NSView,我仍然会遇到同样的问题。

0 投票
3 回答
4755 浏览

interface-builder - 带有 OpenGL 3.2 核心的 NSOpenGLView

如果这个问题是微不足道的或无意义的,我提前道歉......这是我正在开发的第一个应用程序之一。(不幸的是)我不是开发人员。

我有一个 NSWindow,其中包含一个自定义视图,它是NSOpenGLView.

由于NSWindowNSOpenGLView是通过 Interface Builder 创建的,因此我init既不需要NSOpenGLContext也不需要NSOpenGLPixelFormat.

我最近切换到 OS X Lion,现在我想利用新的 OpenGL 3.2。

从 Apple 文档中,我发现要启用 OpenGL 3.2,我只需要编写如下内容:

在初始化NSOpenGLContext.

这很容易(即使对我来说也是如此),但我怎么能在我的应用程序中实现它,因为我从来没有init NSOpenGLContext

由于NSOpenGLView是从 Interface Builder 创建的,因此-initWithFormat:shareContext:不会调用该方法。

因此,我尝试使用以下内容覆盖该-initWithCoder:方法:

并且 OpenGL 3.2 已按照报告正确加载,glGetString(GL_VERSION)但创建的上下文不再与应用程序交互...视图中没有绘制任何内容..

我尝试了我所知道的一切......但我无法解决这个问题。

我应该怎么做呢?

0 投票
1 回答
6894 浏览

core-animation - 仅当调整窗口大小时,支持图层的 OpenGLView 才会重绘

我有一个带有类型主视图NSView和一个子视图的窗口,该子视图是NSOpenGLView其名称的子类CustomOpenGLView。的子类NSOpenGLView是通过Custom ViewInterface Builder 中的 a 并将其类设置为 来获得的CustomOpenGLView。这是根据 Apple Sample Code Layer Backed OpenGLView 制作的。

该应用程序每隔 0.05 秒向 OpenGLContext 绘制一些内容。禁用核心动画层后,我可以在视图中看到移动的对象,这是视图连续重绘的结果。一切都完美无缺。

我现在想在顶部有一个半透明的视图CustomOpenGLView来容纳播放/停止/ecc 等控制按钮。

为此,我添加了一个子视图CustomOpenGLView并启用了核心动画层CustomOpenGLView。控制按钮放置在这个新的子视图中。

这样,带有控制按钮的视图正确显示在顶部,CustomOpenGLView但现在视图不会重绘。只有当我调整包含所有这些视图的窗口大小时,它才会绘制。

结果是我看不到任何“动画”...我只看到一个静止图像,它代表了在绘图循环开始时绘制的第一帧。如果我调整窗口大小,openGLContext 会重新绘制,直到我停止调整窗口大小。之后,我再次看到在调整大小期间发生了最后一幅画的静止图像。

此外,当绘图循环开始时,只有第一个“帧”出现在屏幕上,如果我调整窗口大小,比方说 5 秒后,我在视图中看到它应该在开始 5 秒后绘制的确切内容绘图循环。看来我需要设置[glView setNeedsDisplay:TRUE]. 我这样做了,但没有任何改变。

错误在哪里?为什么添加核心动画层会破坏重绘?这是否意味着我没有得到什么?

0 投票
1 回答
693 浏览

cocoa - Cocoa OpengGL:绘制纹理和圆角

如果我使用一个标准NSWindow来承载一个NSOpenGLView延伸到所有窗框的标准,则窗口的两个底角会自动变圆。

切换到时,NSBorderlessWindowMask我必须自己处理圆角。我已经实现了一个透明的自定义NSWindow和一个圆形的自定义NSView,它们都工作得很好。之后,我NSOpenGLContext通过设置NSOpenGLCPSurfaceOpacity为 0 实现了透明。如果我为 OpenGL 上下文设置颜色背景,则视图被正确绘制并获得所需的圆角。

但是,由于该应用程序是一个电影播放器​​,我需要绘制对应于每个电影帧的纹理。

当我这样做(使用glTexCoord2fand glVertex2f)时,纹理被绘制到角落,因此图像被绘制到圆角之外,我松开了窗口的圆形方面。

当窗口是标准的而不是 NSBorderlessWindowMask我似乎无法重现的窗口时,系统会做什么?

在将纹理绘制到帧缓冲区时将其圆角的最佳方法是什么?