2016-07-05 14 views
0

Windows 7ネイティブ、またはUbuntu 16.04ネイティブでうまく動作するコードがありますが、ウィンドウを移動しない限りvmwgfxのVMPlayer 6内でUbuntu 16.04を使用すると更新されません。 3つのケースすべてでまったく同じコード。VMWare内部のJOGL - テクスチャの更新がありません

ノードは、これは古いJOGLである1

コード

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

Windows 7

のUbuntu 16.04のVMWare

Ubuntu 16.04

内部の私はこれを行う方法のガイドを見て多くの時間を費やしてきたが、見つけることができませんそれが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: 
+0

更新されたライブラリを使用しないのはなぜですか? – elect

+0

これはレガシープロジェクトであり、誰も移行を危険にさらすことはしません – Adam

+1

JOGLの新機能は、新しいJOGLバージョンに組み込まれた新機能なしで修正できなかったバグを浮上させたため、JOGL 1を非難しました。あなたは、これらのバグの1つにほとんど確実に突き当っています。あなた自身でバグを見つけて修正する方法はありません。 – Gene

答えて

1

転送する唯一の方法は、JOGL2に既存のコードを移行することです。この場合、VMWare内では正常に動作します。 JOGL2へのポートはかなり簡単です。

関連する問題