У меня есть кусок кода, который отлично работает под Windows 7 native или Ubuntu 16.04 native, однако с Ubuntu 16.04 внутри VMPlayer 6 с vmwgfx он не обновляется, если вы не перемещаете окно , Точно такой же код во всех трех случаях.JOGL внутри VMWare - обновление текстур не видно
Node это со взрослыми 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);
}
}
Окна
Ubuntu 16,04 внутри VMWare
Я потратил много времени, глядя на гидов о том, как это сделать, но не может обнаружить вызвав ошибку в Linux. Другие приложения OpenGL, glxgears и т.д. работают отлично ...
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 1, потому что новые аппаратные всплывающие ошибки, которые не могли быть исправлены без новых функций, которые вошли в более поздние версии JOGL. Вы почти наверняка сталкиваетесь с одним из этих ошибок. Существует не путь вперед, чтобы найти ошибку самостоятельно и ее исправление. – Gene