bool FECustomFilter::createMultisampleBuffer() { ASSERT(!m_triedMultisampleBuffer); m_triedMultisampleBuffer = true; Extensions3D* extensions = m_context->getExtensions(); if (!extensions || !extensions->maySupportMultisampling() || !extensions->supports("GL_ANGLE_framebuffer_multisample") || !extensions->supports("GL_ANGLE_framebuffer_blit") || !extensions->supports("GL_OES_rgb8_rgba8")) return false; extensions->ensureEnabled("GL_ANGLE_framebuffer_blit"); extensions->ensureEnabled("GL_ANGLE_framebuffer_multisample"); extensions->ensureEnabled("GL_OES_rgb8_rgba8"); if (!m_multisampleFrameBuffer) m_multisampleFrameBuffer = m_context->createFramebuffer(); if (!m_multisampleRenderBuffer) m_multisampleRenderBuffer = m_context->createRenderbuffer(); if (!m_multisampleDepthBuffer) m_multisampleDepthBuffer = m_context->createRenderbuffer(); return true; }
PassRefPtr<DrawingBuffer> DrawingBuffer::create(GraphicsContext3D* context, const IntSize& size, PreserveDrawingBuffer preserve, AlphaRequirement alpha) { Extensions3D* extensions = context->getExtensions(); bool multisampleSupported = extensions->maySupportMultisampling() && extensions->supports("GL_ANGLE_framebuffer_blit") && extensions->supports("GL_ANGLE_framebuffer_multisample") && extensions->supports("GL_OES_rgb8_rgba8"); if (multisampleSupported) { extensions->ensureEnabled("GL_ANGLE_framebuffer_blit"); extensions->ensureEnabled("GL_ANGLE_framebuffer_multisample"); extensions->ensureEnabled("GL_OES_rgb8_rgba8"); } bool packedDepthStencilSupported = extensions->supports("GL_OES_packed_depth_stencil"); if (packedDepthStencilSupported) extensions->ensureEnabled("GL_OES_packed_depth_stencil"); RefPtr<DrawingBuffer> drawingBuffer = adoptRef(new DrawingBuffer(context, size, multisampleSupported, packedDepthStencilSupported, preserve, alpha)); return (drawingBuffer->m_context) ? drawingBuffer.release() : 0; }