画面にデータバッファを表示する非常に高速な方法が必要です。私は最初にLinuxフレームバッファにアクセスしようとしましたが、それは非常に優れていることがわかりました。次に、directFBについて学び、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!
メソッドは本当に実装されていませんか?私は現在DirectFB1.4を使用していますが、APIドキュメントから関数がそこにあるはずです。そうは言っても、DirectFBを使用してメモリからバッファ(char * 640 * 480 * 4 RGBA)を取得してフレームバッファにレンダリングする方法を知っている人はいますか?
ありがとう。