2012-02-07 3 views
0

Я прочитал книгу прямо сейчас. Его о OpenGl. Существует пример загрузки текстур дьяволом. Я реализую код из книги 1: 1. Но функция iluFlipImage вызывает графические проблемы. Im использованием .Net Framework 4.0 с Тоа-рамки 2,1iluFlipImage вызывает графические проблемы


переворачивается

flipped


не переворачивается

not flipped


public void LoadTexture(string textureName, string path) 
    { 
     int devIlId; 
     Il.ilGenImages(1, out devIlId); 
     Gl.glBindTexture(Gl.GL_TEXTURE_2D, devIlId); 

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

     Ilu.iluFlipImage(); 

     var width = Il.ilGetInteger(Il.IL_IMAGE_WIDTH); 
     var height = Il.ilGetInteger(Il.IL_IMAGE_HEIGHT); 
     var textureId = Ilut.ilutGLBindTexImage(); 

     System.Diagnostics.Debug.Assert(textureId != 0); 
     Il.ilDeleteImages(1, ref devIlId); 
     _textureStorage.Add(textureName, new Texture(textureId, path, width, height)); 
    } 

ответ

0
public void LoadTexture(string name, string path) 
    { 
     var bitmap = new Bitmap(path); 
     var bitmapData = bitmap.LockBits(new Rectangle(0, 0, bitmap.Width, bitmap.Height), 
             ImageLockMode.ReadOnly, PixelFormat.Format32bppRgb); 
     int textureId; 
     Gl.glGenTextures(1, out textureId); 
     Gl.glBindTexture(Gl.GL_TEXTURE_2D, textureId); 
     Gl.glTexImage2D(Gl.GL_TEXTURE_2D, 0, Gl.GL_RGBA8, bitmap.Width, bitmap.Height, 0, Gl.GL_BGRA, Gl.GL_UNSIGNED_BYTE, bitmapData.Scan0); 
     Gl.glTexParameteri(Gl.GL_TEXTURE_2D, Gl.GL_TEXTURE_MIN_FILTER, Gl.GL_LINEAR); 
     Gl.glTexParameteri(Gl.GL_TEXTURE_2D, Gl.GL_TEXTURE_MAG_FILTER, Gl.GL_LINEAR); 
     _textureStorage.Add(name, new Texture(textureId, path, bitmap.Width, bitmap.Height)); 

     bitmap.UnlockBits(bitmapData); 
     bitmap.Dispose(); 
    }