OpenGL:MESA3D屏幕上的软件渲染性能问题

OpenGL: Mesa3D Offscreen Software Rendering Performance Issues

本文关键字:性能 问题 软件 MESA3D 屏幕 OpenGL      更新时间:2023-10-16

我正在使用yocto用作openGL 2.1,glew 2.0.0和mesa 17.0.2的嵌入式系统。我正在通过HD/SDI将屏幕渲染到显示器的软件。我遇到的问题是我的更新率约为1赫兹。在我的开发机器上,当Debian禁用硬件加速度时,我将有大约20 fps。嵌入式机器不那么强大,因此我了解性能命中,但是1 fps似乎有点低。为了优化我禁用:

glDiasble(GL_LINE_SMOOTH)
glDiasble(GL_POINT_SMOOTH)
glDiasble(GL_SMOOTH)
glDiasble(GL_MULTISAMPLE)
glShadeModel(GL_NONE)

我没有任何淘汰,因为我只使用2D图像。

但是,我确实将Min和Mag Filter设置为GL_NEAREST。

我的缓冲区交换和上下文创建类似:

        bool makeContext()
        {
            width = 1280;
            height = 720;
            context = OSMesaCreateContextExt(OSMESA_RGBA, 0, 0, 0, NULL);
            if(!context)
            {
              //...
              return false;
            }
            bufferSize = width * height * 4 * sizeof(GL_UNSIGNED_BYTE);
            frameBuffer = (char*)mallic(bufferSize);
            frameBuffer = (char*)0_buf_baseaddr;
            if(!OSMesaMakeCurrent(context, frameBuffer, GL_UNSIGNED_BYTE, width, height));
            {
               //...
               return false;
            }
            OSMesaPixelStore(OSMESA_Y_UP, 0)
            {
              //...
            }
            return true;
         }
void swapBuffers()
    {
      frameBuffer = (char*) swap_page(); //returns a spot in memory with update
      OSMesaMakeCurrent(context, frameBuffer, GL_UNSIGNED_BYTE, width, height);
    }

我正在考虑应用刻板,但我不确定这是否有助于表演。我几乎可以肯定的是,问题源于我正在使用的图像中大量使用Alpha通道。我想要的效果彼此之间的多个移动层。

我的交换或创作有什么问题吗?另外,根据我已经进行的优化,我还能做任何其他可能会有所帮助的吗?

我能够通过消除和梳理一些资源图像来提高性能〜10%。主要是,使我的glclear成为我最远的图像的颜色(一个少绘制的资源),然后用顶部的alpha通道重叠。我的GUI很大程度上依赖Alpha频道,因此即使是一个较少的吸引电话也会影响软件渲染。