|
|||||||||
| 前のクラス 次のクラス | フレームあり フレームなし | ||||||||
| 概要: 必須 | オプション | 詳細: 要素 | ||||||||
@Target(value=FIELD) @Retention(value=RUNTIME) public @interface ShaderSource
この注釈が付けられたフィールドは、プログラマブルシェーダのソースコードに関するものであると認識されます。
この注釈は、String 型もしくは String[] 型の
public なフィールドに付けることができます。
String 型の場合はフィールドの値がソースコードのリソースファイル名であるものとして処理されます。
String[] 型の場合はフィールドの値自体がソースコードであるものとして処理されます。
この注釈を付けられたフィールドが static でない場合、
そのフィールドを含むクラスをインスタンス化してからフィールドの値が読み出されます。
TODO: この場合の使用方法の詳細を書く
シェーダには、この注釈が付けられたフィールドを含むクラスの完全修飾クラス名とフィールド名を . で連結した 「完全修飾クラス名.フィールド名」という形式の名前が付けられます。
program() が true のシェーダはシェーダプログラムです。
そうでない場合はシェーダオブジェクトです。
シェーダプログラムは IShaderRegistry サービスから
IShaderProgram オブジェクトとして取り出す事ができます。
シェーダのコンパイル及びリンクは、IShaderProgram
を初めて使用するときに自動的に実行されます。
使用例:
@Effect
public class InvertColor {
// ソースコードをリソースファイルに記述する場合
//@ShaderSource
//public static final String INVERT_COLOR = "invert_color.frag";
// ソースコードを直接記述する場合
@ShaderSource
public static final String[] INVERT_COLOR = {
"uniform sampler2D source;",
"",
"void main(void)",
"{",
" vec4 prmult = texture2D(source, gl_TexCoord[0].st);",
" if (prmult.a != 0.0) {",
" vec3 unmult = prmult.rgb/prmult.a;",
" unmult = 1.0 - unmult;",
" gl_FragColor = vec4(unmult, 1.0) * prmult.a;",
" } else {",
" gl_FragColor = vec4(0.0);",
" }",
"}"
};
private final IVideoEffectContext context;
private final IVideoRenderSupport support;
private final IShaderProgram program;
@Inject
public InvertColor(IVideoEffectContext context, IVideoRenderSupport support, IShaderRegistry shaders) {
this.context = context;
this.support = support;
// シェーダのソースコードに対応する IShaderProgram オブジェクトを取得する
program = shaders.getProgram(InvertColor.class, "INVERT_COLOR");
}
public IVideoBuffer doVideoEffect() {
IVideoBuffer source = context.doPreviousEffect();
if (source.getBounds().isEmpty()) {
return source;
}
try {
Set<GLUniformData> uniforms = new HashSet<GLUniformData>();
uniforms.add(new GLUniformData("source", 0));
// シェーダプログラムを使用する
return support.useShaderProgram(program, uniforms, null, source);
} finally {
source.dispose();
}
}
}
| 任意要素の概要 | |
|---|---|
java.lang.String[] |
attach
シェーダがシェーダプログラムの場合、 それに関連付けるシェーダオブジェクトを指定します。 |
boolean |
program
シェーダがシェーダプログラムかどうかを指定します。 |
ShaderType |
type
シェーダの種類を指定します。 |
public abstract ShaderType type
public abstract boolean program
public abstract java.lang.String[] attach
|
|||||||||
| 前のクラス 次のクラス | フレームあり フレームなし | ||||||||
| 概要: 必須 | オプション | 詳細: 要素 | ||||||||