/*
*  This program was created by AXELL CORPORATION.
*  Copyright (C) 2017 AXELL CORPORATION, all rights reserved.
*/
#include "gfx_sample.h"

static void *image_data;

static void TestInit(int width, int height)
{
    VGfloat ClearColor[4]  = {1.0F, 1.0F, 1.0F, 1.0F};

    /* 画像を読込 */
    image_data = GfxGetFreeArea(VGA_WIDTH, VGA_HEIGHT, VGA_BPP<<3);
    GfxFsRead((int8_t*)VGA_NAME, VGA_STRIDE * VGA_HEIGHT, (void*)image_data);

    /* 描画サーフェスのクリアカラーを指定 */
    vgSetfv(VG_CLEAR_COLOR, 4, ClearColor);

    /* 描画サーフェス全体をクリア */
    vgClear(0, 0, width, height);

    /* 現在のマトリクスをIMAGE_USER_TO_SURFACEに設定 */
    vgSeti(VG_MATRIX_MODE, VG_MATRIX_IMAGE_USER_TO_SURFACE);

    /* 行列初期化 */
    vgLoadIdentity();
}

static void CreateImage(VGImageFormat format, VGint width, VGint height, void *data)
{
    VGImage image;

    /* VGImageオブジェクトの生成 */
    image = vgCreateImage(format, width, height,
                          VG_IMAGE_QUALITY_NONANTIALIASED |
                          VG_IMAGE_QUALITY_FASTER |
                          VG_IMAGE_QUALITY_BETTER);

    /* VGImageオブジェクトにイメージデータを登録 */
    vgImageSubData(image, data, width * 4, format, 0, 0, width, height);

    /* VGImageを描画 */
    vgDrawImage(image);

    /* VGImageオブジェクトを破棄 */
    vgDestroyImage(image);
}

static void TestTerm(void)
{
    GfxReleaseFreeArea(image_data);
}

void ImageMain(void)
{
    /* 初期化処理 */
    TestInit(GFX_WIDTH, GFX_HEIGHT);

    /* イメージ描画処理 */
    CreateImage(VG_sRGBA_8888, VGA_WIDTH, VGA_HEIGHT, image_data);

    /* バッファスワップ */
    GfxSwapBuffer();

    /* 終了処理 */
    TestTerm();
}
