Какая польза от NPDrawingModelAsyncBitmapSurface в Mozilla NPAPI AsyncDrawing?

Mozilla предоставляет API-интерфейс AsyncDrawing, который обеспечивает аппаратное ускорение рендеринга в плагине NPAPI.
В то время как режим NPDrawingModelAsyncWindowsSharedSurface требует Vista и выше,
NPDrawingModelAsyncBitmapSurface работает также в Windows XP.
Но в их примере кода, в функции drawAsyncBitmapColor,
плагин использует memcpy и циклы на пикселях для рисования растрового изображения:

void drawAsyncBitmapColor(InstanceData* instanceData)
{
  NPP npp = instanceData->npp;

  uint32_t *pixelData = (uint32_t*)instanceData->backBuffer->bitmap.data;

  uint32_t rgba = instanceData->scriptableObject->drawColor;

  unsigned char subpixels[4];
  subpixels[0] = rgba & 0xFF;
  subpixels[1] = (rgba & 0xFF00) >> 8;
  subpixels[2] = (rgba & 0xFF0000) >> 16;
  subpixels[3] = (rgba & 0xFF000000) >> 24;

  subpixels[0] = uint8_t(float(subpixels[3] * subpixels[0]) / 0xFF);
  subpixels[1] = uint8_t(float(subpixels[3] * subpixels[1]) / 0xFF);
  subpixels[2] = uint8_t(float(subpixels[3] * subpixels[2]) / 0xFF);
  uint32_t premultiplied;
  memcpy(&premultiplied, subpixels, sizeof(premultiplied));

  for (uint32_t* lastPixel = pixelData + instanceData->backBuffer->size.width * instanceData->backBuffer->size.height;
    pixelData < lastPixel;
    ++pixelData) {
    *pixelData = premultiplied;
  }

  NPN_SetCurrentAsyncSurface(npp, instanceData->backBuffer, NULL);
  NPAsyncSurface *oldFront = instanceData->frontBuffer;
  instanceData->frontBuffer = instanceData->backBuffer;
  instanceData->backBuffer = oldFront;
}

Означает ли это, что дорогостоящее копирование должно выполняться процессором, а не графическим процессором?
Означает ли это, что NPDrawingModelAsyncBitmapSurface не позволяет использовать аппаратное ускорение?

Спасибо

1 ответ

Решение

Означает ли это, что дорогостоящее копирование должно выполняться процессором, а не графическим процессором? Означает ли это, что NPDrawingModelAsyncBitmapSurface не позволяет использовать аппаратное ускорение?

Да и да. Поверхности с аппаратным ускорением требуют реализаций, специфичных для платформы, и, следовательно, представляют собой простую поверхность растрового изображения как запасной вариант.

Другие вопросы по тегам