XNA3.1 で制作したゲームを MonoGame に upload したときのメモ。

ここまでで苦労したのは下記の件。

MonoGame (XNA4) では VertexDeclration の定義が不要になった。

DrawUserPrimiteves 実行時に Current Vertex Shader の状態と、DrawUserPrimitives で指定された頂点データの型が比較されるようなのだが、
この "Current Vertex Shader" が何者なのか、まったくわからなかった。

エラーメッセージ :
"The current vertex declaration does not include all the elements required by the current vertex shader...."

ググってみると、下記質問・回答を発見。

https://stackoverflow.com/questions/9268743/xna-the-current-vertex-declaration-does-not-include-all-the-elements-required-b

そこからさらに XNA の公式ページに飛ぶと、下記記述を発見。

https://docs.microsoft.com/en-us/previous-versions/windows/xna/bb203926%28v%3dxnagamestudio.41%29

Create a vertex declaration for the type VertexPositionNormalTexture.

  • If lighting is enabled, the vertex must have a normal type.
  • If vertex colors are enabled, the vertex must have colors.
  • If texturing is enabled, the vertex must have a texture coordinate.

 

Basic Effect で上記モードを有効にしたら、頂点データにこれらの情報が「含まれていなければならない」ということ。

これをもとに自分の Basic Effect の定義を確認してみると、2 行目が該当した。

m_basicEffect.VertexColorEnabled = true false;

これでやっと頂点データを DrawUserPrimitives で描画できるようになった。

XNA3 時代から、上記オプションを true にしていたが、VertexDeclaration を別に定義していたので、気づかなかったということ。(潜在バグ)

スポンサーリンク

Twitterでフォローしよう