頂点シェーダーを使用して、投影を実装しようとしています。
個別の頂点シェーダーで gl_Position の設定を処理し、別の頂点シェーダーでフラグメント シェーダーに必要な値を設定する方法はありますか?
問題は、最初の頂点シェーダーの main() 関数のみが呼び出されることです。
編集:複数の独立したシェーダーを使用する代わりに、シェーダー ソースを組み合わせることで、機能させる方法を見つけました。これが最善の方法かどうかはわかりませんが、うまく機能しているようです。
main_shader.vsh
attribute vec4 src_color;
varying vec4 dst_color; // forward declaration
void transform(void);
void main(void)
{
dst_color = src_color;
transform();
}
transform_2d.vsh
attribute vec4 position;
void transform(void)
{
gl_Position = position;
}
次に、次のように使用します。
char merged[2048];
strcat(merged, main_shader_src);
strcat(merged, transform_shader_src);
// create and compile shader with merged as source