|
|||||||||
前のクラス 次のクラス | フレームあり フレームなし | ||||||||
概要: 必須 | オプション | 詳細: 要素 |
@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
|
|||||||||
前のクラス 次のクラス | フレームあり フレームなし | ||||||||
概要: 必須 | オプション | 詳細: 要素 |