投稿者 tel | 2015年1月8日

Bracketsで頂点シェーダとフラグメントシェーダのMIMEタイプを判別する

おそらく必要になる人がいないだろうメモ。

Bracketsのclike.jsに記述されているGLSLの色分け定義だと頂点シェーダとフラグメントシェーダが同じモードを参照している。
そのため以下のようにモードを取得した時helperTypeが常に x-shader/x-vertex になる。

var CodeMirror = brackets.getModule("thirdparty/CodeMirror2/lib/codemirror");
var mode = CodeMirror.resolveMode('x-shader/x-fragment');
console.log(mode.helperType);

これが困ったことになるのは、入力している位置のモードが頂点シェーダなのかフラグメントシェーダなのかが判断できないことである。

なので一段階ラップしてモードを上書きする。

var CodeMirror = brackets.getModule("thirdparty/CodeMirror2/lib/codemirror");
var mode = CodeMirror.resolveMode('x-shader/x-fragment');

// ラップ用のコンストラクタ
function GLSLMode(helperType) {
    this.helperType = helperType;
}
GLSLMode.prototype = mode;

// 頂点シェーダとフラグメントシェーダで別々のオブジェクトを作る
var vertexMode = new GLSLMode('x-shader/x-vertex'),
    fragmentMode = new GLSLMode('x-shader/x-fragment');

// 既存の設定を上書き
CodeMirror.defineMIME(vertexMode.helperType, vertexMode);
CodeMirror.defineMIME(fragmentMode.helperType, fragmentMode);

こうすることで頂点シェーダとフラグメントシェーダのモードが判別できる。


コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中

カテゴリー

%d人のブロガーが「いいね」をつけました。