问题标签 [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 投票
0 回答
194 浏览

cocoa - 将 NSImage 绘制到 NSOpenGLView

我正在尝试使用 NSOpenGLView 基本上实现 NSImageView。我的意思是,它应该能够从提供的 NSImage 进行渲染。谁能给我一个简单的 OpenGL 实现或一些入门指南?

0 投票
1 回答
512 浏览

macos - glBindTexture()、glBegin() 中的 OpenGL / OpenCL 互操作性能

我正在多 GPU 设置(Mac Pro 2013 年末)中开发 OS X 应用程序,该应用程序使用 OpenCL(在辅助 GPU 上)生成纹理,该纹理随后使用 OpenGL(在主 GPU 上)绘制到屏幕上. 由于调用 glBindTexture() 和 glBegin(),该应用程序受 CPU 限制,这两者基本上都将所有时间都花在:

这是视频驱动程序的一部分:

设置:创建 OpenGL 纹理 ( glPixelBuffer ),然后创建对应的 OpenCL ( clPixelBuffer )。

绘制代码:将 OpenGL 纹理映射到视口上。整个 NSOpenGLView 就是这一个纹理。

在获得纹理内存的控制权(通过clEnqueueAcquireGLObjects())后,OpenCL 内核将数据写入纹理,然后释放对纹理的控制权(通过clEnqueueReleaseGLObjects())。纹理数据不应该存在于主内存中(如果我理解正确的话)。

我的问题是:预计会在 memmove() 中花费这么多 CPU 时间吗?这是否表明我的代码存在问题?或者驱动程序中的错误,也许?我的(毫无根据的)怀疑是纹理数据正在通过:GPUx -> CPU/RAM -> GPUy 移动,我想避免这种情况。

0 投票
1 回答
1586 浏览

xcode - 在 Swift 中初始化 NSOpenGLPixelFormat

显然我是唯一一个尝试这个的人,因为我的谷歌搜索都没有发现任何有用的东西。假设我正在初始化一个属性数组,如下所示:

这些东西都是普通的整数,我已经检查过了。现在如果我这样做

编译器给了我这个错误信息:

“Int”与“NSOpenGLPixelFormatAttribute”不同

如果我在某个地方犯了错误,我不会看到它。

0 投票
0 回答
332 浏览

opengl - QCRenderer.renderAtTime 因“帧缓冲区操作无效”而失败

我像这样初始化我的 QCRenderer:

在代码的更下方,我这样调用 renderAtTime:

总是会产生此错误消息:

Quartz Composition 只是一个简单的 GLSL 着色器,在 Quartz Composer 中运行良好。这是 Quartz Composer 窗口的屏幕截图:石英成分

我在互联网上找不到太多关于此的内容。我希望这里有人知道可能会有所帮助的东西。

顺便说一句,我知道我可以像初始化 QCRenderer

但我想利用我的 GPU 的多重采样功能来获得抗锯齿图像。这必须比以 4 倍大小渲染,然后手动缩小图像的性能更高。

编辑:将像素格式更改为

0 投票
1 回答
198 浏览

view - NSOpenGLView - 在我移动窗口之前视图不会刷新

我真的在这个问题上撕毁了我的头!

我正在继承 NSOpenGLView 以在视图上做一些动画。当我说动画时,我的意思是正在从视图的左到右移动一些图像等等。

这就是我所做的

a) 初始化 OpenGL 系统代码:

b) 在开始时设置定时器

c)在drawRect中为我的东西制作动画

d) animateFrame 方法只是在各种矩形位置绘制图像


所以这就是问题所在

当我启动应用程序时 - 我可以看到正在触发时间计时器,正在调用 drawRect 并且正在绘制图像。

但是,当我拖动窗口并移动窗口时,我只能看到图像的动画。当窗口仍然存在时,图像就保持冻结状态。当我移动窗口时 - 我看到图像正在移动......或者即使我让窗口失焦并重新聚焦 - 我可以看到图像改变位置......

我觉得 OpenGLView 在静态时不会自己绘画...我不知道还要做什么...

我是否必须调用 - [[self openGLContext] flushBuffer]; 我如何确保视图总是被绘制?

有人可以阐明这里发生了什么或我错过了什么吗?

感谢一些帮助。提前致谢!卡米FC

0 投票
1 回答
488 浏览

objective-c - GCController 框架(OSX)不生成通知

我正在尝试将 GCController 框架集成到我的项目中。我对Objective-C不太熟悉,所以请原谅我对它应该如何工作的无知。

我有一个扩展 NSOpenGLView 的类,它为各种控制器通知注册观察者方法,如下所示:

我已经定义了一个超级简单的处理程序:

问题是,这些事件/通知似乎永远不会触发 - 当我检查 [GCController 控制器] 时,它完全是空的。

当然,如果没有控制器,就没有事件是有道理的——所以也许我做错了什么?

或者,无论出于何种原因 - 我的控制器根本无法生成所需的事件(我使用的是在操作系统中注册的 PS4 控制器,无论是无线还是通过 USB,所以我不确定我在这里缺少什么)。

我还需要在其他地方启用这些通知吗?我需要以某种方式初始化 GCController 框架吗?

0 投票
2 回答
410 浏览

macos - NSOpenGLView 子类不随窗口调整大小

在调整窗口大小时,我一直试图让 NSOpenGLView 正确调整大小,但我不断收到我无法解释的奇怪行为。它看起来像这样:

原文(一开始的样子):

调整大小后:

这是我的调整大小代码:

我正在使用:“glViewport(0, 0, m_width, m_height);” 每当我调用 glDrawArrays();

任何人都可以帮忙吗?

0 投票
0 回答
534 浏览

objective-c - OSX 上的 NSOpenGL I420 YUV 缓冲区渲染

在我的应用程序中,我必须显示从服务器接收到的 YUV 帧,YUV 图像格式是 I420,

我有这样的子类 NSOpenGLView,

和 OpenGL 视图在视图上创建类似这样的东西,

我直接在屏幕上显示I420,为此,顶点和着色器程序是这样的,

在子类视图中,我正在像这样设置视口大小,

我看到的是底部和右侧有点损坏,请参考图片,

请帮助我,无法弄清楚,出了什么问题,

如果您参考图像,我在底部和右侧绘制了红色矩形,这是不必要的

在此处输入图像描述

0 投票
2 回答
1831 浏览

swift - Swift、OpenGL 和 glVertexAttribPointer

我正在将这个 repo中的 Objective-C 代码翻译成 Swift,以便学习 OpenGL 的一些基础知识。我对它完全陌生。我有一个工作项目,它编译并生成一个带有浮动矩形的工作 NSOpenGLView,但颜色是错误的。我已将问题缩小到我使用glVertexAttribPointer指向顶点和颜色数据的函数。

这是我存储顶点和颜色数据的方式:

glVertexAttribPointer我尝试翻译的函数的 Objective-C 版本如下所示:

Objective-C 版本使用offsetof宏来设置这些函数的指针参数。Swift 不允许使用宏,所以我试图弄清楚用什么来代替它。我试过通过nil,像这样:

但如果我这样做,颜色数据数组将填充位置数据 - 不考虑偏移,因此它将位置数据用于位置和颜色属性。

我发现this stackoverflow answer建议使用withUnsafePointer并尝试过,如下所示:

但这会使整个显示器崩溃,需要强制关机并重新启动。

我不确定下一步该尝试什么。我正在处理的完整代码可在此处获得。

编辑:

我还尝试将指针指向第一个数据点并将其推进 4GLfloat秒,如下所示:

显示器不会崩溃,但屏幕上根本没有绘制任何内容。

0 投票
1 回答
173 浏览

macos - 带有 WantLayer 的 NSOpenGLView 在辅助显示上很慢?

我正在尝试使用支持图层的 NSOpenGLView (wantsLayer = YES),并且在辅助显示器上运行应用程序时注意到了性能问题。

使用GLEssentials 示例并添加self.wantsLayer=YES.[GLEssentialsGLView awakeFromNib]

https://developer.apple.com/library/mac/samplecode/GLEssentials/Introduction/Intro.html

查看问题的最佳方法是将非视网膜显示器设置为操作系统中的主显示器,并将应用程序移动到视网膜显示器。帧速率显着下降。使用 Retina 显示器时不会发生这种情况,因此似乎存在一些特定于辅助显示器的问题。它也不会发生 when wantsLayer = NO,所以它也与被层支持有关。

我们不确定这是否是一个实际的操作系统错误,或者在切换不存在的显示时是否需要进行一些优化。

如果有好的解决方法/技术有什么想法吗?(仅供参考 - 我知道透明窗口覆盖,并希望尽可能避免这种情况。)