Данные DirectFB из буфера памяти

Мне нужен очень быстрый способ отображения буфера данных на экране. Сначала я попытался получить доступ к фреймбуферу Linux, и это оказалось неплохо. Затем я узнал о DirectFB, и мне понравились дополнительные функции, которые он предоставляет (например, быстрый memcpy, изменение размера изображений на лету, отсутствие необходимости в дополнительном коде и т. Д.). Но тут я наткнулся на загвоздку - все примеры относятся к изображениям, загружаемым из файлов. Насколько я могу судить, для его типа DataBuffer нет примеров / руководств. После просмотра документации и исходного кода мне удалось скомпилировать что-то вроде этого:

DFBSurfaceDescription sdsc;
DFBDataBufferDescription ddsc;
DFBDataBufferDescriptionFlags ddscf = (DFBDataBufferDescriptionFlags)DBDESC_MEMORY;
IDirectFBDataBuffer *dbuffer;
IDirectFBImageProvider *provider;

ddsc.flags = ddscf;
ddsc.file = NULL;
ddsc.memory.data = m_z;
ddsc.memory.length = 640*480;

DFBCHECK (DirectFBInit (&argc, &argv));
DFBCHECK (DirectFBCreate (&dfb));
DFBCHECK (dfb->SetCooperativeLevel (dfb, DFSCL_FULLSCREEN));
sdsc.flags = DSDESC_CAPS;
sdsc.caps  = (DFBSurfaceCapabilities)(DSCAPS_PRIMARY | DSCAPS_FLIPPING);
DFBCHECK (dfb->CreateSurface( dfb, &sdsc, &primary ));
DFBCHECK (primary->GetSize (primary, &screen_width, &screen_height));

DFBCHECK (dfb->CreateDataBuffer(dfb, &ddsc, &dbuffer));
DFBCHECK (dbuffer->CreateImageProvider(dbuffer, &provider));
DFBCHECK (provider->GetSurfaceDescription (provider, &sdsc));

DFBCHECK (dfb->CreateSurface( dfb, &sdsc, &fbwindow ));
DFBCHECK (provider->RenderTo (provider, fbwindow, NULL));
provider->Release (provider);

Итак, в основном я создаю DataBuffer из DFB, затем ImageProvider из DataBuffer и устанавливаю его для рендеринга на поверхности. Однако, когда я запускаю его, он выдает ошибку:

(#) DirectFBError [dbuffer->CreateImageProvider(dbuffer, &provider)]: No (suitable) implementation found!

Действительно ли метод не реализован? В настоящее время я использую DirectFB 1.4, из документации API функция должна быть там. При этом, знает ли кто-нибудь, как получить буфер (char * 640 * 480 * 4 RGBA) из памяти для рендеринга во фреймбуфер с помощью DirectFB?

Спасибо.

5
задан John S 25 October 2011 в 11:02
поделиться