我在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);
}
如果您需要更多代码,请留言。
答案 0 :(得分:0)
根据here glBegin和glEnd之间不允许使用glBindTexture。你检查过OpenGL错误了吗?这应该生成GL_INVALID_OPERATION。
编辑: 根据同样的情况,glBindTexture(target)的第一个参数不能是GL.GL_TEXTURE0。这应该会产生GL_INVALID_ENUM错误。