Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(127)

Side by Side Diff: cc/texture_layer_impl.cc

Issue 11570027: Adding support for per vertex opacity on textured layer (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: rebased Created 8 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « cc/texture_layer_impl.h ('k') | cc/video_layer_impl.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2011 The Chromium Authors. All rights reserved. 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 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "cc/texture_layer_impl.h" 5 #include "cc/texture_layer_impl.h"
6 6
7 #include "base/stringprintf.h" 7 #include "base/stringprintf.h"
8 #include "cc/quad_sink.h" 8 #include "cc/quad_sink.h"
9 #include "cc/renderer.h" 9 #include "cc/renderer.h"
10 #include "cc/texture_draw_quad.h" 10 #include "cc/texture_draw_quad.h"
11 11
12 namespace cc { 12 namespace cc {
13 13
14 TextureLayerImpl::TextureLayerImpl(LayerTreeImpl* treeImpl, int id) 14 TextureLayerImpl::TextureLayerImpl(LayerTreeImpl* treeImpl, int id)
15 : LayerImpl(treeImpl, id) 15 : LayerImpl(treeImpl, id)
16 , m_textureId(0) 16 , m_textureId(0)
17 , m_externalTextureResource(0) 17 , m_externalTextureResource(0)
18 , m_premultipliedAlpha(true) 18 , m_premultipliedAlpha(true)
19 , m_flipped(true) 19 , m_flipped(true)
20 , m_uvRect(0, 0, 1, 1) 20 , m_uvRect(0, 0, 1, 1)
21 { 21 {
22 m_vertexOpacity[0] = 1.0f;
23 m_vertexOpacity[1] = 1.0f;
24 m_vertexOpacity[2] = 1.0f;
25 m_vertexOpacity[3] = 1.0f;
22 } 26 }
23 27
24 TextureLayerImpl::~TextureLayerImpl() 28 TextureLayerImpl::~TextureLayerImpl()
25 { 29 {
26 } 30 }
27 31
28 void TextureLayerImpl::willDraw(ResourceProvider* resourceProvider) 32 void TextureLayerImpl::willDraw(ResourceProvider* resourceProvider)
29 { 33 {
30 if (!m_textureId) 34 if (!m_textureId)
31 return; 35 return;
32 DCHECK(!m_externalTextureResource); 36 DCHECK(!m_externalTextureResource);
33 m_externalTextureResource = resourceProvider->createResourceFromExternalText ure(m_textureId); 37 m_externalTextureResource = resourceProvider->createResourceFromExternalText ure(m_textureId);
34 } 38 }
35 39
36 void TextureLayerImpl::appendQuads(QuadSink& quadSink, AppendQuadsData& appendQu adsData) 40 void TextureLayerImpl::appendQuads(QuadSink& quadSink, AppendQuadsData& appendQu adsData)
37 { 41 {
38 if (!m_externalTextureResource) 42 if (!m_externalTextureResource)
39 return; 43 return;
40 44
41 SharedQuadState* sharedQuadState = quadSink.useSharedQuadState(createSharedQ uadState()); 45 SharedQuadState* sharedQuadState = quadSink.useSharedQuadState(createSharedQ uadState());
42 appendDebugBorderQuad(quadSink, sharedQuadState, appendQuadsData); 46 appendDebugBorderQuad(quadSink, sharedQuadState, appendQuadsData);
43 47
44 gfx::Rect quadRect(gfx::Point(), contentBounds()); 48 gfx::Rect quadRect(gfx::Point(), contentBounds());
45 gfx::Rect opaqueRect(contentsOpaque() ? quadRect : gfx::Rect()); 49 gfx::Rect opaqueRect(contentsOpaque() ? quadRect : gfx::Rect());
46 scoped_ptr<TextureDrawQuad> quad = TextureDrawQuad::Create(); 50 scoped_ptr<TextureDrawQuad> quad = TextureDrawQuad::Create();
47 quad->SetNew(sharedQuadState, quadRect, opaqueRect, m_externalTextureResourc e, m_premultipliedAlpha, m_uvRect, m_flipped); 51 quad->SetNew(sharedQuadState, quadRect, opaqueRect, m_externalTextureResourc e, m_premultipliedAlpha, m_uvRect, m_vertexOpacity, m_flipped);
48 52
49 // Perform explicit clipping on a quad to avoid setting a scissor later. 53 // Perform explicit clipping on a quad to avoid setting a scissor later.
50 if (sharedQuadState->is_clipped && quad->PerformClipping()) 54 if (sharedQuadState->is_clipped && quad->PerformClipping())
51 sharedQuadState->is_clipped = false; 55 sharedQuadState->is_clipped = false;
52 if (!quad->rect.IsEmpty()) 56 if (!quad->rect.IsEmpty())
53 quadSink.append(quad.PassAs<DrawQuad>(), appendQuadsData); 57 quadSink.append(quad.PassAs<DrawQuad>(), appendQuadsData);
54 } 58 }
55 59
56 void TextureLayerImpl::didDraw(ResourceProvider* resourceProvider) 60 void TextureLayerImpl::didDraw(ResourceProvider* resourceProvider)
57 { 61 {
58 if (!m_externalTextureResource) 62 if (!m_externalTextureResource)
59 return; 63 return;
60 // FIXME: the following assert will not be true when sending resources to a 64 // FIXME: the following assert will not be true when sending resources to a
61 // parent compositor. A synchronization scheme (double-buffering or 65 // parent compositor. A synchronization scheme (double-buffering or
62 // pipelining of updates) for the client will need to exist to solve this. 66 // pipelining of updates) for the client will need to exist to solve this.
63 DCHECK(!resourceProvider->inUseByConsumer(m_externalTextureResource)); 67 DCHECK(!resourceProvider->inUseByConsumer(m_externalTextureResource));
64 resourceProvider->deleteResource(m_externalTextureResource); 68 resourceProvider->deleteResource(m_externalTextureResource);
65 m_externalTextureResource = 0; 69 m_externalTextureResource = 0;
66 } 70 }
67 71
68 void TextureLayerImpl::dumpLayerProperties(std::string* str, int indent) const 72 void TextureLayerImpl::dumpLayerProperties(std::string* str, int indent) const
69 { 73 {
70 str->append(indentString(indent)); 74 str->append(indentString(indent));
71 base::StringAppendF(str, "texture layer texture id: %u premultiplied: %d\n", m_textureId, m_premultipliedAlpha); 75 base::StringAppendF(str, "texture layer texture id: %u premultiplied: %d\n", m_textureId, m_premultipliedAlpha);
72 LayerImpl::dumpLayerProperties(str, indent); 76 LayerImpl::dumpLayerProperties(str, indent);
73 } 77 }
74 78
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];
84 }
85
75 void TextureLayerImpl::didLoseOutputSurface() 86 void TextureLayerImpl::didLoseOutputSurface()
76 { 87 {
77 m_textureId = 0; 88 m_textureId = 0;
78 m_externalTextureResource = 0; 89 m_externalTextureResource = 0;
79 } 90 }
80 91
81 const char* TextureLayerImpl::layerTypeAsString() const 92 const char* TextureLayerImpl::layerTypeAsString() const
82 { 93 {
83 return "TextureLayer"; 94 return "TextureLayer";
84 } 95 }
85 96
86 } // namespace cc 97 } // namespace cc
OLDNEW
« no previous file with comments | « cc/texture_layer_impl.h ('k') | cc/video_layer_impl.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698