Enabling tests which should be fixed by r173829.
[chromium-blink-merge.git] / cc / texture_layer_impl.cc
blob433ce34256e7260b5bdf10b9c573d56420e729d2
1 // Copyright 2011 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.
5 #include "cc/texture_layer_impl.h"
7 #include "base/stringprintf.h"
8 #include "cc/quad_sink.h"
9 #include "cc/renderer.h"
10 #include "cc/texture_draw_quad.h"
12 namespace cc {
14 TextureLayerImpl::TextureLayerImpl(LayerTreeImpl* treeImpl, int id)
15 : LayerImpl(treeImpl, id)
16 , m_textureId(0)
17 , m_externalTextureResource(0)
18 , m_premultipliedAlpha(true)
19 , m_flipped(true)
20 , m_uvRect(0, 0, 1, 1)
22 m_vertexOpacity[0] = 1.0f;
23 m_vertexOpacity[1] = 1.0f;
24 m_vertexOpacity[2] = 1.0f;
25 m_vertexOpacity[3] = 1.0f;
28 TextureLayerImpl::~TextureLayerImpl()
32 void TextureLayerImpl::willDraw(ResourceProvider* resourceProvider)
34 if (!m_textureId)
35 return;
36 DCHECK(!m_externalTextureResource);
37 m_externalTextureResource = resourceProvider->createResourceFromExternalTexture(m_textureId);
40 void TextureLayerImpl::appendQuads(QuadSink& quadSink, AppendQuadsData& appendQuadsData)
42 if (!m_externalTextureResource)
43 return;
45 SharedQuadState* sharedQuadState = quadSink.useSharedQuadState(createSharedQuadState());
46 appendDebugBorderQuad(quadSink, sharedQuadState, appendQuadsData);
48 gfx::Rect quadRect(gfx::Point(), contentBounds());
49 gfx::Rect opaqueRect(contentsOpaque() ? quadRect : gfx::Rect());
50 scoped_ptr<TextureDrawQuad> quad = TextureDrawQuad::Create();
51 quad->SetNew(sharedQuadState, quadRect, opaqueRect, m_externalTextureResource, m_premultipliedAlpha, m_uvRect, m_vertexOpacity, m_flipped);
53 // Perform explicit clipping on a quad to avoid setting a scissor later.
54 if (sharedQuadState->is_clipped && quad->PerformClipping())
55 sharedQuadState->is_clipped = false;
56 if (!quad->rect.IsEmpty())
57 quadSink.append(quad.PassAs<DrawQuad>(), appendQuadsData);
60 void TextureLayerImpl::didDraw(ResourceProvider* resourceProvider)
62 if (!m_externalTextureResource)
63 return;
64 // FIXME: the following assert will not be true when sending resources to a
65 // parent compositor. A synchronization scheme (double-buffering or
66 // pipelining of updates) for the client will need to exist to solve this.
67 DCHECK(!resourceProvider->inUseByConsumer(m_externalTextureResource));
68 resourceProvider->deleteResource(m_externalTextureResource);
69 m_externalTextureResource = 0;
72 void TextureLayerImpl::dumpLayerProperties(std::string* str, int indent) const
74 str->append(indentString(indent));
75 base::StringAppendF(str, "texture layer texture id: %u premultiplied: %d\n", m_textureId, m_premultipliedAlpha);
76 LayerImpl::dumpLayerProperties(str, indent);
79 void TextureLayerImpl::setVertexOpacity(const float vertexOpacity[4]) {
80 m_vertexOpacity[0] = vertexOpacity[0];
81 m_vertexOpacity[1] = vertexOpacity[1];
82 m_vertexOpacity[2] = vertexOpacity[2];
83 m_vertexOpacity[3] = vertexOpacity[3];
86 void TextureLayerImpl::didLoseOutputSurface()
88 m_textureId = 0;
89 m_externalTextureResource = 0;
92 const char* TextureLayerImpl::layerTypeAsString() const
94 return "TextureLayer";
97 } // namespace cc