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 #if USE(ACCELERATED_COMPOSITING)
9 #include "CCTextureLayerImpl.h"
11 #include "base/stringprintf.h"
12 #include "CCQuadSink.h"
13 #include "CCRenderer.h"
14 #include "CCTextureDrawQuad.h"
18 CCTextureLayerImpl::CCTextureLayerImpl(int id
)
21 , m_externalTextureResource(0)
22 , m_premultipliedAlpha(true)
24 , m_uvRect(0, 0, 1, 1)
28 CCTextureLayerImpl::~CCTextureLayerImpl()
32 void CCTextureLayerImpl::willDraw(CCResourceProvider
* resourceProvider
)
36 ASSERT(!m_externalTextureResource
);
37 m_externalTextureResource
= resourceProvider
->createResourceFromExternalTexture(m_textureId
);
40 void CCTextureLayerImpl::appendQuads(CCQuadSink
& quadSink
, CCAppendQuadsData
& appendQuadsData
)
42 if (!m_externalTextureResource
)
45 CCSharedQuadState
* sharedQuadState
= quadSink
.useSharedQuadState(createSharedQuadState());
46 appendDebugBorderQuad(quadSink
, sharedQuadState
, appendQuadsData
);
48 IntRect
quadRect(IntPoint(), contentBounds());
49 quadSink
.append(CCTextureDrawQuad::create(sharedQuadState
, quadRect
, m_externalTextureResource
, m_premultipliedAlpha
, m_uvRect
, m_flipped
), appendQuadsData
);
52 void CCTextureLayerImpl::didDraw(CCResourceProvider
* resourceProvider
)
54 if (!m_externalTextureResource
)
56 // FIXME: the following assert will not be true when sending resources to a
57 // parent compositor. A synchronization scheme (double-buffering or
58 // pipelining of updates) for the client will need to exist to solve this.
59 ASSERT(!resourceProvider
->inUseByConsumer(m_externalTextureResource
));
60 resourceProvider
->deleteResource(m_externalTextureResource
);
61 m_externalTextureResource
= 0;
64 void CCTextureLayerImpl::dumpLayerProperties(std::string
* str
, int indent
) const
66 str
->append(indentString(indent
));
67 base::StringAppendF(str
, "texture layer texture id: %u premultiplied: %d\n", m_textureId
, m_premultipliedAlpha
);
68 CCLayerImpl::dumpLayerProperties(str
, indent
);
71 void CCTextureLayerImpl::didLoseContext()
74 m_externalTextureResource
= 0;
79 #endif // USE(ACCELERATED_COMPOSITING)