JOGL:Windows上的黑色面板

时间:2015-10-02 15:06:17

标签: windows jogl

我有一个扩展GLJPanel的类,并且GLEventListener带有

    @Override
    public void display( GLAutoDrawable glautodrawable ) {
        System.out.println("Painting");
        if(image!=null){
            GL2 gl2 = glautodrawable.getGL().getGL2();
            int format = GL.GL_LUMINANCE;
            int type  = GL.GL_UNSIGNED_SHORT;
            DataBufferUShort db = (DataBufferUShort) image.getRaster().getDataBuffer();
            short[] shorts = db.getData(0);
            Buffer buffer = ShortBuffer.wrap(shorts);
            gl2.glDrawPixels(image.getWidth(), image.getHeight(), format , type, buffer );
        }
    }

在Linux上,图像按我的预期显示,并调用显示方法。在Windows上,相同的代码显示黑屏,并且它看起来不像是调用显示方法。齿轮演示在Windows系统上没有问题。

编辑:

我已将其缩小到GridBagLayout的问题。将gbc.anchor设置为LINE_STARTLINE_ENDCENTER会导致图片显示或不显示

int bitdepth = 10;
                    GLProfile.initSingleton();
                    GLProfile glProfile = GLProfile.getDefault();

                    GLCapabilities glCapabilities = new GLCapabilities( glProfile );
                    glCapabilities.setBlueBits(bitdepth);
                    glCapabilities.setGreenBits(bitdepth);
                    glCapabilities.setRedBits(bitdepth);
                    glCapabilities.setAlphaBits(2);
                    glCapabilities.setDoubleBuffered(true);
                    glCapabilities.setHardwareAccelerated(true);
                    glCapabilities.setNumSamples(4);
                    glCapabilities.setBackgroundOpaque(false);
                    glCapabilities.setSampleBuffers(true);
                    GraphicsConfiguration gc = DeviceController.getConfOfRightMostMonitorAndLargest();




                    JFrame jf = new JFrame(gc);
                    jf.setExtendedState(JFrame.MAXIMIZED_BOTH);

                    GLCanvas canvas = new GLCanvas(glCapabilities);
                    canvas.addGLEventListener(new GLEventListener() {

                        @Override
                        public void reshape(GLAutoDrawable arg0, int arg1, int arg2, int arg3,
                                int arg4) {
                            // TODO Auto-generated method stub

                        }

                        @Override
                        public void init(GLAutoDrawable arg0) {
                            // TODO Auto-generated method stub

                        }

                        @Override
                        public void dispose(GLAutoDrawable arg0) {
                            // TODO Auto-generated method stub

                        }

                        @Override
                        public void display(GLAutoDrawable drawable) {
                            System.out.println("Painting");



                            BufferedImage image = null;
                            try {
                                image = ImageIO.read(new File("img.tiff"));
                            } catch (IOException e) {
                                // TODO Auto-generated catch block
                                e.printStackTrace();
                            }
                            if(image!=null){
                                GL2 gl2 = drawable.getGL().getGL2();

                                //gl2.glClear(GL.GL_COLOR_BUFFER_BIT);
                                int format = GL.GL_LUMINANCE;
                                int type  = GL.GL_UNSIGNED_SHORT;

                                DataBufferUShort db = (DataBufferUShort) image.getRaster().getDataBuffer();
                                short[] shorts = db.getData(0);
                                Buffer buffer = ShortBuffer.wrap(shorts);
                                //gl2.glViewport(0, 0, image.getWidth(), image.getHeight());

                                gl2.glDrawPixels(image.getWidth(), image.getHeight(), format , type, buffer );

                            }

                        }
                    });




                    JPanel jp = new JPanel();
                    jp.setLayout(new GridBagLayout());
                    GridBagConstraints gbc = new GridBagConstraints();
                    gbc.fill = GridBagConstraints.BOTH;
                    gbc.gridx=0;
                    gbc.gridy=0;
                    gbc.gridwidth=1;
                    gbc.gridheight=1;
                    gbc.weightx=1;
                    gbc.weighty=1;
                    gbc.anchor= GridBagConstraints.CENTER;
                    jp.add(canvas,gbc);

                    JScrollPane jsp = new JScrollPane();
                    jsp.getViewport().add(jp);

                    JLayeredPane jlp = new JLayeredPane();
                    jlp.setLayout(new GridBagLayout());

                    jlp.add(jsp, gbc);

                    //jsp.getViewport().add(dsc);
                    gbc = new GridBagConstraints();
                    gbc.gridx=0;
                    gbc.gridy=0;
                    gbc.gridwidth=1;
                    gbc.gridheight=1;
                    gbc.weightx=1;
                    gbc.weighty=1;
                    gbc.fill=GridBagConstraints.NONE;
                    gbc.anchor= GridBagConstraints.CENTER;
                    jf.getContentPane().setLayout(new GridBagLayout());
                    jf.getContentPane().add(jlp,gbc);

                    jf.setVisible(true);

0 个答案:

没有答案