Я использую Yocto как встроенную систему с OpenGL 2.1, GLEW 2.0.0 и Mesa 17.0.2. Я программное обеспечение рендеринга с экрана на монитор через HD / SDI. У меня проблема с частотой обновления около 1 герц. На моей машине для разработки у меня около 20 FPS, когда аппаратное ускорение отключено в Debian. Встраиваемая машина не такая мощная, поэтому я понимаю снижение производительности, но 1 FPS кажется немного низким. Для моей оптимизации я отключил:
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);
}
Я думал о применении трафарета, но я не уверен, что это поможет производительности. Я почти уверен, что проблема связана с интенсивным использованием альфа-каналов с моими изображениями, которые я использую. Несколько движущихся слоев друг за другом с эффектами, которые я хотел.
Что-то не так с моей заменой или созданием, которая очевидна? Кроме того, основываясь на уже сделанных мною оптимизациях, могу ли я чем-нибудь помочь?