Closed yutaka-takeda-drecom closed 8 years ago
ありがとうございます。内容を確認して反映を検討いたします。
こちらこそありがとうございます
動作を確認してみましたが、1点解決出来ない問題があります。 画像の様に複数のカラーブレンドパーツを配置した場合に、u_selectorのみdrawの最終値がすべてに適用される現象があり、こちらが解決方法があると適用できると思うのですが何かご存じでしょうか。
u_alphaはdraw毎の値が適用されているのですが、なぜかu_selectorはそのフレームの全てのdrawで同じ数値の挙動をしてしまいます。
void CustomSprite::changeShaderProgram(bool useCustomShaderProgram) こちらの関数内の 3489行目
this->setGLProgramState(cocos2d::GLProgramState::getOrCreateWithGLProgram(shaderProgram));
こちらの行を
this->setGLProgramState(cocos2d::GLProgramState::create(shaderProgram));
こうしていただくと、挙動は正しくなりますでしょうか?
これで正しいなら、GLProgramStateのキャッシュによって、パラメーターが最終値しか見ていなくなっていると思われます。 (他のパラメーターは更新されていて、u_selectorのみなぜそうなるのかは、かなり気になりますが、デバッグしてみないと分かりません) お手数おかけして申し訳ないです。
修正版を作ります。
修正しました。
ありがとうございます。大変助かります。 動作を確認してみます。
プルリクエストの内容を1.2.6に反映いたしました。 一応#define OLDSHADER_USEを変更することで前の描画処理に戻せるようになっています。 よろしくお願いいたします。
助かります。ありがとうございました。 こちらのプルリク、closeしてもOKですか?
対応しましたので。Closeします。 ありがとうございました。
cocos2d-x v3 での描画コマンド形式へ対応させたものです。 シェーダー管理はGLProgramStateで処理させるように変更。 それとともに、uniformはGLProgramStateのAPIで行った。
カスタムシェーダー側の動作は、サンプルにテスト用データが無かったため、ある程度のチェック(パラメーターがちゃんと渡っているなど)を行ったのみ。 申し訳ないです。
頂点シェーダーに渡しているシェーダーが、MVPマトリクスを計算するようになっていたため、VPマトリクスのみへ修正。