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

/* VGImageオブジェクト */
static VGImage image;

static void *image_data;

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

    /* 画像を読込 */
    image_data = GfxGetFreeArea(IMAGE_WIDTH, IMAGE_HEIGHT, IMAGE_BPP<<3);
    GfxFsRead((int8_t*)IMAGE_NAME1, IMAGE_STRIDE * IMAGE_HEIGHT, (void*)image_data);

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

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

    /* VGImageオブジェクトの生成 */
    image = vgCreateImage(VG_sRGBA_8888, IMAGE_WIDTH, IMAGE_HEIGHT, VG_IMAGE_QUALITY_NONANTIALIASED | VG_IMAGE_QUALITY_FASTER | VG_IMAGE_QUALITY_BETTER);

    /* VGImageオブジェクトにイメージデータを登録 */
    vgImageSubData(image, image_data, IMAGE_STRIDE, VG_sRGBA_8888, 0, 0, IMAGE_WIDTH, IMAGE_HEIGHT);

    /* IMAGE_USER_TO_SURFACEを単位行列に設定 */
    vgSeti(VG_MATRIX_MODE, VG_MATRIX_IMAGE_USER_TO_SURFACE);
    vgLoadIdentity();
    vgTranslate(0, 360);
}


static void DrawWithColorTransform(void)
{
    VGfloat colorTrans[8] = {1, 1, 1, 1, 0, 0, 0, 0};
    VGfloat scale = 0.05F;

    /* カラートランスフォーム有効 */
    vgSeti(VG_COLOR_TRANSFORM, VG_TRUE);

    while (scale < 1.1) {
        /* カラートランスフォームの設定（R/G/B要素のスケール値を変更） */
        colorTrans[0] = colorTrans[1] = colorTrans[2] = scale;
        vgSetfv(VG_COLOR_TRANSFORM_VALUES, 8, colorTrans);
        /* 移動 */
        vgTranslate(40, -30);
        /* 描画 */
        vgDrawImage(image);
        scale += 0.1F;
    }

    /* カラートランスフォーム無効 */
    vgSeti(VG_COLOR_TRANSFORM, VG_FALSE);
}

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

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

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

    /* カラートランスフォーム処理 */
    DrawWithColorTransform();

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

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