| Index: compositor/gles/opengles_visitor.cc
|
| diff --git a/compositor/gles/opengles_visitor.cc b/compositor/gles/opengles_visitor.cc
|
| index ffebe59417208d9344176c987e3bd7158de15ff2..e703f93cf85345a1d0169fcd13960079b2201618 100644
|
| --- a/compositor/gles/opengles_visitor.cc
|
| +++ b/compositor/gles/opengles_visitor.cc
|
| @@ -141,13 +141,13 @@ OpenGlesDrawVisitor::~OpenGlesDrawVisitor() {
|
| << "eglDestroyCotnext() failed: " << eglGetError();
|
| }
|
|
|
| -void OpenGlesDrawVisitor::BindImage(const ImageContainer* container,
|
| +void OpenGlesDrawVisitor::BindImage(const ImageContainer& container,
|
| RealCompositor::QuadActor* actor) {
|
| - // TODO: Check container->format() and use a shader to swizzle BGR
|
| + // TODO: Check container.format() and use a shader to swizzle BGR
|
| // data into RGB.
|
| GLenum gl_format = 0;
|
| GLenum gl_type = 0;
|
| - switch (container->format()) {
|
| + switch (container.format()) {
|
| case IMAGE_FORMAT_RGBA_32:
|
| case IMAGE_FORMAT_RGBX_32:
|
| gl_format = GL_RGBA;
|
| @@ -177,12 +177,12 @@ void OpenGlesDrawVisitor::BindImage(const ImageContainer* container,
|
| gl_->TexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
|
| gl_->TexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
|
| gl_->TexImage2D(GL_TEXTURE_2D, 0, gl_format,
|
| - container->width(), container->height(),
|
| - 0, gl_format, gl_type, container->data());
|
| + container.width(), container.height(),
|
| + 0, gl_format, gl_type, container.data());
|
|
|
| scoped_ptr<OpenGlesTextureData> data(new OpenGlesTextureData(gl_));
|
| data->SetTexture(texture);
|
| - data->set_has_alpha(ImageFormatUsesAlpha(container->format()));
|
| + data->set_has_alpha(ImageFormatUsesAlpha(container.format()));
|
| actor->set_texture_data(data.release());
|
| }
|
|
|
| @@ -260,16 +260,30 @@ void OpenGlesDrawVisitor::VisitStage(RealCompositor::StageActor* actor) {
|
| }
|
| }
|
|
|
| -void OpenGlesDrawVisitor::CreateTextureData(
|
| - RealCompositor::TexturePixmapActor* actor) const {
|
| - OpenGlesEglImageData image_data(gl_);
|
| -
|
| - if (!image_data.Bind(actor))
|
| +void OpenGlesDrawVisitor::VisitContainer(
|
| + RealCompositor::ContainerActor* actor) {
|
| + if (!actor->IsVisible())
|
| return;
|
|
|
| - scoped_ptr<OpenGlesTextureData> texture(new OpenGlesTextureData(gl_));
|
| - image_data.BindTexture(texture.get(), !actor->pixmap_is_opaque());
|
| - actor->set_texture_data(texture.release());
|
| + LOG(INFO) << "Visit container: " << actor->name();
|
| +
|
| + const float original_opacity = ancestor_opacity_;
|
| + ancestor_opacity_ *= actor->opacity();
|
| +
|
| + // Back to front rendering
|
| + const RealCompositor::ActorVector children = actor->GetChildren();
|
| + for (RealCompositor::ActorVector::const_reverse_iterator i =
|
| + children.rbegin(); i != children.rend(); ++i) {
|
| + // TODO move this down into the Visit* functions
|
| + if ((*i)->is_opaque() && (*i)->opacity() * ancestor_opacity_ > 0.999)
|
| + gl_->Disable(GL_BLEND);
|
| + else
|
| + gl_->Enable(GL_BLEND);
|
| + (*i)->Accept(this);
|
| + }
|
| +
|
| + // Reset opacity.
|
| + ancestor_opacity_ = original_opacity;
|
| }
|
|
|
| void OpenGlesDrawVisitor::VisitImage(RealCompositor::ImageActor* actor) {
|
| @@ -443,6 +457,18 @@ void OpenGlesDrawVisitor::DrawQuad(RealCompositor::QuadActor* actor,
|
| }
|
| }
|
|
|
| +void OpenGlesDrawVisitor::CreateTextureData(
|
| + RealCompositor::TexturePixmapActor* actor) const {
|
| + OpenGlesEglImageData image_data(gl_);
|
| +
|
| + if (!image_data.Bind(actor))
|
| + return;
|
| +
|
| + scoped_ptr<OpenGlesTextureData> texture(new OpenGlesTextureData(gl_));
|
| + image_data.BindTexture(texture.get(), !actor->pixmap_is_opaque());
|
| + actor->set_texture_data(texture.release());
|
| +}
|
| +
|
| void OpenGlesDrawVisitor::PushScissorRect(const Rect& scissor) {
|
| if (scissor_stack_.empty()) {
|
| scissor_stack_.push_back(scissor);
|
| @@ -471,32 +497,6 @@ void OpenGlesDrawVisitor::PopScissorRect() {
|
| }
|
| }
|
|
|
| -void OpenGlesDrawVisitor::VisitContainer(
|
| - RealCompositor::ContainerActor* actor) {
|
| - if (!actor->IsVisible())
|
| - return;
|
| -
|
| - LOG(INFO) << "Visit container: " << actor->name();
|
| -
|
| - const float original_opacity = ancestor_opacity_;
|
| - ancestor_opacity_ *= actor->opacity();
|
| -
|
| - // Back to front rendering
|
| - const RealCompositor::ActorVector children = actor->GetChildren();
|
| - for (RealCompositor::ActorVector::const_reverse_iterator i =
|
| - children.rbegin(); i != children.rend(); ++i) {
|
| - // TODO move this down into the Visit* functions
|
| - if ((*i)->is_opaque() && (*i)->opacity() * ancestor_opacity_ > 0.999)
|
| - gl_->Disable(GL_BLEND);
|
| - else
|
| - gl_->Enable(GL_BLEND);
|
| - (*i)->Accept(this);
|
| - }
|
| -
|
| - // Reset opacity.
|
| - ancestor_opacity_ = original_opacity;
|
| -}
|
| -
|
| OpenGlesTextureData::OpenGlesTextureData(Gles2Interface* gl)
|
| : gl_(gl) {}
|
|
|
|
|