我正在尝试将JOGL用于QtJambi。我正在使用我在教程中找到的代码(其中一些非常陈旧)和论坛但没有显示任何内容。 QGLWidget初始化可防止显示窗口。 我在控制台中没有错误。程序正在运行,但没有窗口。
我有什么问题吗?
这是我的代码。
GLWidget
public class QtJOGLTestGLWidget extends QGLWidget
{
protected GLContext context;
protected GL gl;
public QtJOGLTestGLWidget()
{
this(null);
}
public QtJOGLTestGLWidget(QWidget parent)
{
super(parent);
}
@Override
protected void initializeGL()
{
GLProfile profile = GLProfile.get(GLProfile.GL2);
GLCapabilities glCaps = new GLCapabilities(profile);
glCaps.setPBuffer(true);
GLDrawableFactory factory = GLDrawableFactory.getFactory(profile);
context().makeCurrent();
this.context = factory.createExternalGLContext();
this.context.makeCurrent();
this.gl = this.context.getGL();
}
@Override
protected void resizeGL(int w, int h)
{
GL2 gl2 = this.gl.getGL2();
gl2.glViewport(0, 0, w, h);
gl2.glMatrixMode(GL2.GL_PROJECTION);
float r = 3.0f / 2.0f;
gl2.glLoadIdentity();
gl2.glFrustum(-0.2, 1 * r, -0.2, 1.2, 1, 2000);
}
@Override
protected void paintGL()
{
GL2 gl2 = this.gl.getGL2();
gl2.glMatrixMode(GL2.GL_MODELVIEW);
gl2.glLoadIdentity();
gl2.glBegin(GL.GL_TRIANGLES);
{
gl2.glColor3f(1, 0, 0);
gl2.glVertex3f(0, 0, -1);
gl2.glColor3f(0, 1, 0);
gl2.glVertex3f(0, 1, -1);
gl2.glColor3f(0, 0, 1);
gl2.glVertex3f(1, 0, -1);
}
gl2.glEnd();
}
}
窗口
public class QtJOGLTestFrame extends QMainWindow
{
protected QtJOGLTestGLWidget glWidget;
protected QGridLayout gridLayout;
public QtJOGLTestFrame()
{
this.gridLayout = new QGridLayout();
this.glWidget = new QtJOGLTestGLWidget(this); // This line prevents the window to be displayed
this.gridLayout.addWidget(this.glWidget, 0, 0);
QWidget widget = new QWidget();
widget.setLayout(this.gridLayout);
this.setCentralWidget(widget);
this.setWindowTitle("Hello JOGL");
}
}
主要
public class QtJOGLTest
{
public static void main(String[] args)
{
QApplication.initialize(args);
QtJOGLTestFrame frame = new QtJOGLTestFrame();
frame.resize(800, 600);
frame.show();
QApplication.execStatic();
}
}
我使用的是最新版本的JOGL和Mac OS X Sierra。
提前谢谢你。