From 8cd3edfa15cc9cdbffa935d19ab894426b08d174 Mon Sep 17 00:00:00 2001 From: Greg Daniel Date: Mon, 9 Jan 2017 14:15:41 -0500 Subject: Break Layer class into Gl and Vulkan subclasses Test: manual testing Change-Id: Ibd2beed39de3ac6da7448e96496253cfe427dfbb --- libs/hwui/DeferredLayerUpdater.cpp | 29 ++++++++++++++++++++++------- 1 file changed, 22 insertions(+), 7 deletions(-) (limited to 'libs/hwui/DeferredLayerUpdater.cpp') diff --git a/libs/hwui/DeferredLayerUpdater.cpp b/libs/hwui/DeferredLayerUpdater.cpp index a7d5f6026d00..21aa6e1f5705 100644 --- a/libs/hwui/DeferredLayerUpdater.cpp +++ b/libs/hwui/DeferredLayerUpdater.cpp @@ -15,6 +15,7 @@ */ #include "DeferredLayerUpdater.h" +#include "GlLayer.h" #include "renderthread/EglManager.h" #include "renderthread/RenderTask.h" #include "utils/PaintUtils.h" @@ -55,9 +56,12 @@ void DeferredLayerUpdater::apply() { mLayer->setAlpha(mAlpha, mMode); if (mSurfaceTexture.get()) { + LOG_ALWAYS_FATAL_IF(mLayer->getApi() != Layer::Api::OpenGL, + "apply surfaceTexture with non GL backend %x, GL %x, VK %x", + mLayer->getApi(), Layer::Api::OpenGL, Layer::Api::Vulkan); if (mNeedsGLContextAttach) { mNeedsGLContextAttach = false; - mSurfaceTexture->attachToContext(mLayer->getTextureId()); + mSurfaceTexture->attachToContext(static_cast(mLayer)->getTextureId()); } if (mUpdateTexImage) { mUpdateTexImage = false; @@ -71,6 +75,9 @@ void DeferredLayerUpdater::apply() { } void DeferredLayerUpdater::doUpdateTexImage() { + LOG_ALWAYS_FATAL_IF(mLayer->getApi() != Layer::Api::OpenGL, + "doUpdateTexImage non GL backend %x, GL %x, VK %x", + mLayer->getApi(), Layer::Api::OpenGL, Layer::Api::Vulkan); if (mSurfaceTexture->updateTexImage() == NO_ERROR) { float transform[16]; @@ -112,28 +119,36 @@ void DeferredLayerUpdater::doUpdateTexImage() { void DeferredLayerUpdater::updateLayer(bool forceFilter, GLenum renderTarget, const float* textureTransform) { + LOG_ALWAYS_FATAL_IF(mLayer->getApi() != Layer::Api::OpenGL, + "updateLayer non GL backend %x, GL %x, VK %x", + mLayer->getApi(), Layer::Api::OpenGL, Layer::Api::Vulkan); + mLayer->setBlend(mBlend); mLayer->setForceFilter(forceFilter); mLayer->setSize(mWidth, mHeight); mLayer->getTexTransform().load(textureTransform); - if (renderTarget != mLayer->getRenderTarget()) { - mLayer->setRenderTarget(renderTarget); - mLayer->bindTexture(); - mLayer->setFilter(GL_NEAREST, false, true); - mLayer->setWrap(GL_CLAMP_TO_EDGE, false, true); + GlLayer* glLayer = static_cast(mLayer); + if (renderTarget != glLayer->getRenderTarget()) { + glLayer->setRenderTarget(renderTarget); + glLayer->bindTexture(); + glLayer->setFilter(GL_NEAREST, false, true); + glLayer->setWrap(GL_CLAMP_TO_EDGE, false, true); } } void DeferredLayerUpdater::detachSurfaceTexture() { if (mSurfaceTexture.get()) { + LOG_ALWAYS_FATAL_IF(mLayer->getApi() != Layer::Api::OpenGL, + "detachSurfaceTexture with non GL backend %x, GL %x, VK %x", + mLayer->getApi(), Layer::Api::OpenGL, Layer::Api::Vulkan); status_t err = mSurfaceTexture->detachFromContext(); if (err != 0) { // TODO: Elevate to fatal exception ALOGE("Failed to detach SurfaceTexture from context %d", err); } mSurfaceTexture = nullptr; - mLayer->clearTexture(); + static_cast(mLayer)->clearTexture(); } } -- cgit v1.2.3-59-g8ed1b