SpriteStudio / SS5PlayerForCocos2d-x

OPTPiX SpriteStudio 5 で制作したアニメーションデータを Cocos2d-x v3 v2 上で再生するためのプログラムです。
MIT License
8 stars 7 forks source link

v1.3.1 カラーブレンドを使用しているアニメーションへ切り替えて再生すると例外が発生する #51

Closed Ryuma-Hachisu closed 8 years ago

Ryuma-Hachisu commented 8 years ago

アニメ再生時にメモリ破壊をおきています。カラーブレンドが有効ではないのに有効になったり、解放時に落ちたりしています。

DKAlpha commented 8 years ago

ご報告ありがとうございます。 こちらで現象を確認しました所とくにそういった現象を確認できませんでした。 確認環境は以下となります。 cocos2d-x 3.11 SS5Player For Cocos2d-x 1.3.1 SS5converter SpriteStudioSDK1.7.1 アニメーションファイル:キャラクターアニメーションテンプレート http://www.webtech.co.jp/help/ja/spritestudio/download/fordesigner/#animation

SS5PlayerとSS5Converterは対応バーションを合わせる必要があります。 https://github.com/SpriteStudio/SS5PlayerForCocos2d-x/wiki/%E5%AF%BE%E5%BF%9C%E3%83%90%E3%83%BC%E3%82%B8%E3%83%A7%E3%83%B3%E4%B8%80%E8%A6%A7 各バージョンは対応しておりますでしょうか? またこちらの現象は特定のアニメーションで発生する現象となりますでしょうか?

よろしくお願いいたします。

Ryuma-Hachisu commented 8 years ago

バージョンは対応したものを使用しています。 最新版ですね。

またアニメーションは特定のもので発生します。 二回目のメールで送らせていただいた、ソースファイルをビルドし動かしてもらえれば状況は再現します。

iosの方で確認しています。

2016年8月31日水曜日、DKAlphanotifications@github.comさんは書きました:

ご報告ありがとうございます。 こちらで現象を確認しました所とくにそういった現象を確認できませんでした。 確認環境は以下となります。 cocos2d-x 3.11 SS5Player For Cocos2d-x 1.3.1 SS5converter SpriteStudioSDK1.7.1 アニメーションファイル:キャラクターアニメーションテンプレート http://www.webtech.co.jp/help/ja/spritestudio/download/ fordesigner/#animation

SS5PlayerとSS5Converterは対応バーションを合わせる必要があります。 https://github.com/SpriteStudio/SS5PlayerForCocos2d-x/wiki/% E5%AF%BE%E5%BF%9C%E3%83%90%E3%83%BC%E3%82%B8%E3%83%A7%E3%83% B3%E4%B8%80%E8%A6%A7 各バージョンは対応しておりますでしょうか? またこちらの現象は特定のアニメーションで発生する現象となりますでしょうか?

よろしくお願いいたします。

— You are receiving this because you authored the thread. Reply to this email directly, view it on GitHub https://github.com/SpriteStudio/SS5PlayerForCocos2d-x/issues/51#issuecomment-243639592, or mute the thread https://github.com/notifications/unsubscribe-auth/ACaQRD5GkjOwOXcZzhNkMJOgh3OTof60ks5qlOUDgaJpZM4Jwjl5 .


株式会社EAGLE 代表取締役社長 八須竜馬

東京都港区六本木7-11-20

+819069329041

https://eagle-developers.com


Ryuma-Hachisu commented 8 years ago

バージョンは対応したものを使用しています。 最新版ですね。

またアニメーションは特定のもので発生します。 二回目のメールで送らせていただいた、ソースファイルをビルドし動かしてもらえれば状況は再現します。

iosの方で確認しています。

再度添付させて頂きました。 hang_check.zipを解凍しcocos2d-x 3.11の方で確認よろしくお願いします。

2016年8月31日 11:20 DKAlpha notifications@github.com:

ご報告ありがとうございます。 こちらで現象を確認しました所とくにそういった現象を確認できませんでした。 確認環境は以下となります。 cocos2d-x 3.11 SS5Player For Cocos2d-x 1.3.1 SS5converter SpriteStudioSDK1.7.1 アニメーションファイル:キャラクターアニメーションテンプレート http://www.webtech.co.jp/help/ja/spritestudio/download/ fordesigner/#animation

SS5PlayerとSS5Converterは対応バーションを合わせる必要があります。 https://github.com/SpriteStudio/SS5PlayerForCocos2d-x/wiki/% E5%AF%BE%E5%BF%9C%E3%83%90%E3%83%BC%E3%82%B8%E3%83%A7%E3%83% B3%E4%B8%80%E8%A6%A7 各バージョンは対応しておりますでしょうか? またこちらの現象は特定のアニメーションで発生する現象となりますでしょうか?

よろしくお願いいたします。

— You are receiving this because you authored the thread. Reply to this email directly, view it on GitHub https://github.com/SpriteStudio/SS5PlayerForCocos2d-x/issues/51#issuecomment-243639592, or mute the thread https://github.com/notifications/unsubscribe-auth/ACaQRD5GkjOwOXcZzhNkMJOgh3OTof60ks5qlOUDgaJpZM4Jwjl5 .


株式会社EAGLE 代表取締役社長 八須竜馬

東京都港区六本木7-11-20

+819069329041

https://eagle-developers.com


DKAlpha commented 8 years ago

再現データの方ありがとうございます。 現象が発生する事を確認しましたので、調査してこちらで報告いたします。

DKAlpha commented 8 years ago

原因の詳細は分かっておりませんが、カラーブレンドを使用したアニメーションに切り替えると発生するようで、v1.2.6から対応したカラーブレンドの処理に問題があるようです。 SS5Player.h に定義されている #define OLDSHADER_USE 0 を1に変更して動作を確認してみていただけますでしょうか?

Ryuma-Hachisu commented 8 years ago

SS5Player.h に定義されている #define OLDSHADER_USE 0 を1に変更して動作を確認してみていただけますでしょうか? →

こちら確認させてもらったのですが画面全体が黒くなり点滅する現象が発生したため元に戻させてもらいました。 どういう処理なのかはよくわからないですがシェーダー関連に不具合があるのかもしれません。 調査よろしくお願いします。

DKAlpha commented 8 years ago

こちらでは送っていただいたサンプルコードの定義を書き換える事でアニメーションが順に再生できる事を確認しましたが、点滅となると不思議ですね。 アニメーションを切り替えるとカラーブレンドに使用する_shaderProgramStateが壊れるようだ、という事はわかりました。どこでそういった問題が起きているのかこれから調査しますが、こちらの現象の回避方法を検討したいと思います。

DKAlpha commented 8 years ago

アニメーションのパーツ構成を知りたいのでSpriteStudioのプロジェクト(sspjと関連するアニメーションファイル)一式を送っていただく事は可能でしょうか?

DKAlpha commented 8 years ago

SS5Player.cpp に含まれる void CustomSprite::changeShaderProgram(bool useCustomShaderProgram) 関数を以下の様に追記して動作を確認していただけますでしょうか? this->setGLProgram(_defaultShaderProgram);を呼びだすと今まで使用していたシェーダープログラムが解放されてしまう事がわかり解放処理を追加しました。 これによってアニメーション切り替え後は_shaderProgramStateを作成しなおす事になります。 問題なく再生できるようであればこの変更を反映させようと思いますのでよろしくお願いいたします。

void CustomSprite::changeShaderProgram(bool useCustomShaderProgram)
{
    if (useCustomShaderProgram != _useCustomShaderProgram)
    {
        if (useCustomShaderProgram)
        {
            cocos2d::GLProgram *shaderProgram = getCustomShaderProgram();
            if (shaderProgram == nullptr)
            {
                // Not use custom shader.
                shaderProgram = _defaultShaderProgram;
                useCustomShaderProgram = false;
            }
#if OLDSHADER_USE
            this->setGLProgram(shaderProgram);
#else           
            if (_shaderProgramState == 0)
            {
                _shaderProgramState = cocos2d::GLProgramState::create(shaderProgram);
            }
            this->setGLProgramState(_shaderProgramState);
#endif          
            _useCustomShaderProgram = useCustomShaderProgram;
        }
        else
        {
            this->setGLProgram(_defaultShaderProgram);
            _useCustomShaderProgram = false;
#if OLDSHADER_USE
#else
            //ディフォルトシェーダープログラムを設定すると今まで使っていたシェーダプログラムは解放される
            if (_shaderProgramState)
            {
                _shaderProgramState->release();
                _shaderProgramState = 0;
            }
#endif
        }
    }
}
Ryuma-Hachisu commented 8 years ago

アニメパーツのファイルの方、今弊社デザイナーに確認中なのでしばしお待ちください。

下記確認してみましたが https://gyazo.com/82e87400e602123c21c73e8ccc99a93b https://gyazo.com/82e87400e602123c21c73e8ccc99a93b

のように修正箇所で落ちます。 CCASSERT(_referenceCount > 0, "reference count should be greater than 0”); のアサートに引っかかるようです。

調査よろしくお願いします。

2016/08/31 15:09、DKAlpha notifications@github.com のメール:

void CustomSprite::changeShaderProgram(bool useCustomShaderProgram) を以下の様に追記して動作を確認していただけますでしょうか?

void CustomSprite::changeShaderProgram(bool useCustomShaderProgram) { if (useCustomShaderProgram != _useCustomShaderProgram) { if (useCustomShaderProgram) { cocos2d::GLProgram *shaderProgram = getCustomShaderProgram(); if (shaderProgram == nullptr) { // Not use custom shader. shaderProgram = _defaultShaderProgram; useCustomShaderProgram = false; }

if OLDSHADER_USE

this->setGLProgram(shaderProgram);

else

if (_shaderProgramState == 0) { _shaderProgramState = cocos2d::GLProgramState::create(shaderProgram); } this->setGLProgramState(_shaderProgramState);

endif

_useCustomShaderProgram = useCustomShaderProgram; } else { this->setGLProgram(_defaultShaderProgram); _useCustomShaderProgram = false; //追加ここから

if OLDSHADER_USE

else

//ディフォルトシェーダープログラムを設定すると今まで使っていたシェーダプログラムは解放される if (_shaderProgramState) { _shaderProgramState->release(); _shaderProgramState = 0; }

endif

//追加ここまで } } }

— You are receiving this because you authored the thread. Reply to this email directly, view it on GitHub https://github.com/SpriteStudio/SS5PlayerForCocos2d-x/issues/51#issuecomment-243667793, or mute the thread https://github.com/notifications/unsubscribe-auth/ACaQRHrt_87an5u4U4RyKb4luDk_DDveks5qlRp-gaJpZM4Jwjl5.

DKAlpha commented 8 years ago

なるほど、既に解放されているはずなのでreleaseは必要ないという事ですね。

if OLDSHADER_USE

else

        //ディフォルトシェーダープログラムを設定すると今まで使っていたシェーダプログラムは解放される
        _shaderProgramState = 0;

endif、

この様にしてみていただけますでしょうか? お手数ですがよろしくお願いします。

Ryuma-Hachisu commented 8 years ago

こちら今度はretainで落ちました。

https://gyazo.com/17c3bbcdaa222624325b4d50097c28ea

CCASSERT(_referenceCount > 0, "reference count should be greater than 0");

のアサートに引っかかりましたね。

2016年8月31日 15:25 DKAlpha notifications@github.com:

なるほど、既に解放されているはずなのでreleaseは必要ないという事ですね。

if OLDSHADER_USE

else

//ディフォルトシェーダープログラムを設定すると今まで使っていたシェーダプログラムは解放される _shaderProgramState = 0;

endif、

この様にしてみていただけますでしょうか? お手数ですがよろしくお願いします。

— You are receiving this because you authored the thread. Reply to this email directly, view it on GitHub https://github.com/SpriteStudio/SS5PlayerForCocos2d-x/issues/51#issuecomment-243670185, or mute the thread https://github.com/notifications/unsubscribe-auth/ACaQRONzHgCwHIF3mU6n4jtigMDKV13_ks5qlR5egaJpZM4Jwjl5 .


株式会社EAGLE 代表取締役社長 八須竜馬

東京都港区六本木7-11-20

+819069329041

https://eagle-developers.com


DKAlpha commented 8 years ago

こちらで確認を行っている内容はこのようなコードになります。(前半部分は省略します。) void CustomSprite::changeShaderProgram(bool useCustomShaderProgram) の 3642行目

        else
        {
            this->setGLProgram(_defaultShaderProgram);
            _useCustomShaderProgram = false;
#if OLDSHADER_USE
#else
            //ディフォルトシェーダープログラムを設定すると今まで使っていたシェーダプログラムは解放される
            _shaderProgramState = 0;
#endif
        }

こちらの変更で、アサートが発生する様な事は無いように見えます。

Ryuma-Hachisu commented 8 years ago

はい。こちらで問題無いと思います。

https://gyazo.com/029acc2868a5b8f43075ee3d05fe10f2

その対応入れましたら、retainの方で落ちました。 こちら確認をよろしくお願いします。

2016年8月31日 15:29 八須竜馬 eagle19860122@gmail.com:

こちら今度はretainで落ちました。

https://gyazo.com/17c3bbcdaa222624325b4d50097c28ea

CCASSERT(_referenceCount > 0, "reference count should be greater than 0" );

のアサートに引っかかりましたね。

2016年8月31日 15:25 DKAlpha notifications@github.com:

なるほど、既に解放されているはずなのでreleaseは必要ないという事ですね。

if OLDSHADER_USE

else

//ディフォルトシェーダープログラムを設定すると今まで使っていたシェーダプログラムは解放される _shaderProgramState = 0;

endif、

この様にしてみていただけますでしょうか? お手数ですがよろしくお願いします。

— You are receiving this because you authored the thread. Reply to this email directly, view it on GitHub https://github.com/SpriteStudio/SS5PlayerForCocos2d-x/issues/51#issuecomment-243670185, or mute the thread https://github.com/notifications/unsubscribe-auth/ACaQRONzHgCwHIF3mU6n4jtigMDKV13_ks5qlR5egaJpZM4Jwjl5 .


株式会社EAGLE 代表取締役社長 八須竜馬

東京都港区六本木7-11-20

+819069329041

https://eagle-developers.com



株式会社EAGLE 代表取締役社長 八須竜馬

東京都港区六本木7-11-20

+819069329041

https://eagle-developers.com


Ryuma-Hachisu commented 8 years ago

すいません。こちら再度確認してみたところ、retainではなく再びカラーブレンドの方でおちました。 先ほどのバグは壊れた影響でretainの方で落ちたのかもしれません。

https://gyazo.com/30b0098612e97f43b2de2112f55fffc8

該当ファイルのコンバート前の元データを添付しました。 若干ファイルに差異はあるかもしれませんが確認よろしくお願いします。

2016年8月31日 14:38 DKAlpha notifications@github.com:

こちらでは送っていただいたサンプルコードの定義を書き換える事でアニメーションが順に再生できる事を確認しましたが、点滅となると不思議ですね。 アニメーションを切り替えるとカラーブレンドに使用する_shaderProgramStateが壊れるようだ、という事はわかりました。 どこでそういった問題が起きているのかこれから調査しますが、こちらの現象の回避方法を検討したいと思います。

— You are receiving this because you authored the thread. Reply to this email directly, view it on GitHub https://github.com/SpriteStudio/SS5PlayerForCocos2d-x/issues/51#issuecomment-243663573, or mute the thread https://github.com/notifications/unsubscribe-auth/ACaQRD0qI4vdzAviBfQE5zP83eCTyAo5ks5qlRNVgaJpZM4Jwjl5 .


株式会社EAGLE 代表取締役社長 八須竜馬

東京都港区六本木7-11-20

+819069329041

https://eagle-developers.com


DKAlpha commented 8 years ago

スクリーンショットの方ですと追加部分が#if 0と無効になっておりますが、こちらを有効にしてして問題があったため無効にしてあるという事でしょうか?

Ryuma-Hachisu commented 8 years ago

あ、すいません。

そうですね。無効のまま再度確認していました。 再度確認した所今度は落ちなくなりました。修正されたのか、またメモリの配置が変わったためたまたま落ちなくなったのかはわかりませんが、一旦はこちらで様子を 見ようと思います。

現象の原因の解明と修正の方よろしくお願いします。

2016/08/31 16:30、DKAlpha notifications@github.com のメール:

スクリーンショットの方ですと追加部分が#if 0と無効になっておりますが、こちらを有効にしてして問題があったため無効にしてあるという事でしょうか?

— You are receiving this because you authored the thread. Reply to this email directly, view it on GitHub https://github.com/SpriteStudio/SS5PlayerForCocos2d-x/issues/51#issuecomment-243681888, or mute the thread https://github.com/notifications/unsubscribe-auth/ACaQRI8DRzDPfdKB9A3I1bzP8ClV5W0Hks5qlS2bgaJpZM4Jwjl5.

DKAlpha commented 8 years ago

内部ロジックを確認している感じだと、今回の修正で正常に動作している様に見えますが、一応動作したという事で、現象が再び発生するようであればご質問いただければと思います。 現状のコードですとアニメーションの切り替えで必ず現象が発生する事を確認しておりますので、今回の変更をVer1.3.2に反映したいと思います。 よろしくお願いいたします。

DKAlpha commented 8 years ago

こちらの情報はバージョン1.3.1をお使いの方に公開させていただきたくopenとさせていただきます。 ご了承ください。