cocoa="yes"
audio_drv_list="coreaudio"
audio_possible_drivers="coreaudio sdl fmod"
+ QT_PATH="/opt/local/Library/Frameworks"
+ CFLAGS="-F$QT_PATH -I$QT_PATH/QtCore.framework/Headers -I$QT_PATH/QtWidgets.framework/Headers -I$QT_PATH/QtGui.framework/Headers -I$QT_PATH/QtGui.framework/Headers/5.3.1/QtGui -I$QT_PATH/QtQML.framework/Headers -I$QT_PATH/QtOpenGL.framework/Headers $CFLAGS"
LDFLAGS="-framework CoreFoundation -framework IOKit $LDFLAGS"
libs_softmmu="-F/System/Library/Frameworks -framework Cocoa -framework IOKit $libs_softmmu"
# Disable attempts to use ObjectiveC features in os/object.h since they
#include "vigs_gl_backend.h"
#include "vigs_log.h"
+#include "vigs_qt5.h"
#include <OpenGL/OpenGL.h>
#include <dlfcn.h>
kCGLPFAAlphaSize, 8,
kCGLPFADepthSize, 24,
kCGLPFAStencilSize, 8,
- kCGLPFANoRecovery,
kCGLPFAPBuffer,
0
};
kCGLPFAAlphaSize, 8,
kCGLPFADepthSize, 24,
kCGLPFAStencilSize, 8,
- kCGLPFANoRecovery,
kCGLPFAOpenGLProfile, kCGLOGLPVersion_3_2_Core,
0
};
CGLError error;
CGLPixelFormatObj pixel_format;
int n;
+ CGLContextObj qt5_ctx = NULL;
gl_backend_cgl = g_malloc0(sizeof(*gl_backend_cgl));
goto fail2;
}
+ if (vigs_qt5_enabled()) {
+ qt5_ctx = (CGLContextObj)vigs_qt5_gl_context_create(gl_backend_cgl->base.is_gl_2);
+ if (!qt5_ctx) {
+ goto fail2;
+ }
+ }
+
if (!vigs_gl_backend_cgl_create_context(gl_backend_cgl,
pixel_format,
- NULL,
+ qt5_ctx,
&gl_backend_cgl->context)) {
goto fail3;
}
if (!is_gl2) {
format.setMajorVersion(3);
+#ifdef CONFIG_DARWIN
+ format.setMinorVersion(2);
+ format.setProfile(QSurfaceFormat::CoreProfile);
+#else
format.setMinorVersion(1);
+#endif
}
qt5GLContext->setScreen(QGuiApplication::primaryScreen());
kCGLPFAAlphaSize, 8,
kCGLPFADepthSize, 24,
kCGLPFAStencilSize, 8,
- kCGLPFANoRecovery,
kCGLPFAPBuffer,
0
};
kCGLPFAAlphaSize, 8,
kCGLPFADepthSize, 24,
kCGLPFAStencilSize, 8,
- kCGLPFANoRecovery,
kCGLPFAOpenGLProfile, kCGLOGLPVersion_3_2_Core,
0
};
.dpy_cursor_define = qt5_mouse_define,
};
+#ifdef CONFIG_DARWIN
+void ns_run_in_event_loop(void (*func)());
+#endif
+
void maru_qt5_display_early_init(void)
{
+#ifdef CONFIG_DARWIN
+ ns_run_in_event_loop(&qt5_early_prepare);
+#else
qt5_early_prepare();
+#endif
}
void maru_qt5_display_init(MaruDisplayChangeListener *mdcl, int full_screen)
#endif
// prepare gui
+#ifdef CONFIG_DARWIN
+ ns_run_in_event_loop(&qt5_prepare);
+#else
qt5_prepare();
+#endif
for (i = 0;; i++) {
QemuConsole *con = qemu_console_lookup_by_index(i);
mainwindow->show();
mainwindow->openController(0);
+
+ mainwindow->startSwapper();
}
void qt5_early_prepare(void)
void ns_event_loop(int* keepRunning);
+void ns_run_in_event_loop(void (*func)());
+
#endif /* _NS_EVENT_H_ */
while (*keepRunning && [theRunLoop runMode:NSDefaultRunLoopMode beforeDate:distantFuture]);
// return [[NSRunLoop currentRunLoop] runUntilDate: [NSDate dateWithTimeIntervalSinceNow: 1]];
}
+
+@interface Runner : NSObject
+{
+ @public void (*func)();
+}
+- (void)run;
+@end
+
+@implementation Runner
+- (void)run;
+{
+ self->func();
+}
+@end
+
+void ns_run_in_event_loop(void (*func)())
+{
+ Runner *runner = [[Runner alloc] init];
+ runner->func = func;
+ [runner performSelectorOnMainThread:@selector(run) withObject:nil waitUntilDone:YES];
+ [runner release];
+}
connect(swapperThread, &QThread::finished, swapper, &QObject::deleteLater);
swapperThread->start();
+}
+void MainWindow::startSwapper()
+{
QMetaObject::invokeMethod(swapper, "display", Qt::QueuedConnection);
}
ControllerWidget *getController();
void openController(int index);
void closeController();
+ void startSwapper();
UIInformation *uiInfo;
QLabel *getLabel();
kCGLPFAAlphaSize, 8,
kCGLPFADepthSize, 24,
kCGLPFAStencilSize, 8,
- kCGLPFANoRecovery,
kCGLPFAPBuffer,
0
};
kCGLPFAAlphaSize, 8,
kCGLPFADepthSize, 24,
kCGLPFAStencilSize, 8,
- kCGLPFANoRecovery,
kCGLPFAOpenGLProfile, kCGLOGLPVersion_3_2_Core,
0
};