2013-01-22 8 views
0

모질라는 하드웨어 가속 렌더링을 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를 사용하여 하드웨어 가속을 사용할 수 없다는 의미입니까?

감사

답변

1

는 비싼 복사 GPU를 CPU에 의해 수행, 그리고해야 의미합니까? NPDrawingModelAsyncBitmapSurface가 하드웨어 가속을 활용할 수 없다는 뜻입니까?

예 및 예. 하드웨어 가속 표면은 플랫폼 별 구현을 필요로하므로 평범한 비트 맵 표면을 대체로 사용합니다.

+0

그렇다면 일반적인 창없는 플러그인 드로잉 (브라우저에서 제공 한 HDC로 대체)으로 전환하지 않으시겠습니까? – Gil

+1

HDC는 브라우저와 공유되어 플러그인이 적절한 렌더링을 위해 기다릴 수 있어야합니다. 비동기 표면을 사용하면 플러그인이 브라우저에 현재 표면이 무엇인지 알려주고 브라우저가 적합하다고 생각하는대로 사용할 수 있습니다. –