[英]Java OpenGL draw textures
我可以在com.jogamp.opengl.awt.GLCanvas上繪制一個紋理,但是當bufferedimage更改時,我想更新紋理。 我寫了這樣的顯示方法:
public void display(GLAutoDrawable glAutoDrawable) {
try {
if (gl2 == null) {
gl2 = glAutoDrawable.getGL().getGL2(); // get the OpenGL 2 graphics context
}
gl2.glClear(gl2.GL_COLOR_BUFFER_BIT | gl2.GL_DEPTH_BUFFER_BIT); // clear color and depth buffers
gl2.glLoadIdentity(); // reset the model-view matrix
if (image != null) {
if (image != null) {
int[] pixels_raw = new int[this.camPanel.width * this.camPanel.height];
pixels_raw = image.getRGB(0, 0, this.camPanel.width, this.camPanel.height, null, 0, this.camPanel.width);
pixels.rewind();
for (int j = this.camPanel.height - 1; j >= 0; j--) {
for (int i = 0; i < this.camPanel.width; i++) {
int pixel = pixels_raw[j * this.camPanel.width + i];
pixels.put((byte) ((pixel >> 16) & 0xFF));//RED
pixels.put((byte) ((pixel >> 8) & 0xFF));//GREEN
pixels.put((byte) ((pixel >> 0) & 0xFF));//BLUE
pixels.put((byte) ((pixel >> 24) & 0xFF));//ALPHA
}
}
pixels.flip();
// gl2.glBindTexture(gl2.GL_TEXTURE_2D, 1);
// gl2.glTexParameterf(gl2.GL_TEXTURE_2D, gl2.GL_TEXTURE_WRAP_S, gl2.GL_REPEAT);
// gl2.glTexParameterf(gl2.GL_TEXTURE_2D, gl2.GL_TEXTURE_WRAP_T, gl2.GL_REPEAT);
// gl2.glTexParameterf(gl2.GL_TEXTURE_2D, gl2.GL_TEXTURE_MIN_FILTER, gl2.GL_NEAREST);
// gl2.glTexParameterf(gl2.GL_TEXTURE_2D, gl2.GL_TEXTURE_MAG_FILTER, gl2.GL_NEAREST);
gl2.glTexImage2D(gl2.GL_TEXTURE_2D, 0, gl2.GL_RGBA, this.camPanel.width, this.camPanel.height, 0, gl2.GL_RGBA, gl2.GL_UNSIGNED_BYTE, pixels);
// gl2.glFlush();
System.out.println("Error " + gl2.glGetError());
pixels.clear();
}
gl2.glEnd();
}
} catch (Exception e) {
e.printStackTrace();
}
}
更改圖像時,我正在調用顯示方法,但始終存在黑屏並給出錯誤:“ JAWTWindow:表面更改0x17011262-> 0x7e011c18”“錯誤1282”
通過調用glEnd()
引發錯誤。 該文檔指出:
如果在沒有glBegin的情況下執行glEnd,則生成GL_INVALID_OPERATION。
由於代碼僅包含glEnd()
而沒有glBegin
,因此此調用無效。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.