bool OpenGLContext::MakeContextCurrent() { CCLOG("OpenGLContext::MakeContextCurrent %dx%d", _size.width(), _size.height()); // Lazily create the Pepper context. if (_graphics3d.is_null()) { int32_t attribs[] = { PP_GRAPHICS3DATTRIB_ALPHA_SIZE, 8, PP_GRAPHICS3DATTRIB_DEPTH_SIZE, 24, PP_GRAPHICS3DATTRIB_STENCIL_SIZE, 8, PP_GRAPHICS3DATTRIB_SAMPLES, 0, PP_GRAPHICS3DATTRIB_SAMPLE_BUFFERS, 0, PP_GRAPHICS3DATTRIB_WIDTH, _size.width(), PP_GRAPHICS3DATTRIB_HEIGHT, _size.height(), PP_GRAPHICS3DATTRIB_NONE }; _graphics3d = pp::Graphics3D(_instance, pp::Graphics3D(), attribs); if (_graphics3d.is_null()) { glSetCurrentContextPPAPI(0); return false; } bool rtn = _instance->BindGraphics(_graphics3d); assert(rtn && "BindGraphics failed"); if (!rtn) return false; } CCLOG("glSetCurrentContextPPAPI: %p", (void*)_graphics3d.pp_resource()); glSetCurrentContextPPAPI(_graphics3d.pp_resource()); return true; }
virtual void DidChangeView(const pp::View& view) { // Pepper specifies dimensions in DIPs (device-independent pixels). To // generate a context that is at device-pixel resolution on HiDPI devices, // scale the dimensions by view.GetDeviceScale(). int32_t new_width = view.GetRect().width() * view.GetDeviceScale(); int32_t new_height = view.GetRect().height() * view.GetDeviceScale(); if (context_.is_null()) { if (!InitGL(new_width, new_height)) { // failed. return; } verify(gles_init() == true); RenderLoop(0); } else { // Resize the buffers to the new size of the module. int32_t result = context_.ResizeBuffers(new_width, new_height); if (result < 0) { printf("Unable to resize buffers to %d x %d!\n"); return; } } width_ = new_width; height_ = new_height; glViewport(0, 0, width_, height_); printf("Resize: %d x %d\n", new_width, new_height); }
void OpenGLContext::ResizeContext(int width, int height) { CCLOG("OpenGLContext::ResizeContext %dx%d", width, height); _size.SetSize(width, height); if (!_graphics3d.is_null()) { _graphics3d.ResizeBuffers(width, height); } }