带纹理四边形的glDrawPixels优化

时间:2013-09-03 12:41:03

标签: c opengl optimization textures gldrawpixels

我有一个系统,每当redraw()完成执行时,我会在分配的内存中缓存每个窗口的后台缓冲区。后缓冲区存储为unsigned long数组,内容读入如下,并使用glDrawPixels()调用内容;

{
    unsigned long *buffer;

    buffer = ( unsigned long * )malloc( imgW * imgH );
    redraw();
    glFinish(); 
    glReadPixels( 0, 0, imgW, imgH, GL_RGBA, GL_UNSIGNED_BYTE, buffer );

}

我希望优化这个过程。据我所知,通过用纹理四边形替换glDrawPixels(),在大多数系统上,该过程应该更快。然而,我的窗口并不总是在POT中。经过简短的研究,人们似乎使用了这三种方法。

  1. GL_TEXTURE_RECTANGLE_ARB /(GL_TEXTURE_RECTANGLE?)
  2. 将图片的画布大小设为POT图像,而扩展部分则用其他颜色填充。
  3. 将您的图像分解为较小的POT属性图块,然后相应地重新构建它们。
  4. 我的问题是这些。

    1. 大多数人会采用哪种方法?目前,我倾向于第一个。虽然,我认为它对旧的显卡不太友好?
    2. GL_TEXTURE_RECTANGLE和GL_TEXTURE_RECTANGLE_ARB之间有什么区别?
    3. 这会影响我在读取的缓冲区中的多重采样功能吗?我认为在所有绘图函数中计算多重采样,这应该就像复制结果像素一样?
    4. 如果我想输出作为图像缓存的内容以用于调试目的,应该如何处理该方法?
    5. 还有更多方法,我还可以优化glDrawPixels(),但不允许使用FBO或PBO吗?

0 个答案:

没有答案