サンプル同梱のラッパーライブラリを利用してエフェクトを表示しているのですが、Begin2D()メソッドを1フレーム(BeginScene()〜EndScene()の間)に2度呼ぶと、
2度目のBegin2D以後に描画したエフェクトのテクスチャが正しく切り替えられず、エフェクトの表示が乱れます。
実際の画面は下記のような感じです。
http://u.amatukami.com/~dna/bm_texture_glitch.jpg
2Dサンプルのtouch.cppをベースに2つのエフェクトを描画するように改造したもので、該当部分のコードとしては下記のようになります。
device->Clear(0, NULL, D3DCLEAR_TARGET|D3DCLEAR_ZBUFFER, D3DCOLOR_RGBA(0x20, 0x20, 0x20, 0x00), 1, 0);
device->BeginScene();
manager->Begin2D(WINDOW_WIDTH, WINDOW_HEIGHT);
manager->DrawEffect(effect);
manager->End();
manager->Begin2D(WINDOW_WIDTH, WINDOW_HEIGHT);
manager->DrawEffect(effect2);
manager->End();
device->EndScene();
device->Present(NULL, NULL, NULL, NULL);
……と書いていましたが、今しがたBMManager.cppをいじってBMManager::Begin()の
「vertexManager.ResetCurrentPointer();」を各フレーム初回の呼び出しでのみ実行するようにしたところテクスチャ乱れは発生しなくなりました。
投影行列を複数回変更する必要があったため、Begin2Dを何度も呼ぶコードにしていたのですが、やはりイレギュラーな使い方だったということで反省してきます。