OpenGL ES 2.0/MonoTouch: Линкер Памылка

я ў цяперашні час спрабую атрымаць маю мадэль пагрузчык для працы і атрымаў памылку пры злучэнні новых атрыбутаў шэйдараў.

На дадзены момант я б апублікаваць паведамленне пра памылку, але MonoTouch не дазваляе мне гэта рабіць. Адзінае, што я атрымаў гэта «УВАГА: Ці маглі п», як уяўляецца, праблема з MonoTouch, таму што я выкарыстаў шаблон рамкі.

Вось код шэйдара:


  
    
  

  
    
      
      
      <!---->
    

    
  
  
    
  

Шейдер працуе выдатна пры выдаленні «нармальны» атрыбут. Пры даданні яго я атрымаў наступнае паведамленне пра памылку ад мона (не ад OpenGL) пасля выкліку GL.LinkProgram:

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
Нам трэба больш дэталяў. Як гэта памылка линкера? ён трывае няўдачу падчас зборкі (калі так капіяваць/ўставіць) «Будуюць Output». Калі дадатковыя дадзеныя/тлумачэнне занадта вялікая, каб змясціцца ў тут, калі ласка, запоўніце справаздачу пра памылку на bugzilla.xamarin.com і прыкладзеце просты тэставы прыклад.
дададзена аўтар poupou, крыніца
Postet памылкі не з'яўляецца памылка линкера (The Таноса). Гэта выхад адладкі мона-распрацоўкі і адбываецца пасля выкліку Gl.LinkProgram. Там таксама ня памылка падчас зборкі. Памылка линкера «УВАГА: Мог п» і не з'яўляецца поўнай тут з-за мана памылку.
дададзена аўтар 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 ігнаруе невыкарыстоўваныя атрыбуты і атрыбут «нармальны» мае месца -1.

Гэта было вельмі прыкрая памылка, з-за таго, што я цяпер ведаю, што азначае, што паведамленне пра памылку, якое я не мог чытаць з-за памылкі MonoTouch: «Ясна не выкарыстоўваецца і ігнараваў».

2
дададзена