Невозможно загрузить текстуру в C # OpenGL - PullRequest
1 голос
/ 27 апреля 2011

Я работаю в C # Game Programming для создания Serious Game и, похоже, ударился о стену.

Следующий код не работает. то есть openGLId возвращает 0.

Кажется, что texure загружается с диска в порядке. Но к нему не привязан ни один идентификатор.

public void LoadTexture(string textureId, string path)
    {
        int devilId = 0;             
        Il.ilGenImages(1, out devilId);              
        Il.ilBindImage(devilId); // set as the active texture.
        if (!Il.ilLoadImage(path))
        {                  
            System.Diagnostics.Debug.Assert(false,"Could not open file, [" + path + "].");
        }               

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

Есть ли лучший способ загрузить текстуру OpenGL?

Заранее спасибо

1 Ответ

0 голосов
/ 28 апреля 2011

У меня может быть ответ для вас.

Это мой класс для загрузки текстуры с библиотеками devIL.

public class TextureLoader
{
    int texid;
    bool success;

    int image;
    int width;
    int height;

    string path;

    public TextureLoader(string path)
    {
        this.path = path;
    }

    public void display()
    {
        Il.ilInit();
        Il.ilGenImages(1, out texid);
        Il.ilBindImage(texid);

        success = Il.ilLoadImage(path);

        if (success)
        {
            success = Il.ilConvertImage(Il.IL_RGBA, Il.IL_UNSIGNED_BYTE);

            if (!success)
                Console.WriteLine("ERROR");

            width = Il.ilGetInteger(Il.IL_IMAGE_WIDTH);
            height = Il.ilGetInteger(Il.IL_IMAGE_HEIGHT);

            Gl.glGenTextures(1, out image);
            Gl.glBindTexture(Gl.GL_TEXTURE_2D, image);
            Gl.glTexParameteri(Gl.GL_TEXTURE_2D, Gl.GL_TEXTURE_MAG_FILTER, Gl.GL_LINEAR);
            Gl.glTexParameteri(Gl.GL_TEXTURE_2D, Gl.GL_TEXTURE_MIN_FILTER, Gl.GL_LINEAR);
            Gl.glTexImage2D(Gl.GL_TEXTURE_2D, 0,
                Il.ilGetInteger(Il.IL_IMAGE_BPP),
                Il.ilGetInteger(Il.IL_IMAGE_WIDTH),
                Il.ilGetInteger(Il.IL_IMAGE_HEIGHT), 0,
                Il.ilGetInteger(Il.IL_IMAGE_FORMAT), Gl.GL_UNSIGNED_BYTE,
                Il.ilGetData()
                );
        }

        Il.ilDeleteImage(texid);

        Gl.glBegin(Gl.GL_QUADS);
            Gl.glTexCoord2f(0.0f, 0.0f); Gl.glVertex2f(-width / 2.0f, height / 2.0f);
            Gl.glTexCoord2f(0.0f, 1.0f); Gl.glVertex2f(-width / 2.0f, height / 2.0f);
            Gl.glTexCoord2f(1, 1); Gl.glVertex2f(1, -1);
            Gl.glTexCoord2f(1, 0); Gl.glVertex2f(1, 1);
        Gl.glEnd();
        Gl.glFlush();

        Gl.glDeleteTextures(1, ref image);
    }
}

Код не комментируется, но не сложен.С помощью этого класса я могу загружать изображения в формате png и jpg.

Надеюсь, это поможет вам.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...