これはそろそろヤバイかも

pkr的な意味でw
でもそんなこと言ってたらこんなもの作りきれません。



さて、Javieの動画を投稿してからもう1ヶ月ですか。
Elis Colors はアルファ版出たよ? Javieマダー?(・∀・)っ/凵⌒☆チンチン」
という声が聞こえてきそうですがまだなのです。


見た目的に進んだのは上のスクリーンショットがすべて。つまり、

  • カメラレイヤーの実装
  • ヌルオブジェクトの実装
  • レイヤースイッチのUI

見た目以外のところで、UI部分とコア部分それぞれのソースを広範囲に見直しましたが結果的にはあまり大きな修正はありませんでした。不安だった箇所の確認ができたという精神衛生上の意味が大きかったです。


今後の予定ですが、次の4つを終えたらアルファ版をリリースします。

最低限ここまでは無いと一通り試すことができないですからね。ただ、タイムラインUIはとてもボリュームがあるので、その前にプレアルファ版をリリースするかもしれません。最初のリリースまであまり時間がかかりすぎると自分自身のモチベーションが下がってしまうだろうというのと、どれだけサクサク動くのか試してみたい人向けということで。そして、「プラグインSDK」と書きましたが、プラグインの開発に興味がある人にいち早く試してもらいたいという事もあります。

プレアルファ版かアルファ版か、いずれにしろ最初のリリースと同時にプラグインSDKもリリースします。ソースコードも。


で、次の作業がその「プラグインSDK」なので、自分用のメモも兼ねて概要を書いておきます。*1

プラグインSDK

プラグインソースコードのイメージ
@Effect
public class Echo {

	@Property(value=0.33,min=-1000000,max=1000000)
	private AnimatableDouble interval;

	@Inject
	private VideoEffectContext context;


	public VideoEffectBuffer doVideoEffect() {
		// 現在時刻のイメージ(直前のエフェクトまで実行済み)を取得
		VideoEffectBuffer buf0 = context.doPreviousEffect();

		// キーフレームまたはエクスプレッションから現在時刻のプロパティを計算
		double interval = this.interval.value(context);

		// 現在時刻
		Time t0 = context.getTime();

		// 時刻をinterval秒前に設定し、その時刻のイメージを取得
		Time dt = new Time((long)(interval*t0.timeScale), t0.timeScale);
		Time t1 = t0.subtract(dt);
		context.setTime(t1);
		VideoEffectBuffer buf1 = context.doPreviousEffect();

		// さらにinterval秒前に設定し、その時刻のイメージを取得
		Time t2 = t1.subtract(dt);
		context.setTime(t2);
		VideoEffectBuffer buf2 = context.doPreviousEffect();

		// 結果を格納するバッファ(テクスチャ)を確保
		VideoEffectBuffer dstBuf = context.createBuffer();

		// テクスチャを取得
		int texture0 = buf0.getTexture();
		int texture1 = buf1.getTexture();
		int texture2 = buf2.getTexture();
		int textureDst = dstBuf.getTexture();

		// OpenGLを使うためにはGLオブジェクトが必要
		GL gl = context.getGL();

		/*
		 * OpenGLを使って texture0〜texture2 を textureDst に合成(略)
		 */


		// 後始末
		buf0.dispose();
		buf1.dispose();
		buf2.dispose();

		return dstBuf;
	}

}

*1:SDKのコードはまだ1行も書いてないので、実際のものはこれとは大きく異なるかもしれません。