0

現在、JOGL を使用してテクスチャ ポリゴン サーフェスを生成しようとしていますが、理解できないエラー メッセージが表示されます。Eclipse は、「java.lang.IndexOutOfBoundsException: 必要な 430233 バイトがバッファーに残っていますが、428349 しかありませんでした」と言います。私の知る限り、readTexture メソッドによって生成されるバッファリングされた画像は、glTex2D() メソッドで使用するには十分なサイズではありません。ただし、問題を解決する方法がわかりません。関連するコードのセクションを以下に示します。

public void init(GLAutoDrawable drawable) 
{
    final GL2 gl = drawable.getGL().getGL2();
    GLU glu = GLU.createGLU();
    //Create the glu object which allows access to the GLU library\

    gl.glShadeModel(GL2.GL_SMOOTH);              // Enable Smooth Shading
    gl.glClearColor(0.0f, 0.0f, 0.0f, 0.5f);    // Black Background
    gl.glClearDepth(1.0f);                      // Depth Buffer Setup
    gl.glEnable(GL.GL_DEPTH_TEST);              // Enables Depth Testing
    gl.glDepthFunc(GL.GL_LEQUAL);               // The Type Of Depth Testing To Do
    gl.glEnable(GL.GL_TEXTURE_2D);
    texture = genTexture(gl);
    gl.glBindTexture(GL.GL_TEXTURE_2D, texture);
    TextureReader.Texture texture = null;
    try {
        texture = TextureReader.readTexture   ("/C:/Users/Alex/Desktop/boy_reaching_up_for_goalpost_stencil.png");
    } catch (IOException e) {
        e.printStackTrace();
        throw new RuntimeException(e);
    }
    makeRGBTexture(gl, glu, texture, GL.GL_TEXTURE_2D, false);
    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);

}

private void makeRGBTexture(GL gl, GLU glu, TextureReader.Texture img, 
        int target, boolean mipmapped) {

    if (mipmapped) {
        glu.gluBuild2DMipmaps(target, GL.GL_RGB8, img.getWidth(), 
                img.getHeight(), GL.GL_RGB, GL.GL_UNSIGNED_BYTE, img.getPixels());
    } else {
        gl.glTexImage2D(target, 0, GL.GL_RGB, img.getWidth(), 
                img.getHeight(), 0, GL.GL_RGB, GL.GL_UNSIGNED_BYTE, img.getPixels());
    }
}

private int genTexture(GL gl) {
    final int[] tmp = new int[1];
    gl.glGenTextures(1, tmp, 0);
    return tmp[0];
}

    //Within the TextureReader class
    public static Texture readTexture(String filename, boolean storeAlphaChannel)

                    throws IOException {

            BufferedImage bufferedImage;

            if (filename.endsWith(".bmp")) {

                    bufferedImage = BitmapLoader.loadBitmap(filename);

            } else {

                    bufferedImage = readImage(filename);

            }

            return readPixels(bufferedImage, storeAlphaChannel);

    }

エラーは、makeRGBTexture() メソッド内の glTexImage2D() への呼び出しによって生成されています。

4

1 に答える 1