OpenGL: проблемы производительности рендеринга программного обеспечения Mesa3D за пределами экрана - PullRequest
0 голосов
/ 12 марта 2019

Я использую 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);
    }

Я думал о применении трафарета, но я не уверен, что это поможет производительности. Я почти уверен, что проблема связана с интенсивным использованием альфа-каналов с моими изображениями, которые я использую. Несколько движущихся слоев друг за другом с эффектами, которые я хотел.

Что-то не так с моей заменой или созданием, которая очевидна? Кроме того, основываясь на уже сделанных мною оптимизациях, могу ли я чем-нибудь помочь?

1 Ответ

0 голосов
/ 27 марта 2019

Мне удалось повысить производительность ~ 10%, исключив и прочесав некоторые изображения ресурсов. Главным образом, делая мой glClear цветом самого дальнего изображения (на один ресурс меньше для рисования), а затем накладывая мои изображения на альфа-каналы сверху. Мой графический интерфейс в значительной степени зависит от альфа-каналов, поэтому даже программный рендеринг оказывает меньшее влияние.

...