【发布时间】:2014-06-20 12:34:52
【问题描述】:
我得到了directfb image example,我正在尝试对图像进行blit,如here 所述。所以,这是我的代码:
#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 ); \
} \
}
/* reflection against y */
static int DFB_FIXED_POINT_ONE = 1;
static const s32 mat_y[9] = {
-DFB_FIXED_POINT_ONE, 0, 0,
0, DFB_FIXED_POINT_ONE, 0,
0, 0, DFB_FIXED_POINT_ONE
};
static IDirectFBSurface *logo = NULL;
int main(int argc, char **argv) {
int i;
DFBSurfaceDescription dsc;
IDirectFBImageProvider *provider;
DFBCHECK(DirectFBInit (&argc, &argv));
DFBCHECK(DirectFBCreate (&dfb));
DFBCHECK(dfb->SetCooperativeLevel (dfb, DFSCL_FULLSCREEN));
dsc.flags = DSDESC_CAPS;
dsc.caps = DFBSurfaceCapabilities(DSCAPS_PRIMARY | DSCAPS_FLIPPING);
DFBCHECK(dfb->CreateSurface( dfb, &dsc, &primary ));
DFBCHECK(primary->GetSize (primary, &screen_width, &screen_height));
DFBCHECK(dfb->CreateImageProvider (dfb, "iconC.png", &provider));
DFBCHECK(provider->GetSurfaceDescription (provider, &dsc));
DFBCHECK(dfb->CreateSurface( dfb, &dsc, &logo ));
DFBCHECK(provider->RenderTo (provider, logo, NULL));
provider->Release(provider);
for (i = -dsc.width; i < screen_width; i++) {
DFBCHECK(primary->SetRenderOptions(primary, DSRO_MATRIX));
DFBCHECK(primary->SetMatrix(primary, mat_y));
DFBCHECK(primary->FillRectangle (primary, 0, 0, screen_width, screen_height));
DFBCHECK(primary->Blit (primary, logo, NULL, i, (screen_height - dsc.height) / 2));
DFBCHECK(primary->Flip (primary, NULL, DSFLIP_WAITFORSYNC));
usleep(1000*10); // 10 microseconds
}
logo->Release(logo);
primary->Release(primary);
dfb->Release(dfb);
return 23;
}
这个程序的输出很多:
`(!!!) *** WARNING [rotation not yet implemented] *** [gfxcard.c:2075 in dfb_gfxcard_blit()]`
`(!!!) *** WARNING [rotation not yet implemented] *** [gfxcard.c:2075 in dfb_gfxcard_blit()]`
`(!!!) *** WARNING [rotation not yet implemented] *** [gfxcard.c:2075 in dfb_gfxcard_blit()]`
这是我的 DFB 版本的问题吗?我正在使用 DirectFB 1.4.11。
有没有办法让这个例子运行并blit图像?
*(顺便说一句,我不了解DFB_FIXED_POINT_ONE变量,所以我给它任何值试试)*
【问题讨论】:
-
出于好奇,您是如何编译 DirectFB 的?我已经尝试了多次,但都失败了(头文件没有正确安装)。我很想帮忙,但我什至无法编译!
-
据我记忆,它在 Ubuntu 10.10 中使用 DirectFB 1.4.11 编译没有问题。
-
您能否重复您下载和编译 DirectFB 所采取的确切步骤,以及您用于编译上述程序的步骤?顺便说一句,您使用较旧的 1.4.x 系列而不是较新的 1.6.x 系列是否有特殊原因?
-
对于我使用
g++ test.cpp -I /usr/local/include/directfb/ -L /usr/local/lib/directfb-1.4-5/ -ldirectfb的程序,对于DirectFB,如果真的有必要,我必须再做一次才能记住。我们正在使用这个版本的 DFB,因为它是一个旧项目,我们现在无法更新(并修复所有依赖项和新 API)。 -
嗯。得到它编译(看到stdio而不是iostream,假设它是C,你的例子清除了它),我现在得到一个错误,但它与你的不同。您是否尝试过在具有不同硬件的主机上构建/运行程序并查看是否收到相同的错误消息?