我正在使用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频道,因此即使是一个较少的吸引电话也会影响软件渲染。