代码是从网上找来的,URL我忘记了~~
在一个DFB的板子上运行这个程序,可以在屏幕上画一条直线,蓝色的。具体的DFB的程序我还没有分析,DFB的API我也不是很熟悉,只是记录在这里。方便使用。
至少可以作为DFB环境搭建是否成功的测试么~
#include<stdio.h>
#include<unistd.h>
#include<directfb/dfb_types.h>
#include<directfb/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__); \
} \
}
int main(int argc, char **argv)
{
DFBSurfaceDescription dsc;
DFBCHECK(DirectFBInit(&argc, &argv));
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;
}
Makefile,里面的变量自己根据实际情况进行改动
ROOTFS= ****
CC = ****-gcc
PROG_NAME = directfb_init
SRCS = main.c
OBJS = ${SRCS:.c=.o}
LIBS=gtk+-2.0
CFLAGS += -I${ROOTFS}/usr/include/directfb
LDFLAGS += -ldirectfb
LDFLAGS += -ldirect
LDFLAGS += -lfusion
LDFLAGS += -lz
all: ${PROG_NAME}
#${PROG_NAME}:${OBJS}
${PROG_NAME}:${SRCS}
${CC} --sysroot=${ROOTFS} -o ${PROG_NAME} $^ ${LDFLAGS} ${CFLAGS}
${OBJS}:${INCS}
.c.o:
${CC} -c {1}lt; ${LDFLAGS} ${CFLAGS}
clean:
rm -f *.o ${PROG_NAME}
rebuild: clean all
gcc的 --sysroot=dir 是指定根文件系统的路径,因为我用了交叉编译么~