首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >GLCanvas和GLJPanel生成不同的图像

GLCanvas和GLJPanel生成不同的图像
EN

Stack Overflow用户
提问于 2015-10-05 23:12:39
回答 1查看 320关注 0票数 0

我的SSCE是:

代码语言:javascript
复制
    public static void main(final String[] args) throws IOException {

    try {
        SwingUtilities.invokeAndWait(new Runnable() {

            @Override
            public void run() {

                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 = getSomeGC();




                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.BOTH;
                gbc.anchor= GridBagConstraints.CENTER;
                jf.getContentPane().setLayout(new GridBagLayout());
                jf.getContentPane().add(jlp,gbc);

                jf.setVisible(true);


            }
        });
    } catch (InvocationTargetException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (InterruptedException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }


}

在GLJPanel上,我得到了两个不同的GLCanvas显示。我试着在10位灰度的显示器上显示10位。

当GLCanvas抛出异常时,GLJPanel是8位的,但我相信10位是正确显示的。

代码语言:javascript
复制
 Exception in thread "AWT-EventQueue-0" javax.media.opengl.GLException: Error making context 0x20000 current on Thread AWT-EventQueue-0, drawableWrite 0x42011b9a, drawableRead 0x42011b9a, werr: 0, WindowsWGLContext [Version 4.2 (Compat profile, arb, ES2 compat, ES3 compat, FBO, hardware) - 4.2.12327 Compatibility Profile Context FireGL 12.104.2.3000 [GL 4.2.0, vendor 12.104.2 (Compatibility Profile Context FireGL 12.104.2.3000)], options 0x1c03, this 0x263ce8f2, handle 0x20000, isShared false, jogamp.opengl.gl4.GL4bcImpl@633cca0,
 quirks: [NoDoubleBufferedBitmap],
Drawable: WindowsOnscreenWGLDrawable[Realized true,
Factory   jogamp.opengl.windows.wgl.WindowsWGLDrawableFactory@5dba26,
Handle    0x42011b9a,
EN

回答 1

Stack Overflow用户

发布于 2015-10-06 18:07:13

由于这是一个jogl bugreport,请将包含所有内容的完整的可编译SSCE发布到https://jogamp.org/bugzilla/的bugreport中,不要忘了附加源代码和img.tiff

从技术上讲,您报告了两个错误,因此您应该提交两个错误:

错误一:我们需要更多地了解您的用例,以及在使用GLCanvas和GLJPanel时,您在两个图像中看到的区别。

错误二:我们需要GLException的复制器:将上下文0x20000设置为当前线程时出错

有关更多详细信息,请阅读JOGL Bugreports &测试常见问题解答:http://jogamp.org/wiki/index.php/Jogl_FAQ#Bugreports_.26_Testing

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32951981

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档