Мне нужен очень быстрый способ отображения буфера данных на экране. Сначала я попытался получить доступ к кадровому буферу 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?
Спасибо.