現在、モデルローダを動作させようとしていますが、新しいシェーダ属性をバインドするときにエラーが発生しました。OpenGL ES 2.0/MonoTouch:リンカエラー
この時点で、私はエラーメッセージを表示しますが、MonoTouchはこれをやらせません。私が持っている唯一のものは、フレームワークのテンプレートを使用しているため、 "警告:Could n"というMonoTouchの問題であるようです。ここで
は、シェーダコードです:
<Shader>
<Uniforms>
<Uniform type="mat4" name="modelViewMatrix"/>
</Uniforms>
<Vertex>
<Attributes>
<Attribute type="vec3" name="position" binding="Position"/>
<Attribute type="vec3" name="normal" binding="Normals"/>
<!--<Attribute type="vec4" name="color" binding="Color"/>-->
</Attributes>
<Code><![CDATA[
attribute vec3 position;
attribute vec3 normal;
varying vec4 colorVarying;
uniform mat4 modelViewMatrix;
void main()
{
gl_Position = modelViewMatrix * vec4(position.xyz, 1.0);
float z = gl_Position.z/100.0;
colorVarying = vec4(z, z, z, 1.0) ;
}
]]></Code>
</Vertex>
<Pixel>
<Code><![CDATA[
varying lowp vec4 colorVarying;
void main()
{
gl_FragColor = colorVarying;
}
]]></Code>
</Pixel>
</Shader>
「通常」の属性を削除するときに、シェーダが完璧に動作します。それを追加するとき、私は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に置き換えると、エラーなしで動作します。
乾杯 フェリックス
詳細が必要です。リンカのエラーはどうですか?ビルド中に失敗した場合(コピー/ペーストの場合)、ビルド出力が失敗します。追加のデータ/説明が大きすぎてここに収まらない場合は、bugzilla.xamarin.comのバグレポートを記入し、簡単なテストケースを添付してください。 – poupou
エラーpostetはリンカエラー(malloc)ではありません。これはモノ開発のデバッグ出力であり、Gl.LinkProgramを呼び出した後に発生します。ビルド時にはバグもありません。 リンカーのエラーは "警告:Could n"であり、モノのバグのためここでは完全ではありません。 –