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

cocoa - 无法使用 NSOpenGLView 从 nextEventMatchingMask 获取 NSMouseMoved 事件

我正在尝试使用典型的 win 样式事件循环创建一个带有鼠标输入的基本 opengl 窗口。问题是我正在努力让NSMouseMoved事件产生。以下代码输出有关 Mouse Up、Mouse Down、Mouse Drag 等的调试信息,但即使我告诉了 window 也没有 Mouse Move setAcceptsMouseMovedEvents:YES。那么,关于如何让鼠标移动在以下示例中起作用的任何想法?

显然,我创建窗口的方式非常不像可可,但我正在尝试移植一个基于 makefile 的 Windows C++ 代码库,该代码库执行一些棘手的线程操作。这就是为什么我坚持使用类似于 win32 循环的风格,使用GetMsg().

另外,要构建我只是使用:

谢谢您的帮助!

0 投票
1 回答
141 浏览

macos - NP (Netscape) web 插件中的 NSOpenGLView

有谁知道在 Mac 上使用 NSOpenGLView 设置 NP Web 插件的任何资源/示例?我尝试修改 WebKit SVN 中的一些示例,但它没有加载 GLView。我设置它的方式是将 NSOpenGLView 层存储到主插件层中,就像示例存储在 Quartz 作曲家层中一样。

如果有人对在哪里实际找到有关执行此操作的文档有任何提示或建议(到目前为止,谷歌搜索没有帮助),我们将不胜感激。

0 投票
2 回答
804 浏览

cocoa - Cocoa / CoreGraphics / Quartz - 无边框 Quicktime X 类似圆边的窗口

我正在为 Mac OS X 开发一个基于文档的应用程序。它是一种媒体播放器,但不是播放音频或视频文件,而是应该打开包含指定 OpenGL 动画的元数据的文本文件。我想模仿 Apple 的 QuickTime X 窗口样式。这意味着,我必须自己完成所有的窗口绘图,因为 Cocoa 没有合适的窗口样式。

有一件事让我很头疼:圆角通常出现在 Mac OS X 窗口上。我尝试使用无边框窗口掩码并使用一些 CGS 魔法 - 有一些允许窗口整形的私有 Apple 标头,但它们当然没有记录。我能够在我的窗户边缘切出矩形孔,但我不知道苹果是如何实现圆角的。

创建一个透明窗口并自己绘制框架不起作用,因为 OpenGL 视口始终是矩形的,而改变它的唯一方法是打开 NSOpenGLCPSurfaceOpacity 以获得 alpha 透明度并使用模板缓冲区或着色器来切掉边缘,这似乎有很多开销。

如果我将 OpenGLView 放入带有标题栏的标准 Cocoa 窗口中,则底部边缘是圆形的。这似乎发生在视图层次结构的 NSThemeFrame 阶段。任何想法如何做到这一点?

0 投票
2 回答
5290 浏览

objective-c - 在没有 Interface Builder 的情况下创建 OpenGL 视图

所以我试图创建一个 openGL 视图(在我的窗口中)。我正在制作一个 Cocoa 应用程序。我设法通过 Interface Builder 创建了一个,但出于教育目的,我想继续制作一个没有它的。就在纸上。

这就是我告诉你我正在努力解决的问题。所以到目前为止,我基本上已经尝试过的是:我创建了一个继承自 NSOpenGLView 的新类“MyOpenGLView.h/m”。我没有添加任何私有变量或方法,只是类名。我唯一做的就是覆盖 initWithFrame: (在其中添加一个 self = [super initWithFrame:pixelFormat:]。)我在网上读到它,你必须先用类似的东西实例化它才能使用它) . 这是代码:

所以我有另一个名为“MyViewController.h/m”的类来处理我的视图?我有我的 MyOpenGLView *myView。在 .m 文件中,我使用如下内容:

当然,我得到错误。

我的窗口应用程序中没有移植 openGL 视图。我猜想它与被调用方法的层次结构有关,但又一次……我不确定。你能帮帮我吗?

0 投票
1 回答
2774 浏览

macos - FBO:渲染到纹理,绘制渲染纹理时纹理映射错误

我在 Mac OS X 应用程序上使用 OpengGL 在NSOpenGLView.

该应用程序是一个电影播放器​​。它将电影帧解码为CVOpenGLTextureRef(这是 OpenGL 纹理),我使用GL_QUAD. 一切正常。

以下是代码的相关部分。

它工作得很好,我可以调整窗口大小,并且纹理正确映射到较小的窗口。

请参阅此处了解从全屏到 500x280 像素的不同窗口大小: 没有 FBO

我现在想使用 FBO 渲染到纹理,我开始制作一个非常简单的实现,其中包括将电影帧渲染到屏幕外的 FBO(纹理),然后将该纹理绑定到屏幕上绘制。

这是代码:

代码不能正常工作,因为图像/纹理不仅是颠倒的,而且纹理映射也是错误的。只有当窗口全屏时它才能正常工作,否则它的行为真的很奇怪。

见下图: 与 FBO

如您所见,纹理在窗口内正确缩放,但它会根据全屏窗口大小和实际窗口大小之间的差异按比例“裁剪”。

我已经尝试了一切都没有成功。

由于这是我第一次使用 OpenGL,我是否遗漏了什么?我要疯了。。

0 投票
1 回答
490 浏览

cocoa - 多显示器上的 OpenGL

我正在使用多个NSOpenGLViews. 所有都设置为contentView显示NSWindow在它自己的屏幕上的。都NSOpenGLViews调用-(void)render:(NSOpenGLView *)sender;类中声明的方法Scene。此类绘制所有顶点。

Everything works fine, but the performance is horrible : with one display, everything is fine (around 500fps). When I add a display, it's extremely slow (around 20fps).

Is it possible to speed things up?

0 投票
1 回答
2009 浏览

multithreading - 使用 NSOpenGLLayer 从单独的线程中绘制

我正在开发一个应用程序,该应用程序需要以至少等于显示器刷新率的刷新率使用 OpengGL 进行绘制。而且我需要在单独的线程中执行绘图,以便绘图永远不会被激烈的 UI 操作锁定。

实际上,我正在使用 a NSOpenGLViewCVDisplayLink并且我能够毫无问题地达到 60-80FPS。

由于我还需要在此视图之上显示一些可可控件,因此我尝试按照LayerBackedOpenGLView Apple 示例进行子类NSOpenGLView化并使其具有图层支持。

结果并不令人满意,我得到了很多工件。

因此,我已经解决了这个问题,使用单独NSWindow的可可控件托管并将此窗口添加为包含NSOpenGLView. 它工作正常,我能够获得与初始实现完全相同的 FPS。

由于我认为这个解决方案很像一个肮脏的黑客,我正在寻找一种替代的、更干净的方式来实现我所需要的。

几天前我遇到了NSOpenGLLayer,我认为它可以用作解决我的问题的可行解决方案。

所以最后,在所有这些序言之后,我的问题来了:是否可以使用回调NSOpenGLLayer从单独的线程中绘制到 a ?CVDisplayLink

到目前为止,我已经尝试实现这一点,但我无法从CVDisplayLink回调中提取。我只能-setNeedsDisplay:TRUE在回调中执行绘图,然后在NSOpenGLLayer可可自动调用它时执行绘图。但我想这样我是从主线程中绘制的,不是吗?CVDisplayLink-drawInOpenGLContext:pixelFormat:forLayerTime:displayTime:

在谷歌搜索之后,我什至发现了这个帖子,其中用户声称在 Lion 下绘图只能发生在里面-drawInOpenGLContext:pixelFormat:forLayerTime:displayTime:

我目前在 Snow Leopard 上,但即使在 Lion 上,该应用程序也应该可以完美运行。

我错过了什么吗?

0 投票
1 回答
550 浏览

objective-c - 两个 NSOpenGLContext 之间究竟共享了什么?

我正在尝试创建一个 NSOpenGLContext,初始化我的渲染引擎,然后使用第一个上下文中的 share 参数创建新的 NSOpenGLContexts。这不起作用,在我继续之前,上下文之间究竟共享了什么?该文档对此有所了解:

共享上下文共享发起共享之前和之后创建的所有纹理对象、显示列表、顶点程序、片段程序和缓冲区对象。对象的状态也是共享的,但不共享其他上下文状态,例如当前颜色、纹理坐标设置、矩阵和照明设置、光栅化状态和纹理环境设置。

当我创建我的第一个 NSOpenGLContext 时,我初始化了我的渲染引擎,它会进行以下类型的调用:

  • glGenTextures、glActiveTexture、glBindTexture
  • gl启用
  • glUseProgram、glGetAttribLocation、glGetUniformLocation
  • glUniform1i, glUniform3f
  • glGenVertexArraysAPPLE、glBindVertexArrayAPPLE、glBindBuffer
  • glVertexAttribPointer, glEnableVertexAttribArray

其中大部分用于三种类型的任务 - 创建顶点和着色器程序,在程序中存储对属性和统一位置的引用,创建顶点数组以及绑定一些纹理。

您是否希望所有这些项目都可以跨上下文共享?

0 投票
1 回答
344 浏览

objective-c - OpenGLView 无法显示

我已遵循本指南

虽然我真的无法理解它在第 13 点所说的内容,但我只是打开了检查器的窗格,但它没有说明要设置哪些属性。但是,我已将代码复制并粘贴到适当的类中。但它看起来是一个普通的窗口,没有三角形的绘制,就像我在 Objective-C 中制作一个有一个空窗口的普通程序一样。

编辑:

我还以为是窗口初始化的问题,所以写了一个awakeFromNib方法来让drawRect方法启动:

但是在drawRect的第一条指令我得到一个EXC_BAD_ACCESS异常

也许窗口没有正确初始化?

0 投票
1 回答
490 浏览

opengl - 如何使用 glBlendFunc 来近似 Photoshop 差异合成?

我正在使用 glBlendFunc() 将一个图像合成到另一个图像上,试图近似 Photoshop 的差异合成功能。我希望两个图像中的相似之处是黑色的,而弹出任何不同的东西。

据我了解, glBlendfunc() 与上下文中合成的任何图像相关联。那是对的吗?