iluFlipImage вызывает графические проблемы - PullRequest
0 голосов
/ 08 февраля 2012

Я читаю книгу прямо сейчас. Это про OpenGl. Есть пример загрузки текстур с помощью devil. Я реализовал код из книги 1: 1. Но функция iluFlipImage вызывает графические проблемы. Я использую .Net Framework 4.0 с toa-framework 2.1


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

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));
    }

1 Ответ

0 голосов
/ 09 февраля 2012
    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();
    }
...