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