QGLWidget 比 QWidget 慢

2024-04-15

问题主要是在标题中确定的。我尝试了 Qt 的示例(二维绘画 http://harmattan-dev.nokia.com/docs/library/html/qt4/opengl-2dpainting.html)并注意到,如果我尝试在 QGLWidget 上绘制,相同的代码会消耗更多的 CPU 功率,而如果我尝试简单地在 QWidget 上绘制,则会消耗更少的 CPU 功率。我认为 QGLWidget 应该更快。还有一个更有趣的现象:在 QGLWidget 中,抗锯齿提示似乎被忽略了。

OpenGL版本:3.3.0

那么这是为什么呢?


首先,请注意您链接到的文档底部的这段文字:

该示例显示了在同一时间执行的相同绘画操作 Widget 和 GLWidget 中的时间。渲染的质量和速度 GLWidget 取决于多重采样的支持级别和 系统的 OpenGL 驱动程序提供的硬件加速。如果 如果缺乏对其中任何一个的支持,驱动程序可能会依赖于 可以牺牲质量换取速度的软件渲染器。

抛开这一点不谈,硬件渲染并不总是保证比软件渲染更快。这完全取决于渲染器被要求做什么。

软件可以超越硬件的一个例子是,如果渲染项目的目标不断变化。因此,如果您有一个绘图程序,该程序绘制一条由不断移动的鼠标创建的线,并且它是通过向每帧绘制的画家路径添加点来实现的,则硬件渲染器将随着新点而不断受到管道停顿的影响添加到画家路径中。从停顿开始设置图形管道需要时间,这不是软件渲染器必须处理的事情。

在您询问的 2dPainting 示例中,执行绘制调用的辅助类正在执行许多不必要的工作;保存画家状态;设置笔/画笔;旋转画家;恢复刷子。所有这些在硬件上的开销都比软件上的开销更大。要真正看到硬件渲染优于软件,在渲染循环(绘制函数)之外预先计算对象的位置,然后不执行任何操作,将实际渲染放入绘制函数中,可能会在这里显示出明显的差异。

最后,关于抗锯齿,您链接到的文档指出:“如果系统的 OpenGL 驱动程序支持所需的扩展,QGLWidget 也将使用抗锯齿”

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

QGLWidget 比 QWidget 慢 的相关文章

  • 如何在C++、Qt、QML、Blackberry 10 Cascades Beta 3 SDK中制作图表/图形(如折线图、条形图、圆形图)等?

    我需要知道如何在 Blackberry 10 Cascades Beta 3 SDK QML Qt C 中制作图表 图表 如果有人可以向我展示一个例子或向我指出一些可以告诉我如何做到这一点的东西 我将不胜感激 您应该查看 QChart js
  • QDomDocument 无法设置带有 标记的 HTML 文档的内容

    当我使用QDomDocument对于 HTML 内容 如果存在则无法设置内容在文档的开头 但实际上为什么 例如 考虑以下代码片段 QDomDocument doc QString content a href bar foo a qDebu
  • 包装 C++ Qt 小部件以便在 Python 中与 PySide 一起使用

    在 Python 中使用自定义 Qt 显示小部件包装自定义 C 库以便在基于 PySide 的 QApplication 中使用的最佳方法是什么 C 库是否需要特殊处理才能使用 SWIG 进行包装 封装的 Qt 小部件能否与 PySide
  • 如何删除在设计器模式下创建的插槽?

    我已经创建了按钮cancelButton 然后我创建了函数槽on cancelButton clicked 使用上下文菜单项Go to slot 但是 过了一段时间 我删除了这个按钮 不再需要 并尝试删除该函数 但编译器给出错误undefi
  • 即使在顶点着色器中使用,glGetUniformLocation()也会返回-1

    我正在尝试用法线渲染一个简单的立方体 我使用以下代码来初始化着色器 void initShader const char vertexShaderPath const char fragmentShaderPath cout lt lt I
  • 来自无符号字符缓冲区的 QImage(jpg 格式)

    我有类型的缓冲区unsigned char 我用JPG图像填充 我想使用此缓冲区将图像绘制到 QLabel 中的应用程序屏幕上 我已经这样做了 但图像不正确 谁能告诉我最好的方法是什么 QPixmap pix QPixmap fromIma
  • 为什么我的 FPS 相机一劳永逸地滚动?

    如果我忽略四元数代数的肮脏细节 我想我理解了旋转和平移变换背后的数学 但仍然不明白我做错了什么 为什么我的相机一劳永逸地滚动 更具体地说 我应该如何从相机的方向 旋转矩阵 计算相机视图矩阵 我正在用 Python 编写一个简约的 3d 引擎
  • 如何安装适用于 Windows C++ 的最新版本 OpenGL?

    我正在使用 Visual Studio 2010 运行 Windows 7 包含的 OpenGL 版本 include 是版本 1 1 我希望使用合理的当前版本 某种版本 3 或 4 我需要做什么才能达到该状态 OpenGL SDK 页面位
  • 如何将点光源转换为卵形/椭圆形?

    我希望通过具有不同 x 和 y 值的 vec2 半径将当前的圆形光变成椭圆形 有没有办法根据我当前在片段着色器中的代码来做到这一点 uniform struct Light vec4 colour vec3 position vec2 ra
  • 如何管理返回到 QML 的动态分配的 QObject 的生命周期?

    我有这个代码 QVariant componentFromCode QString code QQmlComponent component new QQmlComponent engine engine gt setObjectOwner
  • 如何找到 QDockWidget 标题栏的高度?

    我正在尝试找到 a 的高度QDockWidget标题栏 以便对自定义布局进行一些智能调整大小 但标题栏不是单独的小部件 它内置于停靠小部件的私有布局中 并且没有成员可以访问它 还有其他方法可以找到它的高度吗 是的 您可以使用以下命令找到标题
  • 在 QtCreator 中查看数组内容

    调试时是否可以在 Qt Creator 中查看数组的内容 似乎检测到我的数组是一个数组而不是一个指针 此外 我可以点击一个箭头 就像展开一样 但之后什么也没有显示 当我试穿的时候std vector Qt Creator 设法按预期显示内容
  • OpenGL 着色器不与着色器程序链接

    我正在尝试使用 GLFW GLEW 添加着色器 我收到一个错误 指出着色器已加载 但它们没有有效的对象代码 这是我用于加载着色器的代码 class SHADER public void LoadShaders const char vert
  • 将项目添加到自定义组件的布局

    我有一个习惯Footer Component我想在 QML 应用程序的不同位置重用它 Rectangle color gold height 50 anchors bottom parent bottom left parent left
  • 如何在Qt中设置编译器?

    我对 Qt 完全陌生 我下载了离线版本 Qt 5 3 2 for Windows 64 bit VS 2013 OpenGL 573 MB 我无法编译我的项目 I have Qt Creator 3 2 1 开源 基于Qt 5 3 2 MS
  • 将像素传递给 glTexImage2D() 后会发生什么?

    例如 如果我创建一个像素数组 如下所示 int getPixels int pixels new int 10 pixels 0 1 pixels 1 0 pixels 1 1 etc glTexImage2D getPixels glTe
  • QToolBar 的菜单延迟

    我通过制作 QAction 并向其添加 QMenu 在 QToolBar 上有一个菜单 如何消除单击图标时出现菜单之前的延迟 QToolBar myToolBar new QToolBar this QAction myAction new
  • 调整 QML 图像显示尺寸

    我有一个带有嵌套的 QML 窗口RowLayout 在内排我有两个图像 来源 png这些图像的文件 故意 相当大 当我尝试设置height这些图像上的属性使它们变小 但它们仍然被画得很大 Desired Appearance Actual
  • 如何将图标放置到 QLineEdit 上?

    stackoverflow com 网站的右上角有一个带有放大镜头的搜索字段和一个灰色的 搜索 关键字 我想知道是否有可能实现相同的外观QLineEdit 如果是这样那怎么办 QLineEdit lineEdit new QLineEdit
  • QTableView 中的虚拟列?

    我开始学习 Qt4 模型 视图编程 我有初学者问题 我有一个简单的应用程序 其中显示 sqlite 表QTableView class Model QtSql QSqlTableModel def init self parent None

随机推荐

  • 如何动态更改文本字段中特定文本的颜色?

    Consider bellow image I want to dynamically change the text color of part of the text based on the user input text not t
  • Eclipse中的部署目录在哪里?

    我正在 Eclipse 中开发一个 Web 应用程序 部署目录树位于哪里 在我的 Java 工作区树中的 Apache 目录结构或某些子目录树结构中 我问这个问题是因为当我的教程应用程序的更新不起作用时 我去浏览目录树 并且假设src子树代
  • WPF:将 DataGrid 绑定到列表

    有趣的是 有时简单的事情会在背后咬我一口 我可以使用 DataGridTextColumn 将 DataGrid 很好地绑定到某个任意类的集合 如下所示 bound to List
  • 使用 web-fragment 时 tagdir 属性无效

    我正在使用 web fragment 功能在 jar 中维护 JSP 和标签 并且使用这种方法 我的 JSP 页面无法找到 tagdir 并导致 此标签库的 tagdir 属性值无效 这是我的罐子里的结构 META INF 资源 WEB I
  • 在 Java 中将颜色名称转换为 RGB 值

    当颜色名称作为输入给出时 我想要一个 RGB 值 以下代码适用于某些颜色 我猜适用于红色等原色 但适用于其他一些颜色 例如青色和淡紫色 import java awt Color import javax swing text html S
  • 如何找到最新的 gradle 版本和包装器

    嗨 我对 Android 开发相当陌生 我对 Gradle 版本和 gradle wrapper properties 中的分发 url 有疑问 classpath com android tools build gradle gradle
  • 如何使用 iOS Swift 更新 firebase 中的单个数组元素?

    这里我使用 firestore 查询来更新 插入数据 如何将数组值的字典更新到 firebase 数据库 here is my firestore data structure 现在可以获取数据slot1 gt 第 0 个位置值在模型类中
  • 谷歌图表显示的是金钱而不是百分比

    给定饼图的数据 data new google visualization arrayToDataTable Sales Revenue Distribution Author 5 Company 2 Tax 0 4 Payment Pro
  • 如何解压缩C中的字符数组

    我需要创建函数 char decompress const char src 该函数的输入是一些字符串 Hello world gt Hello world Hel2o world 10 gt Hello world 正如您所看到的 如果有
  • 使用 IntelliJ 运行 JUnit 测试

    我正在使用 IntelliJ 2018 1 并且我正在尝试运行TeaVM http teavm org JUnit 测试 但运行测试时CTRL SHIFT F10测试被跳过 RunWith TeaVMTestRunner class Ski
  • 从 matplotlib 刻度标签格式中删除前导 0

    如何在 matplotlib 中将数字十进制数据 例如 0 和 1 之间 的刻度标签更改为 0 1 2 而不是 0 0 0 1 0 2 例如 hist rand 100 xticks 0 2 4 6 8 将标签格式设置为 0 0 0 2 等
  • 使用 Keith Wood 的 jQuery SVG 插件对外部加载的 SVG 进行动画处理

    我正在尝试使用 Keith Wood 为从外部 SVG 加载的一组路径的填充颜色设置动画plugin http keith wood name svg html 首先 我将 SVG 导入到 div 容器中 document ready fu
  • 本地通知在设备上不起作用,但在模拟器上起作用

    我读过一些如何使用的指南UILocalNotification的 所以我一直在尝试 但自从第一次尝试以来还没有成功 要在 AppDelegate m 中注册通知 我使用 BOOL application UIApplication appl
  • 设备支持 ,但 APK 仅支持 x86

    我正在尝试通过 Android 模拟器为不同的 CPU ABis 部署和调试应用程序 但出现此错误 它没有指定模拟器支持哪些 ABI 我尝试运行支持所有 ABI 的 APK 但仍然遇到相同的错误 这种情况仅发生在具有 Google Play
  • 在大表上添加索引需要很长时间

    我有一个表 在 MySQL 中 名为unused大约有 540 万行 该表如下所示 CREATE TABLE unused id bigint 20 NOT NULL AUTO INCREMENT account id bigint 20
  • 在 apache 配置中创建变量

    我有一个 apache 配置 如下所示 RewriteCond QUERY STRING site eu jp in NC RewriteRule fetchHomePage action https example com 1 R 301
  • 当核心数据中没有找到相关实体时,无法识别的选择器发送到实例

    我有一个核心数据问题 我有两个实体 第二个实体与第一个实体是一对多关系 当尝试在第一个视图控制器上加载第一个视图控制器的详细信息和第二个详细信息的 UITableView 时 我希望此 tableView 代码允许我在找到记录时显示一个空白
  • 在实体框架代码优先中为同一个表定义多个外键

    我的 MVC 应用程序中有两个实体 我使用 Entity Framework 6 Code First 方法填充数据库 Student实体中有两个city id 其中一个用于出生城市 另一个用于工作城市 当我按上面定义外键时 迁移后会在 S
  • 来自task_struct的完整进程名称

    我想从中获取完整的进程名称struct task struct The comm字段仅存储 16 个字符 而进程名称可以更长 有没有办法获得完整的进程名称 这可以通过获取来完成struct vm area struct from task
  • QGLWidget 比 QWidget 慢

    问题主要是在标题中确定的 我尝试了 Qt 的示例 二维绘画 http harmattan dev nokia com docs library html qt4 opengl 2dpainting html 并注意到 如果我尝试在 QGLW