void CCVideoLayerImpl::appendQuads(CCQuadCuller& quadList, const CCSharedQuadState* sharedQuadState, bool&) { ASSERT(CCProxy::isImplThread()); if (!m_frame) return; // FIXME: When we pass quads out of process, we need to double-buffer, or // otherwise synchonize use of all textures in the quad. IntRect quadRect(IntPoint(), bounds()); switch (m_format) { case GraphicsContext3D::LUMINANCE: { // YUV software decoder. const FramePlane& yPlane = m_framePlanes[WebKit::WebVideoFrame::yPlane]; const FramePlane& uPlane = m_framePlanes[WebKit::WebVideoFrame::uPlane]; const FramePlane& vPlane = m_framePlanes[WebKit::WebVideoFrame::vPlane]; OwnPtr<CCYUVVideoDrawQuad> yuvVideoQuad = CCYUVVideoDrawQuad::create(sharedQuadState, quadRect, yPlane, uPlane, vPlane); quadList.append(yuvVideoQuad.release()); break; } case GraphicsContext3D::RGBA: { // RGBA software decoder. const FramePlane& plane = m_framePlanes[WebKit::WebVideoFrame::rgbPlane]; float widthScaleFactor = static_cast<float>(plane.visibleSize.width()) / plane.size.width(); bool premultipliedAlpha = true; FloatRect uvRect(0, 0, widthScaleFactor, 1); bool flipped = false; OwnPtr<CCTextureDrawQuad> textureQuad = CCTextureDrawQuad::create(sharedQuadState, quadRect, plane.textureId, premultipliedAlpha, uvRect, flipped); quadList.append(textureQuad.release()); break; } case GraphicsContext3D::TEXTURE_2D: { // NativeTexture hardware decoder. bool premultipliedAlpha = true; FloatRect uvRect(0, 0, 1, 1); #if defined(OS_CHROMEOS) && defined(__ARMEL__) bool flipped = true; // Under the covers, implemented by OpenMAX IL. #elif defined(OS_WINDOWS) bool flipped = true; // Under the covers, implemented by DXVA. #else bool flipped = false; // LibVA (cros/intel), MacOS. #endif OwnPtr<CCTextureDrawQuad> textureQuad = CCTextureDrawQuad::create(sharedQuadState, quadRect, m_frame->textureId(), premultipliedAlpha, uvRect, flipped); quadList.append(textureQuad.release()); break; } case Extensions3DChromium::GL_TEXTURE_EXTERNAL_OES: { // StreamTexture hardware decoder. OwnPtr<CCStreamVideoDrawQuad> streamVideoQuad = CCStreamVideoDrawQuad::create(sharedQuadState, quadRect, m_frame->textureId(), m_streamTextureMatrix); quadList.append(streamVideoQuad.release()); break; } default: CRASH(); // Someone updated convertVFCFormatToGC3DFormat above but update this! } }
void CCTextureLayerImpl::appendQuads(CCQuadCuller& quadList, const CCSharedQuadState* sharedQuadState, bool&) { IntRect quadRect(IntPoint(), bounds()); if (m_textureId) quadList.append(CCTextureDrawQuad::create(sharedQuadState, quadRect, m_textureId, m_premultipliedAlpha, m_uvRect, m_flipped)); else if (m_ioSurfaceTextureId) quadList.append(CCIOSurfaceDrawQuad::create(sharedQuadState, quadRect, m_flipped, m_ioSurfaceSize, m_ioSurfaceTextureId)); }
void CCLayerImpl::appendDebugBorderQuad(CCQuadCuller& quadList, const CCSharedQuadState* sharedQuadState) const { if (!hasDebugBorders()) return; IntRect layerRect(IntPoint(), contentBounds()); quadList.append(CCDebugBorderDrawQuad::create(sharedQuadState, layerRect, debugBorderColor(), debugBorderWidth())); }
void CCScrollbarLayerImpl::appendQuads(CCQuadCuller& quadList, const CCSharedQuadState* sharedQuadState, bool&) { if (!m_texture->isReserved()) return; IntRect quadRect(IntPoint(), bounds()); quadList.append(CCTileDrawQuad::create(sharedQuadState, quadRect, quadRect, m_texture->textureId(), IntPoint(), m_texture->size(), GraphicsContext3D::NEAREST, true, true, true, true, true)); }
void CCSolidColorLayerImpl::appendQuads(CCQuadCuller& quadList, const CCSharedQuadState* sharedQuadState) { // We create a series of smaller quads instead of just one large one so that the // culler can reduce the total pixels drawn. int width = bounds().width(); int height = bounds().height(); for (int x = 0; x < width; x += m_tileSize) { for (int y = 0; y < height; y += m_tileSize) { IntRect solidTileRect(x, y, min(width - x, m_tileSize), min(height - y, m_tileSize)); quadList.append(CCSolidColorDrawQuad::create(sharedQuadState, solidTileRect, backgroundColor())); } } }
void CCScrollbarLayerImpl::appendQuads(CCQuadCuller& quadList, const CCSharedQuadState* sharedQuadState, bool&) { ScrollbarThemeComposite* theme = static_cast<ScrollbarThemeComposite*>(ScrollbarTheme::theme()); if (!theme) return; bool premultipledAlpha = false; FloatRect uvRect(0, 0, 1, 1); bool flipped = false; IntRect thumbRect = theme->thumbRect(&m_scrollbar); thumbRect.move(-m_scrollbar.x(), -m_scrollbar.y()); if (m_thumbTextureId && theme->hasThumb(&m_scrollbar) && !thumbRect.isEmpty()) { OwnPtr<CCTextureDrawQuad> quad = CCTextureDrawQuad::create(sharedQuadState, thumbRect, m_thumbTextureId, premultipledAlpha, uvRect, flipped); quad->setNeedsBlending(); quadList.append(quad.release()); } if (!m_backgroundTextureId) return; IntRect backgroundRect(IntPoint(), contentBounds()); quadList.append(CCTextureDrawQuad::create(sharedQuadState, backgroundRect, m_backgroundTextureId, premultipledAlpha, uvRect, flipped)); }
void CCVideoLayerImpl::appendQuads(CCQuadCuller& quadList, const CCSharedQuadState* sharedQuadState, bool&) { ASSERT(CCProxy::isImplThread()); if (!m_frame) return; IntRect quadRect(IntPoint(), bounds()); OwnPtr<CCVideoDrawQuad> videoQuad = CCVideoDrawQuad::create(sharedQuadState, quadRect, m_textures, m_frame, m_format); if (m_format == Extensions3DChromium::GL_TEXTURE_EXTERNAL_OES) videoQuad->setMatrix(m_streamTextureMatrix); quadList.append(videoQuad.release()); }
void CCCanvasLayerImpl::appendQuads(CCQuadCuller& quadList, const CCSharedQuadState* sharedQuadState) { IntRect quadRect(IntPoint(), bounds()); quadList.append(CCCanvasDrawQuad::create(sharedQuadState, quadRect, m_textureId, m_hasAlpha, m_premultipliedAlpha)); }