问题标签 [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.
uitableview - Cocos2D z-index 问题与 openGLView
我有一个显示分数和名称的 UITableView。我也有在屏幕上移动的动画对象..但是它们在 tableview 下并且无论有什么 z-index 值都不可见..我怎样才能让动画对象在我的 UITableView 之上?谢谢..
cocoa - 在 NSWindow 中添加更多数量的 View 和 NSOpenGLView
我需要在一个窗口中添加更多数量的 NSView 以及更多数量的自定义 NSOpenGLView,然后想要对视图数组进行洗牌。如果我最初设置基本视图 setWantsLayer:YES,如果我设置 setWantsLayer:NO,我将无法绘制 OpenGLView,我可以绘制 OpenGLView 但 NSView 超出了 OpenGLView。喜欢,
在 MyOpenGLView.m
然后我尝试在窗口上再添加一个视图
现在我的自定义视图超越了 myOpenGLView。我该如何解决?
编辑:
问题截图
performance - 不可见的 NSOpenGLView 减慢了整个系统的速度
我正在制作一个 Mac OS X (10.8.3) OpenGL 应用程序,使用 NSOpenGLView 和 CVDisplayLink 来管理对渲染方法的调用。
该应用程序工作正常,但是当窗口被覆盖或位于其他空间时(基本上是由于某种原因不可见时),整个系统开始变慢。
我以多种方式对其进行了测试和分析,这就是我发现的:
- CPU没问题,没有CPU消耗增加
- 内存也很好,分配的内存量不会改变
- 在 OpenGL 驱动程序监视器中,“CPU 等待 GPU”时间增加
- “CPU等待免费OpenGL命令缓冲区”也有(我认为这是问题所在)
- 如果没有生成 OpenGL 绘制调用,则计算机运行良好。
我猜一个不可见的 NSOpenGLView 以某种方式改变了行为,它使我的应用程序更加消耗 GPU。
知道可能出了什么问题吗?
cocoa - NSOpenGLView 从视图中切换到全屏
我正在尝试创建一种在全屏和窗口之间切换的方法。我试图从继承自 NSOpenGLView 的类中执行此操作,基本上遵循此 blogpost。一次有效,从窗口到全屏;尝试返回以各种方式失败:窗口屏幕没有更新,或者我什至没有管理切换到窗口但全屏只是空白。无论如何尝试来回几次(将其映射到'f'键),程序经常锁定,在最坏的情况下,我必须重新启动计算机。我附上了以下方法的代码;出于调试目的,我将全帧矩形设置得更小,这样如果冻结,应用程序永远不会全屏显示。
Apple 开发人员示例中的全屏示例建议使用控制器,并且不会从继承的 NSOpenGLView 中全屏显示。
我的问题:
- 我应该改用控制器,然后在窗口和全屏之间切换(每次创建一个单独的全屏视图)?或者这两种方法都应该有效吗?
- 如果这两种方法都应该有效,那么首选哪一种?
- 如果这两种方法都可以工作,那么我在当前的实现方式中做错了什么?
- 或者,是否有第三种更好的方法?
请注意,对于这两个参考,我必须假设 10.8 的情况没有改变(这两个参考似乎都适用于 10.6)。
代码如下:
objective-c - 如何在 Objective-C 中创建设计对象的实例?
我正在编写一个需要多个窗口的应用程序。我已经设计了我希望我的窗口在 Interface Builder 中的外观,当我启动我的应用程序时,它看起来应该是它应该的样子。我有一个我一直在使用的大型 C++ 代码库,并且我已经设法很好地集成了它。但是,我有我使用的函数(在我的跨平台系统中)来创建窗口 - 但是如何创建我在 Interface Builder 中设计的窗口的新/第二个实例?
例如,我有一个 NSWindow,它包含一个 NSView,它包含一个 OpenGL 视图。在启动时,我的窗口(及其内容)被创建并显示得非常好。
在这个窗口运行的某个时候,我会想要响应一些用户输入并显示带有 NSView 和 OpenGL 视图的第二个窗口(正如我在 IB 中设计的那样)。如何创建第二个实例?
我是 Mac 编程的新手,我很感激我可能误解了一些关于这实际上是如何工作的概念——当然欢迎更正!
macos - OpenGL 和 Cocoa 不工作
我正在尝试使用NSOpenGL
山狮在 OpenGL 中绘制一个非常简单的带有红色背景的蓝色正方形。代码很简单,应该可以工作,我假设这是我设置上下文的问题。
这是我的 GLView 界面:
实施:
我非常简单的片段着色器:
简单的顶点着色器:
我没有编译错误,只是一个红色的屏幕,没有蓝色的方块。有人可以帮我找出问题所在。不过,我确实收到了警告,指出 Gl.h 和 gl3.h 都包括在内。我想使用 OpenGL 2
macos - NSOpenGLView 不会清除
我正在尝试使用 Cocoa 窗口和 NSOpenGLView 的 OpenGL 3.2。但是我无法让 NSOpenGLView 绘制红色。我只是得到一个白色的窗口。这是我的代码(在 NSOpenGLView 的子类中):
代码应该简单地将视图清除为红色。没有错误或警告——只有一个白色窗口。
objective-c - 带有原始位图数据的高效 Cocoa 动画
我有一个 RGBA malloc-ed 数据的原始位图图像;行显然是 4 个字节的倍数。此数据实际上源自 AVI(24 位 BGR 格式),但我将其转换为 32 位 ARGB。每帧大约有 8mb 的 32 位数据 (1920x1080)。
对于每一帧:
- 我通过 将该帧的数据转换为
NSData
对象NSData:initWithBytes:length
。 - 然后我
CIImage
通过CIImage:imageWithBitmapData:bytesPerRow:size:format:colorSpace
. - 从那开始
CIImage
,我NSOpenGLView
使用NSOpenGLView:drawImage:inRect:fromRect
. 由于目标图像的“马赛克”性质,大约有 15-20 次使用各种源/目标 Rect 对此进行调用。
使用 30hzNSTimer
调用2012 MacMini/2.6ghz/i7[self setNeedsDisplay:YES]
时NSOpenGLView
,我可以达到大约 20-25fps——它在 30hz 时并不坚如磐石。NSTimer
这可以用 a而不是 a来预期CVDisplayLink
。
但是......暂时忽略这个NSTimer
问题,是否有任何建议/指针可以让这种逐帧渲染更有效?
谢谢!
注意:我想坚持使用CIImage
对象,因为我想在某些时候访问过渡效果。
cocoa - 我的 CVDisplayLinkOutputCallback 方法是否应该用于更新和渲染 OpenGL 场景
我设法设置了一个NSOpenGLView
usingCVDisplayLinkSetOutputCallback
作为在我的应用程序中渲染场景的方法。一切似乎都正常工作,并且回调方法以相当不错的速度触发。
到目前为止,我的实现基于很久以前(2009 年)在这个论坛线程(特别是这篇文章)中找到的代码。
进一步挖掘线程,提到设置NSTimer
一个固定的步长间隔,这将调用update:(NSTimeInterval)duration
一种用于集成物理模拟等的方法。但是,似乎帧之间的增量时间也在显示链接回调方法中计算,我发现这很令人困惑。
我以前没有考虑过更新场景的固定步长时间间隔,老实说,这对我来说似乎不太合适,但我仍在学习 OpenGL 和游戏开发的细微差别。
在显示链接回调中将更新和渲染方法绑定在一起是一种好方法,还是更适合放在其他地方?
我已经GLKit
在 iOS 上使用过所有东西,并且工作起来相当简单,因为您符合适当的委托方法,并且相应地调用了您的更新和渲染方法。
到目前为止,我的代码如下所示:(基于论坛帖子中的代码)
这是一种可行的方法吗?我应该改用一个NSTimer
吗?还是有可能更适合的替代方法?
我不太熟悉,CVDisplayLink
所以我不确定这是否是实施更新和渲染场景方法的最佳场所。应该CVDisplayLink
这样使用,即:用于场景渲染和更新一体化?
任何进一步的信息将不胜感激。
opengl - 使用 OpenGL 两次绘制 QTMovie 的纹理
我目前正在使用 OpenGL 将 QTMovie 的帧显示到 NSOpenGLView 中。为此,我正在使用以下代码创建纹理上下文:
然后,我将视觉上下文分配给电影,以便将帧绘制到该上下文中。我得到了这个位的实际框架:
_currentFrameTex
CVOpenGLTextureRef在哪里。
所有这一切都适用于一个视图,但我想在第二个视图上绘制相同的框架,我无法想象如何做到这一点。
最简单的方法是什么?当然,它也应该是高性能的,因为它被称为每秒 60 次(至少)。