OpenGL ES 2.0/MonoTouch:リンカエラー

私は現在、モデルローダーを動作させようとしていて、新しいシェーダー属性をバインドするときにエラーが発生しました。

この時点で私はエラーメッセージを投稿しますが、MonoTouchはこれをやらせません。私が持っている唯一のものは、フレームワークのテンプレートを使用しているため、 "警告:Could n"というMonoTouchの問題であるようです。

シェーダコードは次のとおりです。


  
    
  

  
    
      
      
      <!---->
    

    
  
  
    
  

シェーダは「通常の」属性を削除するときに完全に機能します。それを追加するとき私はGL.LinkProgramを呼び出した後、モノ(OpenGLからではない)から次のエラーを受け取りました:

App(553,0xacb752c0) malloc: *** error for object 0x1025a3c4: incorrect checksum for freed object - object was probably modified after being freed.
*** set a breakpoint in malloc_error_break to debug

私はそれが属性バインディングと関係があることに気づいた。ここにコードです:

// Bind attribute locations
for (int i = 0; i < _VertexAttributeList.Length; i++)
{
    ShaderAttribute attribute = _VertexAttributeList[i];
    GL.BindAttribLocation(_Program, i, attribute.Name);
}

"_VertexAttributeList.Length"を定数1に置き換えると、エラーなしで動作します。

乾杯 フェリックス

1
詳細が必要です。リンカのエラーはどうですか?ビルド中に失敗した場合(コピー/ペーストの場合)、ビルド出力が失敗します。余分なデータ/説明が大きすぎてここに収まらない場合は、bugzilla.xamarin.comのバグレポートを記入し、簡単なテストケースを添付してください。
追加された 著者 poupou,
エラーpostetはリンカエラー(malloc)ではありません。これはモノ開発のデバッグ出力であり、Gl.LinkProgramを呼び出した後に発生します。ビルド時にはバグもありません。リンカのエラーは「警告:Could n」であり、モノラルバグが原因でここでは完全ではありません。
追加された 著者 Felix K.,

1 答え

次のコード行を使用した後、エラーが見つかりました:

for (int i = 0; i < _VertexAttributeList.Length) {
    ShaderAttribute attribute = _VertexAttributeList[i];
    Console.WriteLine("Attribute {0} @ {1}", attribute.Name,
                      GL.GetAttribLocation(_Program, attribute.Name));
}

GLSLは未使用の属性を無視し、属性 "normal"は-1の位置を持つことが分かります。

MonoTouchのエラーのために私が読むことができなかったエラーメッセージの意味を知っているという事実のため、非常に迷惑なエラーです: "変数は使用されず無視されました"。

2
追加された