我使用Yocto作为嵌入式系统,使用OpenGL 2.1、GLEW 2.0.0和Mesa17.0.2。我正在通过HD/SDI将屏幕外的软件渲染到监视器上。我的问题是我的更新速度大约是1赫兹。在我的开发机器上,当Debian上的硬件加速被禁用时,我有大约20FPS。嵌入式机器没有那么强大,所以我理解性能的影响,但1FPS似乎有点低。对于我的优化,我禁用了:
glDiasble(GL_LINE_SMOOTH)
glDiasble(GL_POINT_SMOOTH)
glDiasble(GL_SMOOTH)
glDiasble(GL_MULTISAMPLE)
glShadeModel(GL_NONE)我没有任何剔除,因为我只使用2D图像。
但是,我将min和mag过滤器设置为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通道。一个接一个的多个移动层达到了我想要的效果。
我的交换或创建有什么明显的问题吗?另外,基于我已经做的优化,我还能做些什么来帮助你呢?
发布于 2019-03-27 20:44:12
通过删除和梳理一些资源图像,我能够将性能提高约10%。主要是,让我的glClear作为最远的图像的颜色(少绘制一个资源),然后在顶部用alpha通道重叠我的图像。我的GUI在很大程度上依赖于alpha通道,所以即使少一个绘图调用也会对软件渲染产生影响。
https://stackoverflow.com/questions/55122964
复制相似问题