纹理在osx上消失 - GL_TEXTURE_2D JOGL Eclipse java

时间:2014-11-05 21:31:26

标签: java eclipse macos opengl texture2d

我在Eclipse中绘制纹理时遇到了一些问题。

当我运行Java应用程序时,当窗口弹出时我只看到纹理(来自png的红色四边形)几毫秒,然后一切都变黑。

我得到了这个代码,它完全适用于我的所有同学PC,但不适用于我的Macbook Pro 2012.运行JRE 1.8。

已将jogl libary更改为mac osx的那些,我在调试时没有遇到任何错误。我可以看到drawQuad函数中有一些错误,如果我删除行gl.glEnable(GL.GL_TEXTURE_2D),所有内容都会绘制,但没有您可能理解的纹理,只有白色。

所以有人知道问题可能是什么吗?或者在GLxEXTURE_2D的osx中是否存在任何已知错误? 正如我所写,该应用程序在其他PC上运行良好。

这是我认为问题所在的课程:

private Texture texture;

void loadResources() throws GLException, IOException {
    if (texture == null)
        texture = TextureIO.newTexture(new File("3.png"), false);
}

void reshape(GLAutoDrawable drawable, int x, int y, int w, int h) {
    GL2 gl = drawable.getGL().getGL2();
    GLU glu = new GLU();

    gl.glMatrixMode(GL_PROJECTION);
    gl.glLoadIdentity(); // reset
    glu.gluOrtho2D (0.0, w, h, 0);  // define drawing area

    gl.glMatrixMode(GL_MODELVIEW);
    gl.glLoadIdentity(); // reset

}

void drawQuad(GLAutoDrawable drawable, float x, float y, float w, float h) {
    GL2 gl = drawable.getGL().getGL2();

    gl.glEnable(GL.GL_TEXTURE_2D);
    gl.glBindTexture(GL.GL_TEXTURE0, texture.getTarget());
    gl.glBegin(GL2.GL_QUADS);
    gl.glColor3f(1, 1, 1);
    gl.glTexCoord2f(1, 1);
    gl.glVertex2f(x,      y);
    gl.glTexCoord2f(1, 1);
    gl.glVertex2f(x + w, y);
    gl.glTexCoord2f(1, 0);
    gl.glVertex2f(x + w, y + h);
    gl.glTexCoord2f(0, 0);
    gl.glVertex2f(x,      y + h);

    gl.glEnd();

}

public void clearScreen(GLAutoDrawable drawable) {
    GL2 gl = drawable.getGL().getGL2();
    gl.glClear(GL.GL_COLOR_BUFFER_BIT | GL.GL_DEPTH_BUFFER_BIT);
}

如果您需要更多代码,请留言。

1 个答案:

答案 0 :(得分:0)

根据here glBegin和glEnd之间不允许使用glBindTexture。你检查过OpenGL错误了吗?这应该生成GL_INVALID_OPERATION。

编辑: 根据同样的情况,glBindTexture(target)的第一个参数不能是GL.GL_TEXTURE0。这应该会产生GL_INVALID_ENUM错误。