A while ago, I tried to get glfw playing nicely with matlab's mex files. I didn't quite succeed.
My current project requires "GP-GPU" programming. I'm currently using glfw's "background window" feature to create an OpenGL context. My first tests show that matlab's mex will play nicely if glfwTerminate()
is never called:
#include <igl/opengl/glfw/background_window.h>
#include <mex.h>
void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[])
{
GLFWwindow * window;
igl::opengl::glfw::background_window(window);
glfwDestroyWindow(window);
//glfwTerminate();
}
You can compile this (on mac os x) with:
mex( ...
'-largeArrayDims','-DMEX','CXXFLAGS=$CXXFLAGS -std=c++11', ...
'LDFLAGS=\$LDFLAGS -framework Foundation -framework AppKit -framework Accelerate -framework OpenGL -framework AppKit -framework Carbon -framework QuartzCore -framework IOKit ', ...
'-I/usr/local/igl/libigl//external/nanogui/ext/eigen/', ...
'-I/usr/local/igl/libigl/include', ...
'-I/usr/local/igl/libigl/external/nanogui/ext/glfw/include/', ...
'-L/usr/local/igl/libigl/lib/','-lglfw3', ...
'background_glfw.cpp');
I don't know why including glfwTerminate()
causes matlab to sometimes crash. The error report is impossible to read and seems to have something to do with Quartz.