问题标签 [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.
objective-c - 将焦点从 NSTextField 更改为 NSOpenGLView?
我正在使用 Interface Builder 在 Mac 上为 OpenGL 模拟开发一个接口。所有 OpenGL 的东西都是用 C++ 编写的(我很清楚)。不幸的是我对Objective-C一无所知。
基本上,我有一些 NSTextField 显示屏幕上选择的对象的信息。使用这些文本字段,用户可以在屏幕上操作对象,然后有一个保存按钮和一个恢复按钮(保存新值或恢复原始值)
我有这一切工作。我的问题是当我将数据输入到 NSTextField 时,窗口的“焦点”似乎仍然在 NSTextField 上(蓝色边框仍然围绕它)。
我使用键盘与 NSOpenGLView 中的项目进行交互,当我点击保存或恢复按钮时,我需要将焦点传递回 NSOpenGLView。
对不起,如果这是一个非常简单的问题
谢谢
大卫
cocoa - 如何从视图控制器对象绘制到 NSOpenGLView?
在 IB 中,我在窗口中放置了一个 NSOpenGLView 实例。
我在一个自定义的 NSViewController 中有我的所有绘图代码,如下所示:
一切都被链接起来,“drawFrame”被调用,但我没有在屏幕上看到任何东西。它总是白色的。我应该检查什么?
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 上下文之间共享纹理是否缺少一些技巧?
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 中这样做”的答案。只是使其正确创建窗口的代码。
objective-c - OpenGL深度测试问题
我在 mac 上遇到了 OpenGL 的问题,我认为问题出在深度测试上。
所以,对于我的问题:我没有解释,而是做了两个截图:我的场景从远处:http ://c0848462.cdn.cloudfiles.rackspacecloud.com/dd2267e27ad7d0206526b208cf2ea6910bcd00b4fa.jpg 从附近:http://c0848462.cdn.cloudfiles .rackspacecloud.com/dd2267e27a561b5f02344dca57508dddce21d2315f.jpg
如果我不画绿色地板,一切看起来(有点)都很好。但是,像这样,它看起来还是很可怕的。
以下是我用来设置 Opengl 的三个代码块:
opengl-es - 在 Mac 上使用 OpenGL ES
使用 OpenGL ES 进行 OS X 开发是否可能而且不太复杂。我已经编写 Mac 应用程序三年了,我准备开始学习 OpenGL,但我想使用 OpenGL ES,因为有很多关于将它与 Xcode 和 Objective-C 一起使用的信息以及我的一些代码示例发现它似乎比完整的 OpenGL 更容易学习。谢谢!
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,我仍然会遇到同样的问题。
interface-builder - 带有 OpenGL 3.2 核心的 NSOpenGLView
如果这个问题是微不足道的或无意义的,我提前道歉......这是我正在开发的第一个应用程序之一。(不幸的是)我不是开发人员。
我有一个 NSWindow,其中包含一个自定义视图,它是NSOpenGLView
.
由于NSWindow
和NSOpenGLView
是通过 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)
但创建的上下文不再与应用程序交互...视图中没有绘制任何内容..
我尝试了我所知道的一切......但我无法解决这个问题。
我应该怎么做呢?
core-animation - 仅当调整窗口大小时,支持图层的 OpenGLView 才会重绘
我有一个带有类型主视图NSView
和一个子视图的窗口,该子视图是NSOpenGLView
其名称的子类CustomOpenGLView
。的子类NSOpenGLView
是通过Custom View
Interface Builder 中的 a 并将其类设置为 来获得的CustomOpenGLView
。这是根据 Apple Sample Code Layer Backed OpenGLView 制作的。
该应用程序每隔 0.05 秒向 OpenGLContext 绘制一些内容。禁用核心动画层后,我可以在视图中看到移动的对象,这是视图连续重绘的结果。一切都完美无缺。
我现在想在顶部有一个半透明的视图CustomOpenGLView
来容纳播放/停止/ecc 等控制按钮。
为此,我添加了一个子视图CustomOpenGLView
并启用了核心动画层CustomOpenGLView
。控制按钮放置在这个新的子视图中。
这样,带有控制按钮的视图正确显示在顶部,CustomOpenGLView
但现在视图不会重绘。只有当我调整包含所有这些视图的窗口大小时,它才会绘制。
结果是我看不到任何“动画”...我只看到一个静止图像,它代表了在绘图循环开始时绘制的第一帧。如果我调整窗口大小,openGLContext 会重新绘制,直到我停止调整窗口大小。之后,我再次看到在调整大小期间发生了最后一幅画的静止图像。
此外,当绘图循环开始时,只有第一个“帧”出现在屏幕上,如果我调整窗口大小,比方说 5 秒后,我在视图中看到它应该在开始 5 秒后绘制的确切内容绘图循环。看来我需要设置[glView setNeedsDisplay:TRUE]
. 我这样做了,但没有任何改变。
错误在哪里?为什么添加核心动画层会破坏重绘?这是否意味着我没有得到什么?
cocoa - Cocoa OpengGL:绘制纹理和圆角
如果我使用一个标准NSWindow
来承载一个NSOpenGLView
延伸到所有窗框的标准,则窗口的两个底角会自动变圆。
切换到时,NSBorderlessWindowMask
我必须自己处理圆角。我已经实现了一个透明的自定义NSWindow
和一个圆形的自定义NSView
,它们都工作得很好。之后,我NSOpenGLContext
通过设置NSOpenGLCPSurfaceOpacity
为 0 实现了透明。如果我为 OpenGL 上下文设置颜色背景,则视图被正确绘制并获得所需的圆角。
但是,由于该应用程序是一个电影播放器,我需要绘制对应于每个电影帧的纹理。
当我这样做(使用glTexCoord2f
and glVertex2f
)时,纹理被绘制到角落,因此图像被绘制到圆角之外,我松开了窗口的圆形方面。
当窗口是标准的而不是 NSBorderlessWindowMask
我似乎无法重现的窗口时,系统会做什么?
在将纹理绘制到帧缓冲区时将其圆角的最佳方法是什么?