问题标签 [openglcontext]

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 回答
112 浏览

opengl - 从 qml 5.3 中的 QQuickView 获取 HGLRC

如何在 qml 5.3 应用程序中从 QQuickView 获取 HGLRC?

我在 windows 中有一个关于 openGL 的程序,我想渲染到我的QQuickView. 问题是我不想在openGL渲染过程中触摸渲染过程。所以,首先我想创建QQuickView然后从中获取 HGLRC 并按wglMakeCurrent(...)函数将其设置为 openGl prog。

0 投票
1 回答
1302 浏览

opengl - 将 OpenGL 上下文添加到 Cocoa 窗口

我正在尝试将 OpenGL 上下文添加到 NSWindow,但由于某种原因它不起作用。当我运行应用程序时,它会正确创建并显示 NSWindow,但我无法对 OpenGL 上下文执行任何操作,因此我认为上下文尚未正确添加到 NSWindow。

到目前为止,这是我的代码:

0 投票
2 回答
1129 浏览

multithreading - Qt5 和 GLEW MX => glewInit 失败

我们正在将我们的项目从 Qt 4.8 迁移到 5.4。我们在多个线程中使用多个上下文。为此,我们使用 GLEW MX(我们将所需的上下文设为当前上下文,然后在 GLEWContextStruct 的本地实例上调用 glewInit())。

我正在尝试将 QGLWidget 和 QGLContext 更改为 QOpenGLWidget 和 QOpenGLContext 但我最终无法再初始化 glew。GLEW 不会返回错误,但 glGetError() 会。

我确实安装了带有 OpenGL 版本的 Qt 5.4 64。

这是减少到最低限度的代码:

有什么建议吗?GLEW 可以使用 Qt5.4 吗?

编辑 1:

看来问题与Qt无关。创建的 GLEWContext 没有任何前向定义的函数(所有函数指针都未定义)。代码已更新,以帮助审阅者不会失去焦点。

0 投票
1 回答
547 浏览

opengl - 多设备 OpenCL/OpenGL 上下文

我目前正在 OpenCL 中编写烟雾模拟,我使用 OpenGL (freeglut) 来可视化烟雾。

我的计算机是带有 Intel i7 CPU 和 Intel HD 4000 GPU 的 Asus Zenbook,它们都被 OpenCL“识别”(HD 4000 = CL_DEVICE_TYP_GPU & Intel i7 = CL_DEVICE_TYPE_CPU)并包含在我的设备列表中。两种设备都支持“cl_khr_gl_sharing”。

我正在设置 OGL/OCL 上下文及其属性,如下所示:

但是 clCreateContext 函数返回 -33,这是“INVALID_DEVICE”的错误代码。在上面的代码中,我的“devicecount”变量等于 2,这意味着两个设备都与当前的 GL 上下文相关联。

只有在分别传入两个设备中的任何一个时才能创建上下文,并且在这些情况下模拟运行良好(尽管在 CPU 上当然非常慢)。

一个类似的问题是this one,它已经得到回答,但老实说,我并不真正理解答案。

所以,我的问题是:

是否可以使用多个CL 设备在 OpenCL 和 OpenGL 之间创建共享上下文?

如果是这样..

我用来创建上下文的方法是否正确,或者是否有另一种方法可以使用多个设备设置 OCL/OGL 上下文?

0 投票
1 回答
332 浏览

c++ - 如何使用 SFML 2.2 切换 OpenGL 上下文的线程?

我想让我的窗口事件循环在我的主线程中,而其他所有东西都在一个单独的线程中运行。

循环如下所示:

如何切换上下文的线程?

0 投票
1 回答
357 浏览

android - 如何更改为当前 OpenGL 上下文的属性?

我需要将 EGL_RECORDABLE_ANDROID 属性添加到现有的 OpenGL 上下文中。是否可以获取当前上下文的当前属性列表并将额外属性添加到列表中?

0 投票
1 回答
744 浏览

ios - OpenGL ES 3.0 上下文未在 iPad 上创建(在模拟器中工作)

我正在为 PC(Windows、Linux、Mac)和 iOS 开发跨平台渲染器。iOS 部分目前是围绕 OpenGL ES 2.0 构建的,我想升级到 ES 3.0。所以我替换了以下行(有效)

用这条线:

...我包括了 OpenGLES/ES3/gl.h 和 OpenGLES/ES3/glext.h。

在模拟器中这工作得非常好,但在实际的 iPad 上运行它不再工作并且上下文为零。

我真的不知道我在这里缺少什么,因为 iPad 运行的是最新版本的 iOS(iOS 8.3),并且 ES 3.0 应该没有问题。我没有收到任何错误,也无法真正调试它(“步入”在这里似乎不起作用)。

0 投票
1 回答
1661 浏览

objective-c - 无法为 NSOpenGLContext 设置视图

(对于这里看似大量的代码,提前抱歉)我正在尝试使用 Cocoa 创建一个带有 OpenGL 上下文的窗口,但我发现我无法设置NSOpenGLContext我创建的视图属性。

我不能简单地使用NSOpenGLView,因为我需要与 C++ 绘图后端接口并使用多个上下文。我在这里发布的代码只是我试图掌握处理NSOpenGLContexts,但它将用于更大的项目。这就是为什么我要手动实例化NSApplicationNSWindow不是通过 NIB/实例化的原因NSApplicationMain

我的main.m文件:

然后我有我的委托课程,并且我将避免发布文件Delegate.h ,因为鉴于Delegate.m的这些内容,很明显那里有什么:

窗口打开就好了。我能说出来-applicationDidFinishLaunching并且-draw正在被召唤。然而,窗口显示为空。

printf 调用显示视图属性self.glContext等于地址 0x0。我没有看到任何文档或其他论坛帖子说明为什么我无法设置NSOpenGLContext.

我尝试将其NSOpenGLContext放入它自己的子类中NSView并将该子类添加为窗口内容视图的子视图,但没有成功。

0 投票
1 回答
784 浏览

multithreading - 我是否允许在 OpenGL 2.1 的多个共享上下文中同时从同一个缓冲区对象进行渲染?

在 Apple 的文档中,我读到:

  • 1 — “共享上下文共享所有纹理对象、显示列表、顶点程序、片段程序和在共享开始之前和之后创建的缓冲区对象。”
  • 2 —“不同线程上的上下文可以共享对象资源。例如,一个线程中的一个上下文可以修改纹理,而第二个线程中的第二个上下文可以修改同一纹理。提供的共享对象处理Apple API 会自动防止线程错误。”

所以我希望能够创建我的缓冲区对象一次,然后使用它们在多个上下文中同时呈现。但是,如果我这样做,我的 NVIDIA GeForce GT 650M 会崩溃,回溯如下:

我已经在https://gist.github.com/jlstrecker/9df10ef177c2a49bae3e上发布了我的完整代码。在顶部,有#define SHARE_BUFFERS- 当注释掉它时它工作得很好,但未注释它会崩溃。

我不想争论我是否应该使用 OpenGL 2.1——这是我正在与之交互的其他软件的要求。我也不想争论是否应该使用 GLUT——我的示例代码只是使用它,因为它包含在 Mac 中并且没有任何外部依赖项。我也不是在寻找有关性能/优化的反馈。

我只是想知道我是否可以期望能够在多个上下文中同时从单个共享缓冲区对象进行渲染——如果可以,为什么我的代码会崩溃。

0 投票
1 回答
59 浏览

qt - 在特定上下文中创建资源

我有一个使用 aQOpenGLWidget来呈现内容的 Qt OpenGL 应用程序。在另一个类(我们称之为Resources)中,我想为这个小部件创建 OpenGL 资源,如 VBO、VAO、着色器程序等。此创建方法不是由QOpenGLWidget调用,而是由外部调用者调用。

出于某种原因,我的应用程序中存在两个 OpenGL 上下文(一个可能用于 GUI 内容,另一个用于QOpenGLWidget. 因此,当调用资源创建方法时,我无法确定正确的上下文是否处于活动状态。所以当我打电话时

在 Resources 类中,我不能确定这个 VAO 是在正确的上下文中创建的。Resources 类无权访问小部件。因此,context.makeCurrent()不能调用(因为我不知道表面)。

是否有直接的方法来指定应在其上创建资源的上下文?将表面存储在资源文件中(连同上下文)似乎很不整洁。