使用随机生成的矢量颜色更新屏幕像素颜色

时间:2013-06-09 11:21:22

标签: c++ opengl

我将显示圈分为16段。我需要更新每个段读取随机生成的颜色矢量。我圈子的每一段都是22.5,即100 * 360圈= 2250像素。 当我搜索我将使用的函数是glDrawPixels()。虽然,我还不确定。 你能给我一个示例代码来了解我如何生成我的颜色向量并使用此向量更新我的圆段2250像素。此外,我不知道从哪里开始更新片段,它是真实的还是会更新为纹理!

我也使用了这段代码,但是给出了分段错误:

void GlWidget::displayColors()
{
    //Create some nice colours (3 floats per pixel) from data -10..+10
    int size = 2250;
    float* pixels = new float[size*3];

      for(int i=0;i<size;i++) {
          pixels[0] = 1;
                   pixels[1] = 1;
                             pixels[2] = 1;
      }

      glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

      glDrawPixels(width(),height(),GL_RGB,GL_FLOAT,pixels);

    //  glutSwapBuffers();
}

2 个答案:

答案 0 :(得分:0)

要理解你想要做什么是非常困难的,但我会提供一般建议......

在大多数平台上,OpenGL是硬件加速的,并且比仅仅显示像素以显示内存要快得多,因此几乎不需要渲染部分屏幕。有极少数例外,但是如果您遇到性能问题而无法解决优化OpenGL管道的问题,则应该考虑这样做。

答案 1 :(得分:0)

绘制100个圆圈几乎不会对GPU征税。听起来这是一个不成熟的优化。我强烈建议您进行适当的性能分析,然后再使代码更加复杂,以尝试按照您的描述进行操作。

听起来您只是通过渲染已更改的显示部分来尝试优化绘图。这是GUI系统中缓冲区支持显示的常用优化方法。但是,使用OpenGL渲染时并不常见。通常你会为每一帧渲染整个场景。

此外,glReadPixels()非常昂贵的操作。它基本上会停止渲染管道并将渲染缓冲区从GPU读回到主存储器中,这相对较慢。这几乎肯定不是你想要做的。

如果确实需要优化绘图,您可以将绘图缓存到纹理中,然后每帧渲染四边形纹理。但首先,确保真正值得付出额外的努力和复杂性。

OpenGL和性能分析方面有一些好的书籍和在线资源。绝对值得做一些研究,以便在你试图节省一些时间之前节省一些时间。 :)