LWJGL Forum

Archive => DevIL => Topic started by: xindon on June 20, 2006, 18:40:45

Title: Scaling Error
Post by: xindon on June 20, 2006, 18:40:45
OpenGL doesn't like non power of two textures, you all now that.
So I want to resize unsuitable textures while loading them.

Here my code:



Code: [Select]

        IL.ilGenImages(tmp);
        IL.ilBindImage(tmp.get(0));

        // Load the image
        IL.ilLoadImage(filename)

        // Convert the image to RGBA
        IL.ilConvertImage(IL.IL_RGBA, IL.IL_BYTE);

        // Image attributes
        this.width = IL.ilGetInteger(IL.IL_IMAGE_WIDTH);
        this.height = IL.ilGetInteger(IL.IL_IMAGE_HEIGHT);
        int desiredWidth = getNextPowerOfTwo(this.width);
        int desiredHeight = getNextPowerOfTwo(this.height);
       
       
        // Resize image
        if (desiredWidth != width || desiredHeight != height) {
           
            System.out.println("Resize...");
            ILU.iluImageParameter(ILU.ILU_FILTER, ILU.ILU_BILINEAR);                            
            ILU.iluScale(desiredWidth, desiredHeight, IL.ilGetInteger(IL.IL_IMAGE_DEPTH));
        }
       
   
        // Get Image data
        imageData = IL.ilGetData();

        /* create the texture in opengl */ ...


After rescaling, IL.ilGetInteger(IL.IL_IMAGE_WIDTH) and (...HEIGHT) really return a new size (2^n). But in the end OpenGL doenst get a new suitable texture; it still uses the screwed original, which makes OpenGL starve to death. I guess about 1-2FPS.

What's the problem? I don't really understand what's going on.

Thanks very much
Title: hmmmmmm...
Post by: Fool Running on June 20, 2006, 19:36:18
I'm not sure if this is the cause of your problems (seems likely if those values create the OpenGL texture), but you aren't updating this.width and this.height with the new values.

If this doesn't help, it might help us if you show the /* create the texture in opengl */ part...

Also, you might try to replace IL.ilGetInteger(IL.IL_IMAGE_DEPTH) with a 1...

All I can think of :lol:
Title: Re: hmmmmmm...
Post by: xindon on June 21, 2006, 04:46:05
Quote from: "Fool Running"
I'm not sure if this is the cause of your problems (seems likely if those values create the OpenGL texture), but you aren't updating this.width and this.height with the new values.


Argh, d'oh :)

That was the problem; I didn't see that they're required in future steps. Now everything works fine.  Thank you very much




Code: [Select]
       // Resize image
        if (desiredWidth != width || desiredHeight != height) {
           
            System.out.println("Resize...");
            ILU.iluImageParameter(ILU.ILU_FILTER, ILU.ILU_BILINEAR);                            
            ILU.iluScale(desiredWidth, desiredHeight, IL.ilGetInteger(IL.IL_IMAGE_DEPTH));
           
            // Update texture variables
            this.width = desiredWidth;
            this.height = desiredHeight;            
        }