void application::init_context() { auto attrs = EmscriptenWebGLContextAttributes{}; attrs.stencil = EM_TRUE; attrs.enableExtensionsByDefault = EM_FALSE; emscripten_webgl_init_context_attributes(&attrs); const auto ctx = emscripten_webgl_create_context(canvas_target, &attrs); emscripten_webgl_make_context_current(ctx); glctx = ctx; emscripten_webgl_enable_extension(glctx, "ANGLE_instanced_arrays"); emscripten_set_mousedown_callback( canvas_target, this, false, &enable_drag_handler); emscripten_set_touchstart_callback( canvas_target, this, false, &enable_drag_handler); emscripten_set_mouseup_callback( canvas_target, this, false, &disable_drag_handler); emscripten_set_mouseleave_callback( canvas_target, this, false, &disable_drag_handler); emscripten_set_mouseout_callback( canvas_target, this, false, &disable_drag_handler); emscripten_set_touchend_callback( canvas_target, this, false, &disable_drag_handler); emscripten_set_touchcancel_callback( canvas_target, this, false, &disable_drag_handler); emscripten_set_mousemove_callback( canvas_target, this, false, &mouse_move_handler); emscripten_set_touchmove_callback( canvas_target, this, false, &mouse_move_handler); };
void ofxAppEmscriptenWindow::setup(const ofGLESWindowSettings & settings){ EGLint numConfigs; EGLint majorVersion; EGLint minorVersion; EGLConfig config; EGLint contextAttribs[] = { EGL_CONTEXT_CLIENT_VERSION, 2, EGL_NONE, EGL_NONE }; EGLint attribList[] = { EGL_RED_SIZE, EGL_DONT_CARE, EGL_GREEN_SIZE, EGL_DONT_CARE, EGL_BLUE_SIZE, EGL_DONT_CARE, EGL_ALPHA_SIZE, EGL_DONT_CARE, EGL_DEPTH_SIZE, EGL_DONT_CARE, EGL_STENCIL_SIZE, EGL_DONT_CARE, EGL_SAMPLE_BUFFERS, EGL_DONT_CARE, EGL_NONE }; // Get Display display = eglGetDisplay((EGLNativeDisplayType)EGL_DEFAULT_DISPLAY); if ( display == EGL_NO_DISPLAY ){ ofLogError() << "coudln't get display"; return; } // Initialize EGL if ( !eglInitialize(display, &majorVersion, &minorVersion) ){ ofLogError() << "couldn't initialize display"; return; } // Get configs if ( !eglGetConfigs(display, NULL, 0, &numConfigs) ){ ofLogError() << "couldn't get configs"; return; } ofLogNotice("ofxAppEmscriptenWindow") << "Got " << numConfigs << " display configs"; // Choose config if ( !eglChooseConfig(display, attribList, &config, 1, &numConfigs) ){ ofLogError() << "couldn't choose display"; return; } // Create a surface surface = eglCreateWindowSurface(display, config, NULL, NULL); if ( surface == EGL_NO_SURFACE ){ ofLogError() << "couldn't create surface"; return; } // Create a GL context context = eglCreateContext(display, config, EGL_NO_CONTEXT, contextAttribs ); if ( context == EGL_NO_CONTEXT ){ ofLogError() << "couldn't create context"; return; } // Make the context current if ( !eglMakeCurrent(display, surface, surface, context) ){ ofLogError() << "couldn't make current display"; return; } setWindowShape(settings.width,settings.height); _renderer = make_shared<ofGLProgrammableRenderer>(this); ((ofGLProgrammableRenderer*)_renderer.get())->setup(2,0); emscripten_set_keydown_callback(0,this,1,&keydown_cb); emscripten_set_keyup_callback(0,this,1,&keyup_cb); emscripten_set_mousedown_callback(0,this,1,&mousedown_cb); emscripten_set_mouseup_callback(0,this,1,&mouseup_cb); emscripten_set_mousemove_callback(0,this,1,&mousemoved_cb); emscripten_set_touchstart_callback(0,this,1,&touch_cb); emscripten_set_touchend_callback(0,this,1,&touch_cb); emscripten_set_touchmove_callback(0,this,1,&touch_cb); emscripten_set_touchcancel_callback(0,this,1,&touch_cb); }