我需要一种将数据缓冲区显示到屏幕的非常快速的方法。我首先尝试访问 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);
所以基本上我从 DFB 创建一个 DataBuffer,然后从 DataBuffer 创建一个 ImageProvider 并将其设置为在表面上渲染。但是,当我运行它时,它会引发错误:
(#) DirectFBError [dbuffer->CreateImageProvider(dbuffer, &provider)]: No (suitable) implementation found!
方法真的没有实现吗?我目前正在使用 DirectFB 1.4,从 API 文档中该函数应该在那里。话虽如此,有谁知道如何从内存中获取缓冲区(char * 640 * 480 * 4 RGBA)以使用DirectFB渲染到帧缓冲区?
谢谢。