Example usage for org.lwjgl.opengl GL11 GL_COLOR_INDEX

List of usage examples for org.lwjgl.opengl GL11 GL_COLOR_INDEX

Introduction

In this page you can find the example usage for org.lwjgl.opengl GL11 GL_COLOR_INDEX.

Prototype

int GL_COLOR_INDEX

To view the source code for org.lwjgl.opengl GL11 GL_COLOR_INDEX.

Click Source Link

Document

PixelFormat

Usage

From source file:com.ardor3d.scene.state.lwjgl.util.LwjglTextureUtil.java

License:Open Source License

public static int getGLPixelFormat(final ImageDataFormat format) {
    switch (format) {
    case RGBA:/*from w  w w  .  jav  a 2 s  .  co m*/
        return GL11.GL_RGBA;
    case RGB:
        return GL11.GL_RGB;
    case RG:
        return ARBTextureRg.GL_RG;
    case Alpha:
        return GL11.GL_ALPHA;
    case Luminance:
        return GL11.GL_LUMINANCE;
    case Intensity:
        return GL11.GL_INTENSITY;
    case LuminanceAlpha:
        return GL11.GL_LUMINANCE_ALPHA;
    case Depth:
        return GL11.GL_DEPTH_COMPONENT;
    case BGR:
        return GL12.GL_BGR;
    case BGRA:
        return GL12.GL_BGRA;
    case Red:
        return GL11.GL_RED;
    case Blue:
        return GL11.GL_BLUE;
    case Green:
        return GL11.GL_GREEN;
    case ColorIndex:
        return GL11.GL_COLOR_INDEX;
    case StencilIndex:
        return GL11.GL_STENCIL_INDEX;
    default:
        break;
    }
    throw new IllegalArgumentException("Incorrect format set: " + format);
}

From source file:kuake2.render.lwjgl.Draw.java

License:Open Source License

protected void Draw_StretchRaw(int x, int y, int w, int h, int cols, int rows, byte[] data) {
    int i, j, trows;
    int sourceIndex;
    int frac, fracstep;
    float hscale;
    int row;// w  ww.j  a va2  s.com
    float t;

    GL_Bind(0);

    if (rows <= 256) {
        hscale = 1;
        trows = rows;
    } else {
        hscale = rows / 256.0f;
        trows = 256;
    }
    t = rows * hscale / 256;

    if (!qglColorTableEXT) {
        //int[] image32 = new int[256*256];
        image32.clear();
        int destIndex = 0;

        for (i = 0; i < trows; i++) {
            row = (int) (i * hscale);
            if (row > rows)
                break;
            sourceIndex = cols * row;
            destIndex = i * 256;
            fracstep = cols * 0x10000 / 256;
            frac = fracstep >> 1;
            for (j = 0; j < 256; j++) {
                image32.put(destIndex + j, r_rawpalette[data[sourceIndex + (frac >> 16)] & 0xff]);
                frac += fracstep;
            }
        }
        GL11.glTexImage2D(GL11.GL_TEXTURE_2D, 0, gl_tex_solid_format, 256, 256, 0, GL11.GL_RGBA,
                GL11.GL_UNSIGNED_BYTE, image32);
    } else {
        //byte[] image8 = new byte[256*256];
        image8.clear();
        int destIndex = 0;
        ;

        for (i = 0; i < trows; i++) {
            row = (int) (i * hscale);
            if (row > rows)
                break;
            sourceIndex = cols * row;
            destIndex = i * 256;
            fracstep = cols * 0x10000 / 256;
            frac = fracstep >> 1;
            for (j = 0; j < 256; j++) {
                image8.put(destIndex + j, data[sourceIndex + (frac >> 16)]);
                frac += fracstep;
            }
        }

        GL11.glTexImage2D(GL11.GL_TEXTURE_2D, 0, GL_COLOR_INDEX8_EXT, 256, 256, 0, GL11.GL_COLOR_INDEX,
                GL11.GL_UNSIGNED_BYTE, image8);
    }
    GL11.glTexParameterf(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_MIN_FILTER, GL11.GL_LINEAR);
    GL11.glTexParameterf(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_MAG_FILTER, GL11.GL_LINEAR);

    if ((gl_config.renderer == GL_RENDERER_MCD) || ((gl_config.renderer & GL_RENDERER_RENDITION) != 0))
        GL11.glDisable(GL11.GL_ALPHA_TEST);

    GL11.glBegin(GL11.GL_QUADS);
    GL11.glTexCoord2f(0, 0);
    GL11.glVertex2f(x, y);
    GL11.glTexCoord2f(1, 0);
    GL11.glVertex2f(x + w, y);
    GL11.glTexCoord2f(1, t);
    GL11.glVertex2f(x + w, y + h);
    GL11.glTexCoord2f(0, t);
    GL11.glVertex2f(x, y + h);
    GL11.glEnd();

    if ((gl_config.renderer == GL_RENDERER_MCD) || ((gl_config.renderer & GL_RENDERER_RENDITION) != 0))
        GL11.glEnable(GL11.GL_ALPHA_TEST);
}

From source file:kuake2.render.lwjgl.Image.java

License:Open Source License

boolean GL_Upload32(int[] data, int width, int height, boolean mipmap) {
    int samples;/*  w ww .j av  a 2  s.  co  m*/
    int scaled_width, scaled_height;
    int i, c;
    int comp;

    Arrays.fill(scaled, 0);
    // Arrays.fill(paletted_texture, (byte)0);
    paletted_texture.clear();
    for (int j = 0; j < 256 * 256; j++)
        paletted_texture.put(j, (byte) 0);

    uploaded_paletted = false;

    for (scaled_width = 1; scaled_width < width; scaled_width <<= 1)
        ;
    if (gl_round_down.value > 0.0f && scaled_width > width && mipmap)
        scaled_width >>= 1;
    for (scaled_height = 1; scaled_height < height; scaled_height <<= 1)
        ;
    if (gl_round_down.value > 0.0f && scaled_height > height && mipmap)
        scaled_height >>= 1;

    // let people sample down the world textures for speed
    if (mipmap) {
        scaled_width >>= (int) gl_picmip.value;
        scaled_height >>= (int) gl_picmip.value;
    }

    // don't ever bother with >256 textures
    if (scaled_width > 256)
        scaled_width = 256;
    if (scaled_height > 256)
        scaled_height = 256;

    if (scaled_width < 1)
        scaled_width = 1;
    if (scaled_height < 1)
        scaled_height = 1;

    upload_width = scaled_width;
    upload_height = scaled_height;

    if (scaled_width * scaled_height > 256 * 256)
        Com.Error(Defines.ERR_DROP, "GL_Upload32: too big");

    // scan the texture for any non-255 alpha
    c = width * height;
    samples = gl_solid_format;

    for (i = 0; i < c; i++) {
        if ((data[i] & 0xff000000) != 0xff000000) {
            samples = gl_alpha_format;
            break;
        }
    }

    if (samples == gl_solid_format)
        comp = gl_tex_solid_format;
    else if (samples == gl_alpha_format)
        comp = gl_tex_alpha_format;
    else {
        VID.Printf(Defines.PRINT_ALL, "Unknown number of texture components " + samples + '\n');
        comp = samples;
    }

    // simulates a goto
    try {
        if (scaled_width == width && scaled_height == height) {
            if (!mipmap) {
                if (qglColorTableEXT && gl_ext_palettedtexture.value != 0.0f && samples == gl_solid_format) {
                    uploaded_paletted = true;
                    GL_BuildPalettedTexture(paletted_texture, data, scaled_width, scaled_height);
                    GL11.glTexImage2D(GL11.GL_TEXTURE_2D, 0, GL_COLOR_INDEX8_EXT, scaled_width, scaled_height,
                            0, GL11.GL_COLOR_INDEX, GL11.GL_UNSIGNED_BYTE, paletted_texture);
                } else {
                    tex.rewind();
                    tex.put(data);
                    tex.rewind();
                    GL11.glTexImage2D(GL11.GL_TEXTURE_2D, 0, comp, scaled_width, scaled_height, 0, GL11.GL_RGBA,
                            GL11.GL_UNSIGNED_BYTE, tex);
                }
                //goto done;
                throw gotoDone;
            }
            //memcpy (scaled, data, width*height*4); were bytes
            System.arraycopy(data, 0, scaled, 0, width * height);
        } else
            GL_ResampleTexture(data, width, height, scaled, scaled_width, scaled_height);

        GL_LightScaleTexture(scaled, scaled_width, scaled_height, !mipmap);

        if (qglColorTableEXT && gl_ext_palettedtexture.value != 0.0f && (samples == gl_solid_format)) {
            uploaded_paletted = true;
            GL_BuildPalettedTexture(paletted_texture, scaled, scaled_width, scaled_height);
            GL11.glTexImage2D(GL11.GL_TEXTURE_2D, 0, GL_COLOR_INDEX8_EXT, scaled_width, scaled_height, 0,
                    GL11.GL_COLOR_INDEX, GL11.GL_UNSIGNED_BYTE, paletted_texture);
        } else {
            tex.rewind();
            tex.put(scaled);
            tex.rewind();
            GL11.glTexImage2D(GL11.GL_TEXTURE_2D, 0, comp, scaled_width, scaled_height, 0, GL11.GL_RGBA,
                    GL11.GL_UNSIGNED_BYTE, tex);
        }

        if (mipmap) {
            int miplevel;
            miplevel = 0;
            while (scaled_width > 1 || scaled_height > 1) {
                GL_MipMap(scaled, scaled_width, scaled_height);
                scaled_width >>= 1;
                scaled_height >>= 1;
                if (scaled_width < 1)
                    scaled_width = 1;
                if (scaled_height < 1)
                    scaled_height = 1;

                miplevel++;
                if (qglColorTableEXT && gl_ext_palettedtexture.value != 0.0f && samples == gl_solid_format) {
                    uploaded_paletted = true;
                    GL_BuildPalettedTexture(paletted_texture, scaled, scaled_width, scaled_height);
                    GL11.glTexImage2D(GL11.GL_TEXTURE_2D, miplevel, GL_COLOR_INDEX8_EXT, scaled_width,
                            scaled_height, 0, GL11.GL_COLOR_INDEX, GL11.GL_UNSIGNED_BYTE, paletted_texture);
                } else {
                    tex.rewind();
                    tex.put(scaled);
                    tex.rewind();
                    GL11.glTexImage2D(GL11.GL_TEXTURE_2D, miplevel, comp, scaled_width, scaled_height, 0,
                            GL11.GL_RGBA, GL11.GL_UNSIGNED_BYTE, tex);
                }
            }
        }
        // label done:
    } catch (Throwable e) {
        // replaces label done
    }

    if (mipmap) {
        GL11.glTexParameterf(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_MIN_FILTER, gl_filter_min);
        GL11.glTexParameterf(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_MAG_FILTER, gl_filter_max);
    } else {
        GL11.glTexParameterf(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_MIN_FILTER, gl_filter_max);
        GL11.glTexParameterf(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_MAG_FILTER, gl_filter_max);
    }

    return (samples == gl_alpha_format);
}

From source file:kuake2.render.lwjgl.Image.java

License:Open Source License

boolean GL_Upload8(byte[] data, int width, int height, boolean mipmap, boolean is_sky) {

    Arrays.fill(trans, 0);//from w w w. j a  v a2 s.  c om

    int s = width * height;

    if (s > trans.length)
        Com.Error(Defines.ERR_DROP, "GL_Upload8: too large");

    if (qglColorTableEXT && gl_ext_palettedtexture.value != 0.0f && is_sky) {
        GL11.glTexImage2D(GL11.GL_TEXTURE_2D, 0, GL_COLOR_INDEX8_EXT, width, height, 0, GL11.GL_COLOR_INDEX,
                GL11.GL_UNSIGNED_BYTE, ByteBuffer.wrap(data));

        GL11.glTexParameterf(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_MIN_FILTER, gl_filter_max);
        GL11.glTexParameterf(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_MAG_FILTER, gl_filter_max);

        // TODO check this
        return false;
    } else {
        int p;
        for (int i = 0; i < s; i++) {
            p = data[i] & 0xff;
            trans[i] = d_8to24table[p];

            if (p == 255) { // transparent, so scan around for another color
                // to avoid alpha fringes
                // FIXME: do a full flood fill so mips work...
                if (i > width && (data[i - width] & 0xff) != 255)
                    p = data[i - width] & 0xff;
                else if (i < s - width && (data[i + width] & 0xff) != 255)
                    p = data[i + width] & 0xff;
                else if (i > 0 && (data[i - 1] & 0xff) != 255)
                    p = data[i - 1] & 0xff;
                else if (i < s - 1 && (data[i + 1] & 0xff) != 255)
                    p = data[i + 1] & 0xff;
                else
                    p = 0;
                // copy rgb components

                // ((byte *)&trans[i])[0] = ((byte *)&d_8to24table[p])[0];
                // ((byte *)&trans[i])[1] = ((byte *)&d_8to24table[p])[1];
                // ((byte *)&trans[i])[2] = ((byte *)&d_8to24table[p])[2];

                trans[i] = d_8to24table[p] & 0x00FFFFFF; // only rgb
            }
        }

        return GL_Upload32(trans, width, height, mipmap);
    }
}

From source file:org.free.jake2.render.lwjgl.Draw.java

License:Open Source License

protected void Draw_StretchRaw(int x, int y, int w, int h, int cols, int rows, byte[] data) {
    int i, j, trows;
    int sourceIndex;
    int frac, fracstep;
    float hscale;
    int row;//w ww .ja v a2  s. com
    float t;

    GL_Bind(0);

    if (rows <= 256) {
        hscale = 1;
        trows = rows;
    } else {
        hscale = rows / 256.0f;
        trows = 256;
    }
    t = rows * hscale / 256;

    if (!qglColorTableEXT) {
        //int[] image32 = new int[256*256];
        image32.clear();
        int destIndex = 0;

        for (i = 0; i < trows; i++) {
            row = (int) (i * hscale);
            if (row > rows) {
                break;
            }
            sourceIndex = cols * row;
            destIndex = i * 256;
            fracstep = cols * 0x10000 / 256;
            frac = fracstep >> 1;
            for (j = 0; j < 256; j++) {
                image32.put(destIndex + j, r_rawpalette[data[sourceIndex + (frac >> 16)] & 0xff]);
                frac += fracstep;
            }
        }
        GL11.glTexImage2D(GL11.GL_TEXTURE_2D, 0, gl_tex_solid_format, 256, 256, 0, GL11.GL_RGBA,
                GL11.GL_UNSIGNED_BYTE, image32);
    } else {
        //byte[] image8 = new byte[256*256];
        image8.clear();
        int destIndex = 0;

        for (i = 0; i < trows; i++) {
            row = (int) (i * hscale);
            if (row > rows) {
                break;
            }
            sourceIndex = cols * row;
            destIndex = i * 256;
            fracstep = cols * 0x10000 / 256;
            frac = fracstep >> 1;
            for (j = 0; j < 256; j++) {
                image8.put(destIndex + j, data[sourceIndex + (frac >> 16)]);
                frac += fracstep;
            }
        }

        GL11.glTexImage2D(GL11.GL_TEXTURE_2D, 0, GL_COLOR_INDEX8_EXT, 256, 256, 0, GL11.GL_COLOR_INDEX,
                GL11.GL_UNSIGNED_BYTE, image8);
    }
    GL11.glTexParameterf(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_MIN_FILTER, GL11.GL_LINEAR);
    GL11.glTexParameterf(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_MAG_FILTER, GL11.GL_LINEAR);

    if ((gl_config.renderer == GL_RENDERER_MCD) || ((gl_config.renderer & GL_RENDERER_RENDITION) != 0)) {
        GL11.glDisable(GL11.GL_ALPHA_TEST);
    }

    GL11.glBegin(GL11.GL_QUADS);
    GL11.glTexCoord2f(0, 0);
    GL11.glVertex2f(x, y);
    GL11.glTexCoord2f(1, 0);
    GL11.glVertex2f(x + w, y);
    GL11.glTexCoord2f(1, t);
    GL11.glVertex2f(x + w, y + h);
    GL11.glTexCoord2f(0, t);
    GL11.glVertex2f(x, y + h);
    GL11.glEnd();

    if ((gl_config.renderer == GL_RENDERER_MCD) || ((gl_config.renderer & GL_RENDERER_RENDITION) != 0)) {
        GL11.glEnable(GL11.GL_ALPHA_TEST);
    }
}

From source file:org.free.jake2.render.lwjgl.Image.java

License:Open Source License

boolean GL_Upload32(int[] data, int width, int height, boolean mipmap) {
    int samples;/*w  w  w  . j a  v  a2  s .c o m*/
    int scaled_width, scaled_height;
    int i, c;
    int comp;

    Arrays.fill(scaled, 0);
    // Arrays.fill(paletted_texture, (byte)0);
    paletted_texture.clear();
    for (int j = 0; j < 256 * 256; j++) {
        paletted_texture.put(j, (byte) 0);
    }

    uploaded_paletted = false;

    for (scaled_width = 1; scaled_width < width; scaled_width <<= 1)
        ;
    if (gl_round_down.value > 0.0f && scaled_width > width && mipmap) {
        scaled_width >>= 1;
    }
    for (scaled_height = 1; scaled_height < height; scaled_height <<= 1)
        ;
    if (gl_round_down.value > 0.0f && scaled_height > height && mipmap) {
        scaled_height >>= 1;
    }

    // let people sample down the world textures for speed
    if (mipmap) {
        scaled_width >>= (int) gl_picmip.value;
        scaled_height >>= (int) gl_picmip.value;
    }

    // don't ever bother with >256 textures
    if (scaled_width > 256) {
        scaled_width = 256;
    }
    if (scaled_height > 256) {
        scaled_height = 256;
    }

    if (scaled_width < 1) {
        scaled_width = 1;
    }
    if (scaled_height < 1) {
        scaled_height = 1;
    }

    upload_width = scaled_width;
    upload_height = scaled_height;

    if (scaled_width * scaled_height > 256 * 256) {
        Com.Error(Defines.ERR_DROP, "GL_Upload32: too big");
    }

    // scan the texture for any non-255 alpha
    c = width * height;
    samples = gl_solid_format;

    for (i = 0; i < c; i++) {
        if ((data[i] & 0xff000000) != 0xff000000) {
            samples = gl_alpha_format;
            break;
        }
    }

    if (samples == gl_solid_format) {
        comp = gl_tex_solid_format;
    } else if (samples == gl_alpha_format) {
        comp = gl_tex_alpha_format;
    } else {
        VID.Printf(Defines.PRINT_ALL, "Unknown number of texture components " + samples + '\n');
        comp = samples;
    }

    // simulates a goto
    try {
        if (scaled_width == width && scaled_height == height) {
            if (!mipmap) {
                if (qglColorTableEXT && gl_ext_palettedtexture.value != 0.0f && samples == gl_solid_format) {
                    uploaded_paletted = true;
                    GL_BuildPalettedTexture(paletted_texture, data, scaled_width, scaled_height);
                    GL11.glTexImage2D(GL11.GL_TEXTURE_2D, 0, GL_COLOR_INDEX8_EXT, scaled_width, scaled_height,
                            0, GL11.GL_COLOR_INDEX, GL11.GL_UNSIGNED_BYTE, paletted_texture);
                } else {
                    tex.rewind();
                    tex.put(data);
                    tex.rewind();
                    GL11.glTexImage2D(GL11.GL_TEXTURE_2D, 0, comp, scaled_width, scaled_height, 0, GL11.GL_RGBA,
                            GL11.GL_UNSIGNED_BYTE, tex);
                }
                //goto done;
                throw gotoDone;
            }
            //memcpy (scaled, data, width*height*4); were bytes
            System.arraycopy(data, 0, scaled, 0, width * height);
        } else {
            GL_ResampleTexture(data, width, height, scaled, scaled_width, scaled_height);
        }

        GL_LightScaleTexture(scaled, scaled_width, scaled_height, !mipmap);

        if (qglColorTableEXT && gl_ext_palettedtexture.value != 0.0f && (samples == gl_solid_format)) {
            uploaded_paletted = true;
            GL_BuildPalettedTexture(paletted_texture, scaled, scaled_width, scaled_height);
            GL11.glTexImage2D(GL11.GL_TEXTURE_2D, 0, GL_COLOR_INDEX8_EXT, scaled_width, scaled_height, 0,
                    GL11.GL_COLOR_INDEX, GL11.GL_UNSIGNED_BYTE, paletted_texture);
        } else {
            tex.rewind();
            tex.put(scaled);
            tex.rewind();
            GL11.glTexImage2D(GL11.GL_TEXTURE_2D, 0, comp, scaled_width, scaled_height, 0, GL11.GL_RGBA,
                    GL11.GL_UNSIGNED_BYTE, tex);
        }

        if (mipmap) {
            int miplevel;
            miplevel = 0;
            while (scaled_width > 1 || scaled_height > 1) {
                GL_MipMap(scaled, scaled_width, scaled_height);
                scaled_width >>= 1;
                scaled_height >>= 1;
                if (scaled_width < 1) {
                    scaled_width = 1;
                }
                if (scaled_height < 1) {
                    scaled_height = 1;
                }

                miplevel++;
                if (qglColorTableEXT && gl_ext_palettedtexture.value != 0.0f && samples == gl_solid_format) {
                    uploaded_paletted = true;
                    GL_BuildPalettedTexture(paletted_texture, scaled, scaled_width, scaled_height);
                    GL11.glTexImage2D(GL11.GL_TEXTURE_2D, miplevel, GL_COLOR_INDEX8_EXT, scaled_width,
                            scaled_height, 0, GL11.GL_COLOR_INDEX, GL11.GL_UNSIGNED_BYTE, paletted_texture);
                } else {
                    tex.rewind();
                    tex.put(scaled);
                    tex.rewind();
                    GL11.glTexImage2D(GL11.GL_TEXTURE_2D, miplevel, comp, scaled_width, scaled_height, 0,
                            GL11.GL_RGBA, GL11.GL_UNSIGNED_BYTE, tex);
                }
            }
        }
        // label done:
    } catch (Throwable e) {
        // replaces label done
    }

    if (mipmap) {
        GL11.glTexParameterf(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_MIN_FILTER, gl_filter_min);
        GL11.glTexParameterf(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_MAG_FILTER, gl_filter_max);
    } else {
        GL11.glTexParameterf(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_MIN_FILTER, gl_filter_max);
        GL11.glTexParameterf(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_MAG_FILTER, gl_filter_max);
    }

    return (samples == gl_alpha_format);
}

From source file:org.free.jake2.render.lwjgl.Image.java

License:Open Source License

boolean GL_Upload8(byte[] data, int width, int height, boolean mipmap, boolean is_sky) {

    Arrays.fill(trans, 0);/*from  w ww.  j a v  a 2 s  .c om*/

    int s = width * height;

    if (s > trans.length) {
        Com.Error(Defines.ERR_DROP, "GL_Upload8: too large");
    }

    if (qglColorTableEXT && gl_ext_palettedtexture.value != 0.0f && is_sky) {
        GL11.glTexImage2D(GL11.GL_TEXTURE_2D, 0, GL_COLOR_INDEX8_EXT, width, height, 0, GL11.GL_COLOR_INDEX,
                GL11.GL_UNSIGNED_BYTE, ByteBuffer.wrap(data));

        GL11.glTexParameterf(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_MIN_FILTER, gl_filter_max);
        GL11.glTexParameterf(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_MAG_FILTER, gl_filter_max);

        // TODO check this
        return false;
    } else {
        int p;
        int rgb;
        for (int i = 0; i < s; i++) {
            p = data[i] & 0xff;
            trans[i] = d_8to24table[p];

            if (p == 255) { // transparent, so scan around for another color
                // to avoid alpha fringes
                // FIXME: do a full flood fill so mips work...
                if (i > width && (data[i - width] & 0xff) != 255) {
                    p = data[i - width] & 0xff;
                } else if (i < s - width && (data[i + width] & 0xff) != 255) {
                    p = data[i + width] & 0xff;
                } else if (i > 0 && (data[i - 1] & 0xff) != 255) {
                    p = data[i - 1] & 0xff;
                } else if (i < s - 1 && (data[i + 1] & 0xff) != 255) {
                    p = data[i + 1] & 0xff;
                } else {
                    p = 0;
                }
                // copy rgb components

                // ((byte *)&trans[i])[0] = ((byte *)&d_8to24table[p])[0];
                // ((byte *)&trans[i])[1] = ((byte *)&d_8to24table[p])[1];
                // ((byte *)&trans[i])[2] = ((byte *)&d_8to24table[p])[2];

                trans[i] = d_8to24table[p] & 0x00FFFFFF; // only rgb
            }
        }

        return GL_Upload32(trans, width, height, mipmap);
    }
}