一个测试surfaceflinger的小程序

程序放在Android4.2的源码目录中能编译通过,也可以执行。本人所期待的结果是在android模拟器的屏幕上显示一个圆,但是实际上什么都没有显示!问题出在哪里?我把程序贴上!求大侠赐教!

Android.mk文件

LOCAL_PATH:= $(call my-dir)
include $(CLEAR_VARS)
uses-permission android:name="android.permission.ACCESS_SURFACE_FLINGER"
LOCAL_SRC_FILES:= \
        main.cpp

LOCAL_SHARED_LIBRARIES := \
                 libcutils \
                 libandroidfw \
                 libutils \
                 libbinder \
                 libui \
                 libskia \
                 libgui


LOCAL_MODULE:= test-sf

LOCAL_MODULE_TAGS := optional

include $(BUILD_EXECUTABLE)

main.cpp文件

#include <sys/types.h>
#include <sys/stat.h>
#include <sys/mman.h>
#include <fcntl.h>
#include <dirent.h>
#include <unistd.h>
#include <string.h>
#include <linux/fb.h>

#include <binder/IPCThreadState.h>
#include <binder/ProcessState.h>
#include <binder/IMemory.h>
#include <binder/IPCThreadState.h>
#include <binder/IServiceManager.h>
#include <binder/MemoryHeapBase.h>
#include <binder/MemoryBase.h>
#include <binder/Binder.h>
#include <utils/Log.h>

#include <cutils/atomic.h>
#include <cutils/properties.h>
#include <utils/threads.h>
#include <utils/Atomic.h>
#include <utils/String16.h>
#include <android_runtime/AndroidRuntime.h>

#include <media/AudioTrack.h>

#include <gui/Surface.h>
#include <gui/ISurface.h>
#include <gui/ISurfaceComposer.h>
#include <gui/SurfaceComposerClient.h>
#include <ui/DisplayInfo.h>

#include <core/SkTypeface.h>
#include <core/SkTemplates.h>
#include <core/SkRegion.h>
#include <core/SkDevice.h>
#include <core/SkRect.h>
#include <core/SkCanvas.h>
#include <core/SkBitmap.h>
#include <core/SkStream.h>
//#include <images/SkImageDecoder.h>
//#include <images/SkImageEncoder.h>

using namespace android;

int main()
{
        //sp<ProcessState> proc(ProcessState::self());
        //ProcessState::self()->startThreadPool();
        //IPCThreadState::self()->joinThreadPool();
        sp<SurfaceControl> surfaceControl;
        sp<SurfaceComposerClient> surfaceclient;
        sp<Surface> surface;
        SkBitmap bitmap;
        Surface::SurfaceInfo info;
        DisplayInfo display;
        SkPaint paint;
        paint.setARGB(255, 255, 0, 0);

        surfaceclient = new SurfaceComposerClient();
        surfaceclient->getDisplayInfo(0, &display);
        surfaceControl = surfaceclient->createSurface(String8("test"), display.w, display.h, PIXEL_FORMAT_RGBA_8888);

        surfaceclient->openGlobalTransaction();
        surfaceControl->setLayer(0x40000000);
        surfaceControl->setSize(display.w, display.h);
        surfaceControl->setPosition(0, 0);
        surfaceControl->show( );
        surfaceclient->closeGlobalTransaction();

        surface = surfaceControl->getSurface();

        surface->lock(&info);
        bitmap.setConfig(SkBitmap::kARGB_8888_Config, 200, 200);
        bitmap.setIsOpaque(true);
        bitmap.setPixels(info.bits);
        SkCanvas* canvas = new SkCanvas(bitmap);
        canvas->drawCircle(640, 260, 100, paint);
        surface->unlockAndPost();
        sleep(3);

        return 0;
}


进展:

    上面的问题还是没能解决!原本想用skia来画图的,只是想验证surfaceflinger的功能!貌似android4.2用HWUI代替了skia。skia的接口没研究过,不会使用。移植工作进行中,暂时没时间去研究skia,所以只能从现有的东西上修改了!站在巨人的肩膀上,恩!翻了一下开机动画bootanimation的代码,发现它是用opengl接口画图的,无所谓,把它不必要的功能砍掉做成自己的测试程序,OK!成功显示自己的图片了!


评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值