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