156ad6ec42f814e9e61030ff819cac4e5d31def8bDerek Sollenberger/* 256ad6ec42f814e9e61030ff819cac4e5d31def8bDerek Sollenberger * Copyright (C) 2016 The Android Open Source Project 356ad6ec42f814e9e61030ff819cac4e5d31def8bDerek Sollenberger * 456ad6ec42f814e9e61030ff819cac4e5d31def8bDerek Sollenberger * Licensed under the Apache License, Version 2.0 (the "License"); 556ad6ec42f814e9e61030ff819cac4e5d31def8bDerek Sollenberger * you may not use this file except in compliance with the License. 656ad6ec42f814e9e61030ff819cac4e5d31def8bDerek Sollenberger * You may obtain a copy of the License at 756ad6ec42f814e9e61030ff819cac4e5d31def8bDerek Sollenberger * 856ad6ec42f814e9e61030ff819cac4e5d31def8bDerek Sollenberger * http://www.apache.org/licenses/LICENSE-2.0 956ad6ec42f814e9e61030ff819cac4e5d31def8bDerek Sollenberger * 1056ad6ec42f814e9e61030ff819cac4e5d31def8bDerek Sollenberger * Unless required by applicable law or agreed to in writing, software 1156ad6ec42f814e9e61030ff819cac4e5d31def8bDerek Sollenberger * distributed under the License is distributed on an "AS IS" BASIS, 1256ad6ec42f814e9e61030ff819cac4e5d31def8bDerek Sollenberger * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1356ad6ec42f814e9e61030ff819cac4e5d31def8bDerek Sollenberger * See the License for the specific language governing permissions and 1456ad6ec42f814e9e61030ff819cac4e5d31def8bDerek Sollenberger * limitations under the License. 1556ad6ec42f814e9e61030ff819cac4e5d31def8bDerek Sollenberger */ 1656ad6ec42f814e9e61030ff819cac4e5d31def8bDerek Sollenberger 1756ad6ec42f814e9e61030ff819cac4e5d31def8bDerek Sollenberger#include "DeferredLayerUpdater.h" 188cd3edfa15cc9cdbffa935d19ab894426b08d174Greg Daniel#include "GlLayer.h" 1998c78dad1969e2321cfee2085faa55d95bba7e29Greg Daniel#include "Properties.h" 2056ad6ec42f814e9e61030ff819cac4e5d31def8bDerek Sollenberger 2156ad6ec42f814e9e61030ff819cac4e5d31def8bDerek Sollenberger#include "tests/common/TestUtils.h" 2256ad6ec42f814e9e61030ff819cac4e5d31def8bDerek Sollenberger 2356ad6ec42f814e9e61030ff819cac4e5d31def8bDerek Sollenberger#include <gtest/gtest.h> 2456ad6ec42f814e9e61030ff819cac4e5d31def8bDerek Sollenberger 2556ad6ec42f814e9e61030ff819cac4e5d31def8bDerek Sollenbergerusing namespace android; 2656ad6ec42f814e9e61030ff819cac4e5d31def8bDerek Sollenbergerusing namespace android::uirenderer; 2756ad6ec42f814e9e61030ff819cac4e5d31def8bDerek Sollenberger 2856ad6ec42f814e9e61030ff819cac4e5d31def8bDerek SollenbergerRENDERTHREAD_TEST(DeferredLayerUpdater, updateLayer) { 2998c78dad1969e2321cfee2085faa55d95bba7e29Greg Daniel sp<DeferredLayerUpdater> layerUpdater = TestUtils::createTextureLayerUpdater(renderThread); 3056ad6ec42f814e9e61030ff819cac4e5d31def8bDerek Sollenberger layerUpdater->setSize(100, 100); 3156ad6ec42f814e9e61030ff819cac4e5d31def8bDerek Sollenberger layerUpdater->setBlend(true); 3256ad6ec42f814e9e61030ff819cac4e5d31def8bDerek Sollenberger 3356ad6ec42f814e9e61030ff819cac4e5d31def8bDerek Sollenberger // updates are deferred so the backing layer should still be in its default state 348cd3edfa15cc9cdbffa935d19ab894426b08d174Greg Daniel if (layerUpdater->backingLayer()->getApi() == Layer::Api::OpenGL) { 358cd3edfa15cc9cdbffa935d19ab894426b08d174Greg Daniel GlLayer* glLayer = static_cast<GlLayer*>(layerUpdater->backingLayer()); 368cd3edfa15cc9cdbffa935d19ab894426b08d174Greg Daniel EXPECT_EQ((uint32_t)GL_NONE, glLayer->getRenderTarget()); 378cd3edfa15cc9cdbffa935d19ab894426b08d174Greg Daniel } 3856ad6ec42f814e9e61030ff819cac4e5d31def8bDerek Sollenberger EXPECT_EQ(0u, layerUpdater->backingLayer()->getWidth()); 3956ad6ec42f814e9e61030ff819cac4e5d31def8bDerek Sollenberger EXPECT_EQ(0u, layerUpdater->backingLayer()->getHeight()); 4056ad6ec42f814e9e61030ff819cac4e5d31def8bDerek Sollenberger EXPECT_FALSE(layerUpdater->backingLayer()->getForceFilter()); 4156ad6ec42f814e9e61030ff819cac4e5d31def8bDerek Sollenberger EXPECT_FALSE(layerUpdater->backingLayer()->isBlend()); 4256ad6ec42f814e9e61030ff819cac4e5d31def8bDerek Sollenberger EXPECT_EQ(Matrix4::identity(), layerUpdater->backingLayer()->getTexTransform()); 4356ad6ec42f814e9e61030ff819cac4e5d31def8bDerek Sollenberger 4456ad6ec42f814e9e61030ff819cac4e5d31def8bDerek Sollenberger // push the deferred updates to the layer 4556ad6ec42f814e9e61030ff819cac4e5d31def8bDerek Sollenberger Matrix4 scaledMatrix; 4656ad6ec42f814e9e61030ff819cac4e5d31def8bDerek Sollenberger scaledMatrix.loadScale(0.5, 0.5, 0.0); 4709df887c9078a34f2bda32c83734b7f75c0a60ffChris Craik layerUpdater->updateLayer(true, scaledMatrix.data); 4809df887c9078a34f2bda32c83734b7f75c0a60ffChris Craik if (layerUpdater->backingLayer()->getApi() == Layer::Api::OpenGL) { 4909df887c9078a34f2bda32c83734b7f75c0a60ffChris Craik GlLayer* glLayer = static_cast<GlLayer*>(layerUpdater->backingLayer()); 5009df887c9078a34f2bda32c83734b7f75c0a60ffChris Craik glLayer->setRenderTarget(GL_TEXTURE_EXTERNAL_OES); 5109df887c9078a34f2bda32c83734b7f75c0a60ffChris Craik } 5209df887c9078a34f2bda32c83734b7f75c0a60ffChris Craik 5356ad6ec42f814e9e61030ff819cac4e5d31def8bDerek Sollenberger 5456ad6ec42f814e9e61030ff819cac4e5d31def8bDerek Sollenberger // the backing layer should now have all the properties applied. 558cd3edfa15cc9cdbffa935d19ab894426b08d174Greg Daniel if (layerUpdater->backingLayer()->getApi() == Layer::Api::OpenGL) { 568cd3edfa15cc9cdbffa935d19ab894426b08d174Greg Daniel GlLayer* glLayer = static_cast<GlLayer*>(layerUpdater->backingLayer()); 578cd3edfa15cc9cdbffa935d19ab894426b08d174Greg Daniel EXPECT_EQ((uint32_t)GL_TEXTURE_EXTERNAL_OES, glLayer->getRenderTarget()); 588cd3edfa15cc9cdbffa935d19ab894426b08d174Greg Daniel } 5956ad6ec42f814e9e61030ff819cac4e5d31def8bDerek Sollenberger EXPECT_EQ(100u, layerUpdater->backingLayer()->getWidth()); 6056ad6ec42f814e9e61030ff819cac4e5d31def8bDerek Sollenberger EXPECT_EQ(100u, layerUpdater->backingLayer()->getHeight()); 6156ad6ec42f814e9e61030ff819cac4e5d31def8bDerek Sollenberger EXPECT_TRUE(layerUpdater->backingLayer()->getForceFilter()); 6256ad6ec42f814e9e61030ff819cac4e5d31def8bDerek Sollenberger EXPECT_TRUE(layerUpdater->backingLayer()->isBlend()); 6356ad6ec42f814e9e61030ff819cac4e5d31def8bDerek Sollenberger EXPECT_EQ(scaledMatrix, layerUpdater->backingLayer()->getTexTransform()); 6456ad6ec42f814e9e61030ff819cac4e5d31def8bDerek Sollenberger} 65