모질라는 하드웨어 가속 렌더링을 NPAPI 플러그인으로 가능하게하는 AsyncDrawing API,을 공개합니다.
NPDrawingModelAsyncWindowsSharedSurface 모드에서 Vista 이상이 필요하지만
NPDrawingModelAsyncBitmapSurface은 Windows XP에서도 작동합니다. ,
는 플러그인이 비트 맵을 그릴 방어 적이기 사용하고 픽셀에 루프 기능 drawAsyncBitmapColor에
그러나 그들의 sample code에, : Mozilla NPAPI AsyncDrawing에서 NPDrawingModelAsyncBitmapSurface를 사용하는 것은 무엇입니까?
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;
}
그것이 비싼 복사 뜻은 CPU에 의해 수행, 그리고해야 GPU?
NPDrawingModelAsyncBitmapSurface를 사용하여 하드웨어 가속을 사용할 수 없다는 의미입니까?
감사
그렇다면 일반적인 창없는 플러그인 드로잉 (브라우저에서 제공 한 HDC로 대체)으로 전환하지 않으시겠습니까? – Gil
HDC는 브라우저와 공유되어 플러그인이 적절한 렌더링을 위해 기다릴 수 있어야합니다. 비동기 표면을 사용하면 플러그인이 브라우저에 현재 표면이 무엇인지 알려주고 브라우저가 적합하다고 생각하는대로 사용할 수 있습니다. –