DrawGlInfo.h revision 8f3b8e32993d190a26c70c839a63d8ce4c3b16d9
108aa2cbd5e62e7ca140f78f8bea0477a19880fd9Romain Guy/*
208aa2cbd5e62e7ca140f78f8bea0477a19880fd9Romain Guy * Copyright (C) 2011 The Android Open Source Project
308aa2cbd5e62e7ca140f78f8bea0477a19880fd9Romain Guy *
408aa2cbd5e62e7ca140f78f8bea0477a19880fd9Romain Guy * Licensed under the Apache License, Version 2.0 (the "License");
508aa2cbd5e62e7ca140f78f8bea0477a19880fd9Romain Guy * you may not use this file except in compliance with the License.
608aa2cbd5e62e7ca140f78f8bea0477a19880fd9Romain Guy * You may obtain a copy of the License at
708aa2cbd5e62e7ca140f78f8bea0477a19880fd9Romain Guy *
808aa2cbd5e62e7ca140f78f8bea0477a19880fd9Romain Guy *      http://www.apache.org/licenses/LICENSE-2.0
908aa2cbd5e62e7ca140f78f8bea0477a19880fd9Romain Guy *
1008aa2cbd5e62e7ca140f78f8bea0477a19880fd9Romain Guy * Unless required by applicable law or agreed to in writing, software
1108aa2cbd5e62e7ca140f78f8bea0477a19880fd9Romain Guy * distributed under the License is distributed on an "AS IS" BASIS,
1208aa2cbd5e62e7ca140f78f8bea0477a19880fd9Romain Guy * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1308aa2cbd5e62e7ca140f78f8bea0477a19880fd9Romain Guy * See the License for the specific language governing permissions and
1408aa2cbd5e62e7ca140f78f8bea0477a19880fd9Romain Guy * limitations under the License.
1508aa2cbd5e62e7ca140f78f8bea0477a19880fd9Romain Guy */
1608aa2cbd5e62e7ca140f78f8bea0477a19880fd9Romain Guy
1708aa2cbd5e62e7ca140f78f8bea0477a19880fd9Romain Guy#ifndef ANDROID_HWUI_DRAW_GL_INFO_H
1808aa2cbd5e62e7ca140f78f8bea0477a19880fd9Romain Guy#define ANDROID_HWUI_DRAW_GL_INFO_H
1908aa2cbd5e62e7ca140f78f8bea0477a19880fd9Romain Guy
2008aa2cbd5e62e7ca140f78f8bea0477a19880fd9Romain Guynamespace android {
2108aa2cbd5e62e7ca140f78f8bea0477a19880fd9Romain Guynamespace uirenderer {
2208aa2cbd5e62e7ca140f78f8bea0477a19880fd9Romain Guy
2308aa2cbd5e62e7ca140f78f8bea0477a19880fd9Romain Guy/**
2408aa2cbd5e62e7ca140f78f8bea0477a19880fd9Romain Guy * Structure used by OpenGLRenderer::callDrawGLFunction() to pass and
2508aa2cbd5e62e7ca140f78f8bea0477a19880fd9Romain Guy * receive data from OpenGL functors.
2608aa2cbd5e62e7ca140f78f8bea0477a19880fd9Romain Guy */
2708aa2cbd5e62e7ca140f78f8bea0477a19880fd9Romain Guystruct DrawGlInfo {
2808aa2cbd5e62e7ca140f78f8bea0477a19880fd9Romain Guy    // Input: current clip rect
2908aa2cbd5e62e7ca140f78f8bea0477a19880fd9Romain Guy    int clipLeft;
3008aa2cbd5e62e7ca140f78f8bea0477a19880fd9Romain Guy    int clipTop;
3108aa2cbd5e62e7ca140f78f8bea0477a19880fd9Romain Guy    int clipRight;
3208aa2cbd5e62e7ca140f78f8bea0477a19880fd9Romain Guy    int clipBottom;
3308aa2cbd5e62e7ca140f78f8bea0477a19880fd9Romain Guy
3408aa2cbd5e62e7ca140f78f8bea0477a19880fd9Romain Guy    // Input: is the render target an FBO
3508aa2cbd5e62e7ca140f78f8bea0477a19880fd9Romain Guy    bool isLayer;
3608aa2cbd5e62e7ca140f78f8bea0477a19880fd9Romain Guy
3708aa2cbd5e62e7ca140f78f8bea0477a19880fd9Romain Guy    // Input: current transform matrix, in OpenGL format
3808aa2cbd5e62e7ca140f78f8bea0477a19880fd9Romain Guy    float transform[16];
3908aa2cbd5e62e7ca140f78f8bea0477a19880fd9Romain Guy
4008aa2cbd5e62e7ca140f78f8bea0477a19880fd9Romain Guy    // Output: dirty region to redraw
4108aa2cbd5e62e7ca140f78f8bea0477a19880fd9Romain Guy    float dirtyLeft;
4208aa2cbd5e62e7ca140f78f8bea0477a19880fd9Romain Guy    float dirtyTop;
4308aa2cbd5e62e7ca140f78f8bea0477a19880fd9Romain Guy    float dirtyRight;
4408aa2cbd5e62e7ca140f78f8bea0477a19880fd9Romain Guy    float dirtyBottom;
456554943a1dd6854c0f4976900956e556767b49e1Romain Guy
466554943a1dd6854c0f4976900956e556767b49e1Romain Guy    /**
478f3b8e32993d190a26c70c839a63d8ce4c3b16d9Romain Guy     * Values used as the "what" parameter of the functor.
488f3b8e32993d190a26c70c839a63d8ce4c3b16d9Romain Guy     */
498f3b8e32993d190a26c70c839a63d8ce4c3b16d9Romain Guy    enum Mode {
508f3b8e32993d190a26c70c839a63d8ce4c3b16d9Romain Guy        // Indicates that the functor is called to perform a draw
518f3b8e32993d190a26c70c839a63d8ce4c3b16d9Romain Guy        kModeDraw,
528f3b8e32993d190a26c70c839a63d8ce4c3b16d9Romain Guy        // Indicates the the functor is called only to perform
538f3b8e32993d190a26c70c839a63d8ce4c3b16d9Romain Guy        // processing and that no draw should be attempted
548f3b8e32993d190a26c70c839a63d8ce4c3b16d9Romain Guy        kModeProcess
558f3b8e32993d190a26c70c839a63d8ce4c3b16d9Romain Guy    };
568f3b8e32993d190a26c70c839a63d8ce4c3b16d9Romain Guy
578f3b8e32993d190a26c70c839a63d8ce4c3b16d9Romain Guy    /**
586554943a1dd6854c0f4976900956e556767b49e1Romain Guy     * Values used by OpenGL functors to tell the framework
596554943a1dd6854c0f4976900956e556767b49e1Romain Guy     * what to do next.
606554943a1dd6854c0f4976900956e556767b49e1Romain Guy     */
616554943a1dd6854c0f4976900956e556767b49e1Romain Guy    enum Status {
626554943a1dd6854c0f4976900956e556767b49e1Romain Guy        // The functor is done
638f3b8e32993d190a26c70c839a63d8ce4c3b16d9Romain Guy        kStatusDone = 0x0,
646554943a1dd6854c0f4976900956e556767b49e1Romain Guy        // The functor is requesting a redraw (the clip rect
656554943a1dd6854c0f4976900956e556767b49e1Romain Guy        // used by the redraw is specified by DrawGlInfo.)
666554943a1dd6854c0f4976900956e556767b49e1Romain Guy        // The rest of the UI might redraw too.
678f3b8e32993d190a26c70c839a63d8ce4c3b16d9Romain Guy        kStatusDraw = 0x1,
686554943a1dd6854c0f4976900956e556767b49e1Romain Guy        // The functor needs to be invoked again but will
696554943a1dd6854c0f4976900956e556767b49e1Romain Guy        // not redraw. Only the functor is invoked again
706554943a1dd6854c0f4976900956e556767b49e1Romain Guy        // (unless another functor requests a redraw.)
718f3b8e32993d190a26c70c839a63d8ce4c3b16d9Romain Guy        kStatusInvoke = 0x2
726554943a1dd6854c0f4976900956e556767b49e1Romain Guy    };
7308aa2cbd5e62e7ca140f78f8bea0477a19880fd9Romain Guy}; // struct DrawGlInfo
7408aa2cbd5e62e7ca140f78f8bea0477a19880fd9Romain Guy
7508aa2cbd5e62e7ca140f78f8bea0477a19880fd9Romain Guy}; // namespace uirenderer
7608aa2cbd5e62e7ca140f78f8bea0477a19880fd9Romain Guy}; // namespace android
7708aa2cbd5e62e7ca140f78f8bea0477a19880fd9Romain Guy
7808aa2cbd5e62e7ca140f78f8bea0477a19880fd9Romain Guy#endif // ANDROID_HWUI_DRAW_GL_INFO_H
79