Adreno sdk之framework介绍



  • 大家好,今天小白给大家简单介绍下Adreno sdk的framework相关的内容,欢迎一起交流学习。

    一、Adreno SDK Framework


    为了方便快捷的创建一个3D应用,Adreno SDK提供了一整套的Framework设计,基于此框架用户可以很轻松的开发出OpenGLES2/3的应用。同时SDK中还提供基于此框架的大量示例代码,以供大家学习使用。

    二、Framework简介


    此Framework通过对硬件以及操作系统的抽象,为OpenGLES的开发提供一个平台无关的基础平台,包括对一些硬件的初始化、本地显示的连接等。另外,还提供访问资源的接口,比如纹理、图像、字体库、几何网格等。 
    Framework的代码结构设计非常合理,把平台相关的代码独立出来,放到特定的目录下。同时,基础类也被设计成易于与其他框架集成的结构。 
    如果,大家有兴趣可以读一下Framework的代码(Development\Samples\Framework)。

    三、Framework基础用法

    1、定义应用主框架类


    继承自CFrmApplication的框架类,可以监听并处理Resize事件,构建、更新、销毁场景,并且可以实现场景渲染等。可以在Render()中实现渲染部分。


    class CSample : public CFrmApplication
    {
     
    public:
        virtual BOOL Initialize();
        virtual BOOL Resize();
        virtual VOID Destroy();
        virtual VOID Update();
        virtual VOID Render();
     
        CSample( const CHAR* strName );
    }


    2、创建应用实例


    使用此Framework的应用都必须实现此全局函数

    CFrmApplication* FrmCreateApplicationInstance()
    {
        CSample *CreateWindow = new CSample( "CreateWindow" );
     
        return CreateWindow;
    }


    3、获取Input事件

    可以通过FrmGetInput函数来获取输入事件。


    VOID CSample::Update()
    {
        UINT32 nButtons;
        UINT32 nPressedButtons;
     
        FrmGetInput( &m_Input, &nButtons, &nPressedButtons );
        if( nButtons & INPUT_KEY_0 )
        {
            // Do something if the '0' key is pressed
        }
    }
     

    4、资源包


    可以通过打包工具ResourcePacker将纹理的资源文件打包成.pak文件,自动将TGA、BMP、JPG等格式的文件转换为OpenGLES使用的纹理格式(比如ATC等)。在运行时可以通过CFrmPackedResource 类动态加载访问。


    CFrmPackedResource resource;
    if( FALSE == resource.LoadFromFile( "Media\\Textures.pak" ) )
        return FALSE;
    ....
    CFrmTexture* pLogoTexture = resource.GetTexture( "Logo" );
    }
     

    5、文字渲染


    可以通过工具FontMaker 将文字光栅化成bitmap图像文件,会输出三个文件:TGA图像文件、字体数据文件、xml描述文件。然后可以通过ResourcePacker将这三个文件打包成.pak格式文件,用来动态加载显示文字信息。

    CFrmFont Font; 
    BOOL bResult = Font.Create( "Media\\Fonts\\SomeFont16.pak" );
    ...
    Font.DrawText( 10, 10, FRMCOLOR_WHITE, "Draw this text." );
     
    6、几何网格


    Framework提供了一种保存几何网格的数据结构,这个比较复杂,后面我们会专门讨论。


    CFrmMesh Mesh;
    if( FALSE == Mesh.Load( "Media\\Meshes\\Test.mesh" ) )
        return FALSE;
     
    if( FALSE == Mesh.MakeDrawable( &resource ) )
         return FALSE;
     

    7、UI界面


    Framework提供一套UI界面实现方案,用户可以通过FrmUserInterface类在渲染场景上显示一个UI界面。


    CFrmFont Font;
    if( FALSE == Font.Create( "Media\\Fonts\\Font.pak" ) )
           return FALSE;
     
    CFrmPackedResource resource;
    if( FALSE == resource.LoadFromFile( "Media\\Textures.pak" ) )
            return FALSE;
     
    CFrmTexture* pTexture;
    pTexture = resource.GetTexture( "Overlay" );
     
    CFrmUserInterface UI;
    if( FALSE == UI.Initialize( &Font, "Title" ) )
            return FALSE;
     
    FLOAT32 fVariable   = 10.0f;
    const CHAR* strVariable = "Some value"
    UI.AddHelpFloatVariable( &fVariable, "Var1", "%3.1f" );
    UI.AddHelpStringVariable( &strVariable, "Var2" );
    UI.AddHelpKeyInfo( FRM_FONT_KEY_0, "Toggle Info Pane" );
    UI.AddHelpKeyInfo( FRM_FONT_KEY_1, "Do something" );
    UI.AddHelpKeyInfo( FRM_FONT_KEY_2, "Do something else" );
    UI.AddOverlay( pTexture->m_hTextureHandle, -5, -5, 128, 64 );
     
     ...
     
    UI.Render();


Log in to reply