我将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图像。
但是,我确实将最小和最大滤镜设置为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通道。多个移动图层相互叠加,实现了我想要的效果。
我的交换或创建有明显的错误吗?另外,根据我已经进行的优化,我还能做些其他有用的事情吗?
答案 0 :(得分:0)
通过消除和组合一些资源映像,我能够将性能提高约10%。主要是将glClear设置为最远图像的颜色(减少绘制资源),然后将图像与顶部的Alpha通道重叠。我的GUI非常依赖Alpha通道,因此,即使调用次数减少一次,也会对软件渲染产生影响。