0
Windows 7ネイティブ、またはUbuntu 16.04ネイティブでうまく動作するコードがありますが、ウィンドウを移動しない限りvmwgfxのVMPlayer 6内でUbuntu 16.04を使用すると更新されません。 3つのケースすべてでまったく同じコード。VMWare内部のJOGL - テクスチャの更新がありません
ノードは、これは古いJOGLである1
- http://jogamp.org/deployment/archive/master/gluegen-old-1.0b6/gluegen-rt-natives-linux-amd64.jar
- http://jogamp.org/deployment/archive/master/gluegen-old-1.0b6/gluegen-rt.jar
- http://jogamp.org/deployment/archive/master/jogl-old-1.1.1/jogl.jar
- http://jogamp.org/deployment/archive/master/jogl-old-1.1.1/jogl-natives-linux-amd64.jar
コード
public class JoglTest2 {
public static class JoglPanel extends GLJPanel {
public JoglPanel() {
addGLEventListener(new EventListener());
new FPSAnimator(this, 10).start();
}
}
public static class EventListener implements GLEventListener {
private int textureData;
int width = 100;
int height = 200;
private int clock;
@Override
public void display(GLAutoDrawable drawable) {
GL gl = drawable.getGL();
gl.glClear(GL.GL_COLOR_BUFFER_BIT);
gl.glLoadIdentity();
gl.glClearColor(0.5f, 0, 0.5f, 1);
gl.glActiveTexture(GL.GL_TEXTURE0);
gl.glEnable(GL.GL_TEXTURE_2D);
gl.glBindTexture(GL.GL_TEXTURE_2D, this.textureData);
int[] data = new int[width];
for (int x = 0; x < width; x++) {
int red = (x + clock) % 255;
int green = 0;
int blue = 127;
data[x] = 255 | (blue << 8) | (green << 16) | (red << 24);
}
clock++;
IntBuffer dataBuffer = IntBuffer.wrap(data);
gl.glTexSubImage2D(GL.GL_TEXTURE_2D, 0, 0, (clock % height), width, 1, GL.GL_RGBA,
GL.GL_UNSIGNED_INT_8_8_8_8, dataBuffer);
gl.glBegin(GL.GL_QUADS);
gl.glTexCoord2f(0f, 0f);
gl.glVertex2f(-1.0f, -1.0f);
gl.glTexCoord2f(0f, 1.0f);
gl.glVertex2f(-1.0f, 1.0f);
gl.glTexCoord2f(1.0f, 1.0f);
gl.glVertex2f(1.0f, 1.0f);
gl.glTexCoord2f(1.0f, 0);
gl.glVertex2f(1.f, -1.0f);
gl.glEnd();
}
@Override
public void displayChanged(GLAutoDrawable arg0, boolean arg1, boolean arg2) {
}
@Override
public void init(GLAutoDrawable drawable) {
GL gl = drawable.getGL();
final int[] tmp = new int[1];
gl.glGenTextures(1, tmp, 0);
textureData = tmp[0];
int[] data = new int[width * height];
IntBuffer dataBuffer = IntBuffer.wrap(data);
gl.glActiveTexture(GL.GL_TEXTURE0);
gl.glBindTexture(GL.GL_TEXTURE_2D, this.textureData);
gl.glTexImage2D(GL.GL_TEXTURE_2D, 0, GL.GL_RGBA, width, height, 0, GL.GL_RGBA, GL.GL_UNSIGNED_INT_8_8_8_8,
dataBuffer);
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);
gl.glTexParameteri(GL.GL_TEXTURE_2D, GL.GL_TEXTURE_WRAP_S,
GL.GL_CLAMP_TO_EDGE);
gl.glTexParameteri(GL.GL_TEXTURE_2D, GL.GL_TEXTURE_WRAP_T,
GL.GL_CLAMP_TO_EDGE);
int shaderId = gl.glCreateShader(GL.GL_FRAGMENT_SHADER);
final String[] strs = { "uniform sampler2D inputTexture;\n"+
"void main(void) {\n" +
" gl_FragColor = texture2D(inputTexture, gl_TexCoord[0].st);\n" +
"}\n"
};
gl.glShaderSource(shaderId, strs.length, strs, (int[]) null, 0);
gl.glCompileShader(shaderId);
int progId = gl.glCreateProgram();
gl.glAttachShader(progId, shaderId);
gl.glLinkProgram(progId);
int uniformInputTexture = gl.glGetUniformLocation(progId, "inputTexture");
gl.glUseProgram(progId);
gl.glUniform1i(uniformInputTexture, 0);
}
@Override
public void reshape(GLAutoDrawable arg0, int arg1, int arg2, int arg3, int arg4) {
}
}
public static void main(String[] args) {
JFrame frame = new JFrame();
frame.getContentPane().setLayout(new BorderLayout());
frame.getContentPane().add(new JoglPanel());
frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
frame.setSize(200, 200);
frame.setVisible(true);
}
}
のWindows
のUbuntu 16.04のVMWare
内部の私はこれを行う方法のガイドを見て多くの時間を費やしてきたが、見つけることができませんそれがLinuxで失敗する原因になります。 glxgearsなど他のOpenGLアプリケーションは、正常に動作...
glxinfo | grep -i opengl
OpenGL vendor string: VMware, Inc.
OpenGL renderer string: Gallium 0.4 on SVGA3D; build: RELEASE; LLVM;
OpenGL version string: 2.1 Mesa 11.2.0
OpenGL shading language version string: 1.20
OpenGL extensions:
OpenGL ES profile version string: OpenGL ES 2.0 Mesa 11.2.0
OpenGL ES profile shading language version string: OpenGL ES GLSL ES 1.0.16
OpenGL ES profile extensions:
更新されたライブラリを使用しないのはなぜですか? – elect
これはレガシープロジェクトであり、誰も移行を危険にさらすことはしません – Adam
JOGLの新機能は、新しいJOGLバージョンに組み込まれた新機能なしで修正できなかったバグを浮上させたため、JOGL 1を非難しました。あなたは、これらのバグの1つにほとんど確実に突き当っています。あなた自身でバグを見つけて修正する方法はありません。 – Gene