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.
7 #include "CCTextureLayerImpl.h"
9 #include "base/stringprintf.h"
10 #include "CCQuadSink.h"
11 #include "CCRenderer.h"
12 #include "CCTextureDrawQuad.h"
16 CCTextureLayerImpl::CCTextureLayerImpl(int id
)
19 , m_externalTextureResource(0)
20 , m_premultipliedAlpha(true)
22 , m_uvRect(0, 0, 1, 1)
26 CCTextureLayerImpl::~CCTextureLayerImpl()
30 void CCTextureLayerImpl::willDraw(CCResourceProvider
* resourceProvider
)
34 ASSERT(!m_externalTextureResource
);
35 m_externalTextureResource
= resourceProvider
->createResourceFromExternalTexture(m_textureId
);
38 void CCTextureLayerImpl::appendQuads(CCQuadSink
& quadSink
, CCAppendQuadsData
& appendQuadsData
)
40 if (!m_externalTextureResource
)
43 CCSharedQuadState
* sharedQuadState
= quadSink
.useSharedQuadState(createSharedQuadState());
44 appendDebugBorderQuad(quadSink
, sharedQuadState
, appendQuadsData
);
46 IntRect
quadRect(IntPoint(), contentBounds());
47 quadSink
.append(CCTextureDrawQuad::create(sharedQuadState
, quadRect
, m_externalTextureResource
, m_premultipliedAlpha
, m_uvRect
, m_flipped
).PassAs
<CCDrawQuad
>(), appendQuadsData
);
50 void CCTextureLayerImpl::didDraw(CCResourceProvider
* resourceProvider
)
52 if (!m_externalTextureResource
)
54 // FIXME: the following assert will not be true when sending resources to a
55 // parent compositor. A synchronization scheme (double-buffering or
56 // pipelining of updates) for the client will need to exist to solve this.
57 ASSERT(!resourceProvider
->inUseByConsumer(m_externalTextureResource
));
58 resourceProvider
->deleteResource(m_externalTextureResource
);
59 m_externalTextureResource
= 0;
62 void CCTextureLayerImpl::dumpLayerProperties(std::string
* str
, int indent
) const
64 str
->append(indentString(indent
));
65 base::StringAppendF(str
, "texture layer texture id: %u premultiplied: %d\n", m_textureId
, m_premultipliedAlpha
);
66 CCLayerImpl::dumpLayerProperties(str
, indent
);
69 void CCTextureLayerImpl::didLoseContext()
72 m_externalTextureResource
= 0;
75 const char* CCTextureLayerImpl::layerTypeAsString() const
77 return "TextureLayer";