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
363ee454a7bef8bd3d1c9cdd9d17108eb80ebadf2aMathias AgopianLayerDim::LayerDim(SurfaceFlinger* flinger, const sp<Client>& client)
373ee454a7bef8bd3d1c9cdd9d17108eb80ebadf2aMathias Agopian    : LayerBaseClient(flinger, client)
38edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project{
39edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project}
40edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
41edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source ProjectLayerDim::~LayerDim()
42edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project{
43edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project}
44edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
454297734c1156fd8ede7e9c61b1e439f9e1c18cd9Mathias Agopianvoid LayerDim::onDraw(const sp<const DisplayDevice>& hw, const Region& clip) const
46edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project{
47edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    const State& s(drawingState());
48f74e8e0602100e048c13ea262f0c19c3b8738b6fMathias Agopian    if (s.alpha>0) {
491f7bec634f19c123410a5155c8d282e177c01930Mathias Agopian        const GLfloat alpha = s.alpha/255.0f;
504297734c1156fd8ede7e9c61b1e439f9e1c18cd9Mathias Agopian        const uint32_t fbHeight = hw->getHeight();
51c492e67810814bf86301abffe1d31598b775cf45Mathias Agopian        glDisable(GL_TEXTURE_EXTERNAL_OES);
52c492e67810814bf86301abffe1d31598b775cf45Mathias Agopian        glDisable(GL_TEXTURE_2D);
530d1561275e80073807ac04728951782d943f8882Mathias Agopian
540d1561275e80073807ac04728951782d943f8882Mathias Agopian        if (s.alpha == 0xFF) {
550d1561275e80073807ac04728951782d943f8882Mathias Agopian            glDisable(GL_BLEND);
560d1561275e80073807ac04728951782d943f8882Mathias Agopian        } else {
570d1561275e80073807ac04728951782d943f8882Mathias Agopian            glEnable(GL_BLEND);
580d1561275e80073807ac04728951782d943f8882Mathias Agopian            glBlendFunc(GL_ONE, GL_ONE_MINUS_SRC_ALPHA);
590d1561275e80073807ac04728951782d943f8882Mathias Agopian        }
600d1561275e80073807ac04728951782d943f8882Mathias Agopian
611f7bec634f19c123410a5155c8d282e177c01930Mathias Agopian        glColor4f(0, 0, 0, alpha);
621f7bec634f19c123410a5155c8d282e177c01930Mathias Agopian
634fec873a98f7b4380720cd1ad006f74c8cdc73daMathias Agopian        LayerMesh mesh;
644fec873a98f7b4380720cd1ad006f74c8cdc73daMathias Agopian        computeGeometry(hw, &mesh);
654fec873a98f7b4380720cd1ad006f74c8cdc73daMathias Agopian
664fec873a98f7b4380720cd1ad006f74c8cdc73daMathias Agopian        glVertexPointer(2, GL_FLOAT, 0, mesh.getVertices());
674fec873a98f7b4380720cd1ad006f74c8cdc73daMathias Agopian        glDrawArrays(GL_TRIANGLE_FAN, 0, mesh.getVertexCount());
68945ebbfd3dc07c7168602a1603eeb76ea7425376Mathias Agopian
69c492e67810814bf86301abffe1d31598b775cf45Mathias Agopian        glDisable(GL_BLEND);
70c492e67810814bf86301abffe1d31598b775cf45Mathias Agopian        glDisableClientState(GL_TEXTURE_COORD_ARRAY);
71edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    }
72edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project}
73edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
74edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project// ---------------------------------------------------------------------------
75edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
76edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project}; // namespace android
77