18cd3edfa15cc9cdbffa935d19ab894426b08d174Greg Daniel/* 28cd3edfa15cc9cdbffa935d19ab894426b08d174Greg Daniel * Copyright (C) 2017 The Android Open Source Project 38cd3edfa15cc9cdbffa935d19ab894426b08d174Greg Daniel * 48cd3edfa15cc9cdbffa935d19ab894426b08d174Greg Daniel * Licensed under the Apache License, Version 2.0 (the "License"); 58cd3edfa15cc9cdbffa935d19ab894426b08d174Greg Daniel * you may not use this file except in compliance with the License. 68cd3edfa15cc9cdbffa935d19ab894426b08d174Greg Daniel * You may obtain a copy of the License at 78cd3edfa15cc9cdbffa935d19ab894426b08d174Greg Daniel * 88cd3edfa15cc9cdbffa935d19ab894426b08d174Greg Daniel * http://www.apache.org/licenses/LICENSE-2.0 98cd3edfa15cc9cdbffa935d19ab894426b08d174Greg Daniel * 108cd3edfa15cc9cdbffa935d19ab894426b08d174Greg Daniel * Unless required by applicable law or agreed to in writing, software 118cd3edfa15cc9cdbffa935d19ab894426b08d174Greg Daniel * distributed under the License is distributed on an "AS IS" BASIS, 128cd3edfa15cc9cdbffa935d19ab894426b08d174Greg Daniel * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 138cd3edfa15cc9cdbffa935d19ab894426b08d174Greg Daniel * See the License for the specific language governing permissions and 148cd3edfa15cc9cdbffa935d19ab894426b08d174Greg Daniel * limitations under the License. 158cd3edfa15cc9cdbffa935d19ab894426b08d174Greg Daniel */ 168cd3edfa15cc9cdbffa935d19ab894426b08d174Greg Daniel 178cd3edfa15cc9cdbffa935d19ab894426b08d174Greg Daniel#pragma once 188cd3edfa15cc9cdbffa935d19ab894426b08d174Greg Daniel 198cd3edfa15cc9cdbffa935d19ab894426b08d174Greg Daniel#include "Layer.h" 208cd3edfa15cc9cdbffa935d19ab894426b08d174Greg Daniel 218cd3edfa15cc9cdbffa935d19ab894426b08d174Greg Daniel#include "Texture.h" 228cd3edfa15cc9cdbffa935d19ab894426b08d174Greg Daniel 238cd3edfa15cc9cdbffa935d19ab894426b08d174Greg Danielnamespace android { 248cd3edfa15cc9cdbffa935d19ab894426b08d174Greg Danielnamespace uirenderer { 258cd3edfa15cc9cdbffa935d19ab894426b08d174Greg Daniel 268cd3edfa15cc9cdbffa935d19ab894426b08d174Greg Daniel// Forward declarations 278cd3edfa15cc9cdbffa935d19ab894426b08d174Greg Danielclass Caches; 288cd3edfa15cc9cdbffa935d19ab894426b08d174Greg Daniel 298cd3edfa15cc9cdbffa935d19ab894426b08d174Greg Daniel/** 308cd3edfa15cc9cdbffa935d19ab894426b08d174Greg Daniel * A layer has dimensions and is backed by an OpenGL texture or FBO. 318cd3edfa15cc9cdbffa935d19ab894426b08d174Greg Daniel */ 328cd3edfa15cc9cdbffa935d19ab894426b08d174Greg Danielclass GlLayer : public Layer { 338cd3edfa15cc9cdbffa935d19ab894426b08d174Greg Danielpublic: 343e9999bd866fac71c72e6b484a9836c87c328a08sergeyv GlLayer(RenderState& renderState, uint32_t layerWidth, uint32_t layerHeight, 353e9999bd866fac71c72e6b484a9836c87c328a08sergeyv SkColorFilter* colorFilter, int alpha, SkBlendMode mode, bool blend); 368cd3edfa15cc9cdbffa935d19ab894426b08d174Greg Daniel virtual ~GlLayer(); 378cd3edfa15cc9cdbffa935d19ab894426b08d174Greg Daniel 388cd3edfa15cc9cdbffa935d19ab894426b08d174Greg Daniel uint32_t getWidth() const override { 398cd3edfa15cc9cdbffa935d19ab894426b08d174Greg Daniel return texture.mWidth; 408cd3edfa15cc9cdbffa935d19ab894426b08d174Greg Daniel } 418cd3edfa15cc9cdbffa935d19ab894426b08d174Greg Daniel 428cd3edfa15cc9cdbffa935d19ab894426b08d174Greg Daniel uint32_t getHeight() const override { 438cd3edfa15cc9cdbffa935d19ab894426b08d174Greg Daniel return texture.mHeight; 448cd3edfa15cc9cdbffa935d19ab894426b08d174Greg Daniel } 458cd3edfa15cc9cdbffa935d19ab894426b08d174Greg Daniel 468cd3edfa15cc9cdbffa935d19ab894426b08d174Greg Daniel void setSize(uint32_t width, uint32_t height) override { 47caaaa66e57293e4a6f312649bf472eab84d5c7feRomain Guy texture.updateLayout(width, height, texture.internalFormat(), texture.format(), 488cd3edfa15cc9cdbffa935d19ab894426b08d174Greg Daniel texture.target()); 498cd3edfa15cc9cdbffa935d19ab894426b08d174Greg Daniel } 508cd3edfa15cc9cdbffa935d19ab894426b08d174Greg Daniel 518cd3edfa15cc9cdbffa935d19ab894426b08d174Greg Daniel void setBlend(bool blend) override { 528cd3edfa15cc9cdbffa935d19ab894426b08d174Greg Daniel texture.blend = blend; 538cd3edfa15cc9cdbffa935d19ab894426b08d174Greg Daniel } 548cd3edfa15cc9cdbffa935d19ab894426b08d174Greg Daniel 558cd3edfa15cc9cdbffa935d19ab894426b08d174Greg Daniel bool isBlend() const override { 568cd3edfa15cc9cdbffa935d19ab894426b08d174Greg Daniel return texture.blend; 578cd3edfa15cc9cdbffa935d19ab894426b08d174Greg Daniel } 588cd3edfa15cc9cdbffa935d19ab894426b08d174Greg Daniel 598cd3edfa15cc9cdbffa935d19ab894426b08d174Greg Daniel inline GLuint getTextureId() const { 608cd3edfa15cc9cdbffa935d19ab894426b08d174Greg Daniel return texture.id(); 618cd3edfa15cc9cdbffa935d19ab894426b08d174Greg Daniel } 628cd3edfa15cc9cdbffa935d19ab894426b08d174Greg Daniel 638cd3edfa15cc9cdbffa935d19ab894426b08d174Greg Daniel inline Texture& getTexture() { 648cd3edfa15cc9cdbffa935d19ab894426b08d174Greg Daniel return texture; 658cd3edfa15cc9cdbffa935d19ab894426b08d174Greg Daniel } 668cd3edfa15cc9cdbffa935d19ab894426b08d174Greg Daniel 678cd3edfa15cc9cdbffa935d19ab894426b08d174Greg Daniel inline GLenum getRenderTarget() const { 688cd3edfa15cc9cdbffa935d19ab894426b08d174Greg Daniel return texture.target(); 698cd3edfa15cc9cdbffa935d19ab894426b08d174Greg Daniel } 708cd3edfa15cc9cdbffa935d19ab894426b08d174Greg Daniel 718cd3edfa15cc9cdbffa935d19ab894426b08d174Greg Daniel inline bool isRenderable() const { 728cd3edfa15cc9cdbffa935d19ab894426b08d174Greg Daniel return texture.target() != GL_NONE; 738cd3edfa15cc9cdbffa935d19ab894426b08d174Greg Daniel } 748cd3edfa15cc9cdbffa935d19ab894426b08d174Greg Daniel 7509df887c9078a34f2bda32c83734b7f75c0a60ffChris Craik void setRenderTarget(GLenum renderTarget); 768cd3edfa15cc9cdbffa935d19ab894426b08d174Greg Daniel 778cd3edfa15cc9cdbffa935d19ab894426b08d174Greg Daniel void generateTexture(); 788cd3edfa15cc9cdbffa935d19ab894426b08d174Greg Daniel 798cd3edfa15cc9cdbffa935d19ab894426b08d174Greg Daniel /** 808cd3edfa15cc9cdbffa935d19ab894426b08d174Greg Daniel * Lost the GL context but the layer is still around, mark it invalid internally 818cd3edfa15cc9cdbffa935d19ab894426b08d174Greg Daniel * so the dtor knows not to do any GL work 828cd3edfa15cc9cdbffa935d19ab894426b08d174Greg Daniel */ 838cd3edfa15cc9cdbffa935d19ab894426b08d174Greg Daniel void onGlContextLost(); 848cd3edfa15cc9cdbffa935d19ab894426b08d174Greg Daniel 858cd3edfa15cc9cdbffa935d19ab894426b08d174Greg Danielprivate: 868cd3edfa15cc9cdbffa935d19ab894426b08d174Greg Daniel Caches& caches; 878cd3edfa15cc9cdbffa935d19ab894426b08d174Greg Daniel 888cd3edfa15cc9cdbffa935d19ab894426b08d174Greg Daniel /** 898cd3edfa15cc9cdbffa935d19ab894426b08d174Greg Daniel * The texture backing this layer. 908cd3edfa15cc9cdbffa935d19ab894426b08d174Greg Daniel */ 918cd3edfa15cc9cdbffa935d19ab894426b08d174Greg Daniel Texture texture; 928cd3edfa15cc9cdbffa935d19ab894426b08d174Greg Daniel}; // struct GlLayer 938cd3edfa15cc9cdbffa935d19ab894426b08d174Greg Daniel 948cd3edfa15cc9cdbffa935d19ab894426b08d174Greg Daniel}; // namespace uirenderer 958cd3edfa15cc9cdbffa935d19ab894426b08d174Greg Daniel}; // namespace android 96