アニメーション・ストレージ
アニメーション・ストレージはTouchGFXでサポートされているオプションの追加フレームバッファで、スクリーン遷移中のアニメーションの作成に使用できます。
アニメーション・ストレージは起動時にTouchGFXを使用して手動で割り当て、登録する必要があります。
アニメーション・ストレージは、スライド切り替えやSnapshotWidgetで使用されます。 また、通常のビットマップとして使用することもできます。
アニメーション・ストレージの設定
アニメーション・ストレージ・バッファのサイズは、通常のフレームバッファと同じです。 たとえば、ディスプレイが16ビット・カラーで480 x 272ピクセルの場合、フレームバッファはそれぞれ480 x 272 x 2 = 261,120バイトになります。
アニメーション・ストレージは、配列または明示的なアドレスを使用して割り当てられます(TouchGFX Generatorでは設定できません)。
namespace
{
LOCATION_PRAGMA("TouchGFX_Framebuffer")
uint16_t animationBuffer[480 * 272] LOCATION_ATTRIBUTE_NOLOAD("TouchGFX_Framebuffer");
}
この例では、130,560バイトの16ビット整数の配列を作成します。 これはフレームバッファのサイズに一致し、16ビットのアライメントが確保されます。
HALでメソッドを呼び出して、バッファをTouchGFXに渡します。
TouchGFXHAL.cpp
void TouchGFXHAL::initialize()
{
TouchGFXGeneratedHAL::initialize();
setAnimationStorage((void*)animationBuffer); // Add animation storage
}
生成されたコードによってアニメーション・ストレージ・アドレスがクリアされるため、TouchGFXGeneratedHAL::initializeを呼び出した後に、HAL::setAnimationStorageを呼び出すことをお勧めします。
スライドの切り替え
After allocating and registering an Animation Storage buffer we can now use the Slide Transition in TouchGFX Designer.
This is done by creating an interaction on the Screen where the transition begins:
上の例では、アプリケーションに2つのスクリーン、Screen1とScreen2があります。 Screen1にはButtonWithLabelウィジェットがあり、またボタンを押したときにアプリケーションをScreen2に切り替わるようにします。
それには、右上隅の[Interactions]をクリックして、画像に示すようにインタラクションを設定します。
スライドの切り替えが開始されると、TouchGFXでは現在のフレームバッファ(Screen1を表示)のコピーを作成してアニメーション・ストレージに格納します。 TouchGFXは、次にScreen2に切り替えますが、アニメーション・ストレージからフレームバッファへピクセルをコピーします(Screen2からのピクセルはなにも表示されません)。 各フレームで切り替えが進行するにつれ、アニメーション・ストレージからのピクセルがさらに左へと表示されるようになり(ピクセルの表示が少なくなり)、Screen2からのピクセルが右から表示されるようになります。
In the configuration of the interaction in TouchGFX Designer it is possible to select the direction of the slide.
SnapshotWidgetによるアニメーション・ストレージの使用
SnapshotWidgetを使用して、データをフレームバッファからアニメーション・ストレージにコピーできます。
class Screen1View : public Screen1ViewBase
{
public:
...
void copyFrameBuffer();
protected:
SnapshotWidget snapshot; ///< The SnapshotWidget that is moved when transitioning.
};
void Screen1View::copyFrameBuffer()
{
snapshot.setPosition(0, 0, HAL::DISPLAY_WIDTH, HAL::DISPLAY_HEIGHT);
snapshot.makeSnapshot(); // Copy whole frame buffer to Animation Storage
}
copyFrameBufferメソッドは、SnapshotWidgetを使用して、フレームバッファをアニメーション・ストレージにコピーします。
SnapshotWidgetは、ウィジェットがスクリーンに引き続き表示される場合には、アニメーション・ストレージのコンテンツを表示します。 これが意図したものでない場合は、非表示に設定します。
snapshot.setVisible(false);
画像によるアニメーション・ストレージの使用
アニメーション・ストレージは、通常のビットマップとして使用できます。 それには、BitmapId BITMAP_ANIMATION_STORAGE = 0xFFFEが含まれています。 Imageウィジェットで使用するには、以下を実行します。
image1.setBitmap(Bitmap(BITMAP_ANIMATION_STORAGE));
アニメーション・ストレージのビットマップの寸法は、常にフレームバッファの寸法になります。
アニメーション・ストレージは、ビットマップを使用する多くのウィジェット(テクスチャ・マッパーなど)でこの方法に従って使用できます。