- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
既然除了窗口大小之外什么都没有变化,我的程序需要一个完整的核心来在最大化的窗口上渲染场景是否正常?
我在 Windows 上使用 C++ 语言的 Qt 4.7 绘制 150 张尺寸为 1754*1240 的图片(组件为 RGBA,每一个字节)。我像这样加载我的纹理:
glGenFramebuffers(TDC_NB_IMAGE, _fborefs);
glBindFramebuffer(GL_FRAMEBUFFER, _fbo);
//initialize tex
glGenTextures(TDC_NB_IMAGE, _picrefs);
for (int i = 0 ; i < TDC_NB_IMAGE ; i++)
{
qDebug() << "loading texture num : " << i;
_pics[i].scale = 1.f;
_pics[i].pos.rx() = i % ((int)sqrt((float)TDC_NB_IMAGE));
_pics[i].pos.ry() = i / ((int)sqrt((float)TDC_NB_IMAGE));
_pics[i].text.load("imgTest.png");
glBindTexture(GL_TEXTURE_2D, _picrefs[i]);
glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP );
glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP );
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);//GL_LINEAR_MIPMAP_LINEAR
glTexImage2D (GL_TEXTURE_2D, 0, GL_COMPRESSED_RGBA_S3TC_DXT5_EXT,
TDC_IMG_WIDTH, TDC_IMG_HEIGHT, 0, GL_BGRA_EXT, GL_UNSIGNED_BYTE,
_pics[i].text.toImage().bits()
);
//glGenerateMipmap(GL_TEXTURE_2D);
glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, _picrefs[i], 0);
}
glBindFramebuffer(GL_FRAMEBUFFER, 0);
我这样画我的场景:
glBindFramebuffer(GL_FRAMEBUFFER, _fbo);
glClear( GL_COLOR_BUFFER_BIT);
//for each image
for (int i = 0 ; i < TDC_NB_IMAGE ; i++)
{
//compute coords
if (_update)
{
//pos on 0,0
_pics[i].quad.topleft.rx() = 0;
_pics[i].quad.topleft.ry() = 0;
_pics[i].quad.topright.rx() = TDC_IMG_WIDTH;
_pics[i].quad.topright.ry() = 0;
_pics[i].quad.botright.rx() = TDC_IMG_WIDTH;
_pics[i].quad.botright.ry() = TDC_IMG_HEIGHT;
_pics[i].quad.botleft.rx() = 0;
_pics[i].quad.botleft.ry() = TDC_IMG_HEIGHT;
//translate
QPointF dec(0, 0);
dec.rx() = _pics[i].pos.x() * TDC_IMG_WIDTH + _pics[i].pos.x() * TDC_SPACE_IMG;
dec.ry() = _pics[i].pos.y() * TDC_IMG_HEIGHT + _pics[i].pos.y() * TDC_SPACE_IMG;
_pics[i].quad.topleft += dec;
_pics[i].quad.topright += dec;
_pics[i].quad.botright += dec;
_pics[i].quad.botleft += dec;
//scale
_pics[i].quad.topleft *= _globalScale;
_pics[i].quad.topright *= _globalScale;
_pics[i].quad.botright *= _globalScale;
_pics[i].quad.botleft *= _globalScale;
_update = false;
}
//prepare tex drawing
//draw drawing area
glBindTexture (GL_TEXTURE_2D, 0);
glBegin (GL_QUADS);
glTexCoord2f (0.0, 0.0);glVertex3f (_pics[i].quad.topleft.x(), _pics[i].quad.topleft.y(), 0);
glTexCoord2f (1.0, 0.0);glVertex3f (_pics[i].quad.topright.x(), _pics[i].quad.topright.y(), 0);
glTexCoord2f (1.0, 1.0);glVertex3f (_pics[i].quad.botright.x(), _pics[i].quad.botright.y(), 0);
glTexCoord2f (0.0, 1.0);glVertex3f (_pics[i].quad.botleft.x(), _pics[i].quad.botleft.y(), 0);
glEnd();
//draw texture
glBindTexture (GL_TEXTURE_2D, _picrefs[i]);
glBegin (GL_QUADS);
glTexCoord2f (0.0, 0.0);glVertex3f (_pics[i].quad.topleft.x(), _pics[i].quad.topleft.y(), 0);
glTexCoord2f (1.0, 0.0);glVertex3f (_pics[i].quad.topright.x(), _pics[i].quad.topright.y(), 0);
glTexCoord2f (1.0, 1.0);glVertex3f (_pics[i].quad.botright.x(), _pics[i].quad.botright.y(), 0);
glTexCoord2f (0.0, 1.0);glVertex3f (_pics[i].quad.botleft.x(), _pics[i].quad.botleft.y(), 0);
glEnd();
}
glBindFramebuffer(GL_FRAMEBUFFER, 0);
经过一些基准测试后,CPU 使用率过高似乎来自“//draw texture” block 。实际上,有时需要 0ms,有时需要 400ms。总体而言,paintGL 函数在窗口最大化时需要 5 秒来渲染场景,而在窗口为 800*600 大小时接近于 0。
我在渲染过程中更改比例(仅修改 _globalScale),因此无论窗口大小如何,我都可以看到 150 张图片。图片的比例不会改变 CPU 使用率。
我在 2 周前开始使用 OpenGL,所以我肯定错过了文档和教程中的某些内容。但即使我再次阅读它们,我也找不到解释和渲染这 150 张图片的其他方法。
将来可以使用绘图板甚至鼠标修改图片(更准确地说是这张图片的一层,这意味着更多纹理),所以我需要提高速度。
最佳答案
加载图像的缩小版本以实现快速渲染和低内存压力。然后,当您放大图像的特定子集时,您可以加载全分辨率图像并显示它们而不是低分辨率纹理。
关于c++ - 绘制 gl 场景时 CPU 使用率高;起源?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7902273/
我们有一个 SQL 服务器,其中包含大约 40 个不同的数据库(每个数据库大约 1-5GB)。该服务器是8核2.3G CPU和32Gigs RAM。 27Gig 固定到 SQL Server。 CPU
我通过创建一个简单的循环并在数组中添加元素来测试 Java 8 并行流 API 的性能。 与非并行相比,我获得了巨大的性能提升。 但是当我检查我的任务管理器时,我看到了一个不受控制的 CPU 使用率,
我在使用 JFX 应用程序时遇到了一些问题。在我的本地开发系统(Linux)上,我的应用程序的 CPU 使用率约为 0-2%。当我在客户 Windows 虚拟机系统上安装并运行我的应用程序时,CPU
我在 unix 上工作。我想知道进程当前的 cpu 使用情况。我知道 ps 给出了在进程启动之前使用的 cpu 平均值 - 这不是当前使用情况。 有没有办法从 top 命令只打印 cpu 而无需 10
我尝试对许多文件进行哈希处理,但它没有使用满 CPU 能力。它只消耗25%。我测试将繁重的进程移动到线程中。但仍然没有什么不同。我来自 nodejs 使用 sharp 库。有同样的任务。它消耗所有的C
有没有办法在 CentOS 中获取 CPU 使用率?我需要解析这些信息并将其从 Perl 脚本中绘制出来,因此它最好是一个简单的工具,可以打印出一个单一的输出。 最佳答案 更简单,看/proc/loa
早上好。 目前我正在 Ubuntu 服务器 11.10 中运行 Java Web 应用程序。对于我的 Java 应用程序,我使用的是 apache、tomcat 和 mysql。 在过去的几周里,我的
我想做的事 我有一个计算密集型 OCaml 应用程序,我希望它在后台运行而不影响正常的计算机使用。我想为用户提供两个选项: (1) 应用程序仅在 CPU 使用率几乎为 0% 时运行; (2) 应用程序
我使用Couchdb创建了一个私有(private)NPM镜像,但我发现beam.smp将我的 CPU 使用率保持在 100%,有没有办法降低它,比如 50%? 非常感谢你。 最佳答案 您不能直接限制
我正在 docker 容器内构建一个项目,在创建容器时没有任何资源限制。当我监控它时,我看到了不同的 CPU 使用率结果。 来自 ctop 来自 Grafana(全节点导出器图表) 来自 cAdvis
我需要在 Web 开发编码 session 期间收集有关 Firefox CPU 使用率的数据,我想知道是否可以监视特定 firefox 插件的 CPU 使用率。 现在我正在使用 windows 的
R 是单线程的。 使用 R,如何检查 Windows 和 Linux 中有多少内核/线程正在运行 R? (或运行了多少卢比) 使用 R,如何检查 Windows 和 Linux 中运行 R 的每个内核
我正在尝试像示例中那样测试 Kubernetes HPA here kubectl run php-apache --image=gcr.io/google_containers/hpa-exampl
在我们的办公室,我们有一个开发服务器:Win 2k8 server R2 - Coldfusion 9(.0.0) - MySQL 5 ... 几乎每天早上上类时,我都会发现服务器的 CPU 为 50
我有一组 cpu 消耗执行,每个执行都在低优先级的线程中运行。这些线程将在一个进程(如 IIS)中运行,该进程具有许多我不想减慢它们速度的其他线程。我想计算所有其他线程的 cpu 使用率,如果它大于
我是 azure 云的新手,我已经部署了我的第一个辅助角色。 在我的本地系统中需要 30 分钟才能完成的过程在 azure 辅助角色上需要 1 个多小时。 为了查找问题,我已访问辅助角色的远程桌面。我
这是我的测试 boost::tribool 示例: #include #include "boost/logic/tribool.hpp" int main() { boost::logic::tr
我正在使用 docker 远程 API 来检索正在运行的容器的统计信息。对于 CPU 使用情况,我得到的例子是: "cpu_stats": { "cpu_usage": { "to
我是 azure 云的新手,我已经部署了我的第一个辅助角色。 在我的本地系统中需要 30 分钟才能完成的过程在 azure 辅助角色上需要 1 个多小时。 为了查找问题,我已访问辅助角色的远程桌面。我
我知道意外的无限循环通常会导致 CPU 使用率较高。但是,我不太明白为什么。谁能给我解释一下吗? 最佳答案 CPU 在执行该循环(永远不会结束)时无法执行任何其他操作。即使您使用的是抢占式多任务系统(
我是一名优秀的程序员,十分优秀!