问题标签 [qopenglfunctions]

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

c++ - 如何使用 Qpainter 从 qt 帧缓冲区对象中绘制形状

1:请找到以下代码片段:如果我将 Qimage 传递给具有椭圆等创建形状的着色器,我是否应该将其他方式传递给着色器代码。请建议。

2:在下面,我在我的构造器中使用 Qpainter 创建了形状

3:然后调用 getImgResult 这是 opengl 调用来渲染我的图像

4:我将 fbo 缓冲区数据存储到 QImage

5:这个Qimage我正在使用内部绘制方法使用drawImage api绘制形状。

当我使用 fbo 从 openg 上下文中取回 QImage 时,我附上了一个图像,这是我的实际结果。我期待 1 圈,但得到 4 圈。我不明白我哪里出错了。

0 投票
2 回答
474 浏览

c++ - 如何在 Qt5 中使用 glGenBuffersARB 之类的扩展?

我正在拼命地了解Qt5中OpenGL支持的架构。

我目前的问题是:我有一些现有的 OpenGL 代码(桌面,不是 OpenGL ES),它们使用一些 OpenGL 扩展,包括glGenBuffersARB. 在 Qt5 之外访问这样的扩展功能是微不足道的,例如通过使用GLEW,我可以简单地这样做:

一切都会按预期神奇地工作,我可以立即开始使用glGenBuffersARB。如果我担心,我可以打个电话来glewIsSupported确保它得到支持。

但在 Qt5 中有一个警告,即 GLEW 并QOpenGLFunctions不能很好地配合使用(复制自qopenglfunctions.h):

因此,假设我为了这个问题并满足好奇心,完全放弃了 GLEW,完全依赖 Qt5 来实现纯 Qt5 方法。在不手动绑定每个扩展函数的情况下,如何让我现有的依赖 glGenBuffersARB 的 OpenGL 代码工作?

注意:我知道我可以按照答案中的提示进行操作:

但是我必须在现有的 OpenGL 代码的每一行前面加上functions->我不想这样做的前缀。

0 投票
0 回答
447 浏览

qt - 如何将 QOpenGLFramebufferObject 渲染到 QQuickItem

我正在使用 Qt 5.6 及更高版本。我有一个QQuickItem放在我的子类main.qml

在我的main.cpp注册MyQQuickItem中使用qmlRegisterUncreatableType. 它在应用程序主 UI 屏幕上显示良好。

现在,我有一个有效的纹理,即QOpenGLFramebufferObject. 我只想QOpenGLFramebufferObjectMyQQuickItem.

也许我应该调用 update 以MyQQuickItem某种方式为其提供这种纹理?怎么能做到这一点?

0 投票
0 回答
524 浏览

c++ - 如何将保存的纹理直接映射到 QuickItem 上并显示它?

在我Qt app的 with 中C++,我使用QQuickItem派生类通过在每个帧渲染上运行一些过滤器来显示在每个帧渲染上生成的纹理。这很好用。

接下来,我使用takeTexture提供的方法QOpenGLFramebufferObject来保存一些纹理并在需要时将它们显示回来。这些保存的纹理是 s 类型GLuint的。我可以使用普通的 OpenGL 渲染管道将其显示回来。它运作良好。

但是,有没有办法可以避免渲染管道调用并将 GPU 内存上保存的纹理直接映射到我的QQuickItem

0 投票
2 回答
2646 浏览

c++ - 如何使用 Qt 的原生 OpenGL 获得总 GPU 内存?

我正在尝试使用本机 Qt 的 OpenGL 从我的视频卡中获取 GPU 内存的总量,我尝试了数百种方法,但没有一种方法有效。这就是我目前所拥有的:

问题是变量total_mem_kb总是0,它没有得到glGetIntegerv里面的值。通过运行此代码,我得到 0。可能是什么问题?你能给我一个提示吗?

0 投票
1 回答
655 浏览

qt - 无法使用 QOpenGLBuffers 渲染

我的目标是用 QOpenGLBuffers(索引和顶点)渲染一个正方形。但是在查看了所有的导师和文档之后,我错过了一些东西。现在它什么也不渲染。

这是这个缓冲区的 init():

这是 render() 方法:

Mybe有人遇到过这样的问题吗?

0 投票
1 回答
1000 浏览

c++ - QOpenGLWidget 与 QApplication?

我们有一个基于 QWidget 的应用程序,该应用程序以前使用 QWindow 进行 OpenGL 渲染。为了使该窗口适合我们的应用程序,我们必须使用

以前我们只使用外部的 Qt OpenGL 库进行渲染。

我们希望从使用 QWindow 切换到某种类型的 QWidget,以便与触摸手势兼容,并且通常与我们应用程序的其余部分具有更好的整体兼容性。最新推荐的兼容 OpenGL 的 QWidget 似乎是 QOpenGLWidget,所以我们正在尝试使用它。

glContext是我们自己管理的OpenGLContext。

现在的问题是 QOpenGLWidget 不是 QSurface,所以我不能调用

使上下文在我的自定义 QOpenGLWidget 上成为当前的,就像我们之前使用自定义 QWindow 和我们自己的 OpenGLContext 一样。

如果我尝试使用,QOpenGLWidget::makeCurrent();那么这会使用错误的上下文并尝试使用一些神奇的 QT 处理的上下文或我不理解的东西来做一些事情。

结果是当我们尝试调用创建我们的 OpenGLContext 之后

它总是无法初始化 OpenGL 函数。

我一直在阅读有关该主题的所有其他资源,并遇到了类似的旧 Stack Overflow 问题: QOpenGLWidget with shared OpenGL context?

这个问题的答案并没有解决我的问题,因为我们使用的是 QApplication,而不是 QGuiApplication,因为这是一个基于 QWidget 的应用程序。 QGuiApplicationPrivate::init()永远不会被调用并且QOpenGLContext::globalShareContext()返回一个空指针,因为它没有被初始化。

不幸的是,我迫不及待QOpenGLWidget::initializeGL()地等待被调用来初始化托管的 QT,OpenGLContext因为我们已经在各种类上拥有大量 OpenGL 资源,这些资源试图在此之前进行初始化。

有没有其他人遇到过同样的问题?

有什么建议么?

0 投票
0 回答
2108 浏览

c++ - 如何在 Qt5 中正确使用 QOffscreenSurface 进行(动态)屏幕外渲染?

我正在尝试在 Qt5.3 中做一些离屏渲染工作,我想用它QOpenGLFramebufferObject::toImage来输出每张图片(我想在 render() 绘制不同的东西时输出几张图片)。

按照this的说明,我成功地在屏幕外渲染了我的第一张图片并输出了它。所以到未来,我写了一个例子作为下面的代码,这里是谷歌的一个包。我可以获得第一个 fbo 内容(及其正确的输出文件,但从第二次开始,fbo 没有重新渲染()并且它总是输出相同的图片)。所以我想知道在完成一次屏幕外渲染后我应该怎么做以确保下一次在qt中是正确的?或者有没有人可以告诉我如何正确设置动画QOffscreenSurface

qtestofffscreen.h:

qtestofffscreen.cpp:

主窗口.h:

主窗口.cpp:

0 投票
1 回答
487 浏览

c++ - 如何在openGL中获得均匀的屏幕空间坐标

我正在研究opengl,我有一些带有一些物体的小3d场景。在 GLSL 顶点着色器中,我将矩阵上的顶点相乘,如下所示:

vertexPos 是一个 vec4 可变变量,我将它传递给片段着色器。以下是场景正常渲染的方式: normal render

但后来我想做一个调试渲染。我在片段着色器中写:

vertexPos 乘以所有矩阵,包括透视矩阵,我假设我会得到从屏幕中心到右边缘的平滑渐变,因为它们映射为 -1 到 1 平方。但看起来它们在屏幕空间中,但没有应用透视变形。这是我看到的:(不要看红线和光源,它们使用不同的着色器)

调试渲染

如果我将它除以大约 15,它将看起来像这样:

除以 15

有人可以解释一下,为什么坐标不均匀并且场景仍然正确渲染透视失真?PS 如果我尝试将 gl_Position 放在片段着色器而不是 vertexPos 中,它不起作用。

0 投票
2 回答
698 浏览

c++ - 使用自定义帧缓冲区时深度测试不起作用

我正在整理帧缓冲区,并在我的场景中制作了一面镜子。除了深度测试外,它工作正常。被卡住试图让它工作。(当渲染到默认帧缓冲区时 - 深度测试工作正常)。将不胜感激任何帮助。这是代码: