2011-08-14 5 views
2

DevIl 라이브러리를 사용하여 스프라이트에 적용하기 위해 OpenGL에 텍스처를로드하는 데 사용하려고합니다. 이 코드는 C# Game Programming for Serious Game Design 책에서 직접 얻을 수 있습니다 (도움이되는 경우). 내가 가지고있는 문제는 Il.ilLoadImage 호출입니다. 심지어 null을 전달할 때도 이미지를 찾을 수없는 오류가 발생하지 않으며 양식이 튀어 나오면 스프라이트가 진회색을 나타냅니다 (흰색 대신).DevIl 라이브러리를 사용하여 텍스처를로드 할 때의 문제

public void LoadTexture(string textureId, string path) 
    { 
     int devilId = 0; 
     Il.ilGenImages(1, out devilId); 
     Il.ilBindImage(devilId); 

     if (!Il.ilLoadImage(path)) 
     { 
      System.Diagnostics.Debug.Assert(false, "Could not open file [" + path + "]."); 
     } 

     //Flip the files before passing them to OpenGl 
     Ilu.iluFlipImage(); 

     int width = Il.ilGetInteger(Il.IL_IMAGE_WIDTH); 
     int height = Il.ilGetInteger(Il.IL_IMAGE_HEIGHT); 
     int openGLId = Ilut.ilutGLBindTexImage(); 

     System.Diagnostics.Debug.Assert(openGLId != 0); 
     Il.ilDeleteImages(1, ref devilId); 

     _textureDatabase.Add(textureId, new Texture(openGLId, width, height)); 
    } 

답변

1

DevIL은 OpenGL의 API와 일반 구조를 기반으로합니다. 따라서 오류가보고되는 일반적인 방법은 ilGetError입니다. 함수의 성공 여부를 확인하려면이를 사용해야합니다.

+0

어떻게하면 좋을까요? ilLoadImage 호출이 true를 반환하고 있으므로 오류가 발생하지 않았 음을 나타내지는 않습니까? 호출이 끝난 후 모든 행이 실행되고 어설 션은 호출되지 않습니다. – Pat

+0

'ilLoadImage'를 호출 한 후'ilGetError'를 호출합니다. 'IL_NO_ERROR' 이외의 것을 리턴하면, 에러가 발생했다. 안타깝게도, Devil의 문서는'ilLoadImage '의 반환 값이 의미하는 바에 대해 다소 모호합니다. –

+0

내가 알아 낸 것은, 내가 사용하고있는 Tao 프레임 워크의 버전이 Devll의 최신 버전을 다운로드 할 때 얻은 dll과 호환되지 않는다는 것이 드러났습니다. 명령은 내가 보지 못했던 오류를 던지고있었습니다. (분명히 명령은 그 일이 발생할 때 false를 반환하지 않습니다). 정말 고맙습니다! – Pat

관련 문제