問題なく起動するように DirectFB を起動できないようです。DFBCHECK (DirectFBCreate (&dfb)); の後に関数にアクセスしようとすると、「無効な引数」が表示されます。チュートリアルから簡単な例を実行しようとしています。コードは次のとおりです。
#include <stdio.h>
#include <unistd.h>
#include <directfb.h>
static IDirectFB *dfb = NULL;
static IDirectFBSurface *primary = NULL;
static int screen_width = 0;
static int screen_height = 0;
#define DFBCHECK(x...) \
{ \
DFBResult err = x; \
\
if (err != DFB_OK) \
{ \
fprintf( stderr, "%s <%d>:\n\t", __FILE__, __LINE__ ); \
DirectFBErrorFatal( #x, err ); \
} \
}
int main (int argc, char **argv)
{
int argx = 2;
char *argData[] = {"self","--dfb:system=fbdev,disable-module=keyboard,disable-module=joystick,no-hardware",0};
char **argPointer = argData;
DFBSurfaceDescription dsc;
DFBCHECK (DirectFBInit (&argx,&argPointer));
DFBCHECK (DirectFBCreate (&dfb));
DFBCHECK (dfb->SetCooperativeLevel (dfb, DFSCL_FULLSCREEN));
dsc.flags = DSDESC_CAPS;
dsc.caps = DSCAPS_PRIMARY | DSCAPS_FLIPPING;
DFBCHECK (dfb->CreateSurface( dfb, &dsc, &primary ));
DFBCHECK (primary->GetSize (primary, &screen_width, &screen_height));
DFBCHECK (primary->FillRectangle (primary, 0, 0, screen_width, screen_height));
DFBCHECK (primary->SetColor (primary, 0x80, 0x80, 0xff, 0xff));
DFBCHECK (primary->DrawLine (primary,
0, screen_height / 2,
screen_width - 1, screen_height / 2));
DFBCHECK (primary->Flip (primary, NULL, 0));
sleep (5);
primary->Release( primary );
dfb->Release( dfb );
return 23;
}
ご覧のとおり、ハードコードされた char* で引数を提供しています。これは、コマンドラインから起動しないコードから DirectFB を使用する予定があるためです。コードはコマンド「 gcc -I/usr/local/include/directfb dfbtest.c -o dfbtest -ldirectfb」でコンパイルされます
これにより、エラーが発生します。
~~~~~~~~~~~~~~~~~~~~~~~~~~| DirectFB 1.2.10 |~~~~~~~~~~~~~~~~~~~~~~~~~~
(c) 2001-2008 The world wide DirectFB Open Source Community
(c) 2000-2004 Convergence (integrated media) GmbH
----------------------------------------------------------------
(*) DirectFB/Core: シングル アプリケーション コア。(2012-05-21 06:43)
(*) Direct/Thread: Started 'VT Switcher' (3285) [CRITICAL OTHER/OTHER 0/0] <8388608>...
(*) Direct/Modules: モジュール 'joystick' を抑制
(*) Direct/Modules: モジュール 'keyboard' を抑制
(*) Direct/Thread: Started 'Linux Input' (-1) [INPUT OTHER/OTHER 0/0] <8388608>...
(*) DirectFB/入力: 蓋スイッチ (1) 0.1 (directfb.org)
(*) Direct/Thread: Started 'Linux Input' (-1) [INPUT OTHER/OTHER 0/0] <8388608>...
(*) DirectFB/入力: 電源ボタン (2) 0.1 (directfb.org)
(*) Direct/Thread: Started 'Linux Input' (-1) [INPUT OTHER/OTHER 0/0] <8388608>...
(*) DirectFB/入力: スリープ ボタン (3) 0.1 (directfb.org)
(*) Direct/Thread: Started 'Linux Input' (-1) [INPUT OTHER/OTHER 0/0] <8388608>...
(*) DirectFB/入力: 電源ボタン (4) 0.1 (directfb.org)
(*) Direct/Thread: Started 'Linux Input' (-1) [INPUT OTHER/OTHER 0/0] <8388608>...
(*) DirectFB/入力: Apple Computer Apple Internal K (5) 0.1 (directfb.org)
(*) Direct/Thread: Started 'Linux Input' (-1) [INPUT OTHER/OTHER 0/0] <8388608>...
(*) DirectFB/入力: Apple Computer Apple Internal K (6) 0.1 (directfb.org)
(*) Direct/Thread: Started 'Linux Input' (-1) [INPUT OTHER/OTHER 0/0] <8388608>...
(*) DirectFB/入力: Logitech USB-PS/2 オプティカル マウス (7) 0.1 (directfb.org)
(*) Direct/Thread: Started 'Linux Input' (-1) [INPUT OTHER/OTHER 0/0] <8388608>...
(*) DirectFB/入力: appletouch (8) 0.1 (directfb.org)
(*) Direct/Thread: Started 'Linux Input' (-1) [INPUT OTHER/OTHER 0/0] <8388608>...
(*) DirectFB/入力: applesmc (9) 0.1 (directfb.org)
(*) Direct/Thread: Started 'Linux Input' (-1) [INPUT OTHER/OTHER 0/0] <8388608>...
(*) DirectFB/入力: HDA Intel SPDIF In (10) 0.1 (directfb.org)
(*) Direct/Thread: Started 'Linux Input' (-1) [INPUT OTHER/OTHER 0/0] <8388608>...
(*) DirectFB/入力: HDA Intel Line (11) 0.1 (directfb.org)
(*) Direct/Thread: Started 'Linux Input' (-1) [INPUT OTHER/OTHER 0/0] <8388608>...
(*) DirectFB/入力: HDA Intel Headphone (12) 0.1 (directfb.org)
(*) Direct/Thread: Started 'PS/2 Input' (-1) [INPUT OTHER/OTHER 0/0] <8388608>...
(*) DirectFB/入力: IMPS/2 マウス (1) 1.0 (directfb.org)
(*) Direct/Thread: Started 'PS/2 Input' (-1) [INPUT OTHER/OTHER 0/0] <8388608>...
(*) DirectFB/入力: IMPS/2 マウス (2) 1.0 (directfb.org)
(*) DirectFB/Genefx: MMX が検出され、有効になっている
(*) DirectFB/Graphics: MMX Software Rasterizer 0.6 (directfb.org)
(*) DirectFB/Core/WM: デフォルト 0.3 (directfb.org)
(*) FBDev/Surface: オフセット 0 とピッチ 5888 で 640x480 32 ビット LUT8 バッファー (インデックス 0) を割り当てます。
(*) FBDev/Mode: 640x480 LUT8の設定
(*) FBDev/Mode: 8 ビット (LUT8)、ピッチ 5888 で 640x480 (仮想 640x480) に切り替え dfbtest.c <30>:
(#) DirectFBError [dfb->SetCooperativeLevel (dfb, DFSCL_FULLSCREEN)]: Invalid argument!
(!!!) * 警告 [DirectFB の初期化を解除せずにアプリケーションが終了しました!] * [../../../src/core/core.c:859 in dfb_core_deinit_check()]
さらにデバッグする方法についてのアイデアをいただければ幸いです。これをUbuntu 12で実行しています。Radeonチップを搭載した古いMacBook Proを使用しています。これをコンソールまたは X11 で実行しても、結果は同じです。フレームバッファが起動するように画面がちらつきますが、この setcooperativelevel 呼び出しでクラッシュします。