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
21edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project#include <utils/Errors.h>
22edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project#include <utils/Log.h>
23edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
243330b203039dea366d4981db1408a460134b2d2cMathias Agopian#include <ui/GraphicBuffer.h>
253330b203039dea366d4981db1408a460134b2d2cMathias Agopian
26edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project#include "LayerDim.h"
27edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project#include "SurfaceFlinger.h"
28edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project#include "DisplayHardware/DisplayHardware.h"
29edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
30edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectnamespace android {
31edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project// ---------------------------------------------------------------------------
32edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
33edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source ProjectLayerDim::LayerDim(SurfaceFlinger* flinger, DisplayID display,
3496f0819f81293076e652792794a961543e6750d7Mathias Agopian        const sp<Client>& client)
3596f0819f81293076e652792794a961543e6750d7Mathias Agopian    : LayerBaseClient(flinger, display, client)
36edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project{
37edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project}
38edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
39edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source ProjectLayerDim::~LayerDim()
40edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project{
41edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project}
42edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
43edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectvoid LayerDim::onDraw(const Region& clip) const
44edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project{
45edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    const State& s(drawingState());
46f74e8e0602100e048c13ea262f0c19c3b8738b6fMathias Agopian    if (s.alpha>0) {
47edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project        const DisplayHardware& hw(graphicPlane(0).displayHardware());
481f7bec634f19c123410a5155c8d282e177c01930Mathias Agopian        const GLfloat alpha = s.alpha/255.0f;
49076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias 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
62bce26daaaf4ea245ccb09d75a378d294e518d945Mathias Agopian        glVertexPointer(2, GL_FLOAT, 0, mVertices);
63f74e8e0602100e048c13ea262f0c19c3b8738b6fMathias Agopian        glDrawArrays(GL_TRIANGLE_FAN, 0, 4);
64945ebbfd3dc07c7168602a1603eeb76ea7425376Mathias Agopian
65c492e67810814bf86301abffe1d31598b775cf45Mathias Agopian        glDisable(GL_BLEND);
66c492e67810814bf86301abffe1d31598b775cf45Mathias Agopian        glDisableClientState(GL_TEXTURE_COORD_ARRAY);
67edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    }
68edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project}
69edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
70edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project// ---------------------------------------------------------------------------
71edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
72edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project}; // namespace android
73