BakedOpRenderer.h revision 818c9fbf1d76d5df19253ba4eb964efa939ec9ec
1b565df13a9e5c7b1d7d93bdfa4a793752d66d3ccChris Craik/*
2b565df13a9e5c7b1d7d93bdfa4a793752d66d3ccChris Craik * Copyright (C) 2015 The Android Open Source Project
3b565df13a9e5c7b1d7d93bdfa4a793752d66d3ccChris Craik *
4b565df13a9e5c7b1d7d93bdfa4a793752d66d3ccChris Craik * Licensed under the Apache License, Version 2.0 (the "License");
5b565df13a9e5c7b1d7d93bdfa4a793752d66d3ccChris Craik * you may not use this file except in compliance with the License.
6b565df13a9e5c7b1d7d93bdfa4a793752d66d3ccChris Craik * You may obtain a copy of the License at
7b565df13a9e5c7b1d7d93bdfa4a793752d66d3ccChris Craik *
8b565df13a9e5c7b1d7d93bdfa4a793752d66d3ccChris Craik *      http://www.apache.org/licenses/LICENSE-2.0
9b565df13a9e5c7b1d7d93bdfa4a793752d66d3ccChris Craik *
10b565df13a9e5c7b1d7d93bdfa4a793752d66d3ccChris Craik * Unless required by applicable law or agreed to in writing, software
11b565df13a9e5c7b1d7d93bdfa4a793752d66d3ccChris Craik * distributed under the License is distributed on an "AS IS" BASIS,
12b565df13a9e5c7b1d7d93bdfa4a793752d66d3ccChris Craik * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13b565df13a9e5c7b1d7d93bdfa4a793752d66d3ccChris Craik * See the License for the specific language governing permissions and
14b565df13a9e5c7b1d7d93bdfa4a793752d66d3ccChris Craik * limitations under the License.
15b565df13a9e5c7b1d7d93bdfa4a793752d66d3ccChris Craik */
16b565df13a9e5c7b1d7d93bdfa4a793752d66d3ccChris Craik
17b565df13a9e5c7b1d7d93bdfa4a793752d66d3ccChris Craik#ifndef ANDROID_HWUI_BAKED_OP_RENDERER_H
18b565df13a9e5c7b1d7d93bdfa4a793752d66d3ccChris Craik#define ANDROID_HWUI_BAKED_OP_RENDERER_H
19b565df13a9e5c7b1d7d93bdfa4a793752d66d3ccChris Craik
20b565df13a9e5c7b1d7d93bdfa4a793752d66d3ccChris Craik#include "BakedOpState.h"
21b565df13a9e5c7b1d7d93bdfa4a793752d66d3ccChris Craik#include "Matrix.h"
22b565df13a9e5c7b1d7d93bdfa4a793752d66d3ccChris Craik
23b565df13a9e5c7b1d7d93bdfa4a793752d66d3ccChris Craiknamespace android {
24b565df13a9e5c7b1d7d93bdfa4a793752d66d3ccChris Craiknamespace uirenderer {
25b565df13a9e5c7b1d7d93bdfa4a793752d66d3ccChris Craik
26b565df13a9e5c7b1d7d93bdfa4a793752d66d3ccChris Craikclass Caches;
27b565df13a9e5c7b1d7d93bdfa4a793752d66d3ccChris Craikstruct Glop;
28818c9fbf1d76d5df19253ba4eb964efa939ec9ecChris Craikclass Layer;
29b565df13a9e5c7b1d7d93bdfa4a793752d66d3ccChris Craikclass RenderState;
30b565df13a9e5c7b1d7d93bdfa4a793752d66d3ccChris Craik
31b565df13a9e5c7b1d7d93bdfa4a793752d66d3ccChris Craikclass BakedOpRenderer {
32b565df13a9e5c7b1d7d93bdfa4a793752d66d3ccChris Craikpublic:
33b565df13a9e5c7b1d7d93bdfa4a793752d66d3ccChris Craik    class Info {
34b565df13a9e5c7b1d7d93bdfa4a793752d66d3ccChris Craik    public:
35818c9fbf1d76d5df19253ba4eb964efa939ec9ecChris Craik        Info(Caches& caches, RenderState& renderState, bool opaque)
36b565df13a9e5c7b1d7d93bdfa4a793752d66d3ccChris Craik                : renderState(renderState)
37b565df13a9e5c7b1d7d93bdfa4a793752d66d3ccChris Craik                , caches(caches)
38818c9fbf1d76d5df19253ba4eb964efa939ec9ecChris Craik                , opaque(opaque) {
39b565df13a9e5c7b1d7d93bdfa4a793752d66d3ccChris Craik        }
40b565df13a9e5c7b1d7d93bdfa4a793752d66d3ccChris Craik
41818c9fbf1d76d5df19253ba4eb964efa939ec9ecChris Craik        void setViewport(uint32_t width, uint32_t height);
42818c9fbf1d76d5df19253ba4eb964efa939ec9ecChris Craik
43b565df13a9e5c7b1d7d93bdfa4a793752d66d3ccChris Craik        Texture* getTexture(const SkBitmap* bitmap);
44b565df13a9e5c7b1d7d93bdfa4a793752d66d3ccChris Craik
45b565df13a9e5c7b1d7d93bdfa4a793752d66d3ccChris Craik        void renderGlop(const BakedOpState& state, const Glop& glop);
46b565df13a9e5c7b1d7d93bdfa4a793752d66d3ccChris Craik        RenderState& renderState;
47b565df13a9e5c7b1d7d93bdfa4a793752d66d3ccChris Craik        Caches& caches;
48b565df13a9e5c7b1d7d93bdfa4a793752d66d3ccChris Craik
49b565df13a9e5c7b1d7d93bdfa4a793752d66d3ccChris Craik        bool didDraw = false;
50b565df13a9e5c7b1d7d93bdfa4a793752d66d3ccChris Craik
51818c9fbf1d76d5df19253ba4eb964efa939ec9ecChris Craik        Layer* layer = nullptr;
52b565df13a9e5c7b1d7d93bdfa4a793752d66d3ccChris Craik
53b565df13a9e5c7b1d7d93bdfa4a793752d66d3ccChris Craik        // where should these live? layer state object?
54818c9fbf1d76d5df19253ba4eb964efa939ec9ecChris Craik        bool opaque;
55818c9fbf1d76d5df19253ba4eb964efa939ec9ecChris Craik        uint32_t viewportWidth = 0;
56818c9fbf1d76d5df19253ba4eb964efa939ec9ecChris Craik        uint32_t viewportHeight = 0;
57b565df13a9e5c7b1d7d93bdfa4a793752d66d3ccChris Craik        Matrix4 orthoMatrix;
58b565df13a9e5c7b1d7d93bdfa4a793752d66d3ccChris Craik    };
59b565df13a9e5c7b1d7d93bdfa4a793752d66d3ccChris Craik
60818c9fbf1d76d5df19253ba4eb964efa939ec9ecChris Craik    static Layer* startLayer(Info& info, uint32_t width, uint32_t height);
61818c9fbf1d76d5df19253ba4eb964efa939ec9ecChris Craik    static void endLayer(Info& info);
62818c9fbf1d76d5df19253ba4eb964efa939ec9ecChris Craik    static void startFrame(Info& info, uint32_t width, uint32_t height);
63b565df13a9e5c7b1d7d93bdfa4a793752d66d3ccChris Craik    static void endFrame(Info& info);
64b565df13a9e5c7b1d7d93bdfa4a793752d66d3ccChris Craik
65b565df13a9e5c7b1d7d93bdfa4a793752d66d3ccChris Craik    /**
66b565df13a9e5c7b1d7d93bdfa4a793752d66d3ccChris Craik     * Declare all "onBitmapOp(...)" style function for every op type.
67b565df13a9e5c7b1d7d93bdfa4a793752d66d3ccChris Craik     *
68b565df13a9e5c7b1d7d93bdfa4a793752d66d3ccChris Craik     * These functions will perform the actual rendering of the individual operations in OpenGL,
69b565df13a9e5c7b1d7d93bdfa4a793752d66d3ccChris Craik     * given the transform/clip and other state built into the BakedOpState object passed in.
70b565df13a9e5c7b1d7d93bdfa4a793752d66d3ccChris Craik     */
716fe991e5e76f9af9dab960100d5768d96d5f4daaChris Craik    #define BAKED_OP_RENDERER_METHOD(Type) static void on##Type(Info& info, const Type& op, const BakedOpState& state);
72b565df13a9e5c7b1d7d93bdfa4a793752d66d3ccChris Craik    MAP_OPS(BAKED_OP_RENDERER_METHOD);
73b565df13a9e5c7b1d7d93bdfa4a793752d66d3ccChris Craik};
74b565df13a9e5c7b1d7d93bdfa4a793752d66d3ccChris Craik
75b565df13a9e5c7b1d7d93bdfa4a793752d66d3ccChris Craik}; // namespace uirenderer
76b565df13a9e5c7b1d7d93bdfa4a793752d66d3ccChris Craik}; // namespace android
77b565df13a9e5c7b1d7d93bdfa4a793752d66d3ccChris Craik
78b565df13a9e5c7b1d7d93bdfa4a793752d66d3ccChris Craik#endif // ANDROID_HWUI_BAKED_OP_RENDERER_H
79