1edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project/* 2edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project * Copyright (C) 2007 The Android Open Source Project 3edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project * 4edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License"); 5edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project * you may not use this file except in compliance with the License. 6edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project * You may obtain a copy of the License at 7edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project * 8edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project * http://www.apache.org/licenses/LICENSE-2.0 9edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project * 10edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project * Unless required by applicable law or agreed to in writing, software 11edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS, 12edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project * See the License for the specific language governing permissions and 14edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project * limitations under the License. 15edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project */ 16edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 17edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project#include <stdlib.h> 18edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project#include <stdint.h> 19edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project#include <sys/types.h> 20edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 21d3ee231eddce0b69ec5e35188dbd0f4a2c3b9ac3Mathias Agopian#include <GLES/gl.h> 22d3ee231eddce0b69ec5e35188dbd0f4a2c3b9ac3Mathias Agopian#include <GLES/glext.h> 23d3ee231eddce0b69ec5e35188dbd0f4a2c3b9ac3Mathias Agopian 24edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project#include <utils/Errors.h> 25edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project#include <utils/Log.h> 26edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 273330b203039dea366d4981db1408a460134b2d2cMathias Agopian#include <ui/GraphicBuffer.h> 283330b203039dea366d4981db1408a460134b2d2cMathias Agopian 29edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project#include "LayerDim.h" 30edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project#include "SurfaceFlinger.h" 310f2f5ff75b7b48ceb64270655ee6b62d09bf4d00Mathias Agopian#include "DisplayDevice.h" 32edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 33edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectnamespace android { 34edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project// --------------------------------------------------------------------------- 35edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 364d9b822e2c18142e55fe2611aa6cd7dc7d4a62c6Mathias AgopianLayerDim::LayerDim(SurfaceFlinger* flinger, const sp<Client>& client, 374d9b822e2c18142e55fe2611aa6cd7dc7d4a62c6Mathias Agopian const String8& name, uint32_t w, uint32_t h, uint32_t flags) 384d9b822e2c18142e55fe2611aa6cd7dc7d4a62c6Mathias Agopian : Layer(flinger, client, name, w, h, flags) { 39edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project} 40edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 4113127d8921356dff794250e04208c3ed60b3a3dfMathias AgopianLayerDim::~LayerDim() { 42edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project} 43edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 444297734c1156fd8ede7e9c61b1e439f9e1c18cd9Mathias Agopianvoid LayerDim::onDraw(const sp<const DisplayDevice>& hw, const Region& clip) const 45edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project{ 46edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project const State& s(drawingState()); 47f74e8e0602100e048c13ea262f0c19c3b8738b6fMathias Agopian if (s.alpha>0) { 481f7bec634f19c123410a5155c8d282e177c01930Mathias Agopian const GLfloat alpha = s.alpha/255.0f; 494297734c1156fd8ede7e9c61b1e439f9e1c18cd9Mathias Agopian const uint32_t fbHeight = hw->getHeight(); 50c492e67810814bf86301abffe1d31598b775cf45Mathias Agopian glDisable(GL_TEXTURE_EXTERNAL_OES); 51c492e67810814bf86301abffe1d31598b775cf45Mathias Agopian glDisable(GL_TEXTURE_2D); 520d1561275e80073807ac04728951782d943f8882Mathias Agopian 530d1561275e80073807ac04728951782d943f8882Mathias Agopian if (s.alpha == 0xFF) { 540d1561275e80073807ac04728951782d943f8882Mathias Agopian glDisable(GL_BLEND); 550d1561275e80073807ac04728951782d943f8882Mathias Agopian } else { 560d1561275e80073807ac04728951782d943f8882Mathias Agopian glEnable(GL_BLEND); 570d1561275e80073807ac04728951782d943f8882Mathias Agopian glBlendFunc(GL_ONE, GL_ONE_MINUS_SRC_ALPHA); 580d1561275e80073807ac04728951782d943f8882Mathias Agopian } 590d1561275e80073807ac04728951782d943f8882Mathias Agopian 601f7bec634f19c123410a5155c8d282e177c01930Mathias Agopian glColor4f(0, 0, 0, alpha); 611f7bec634f19c123410a5155c8d282e177c01930Mathias Agopian 624fec873a98f7b4380720cd1ad006f74c8cdc73daMathias Agopian LayerMesh mesh; 634fec873a98f7b4380720cd1ad006f74c8cdc73daMathias Agopian computeGeometry(hw, &mesh); 644fec873a98f7b4380720cd1ad006f74c8cdc73daMathias Agopian 654fec873a98f7b4380720cd1ad006f74c8cdc73daMathias Agopian glVertexPointer(2, GL_FLOAT, 0, mesh.getVertices()); 664fec873a98f7b4380720cd1ad006f74c8cdc73daMathias Agopian glDrawArrays(GL_TRIANGLE_FAN, 0, mesh.getVertexCount()); 67945ebbfd3dc07c7168602a1603eeb76ea7425376Mathias Agopian 68c492e67810814bf86301abffe1d31598b775cf45Mathias Agopian glDisable(GL_BLEND); 69c492e67810814bf86301abffe1d31598b775cf45Mathias Agopian glDisableClientState(GL_TEXTURE_COORD_ARRAY); 70edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project } 71edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project} 72edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 732f73af9212487c81d31d07227fa8a2f4abc77638Mathias Agopianbool LayerDim::isVisible() const { 7413127d8921356dff794250e04208c3ed60b3a3dfMathias Agopian const Layer::State& s(drawingState()); 752f73af9212487c81d31d07227fa8a2f4abc77638Mathias Agopian return !(s.flags & layer_state_t::eLayerHidden) && s.alpha; 762f73af9212487c81d31d07227fa8a2f4abc77638Mathias Agopian} 772f73af9212487c81d31d07227fa8a2f4abc77638Mathias Agopian 782f73af9212487c81d31d07227fa8a2f4abc77638Mathias Agopian 79edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project// --------------------------------------------------------------------------- 80edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 81edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project}; // namespace android 82