diff -ur -x '*compile*' -x '*.setup' qt-light-0.991-1/main.cpp qt-light-0.991-2/main.cpp --- qt-light-0.991-1/main.cpp 2017-10-21 02:35:00.225901257 +0200 +++ qt-light-0.991-2/main.cpp 2017-10-24 02:15:38.033934084 +0200 @@ -1,9 +1,10 @@ /* main.cpp */ - +#include #include #include #include +#include #include #include @@ -34,6 +35,10 @@ public slots: void slot() { C_callback(CHICKEN_gc_root_ref(thunk), 0); } + void slot(int p1) { + C_save(C_fix(p1)); + C_callback(CHICKEN_gc_root_ref(thunk), 1); + } }; @@ -42,7 +47,7 @@ void *thunk; public: - GLWidget(char *name, QWidget *parent, C_word proc) : QGLWidget(parent) { + GLWidget(char *name, QWidget *parent, C_word proc, QGLFormat format) : QGLWidget(format, parent) { setObjectName(name); thunk = CHICKEN_new_gc_root(); CHICKEN_gc_root_set(thunk, proc); @@ -395,7 +400,20 @@ const char *qt_classname(qtobject w) { return w->metaObject()->className(); } -qtwidget qt_gl(char *name, qtwidget parent, C_word proc) { return new GLWidget(name, parent, proc); } +qtwidget qt_gl(char *name, qtwidget parent, C_word proc, int major, int minor, int profile) { + QGLFormat::OpenGLContextProfile qglProfile; + switch (profile){ + case 2: qglProfile = QGLFormat::CoreProfile; break; + case 1: qglProfile = QGLFormat::CompatibilityProfile; break; + case 0: qglProfile = QGLFormat::NoProfile; break; + } + + QGLFormat glFormat; + glFormat.setVersion(major, minor); + glFormat.setProfile(qglProfile); + + return new GLWidget(name, parent, proc, glFormat); +} void qt_update(qtwidget w) { w->update(); } diff -ur -x '*compile*' -x '*.setup' qt-light-0.991-1/prototypes.h qt-light-0.991-2/prototypes.h --- qt-light-0.991-1/prototypes.h 2017-10-20 23:27:29.739226833 +0200 +++ qt-light-0.991-2/prototypes.h 2017-10-24 02:12:27.522025016 +0200 @@ -37,7 +37,7 @@ double qt_getfloatproperty(qtwidget w, char *prop); int qt_getcharproperty(qtwidget w, char *prop); int qt_propertytype(qtwidget w, char *prop); -qtwidget qt_gl(char *name, qtwidget parent, C_word proc); +qtwidget qt_gl(char *name, qtwidget parent, C_word proc, int major, int minor, int profile); void qt_update(qtwidget w); qttimer qt_timer(double secs); void qt_start(qttimer t); diff -ur -x '*compile*' -x '*.setup' qt-light-0.991-1/qt-light.scm qt-light-0.991-2/qt-light.scm --- qt-light-0.991-1/qt-light.scm 2017-10-21 00:24:50.955482702 +0200 +++ qt-light-0.991-2/qt-light.scm 2017-10-24 02:40:14.865822178 +0200 @@ -155,13 +155,19 @@ (define qt:gl (let ((qt:gl qt:gl)) - (lambda (name parent init resize paint) + (lambda (name parent init resize paint #!optional (major 3) (minor 3) (profile "core")) + (define profile2 + (cond ((string=? profile "core") 2) + ((string=? profile "compat") 1) + ((string=? profile "none") 0) + (else (error "Invalid OpenGL profile type."))) ) (qt:gl name parent (match-lambda* ((0) (init)) ((1 w h) (resize w h)) - (_ (paint)) ) ) ) ) ) + (_ (paint)) ) + major minor profile2 ) ) ) ) (define qt:run (let ((qt:run qt:run)) Only in qt-light-0.991-2: qt-light.scm~