19066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/* 29066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Copyright (C) 2007 The Android Open Source Project 39066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 49066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License"); 59066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * you may not use this file except in compliance with the License. 69066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * You may obtain a copy of the License at 79066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 89066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * http://www.apache.org/licenses/LICENSE-2.0 99066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Unless required by applicable law or agreed to in writing, software 119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS, 129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * See the License for the specific language governing permissions and 149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * limitations under the License. 159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#include <stdlib.h> 189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#include <stdint.h> 199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#include <sys/types.h> 209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#include <utils/Errors.h> 229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#include <utils/Log.h> 239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 246950e428feaccc8164b989ef64e771a99948797aMathias Agopian#include <ui/GraphicBuffer.h> 256950e428feaccc8164b989ef64e771a99948797aMathias Agopian 269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#include "LayerDim.h" 279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#include "SurfaceFlinger.h" 289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#include "DisplayHardware/DisplayHardware.h" 299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectnamespace android { 319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project// --------------------------------------------------------------------------- 329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectLayerDim::LayerDim(SurfaceFlinger* flinger, DisplayID display, 34593c05ce7bcf7b6d94bd8c50da2b818cf05116b1Mathias Agopian const sp<Client>& client) 35593c05ce7bcf7b6d94bd8c50da2b818cf05116b1Mathias Agopian : LayerBaseClient(flinger, display, client) 369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{ 379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectLayerDim::~LayerDim() 409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{ 419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid LayerDim::onDraw(const Region& clip) const 449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{ 459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project const State& s(drawingState()); 466158b1bf0364da1582468a98ec09d004ba99deecMathias Agopian Region::const_iterator it = clip.begin(); 476158b1bf0364da1582468a98ec09d004ba99deecMathias Agopian Region::const_iterator const end = clip.end(); 486158b1bf0364da1582468a98ec09d004ba99deecMathias Agopian if (s.alpha>0 && (it != end)) { 499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project const DisplayHardware& hw(graphicPlane(0).displayHardware()); 50781953d62dc17d761e39540f0480e5ca7451cdbeMathias Agopian const GLfloat alpha = s.alpha/255.0f; 511473f46cbc82aa6f0ba744cc896a36923823d55bMathias Agopian const uint32_t fbHeight = hw.getHeight(); 529044ef05d542a4f99b4be7ecefbe5e676bd3ea7fMathias Agopian glDisable(GL_TEXTURE_EXTERNAL_OES); 539044ef05d542a4f99b4be7ecefbe5e676bd3ea7fMathias Agopian glDisable(GL_TEXTURE_2D); 54d35c6667c8233385f31aa203f486b2cb826bf6beMathias Agopian 55d35c6667c8233385f31aa203f486b2cb826bf6beMathias Agopian if (s.alpha == 0xFF) { 56d35c6667c8233385f31aa203f486b2cb826bf6beMathias Agopian glDisable(GL_BLEND); 57d35c6667c8233385f31aa203f486b2cb826bf6beMathias Agopian } else { 58d35c6667c8233385f31aa203f486b2cb826bf6beMathias Agopian glEnable(GL_BLEND); 59d35c6667c8233385f31aa203f486b2cb826bf6beMathias Agopian glBlendFunc(GL_ONE, GL_ONE_MINUS_SRC_ALPHA); 60d35c6667c8233385f31aa203f486b2cb826bf6beMathias Agopian } 61d35c6667c8233385f31aa203f486b2cb826bf6beMathias Agopian 62781953d62dc17d761e39540f0480e5ca7451cdbeMathias Agopian glColor4f(0, 0, 0, alpha); 63781953d62dc17d761e39540f0480e5ca7451cdbeMathias Agopian 646e138fb682fb84bfebff7f4ae4b88cef1996708cMathias Agopian glVertexPointer(2, GL_FLOAT, 0, mVertices); 659cc88529e4cbf54df3eed968666472d3fa658d13Mathias Agopian 666158b1bf0364da1582468a98ec09d004ba99deecMathias Agopian while (it != end) { 676158b1bf0364da1582468a98ec09d004ba99deecMathias Agopian const Rect& r = *it++; 681473f46cbc82aa6f0ba744cc896a36923823d55bMathias Agopian const GLint sy = fbHeight - (r.top + r.height()); 691473f46cbc82aa6f0ba744cc896a36923823d55bMathias Agopian glScissor(r.left, sy, r.width(), r.height()); 701473f46cbc82aa6f0ba744cc896a36923823d55bMathias Agopian glDrawArrays(GL_TRIANGLE_FAN, 0, 4); 719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 729044ef05d542a4f99b4be7ecefbe5e676bd3ea7fMathias Agopian glDisable(GL_BLEND); 739044ef05d542a4f99b4be7ecefbe5e676bd3ea7fMathias Agopian glDisableClientState(GL_TEXTURE_COORD_ARRAY); 749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project// --------------------------------------------------------------------------- 789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}; // namespace android 80