问题标签 [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 回答
254 浏览

uitableview - Cocos2D z-index 问题与 openGLView

我有一个显示分数和名称的 UITableView。我也有在屏幕上移动的动画对象..但是它们在 tableview 下并且无论有什么 z-index 值都不可见..我怎样才能让动画对象在我的 UITableView 之上?谢谢..

0 投票
0 回答
241 浏览

cocoa - 在 NSWindow 中添加更多数量的 View 和 NSOpenGLView

我需要在一个窗口中添加更多数量的 NSView 以及更多数量的自定义 NSOpenGLView,然后想要对视图数组进行洗牌。如果我最初设置基本视图 setWantsLayer:YES,如果我设置 setWantsLayer:NO,我将无法绘制 OpenGLView,我可以绘制 OpenGLView 但 NSView 超出了 OpenGLView。喜欢,

在 MyOpenGLView.m

然后我尝试在窗口上再添加一个视图

现在我的自定义视图超越了 myOpenGLView。我该如何解决?

编辑

问题截图

0 投票
0 回答
81 浏览

performance - 不可见的 NSOpenGLView 减慢了整个系统的速度

我正在制作一个 Mac OS X (10.8.3) OpenGL 应用程序,使用 NSOpenGLView 和 CVDisplayLink 来管理对渲染方法的调用。

该应用程序工作正常,但是当窗口被覆盖或位于其他空间时(基本上是由于某种原因不可见时),整个系统开始变慢。

我以多种方式对其进行了测试和分析,这就是我发现的:

  • CPU没问题,没有CPU消耗增加
  • 内存也很好,分配的内存量不会改变
  • 在 OpenGL 驱动程序监视器中,“CPU 等待 GPU”时间增加
  • “CPU等待免费OpenGL命令缓冲区”也有(我认为这是问题所在)
  • 如果没有生成 OpenGL 绘制调用,则计算机运行良好。

我猜一个不可见的 NSOpenGLView 以某种方式改变了行为,它使我的应用程序更加消耗 GPU。

知道可能出了什么问题吗?

0 投票
2 回答
707 浏览

cocoa - NSOpenGLView 从视图中切换到全屏

我正在尝试创建一种在全屏和窗口之间切换的方法。我试图从继承自 NSOpenGLView 的类中执行此操作,基本上遵循此 blogpost。一次有效,从窗口到全屏;尝试返回以各种方式失败:窗口屏幕没有更新,或者我什至没有管理切换到窗口但全屏只是空白。无论如何尝试来回几次(将其映射到'f'键),程序经常锁定,在最坏的情况下,我必须重新启动计算机。我附上了以下方法的代码;出于调试目的,我将全帧矩形设置得更小,这样如果冻结,应用程序永远不会全屏显示。

Apple 开发人员示例中的全屏示例建议使用控制器,并且不会从继承的 NSOpenGLView 中全屏显示。

我的问题:

  • 我应该改用控制器,然后在窗口和全屏之间切换(每次创建一个单独的全屏视图)?或者这两种方法都应该有效吗?
  • 如果这两种方法都应该有效,那么首选哪一种?
  • 如果这两种方法都可以工作,那么我在当前的实现方式中做错了什么?
  • 或者,是否有第三种更好的方法?

请注意,对于这两个参考,我必须假设 10.8 的情况没有改变(这两个参考似乎都适用于 10.6)。

代码如下:

0 投票
1 回答
62 浏览

objective-c - 如何在 Objective-C 中创建设计对象的实例?

我正在编写一个需要多个窗口的应用程序。我已经设计了我希望我的窗口在 Interface Builder 中的外观,当我启动我的应用程序时,它看起来应该是它应该的样子。我有一个我一直在使用的大型 C++ 代码库,并且我已经设法很好地集成了它。但是,我有我使用的函数(在我的跨平台系统中)来创建窗口 - 但是如何创建我在 Interface Builder 中设计的窗口的新/第二个实例?

例如,我有一个 NSWindow,它包含一个 NSView,它包含一个 OpenGL 视图。在启动时,我的窗口(及其内容)被创建并显示得非常好。

在这个窗口运行的某个时候,我会想要响应一些用户输入并显示带有 NSView 和 OpenGL 视图的第二个窗口(正如我在 IB 中设计的那样)。如何创建第二个实例?

我是 Mac 编程的新手,我很感激我可能误解了一些关于这实际上是如何工作的概念——当然欢迎更正!

0 投票
1 回答
433 浏览

macos - OpenGL 和 Cocoa 不工作

我正在尝试使用NSOpenGL山狮在 OpenGL 中绘制一个非常简单的带有红色背景的蓝色正方形。代码很简单,应该可以工作,我假设这是我设置上下文的问题。

这是我的 GLView 界面:

实施:

我非常简单的片段着色器:

简单的顶点着色器:

我没有编译错误,只是一个红色的屏幕,没有蓝色的方块。有人可以帮我找出问题所在。不过,我确实收到了警告,指出 Gl.h 和 gl3.h 都包括在内。我想使用 OpenGL 2

0 投票
2 回答
732 浏览

macos - NSOpenGLView 不会清除

我正在尝试使用 Cocoa 窗口和 NSOpenGLView 的 OpenGL 3.2。但是我无法让 NSOpenGLView 绘制红色。我只是得到一个白色的窗口。这是我的代码(在 NSOpenGLView 的子类中):

代码应该简单地将视图清除为红色。没有错误或警告——只有一个白色窗口。

0 投票
1 回答
425 浏览

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对象,因为我想在某些时候访问过渡效果。

0 投票
0 回答
832 浏览

cocoa - 我的 CVDisplayLinkOutputCallback 方法是否应该用于更新和渲染 OpenGL 场景

我设法设置了一个NSOpenGLViewusingCVDisplayLinkSetOutputCallback作为在我的应用程序中渲染场景的方法。一切似乎都正常工作,并且回调方法以相当不错的速度触发。

到目前为止,我的实现基于很久以前(2009 年)在这个论坛线程(特别是这篇文章)中找到的代码。

进一步挖掘线程,提到设置NSTimer一个固定的步长间隔,这将调用update:(NSTimeInterval)duration一种用于集成物理模拟等的方法。但是,似乎帧之间的增量时间也在显示链接回调方法中计算,我发现这很令人困惑。

我以前没有考虑过更新场景的固定步长时间间隔,老实说,这对我来说似乎不太合适,但我仍在学习 OpenGL 和游戏开发的细微差别。

在显示链接回调中将更新和渲染方法绑定在一起是一种好方法,还是更适合放在其他地方?

我已经GLKit在 iOS 上使用过所有东西,并且工作起来相当简单,因为您符合适当的委托方法,并且相应地调用了您的更新和渲染方法。

到目前为止,我的代码如下所示:(基于论坛帖子中的代码)

这是一种可行的方法吗?我应该改用一个NSTimer吗?还是有可能更适合的替代方法?

我不太熟悉,CVDisplayLink所以我不确定这是否是实施更新和渲染场景方法的最佳场所。应该CVDisplayLink这样使用,即:用于场景渲染和更新一体化?

任何进一步的信息将不胜感激。

0 投票
1 回答
147 浏览

opengl - 使用 OpenGL 两次绘制 QTMovie 的纹理

我目前正在使用 OpenGL 将 QTMovie 的帧显示到 NSOpenGLView 中。为此,我正在使用以下代码创建纹理上下文:

然后,我将视觉上下文分配给电影,以便将帧绘制到该上下文中。我得到了这个位的实际框架:

_currentFrameTexCVOpenGLTextureRef在哪里。

所有这一切都适用于一个视图,但我想在第二个视图上绘制相同的框架,我无法想象如何做到这一点。

最简单的方法是什么?当然,它也应该是高性能的,因为它被称为每秒 60 次(至少)。