小编Mar*_*ang的帖子

与PBO异步glReadPixels

我想用两个PBO以另一种方式读取像素.我认为PBO方式会更快,因为glReadPixels在使用PBO时会立即返回,并且很多时间可以重叠.

奇怪的是似乎没有太大的好处.考虑一些代码,如:

    glBindBufferARB(GL_PIXEL_PACK_BUFFER_ARB, 0);
    Timer t; t.start();
    glReadPixels(0,0,1024,1024,GL_RGBA, GL_UNSIGNED_BYTE, buf);
    t.stop(); std::cout << t.getElapsedTimeInMilliSec() << " ";

    glBindBufferARB(GL_PIXEL_PACK_BUFFER_ARB, pbo);
    t.start();
    glReadPixels(0,0,1024,1024,GL_RGBA, GL_UNSIGNED_BYTE, 0);
    t.stop(); std::cout << t.getElapsedTimeInMilliSec() << std::endl;
Run Code Online (Sandbox Code Playgroud)

结果是

1.301 1.185
1.294 1.19
1.28 1.191
1.341 1.254
1.327 1.201
1.304 1.19
1.352 1.235
Run Code Online (Sandbox Code Playgroud)

PBO的方式有点快,但不是令人满意的立即回报.

我的问题是:

  • 影响glReadPixels表现的因素是什么?有些时候,它的成本达到10毫秒,但这里只有1.3毫秒.
  • 为什么立即返回成本高达1.2ms?是太大还是正常?

================================================== =========================

根据与演示的比较,我发现了两个因素:

  • GL_BGRA优于GL_RGBA,1.3ms => 1.0ms(无PBO),1.2ms => 0.9ms(使用pbo)
  • glutInitDisplayMode(GLUT_RGB | GLUT_ALPHA)而不是GLUT_RGBA,0.9ms => 0.01ms.这就是我想要的性能.在我的系统中,GLUT_RGBA = GLUT_RGB = 0.GLUT_ALPHA = 8

然后另外两个问题:

  • 为什么GL_BGRA比GL_RGBA好?是针对特定平台还是针对所有平台?
  • 为什么GLUT_ALPHA如此重要以至于它会极大地影响PBO的表现?

opengl glreadpixels pbo

8
推荐指数
1
解决办法
4914
查看次数

使用c函数时C ++中的命名空间

可能重复:
无法解析的重载函数类型c ++

考虑下面的代码片段:

#include <algorithm>
#include <cctype>
#include <string>
using namespace std;
void test(){
    std::string str = "Hello World!";
    std::transform(str.begin(), str.end(), str.begin(), tolower);
}
Run Code Online (Sandbox Code Playgroud)

tolower使用G ++编译时出现错误:未解析的重载函数

如果using namespace std;将其删除,则代码可以正常工作。

然后,我的问题是:

  • namespace std与C函数之间的关系是什么?
  • #include<ctype.h>和之间有什么区别#include<cctype>?尽管在以上示例中它们都不起作用。
  • 为什么std::tolower还不起作用?std::tolower和之间有什么区别tolower

c c++ namespaces

4
推荐指数
2
解决办法
2457
查看次数

标签 统计

c ×1

c++ ×1

glreadpixels ×1

namespaces ×1

opengl ×1

pbo ×1