[email protected] | 94f206c1 | 2012-08-25 00:09:14 | [diff] [blame] | 1 | // Copyright 2012 The Chromium Authors. All rights reserved. |
| 2 | // Use of this source code is governed by a BSD-style license that can be |
| 3 | // found in the LICENSE file. |
| 4 | |
| 5 | #include "config.h" |
| 6 | #include "CCDrawQuad.h" |
| 7 | |
| 8 | #include "CCCheckerboardDrawQuad.h" |
| 9 | #include "CCDebugBorderDrawQuad.h" |
| 10 | #include "CCIOSurfaceDrawQuad.h" |
| 11 | #include "CCRenderPassDrawQuad.h" |
| 12 | #include "CCSolidColorDrawQuad.h" |
| 13 | #include "CCStreamVideoDrawQuad.h" |
| 14 | #include "CCTextureDrawQuad.h" |
| 15 | #include "CCTileDrawQuad.h" |
| 16 | #include "CCYUVVideoDrawQuad.h" |
| 17 | #include "IntRect.h" |
| 18 | |
[email protected] | 9c88e56 | 2012-09-14 22:21:30 | [diff] [blame] | 19 | namespace cc { |
[email protected] | 94f206c1 | 2012-08-25 00:09:14 | [diff] [blame] | 20 | |
| 21 | CCDrawQuad::CCDrawQuad(const CCSharedQuadState* sharedQuadState, Material material, const IntRect& quadRect) |
| 22 | : m_sharedQuadState(sharedQuadState) |
| 23 | , m_sharedQuadStateId(sharedQuadState->id) |
| 24 | , m_material(material) |
| 25 | , m_quadRect(quadRect) |
| 26 | , m_quadVisibleRect(quadRect) |
| 27 | , m_quadOpaque(true) |
| 28 | , m_needsBlending(false) |
| 29 | { |
| 30 | ASSERT(m_sharedQuadState); |
| 31 | ASSERT(m_material != Invalid); |
| 32 | } |
| 33 | |
| 34 | IntRect CCDrawQuad::opaqueRect() const |
| 35 | { |
| 36 | if (opacity() != 1) |
| 37 | return IntRect(); |
| 38 | if (m_sharedQuadState->opaque && m_quadOpaque) |
| 39 | return m_quadRect; |
| 40 | return m_opaqueRect; |
| 41 | } |
| 42 | |
| 43 | void CCDrawQuad::setQuadVisibleRect(const IntRect& quadVisibleRect) |
| 44 | { |
| 45 | IntRect intersection = quadVisibleRect; |
| 46 | intersection.intersect(m_quadRect); |
| 47 | m_quadVisibleRect = intersection; |
| 48 | } |
| 49 | |
| 50 | unsigned CCDrawQuad::size() const |
| 51 | { |
| 52 | switch (material()) { |
| 53 | case Checkerboard: |
| 54 | return sizeof(CCCheckerboardDrawQuad); |
| 55 | case DebugBorder: |
| 56 | return sizeof(CCDebugBorderDrawQuad); |
| 57 | case IOSurfaceContent: |
| 58 | return sizeof(CCIOSurfaceDrawQuad); |
| 59 | case TextureContent: |
| 60 | return sizeof(CCTextureDrawQuad); |
| 61 | case SolidColor: |
| 62 | return sizeof(CCSolidColorDrawQuad); |
| 63 | case TiledContent: |
| 64 | return sizeof(CCTileDrawQuad); |
| 65 | case StreamVideoContent: |
| 66 | return sizeof(CCStreamVideoDrawQuad); |
| 67 | case RenderPass: |
| 68 | return sizeof(CCRenderPassDrawQuad); |
| 69 | case YUVVideoContent: |
| 70 | return sizeof(CCYUVVideoDrawQuad); |
| 71 | case Invalid: |
| 72 | break; |
| 73 | } |
| 74 | |
| 75 | CRASH(); |
| 76 | return sizeof(CCDrawQuad); |
| 77 | } |
| 78 | |
[email protected] | 0f077a5 | 2012-09-08 01:45:24 | [diff] [blame] | 79 | PassOwnPtr<CCDrawQuad> CCDrawQuad::copy(const CCSharedQuadState* copiedSharedQuadState) const |
| 80 | { |
| 81 | // RenderPass quads have their own copy() method. |
| 82 | ASSERT(material() != RenderPass); |
| 83 | |
| 84 | unsigned bytes = size(); |
| 85 | ASSERT(bytes); |
| 86 | |
| 87 | OwnPtr<CCDrawQuad> copyQuad(adoptPtr(reinterpret_cast<CCDrawQuad*>(new char[bytes]))); |
| 88 | memcpy(copyQuad.get(), this, bytes); |
| 89 | copyQuad->setSharedQuadState(copiedSharedQuadState); |
| 90 | |
| 91 | return copyQuad.release(); |
| 92 | } |
| 93 | |
[email protected] | 94f206c1 | 2012-08-25 00:09:14 | [diff] [blame] | 94 | void CCDrawQuad::setSharedQuadState(const CCSharedQuadState* sharedQuadState) |
| 95 | { |
| 96 | m_sharedQuadState = sharedQuadState; |
| 97 | m_sharedQuadStateId = sharedQuadState->id; |
| 98 | } |
| 99 | |
| 100 | } |