GlopBuilder.h revision 922d3a7f6f8c1c05a996ee3e91e8cbadfff560c9
1a15af1c45c3ad1d96e3012f1613a79a86c0b2547Glenn Kasten/*
2a15af1c45c3ad1d96e3012f1613a79a86c0b2547Glenn Kasten * Copyright (C) 2015 The Android Open Source Project
3a15af1c45c3ad1d96e3012f1613a79a86c0b2547Glenn Kasten *
4a15af1c45c3ad1d96e3012f1613a79a86c0b2547Glenn Kasten * Licensed under the Apache License, Version 2.0 (the "License");
5a15af1c45c3ad1d96e3012f1613a79a86c0b2547Glenn Kasten * you may not use this file except in compliance with the License.
6a15af1c45c3ad1d96e3012f1613a79a86c0b2547Glenn Kasten * You may obtain a copy of the License at
7a15af1c45c3ad1d96e3012f1613a79a86c0b2547Glenn Kasten *
8a15af1c45c3ad1d96e3012f1613a79a86c0b2547Glenn Kasten *      http://www.apache.org/licenses/LICENSE-2.0
9a15af1c45c3ad1d96e3012f1613a79a86c0b2547Glenn Kasten *
10a15af1c45c3ad1d96e3012f1613a79a86c0b2547Glenn Kasten * Unless required by applicable law or agreed to in writing, software
11a15af1c45c3ad1d96e3012f1613a79a86c0b2547Glenn Kasten * distributed under the License is distributed on an "AS IS" BASIS,
12a15af1c45c3ad1d96e3012f1613a79a86c0b2547Glenn Kasten * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13a15af1c45c3ad1d96e3012f1613a79a86c0b2547Glenn Kasten * See the License for the specific language governing permissions and
14a15af1c45c3ad1d96e3012f1613a79a86c0b2547Glenn Kasten * limitations under the License.
15a15af1c45c3ad1d96e3012f1613a79a86c0b2547Glenn Kasten */
16a15af1c45c3ad1d96e3012f1613a79a86c0b2547Glenn Kasten#ifndef RENDERSTATE_GLOPBUILDER_H
17a15af1c45c3ad1d96e3012f1613a79a86c0b2547Glenn Kasten#define RENDERSTATE_GLOPBUILDER_H
18b12deb54e78a45a8cfe380da7c047ec9ac3fe5d8Glenn Kasten
193b2a7f6713db24c529a117a67aaabbc676678748Yu Shan Emily Lau#include "OpenGLRenderer.h"
20b12deb54e78a45a8cfe380da7c047ec9ac3fe5d8Glenn Kasten#include "Program.h"
213b2a7f6713db24c529a117a67aaabbc676678748Yu Shan Emily Lau#include "utils/Macros.h"
223b2a7f6713db24c529a117a67aaabbc676678748Yu Shan Emily Lau
233b2a7f6713db24c529a117a67aaabbc676678748Yu Shan Emily Lauclass SkPaint;
243b2a7f6713db24c529a117a67aaabbc676678748Yu Shan Emily Lauclass SkShader;
253b2a7f6713db24c529a117a67aaabbc676678748Yu Shan Emily Lau
263b2a7f6713db24c529a117a67aaabbc676678748Yu Shan Emily Launamespace android {
27a15af1c45c3ad1d96e3012f1613a79a86c0b2547Glenn Kastennamespace uirenderer {
28a15af1c45c3ad1d96e3012f1613a79a86c0b2547Glenn Kasten
29a15af1c45c3ad1d96e3012f1613a79a86c0b2547Glenn Kastenclass Caches;
30a15af1c45c3ad1d96e3012f1613a79a86c0b2547Glenn Kastenclass Matrix4;
31a15af1c45c3ad1d96e3012f1613a79a86c0b2547Glenn Kastenclass RenderState;
32a15af1c45c3ad1d96e3012f1613a79a86c0b2547Glenn Kastenclass Texture;
33a15af1c45c3ad1d96e3012f1613a79a86c0b2547Glenn Kastenclass VertexBuffer;
34b12deb54e78a45a8cfe380da7c047ec9ac3fe5d8Glenn Kastenstruct Glop;
353b2a7f6713db24c529a117a67aaabbc676678748Yu Shan Emily Lau
363b2a7f6713db24c529a117a67aaabbc676678748Yu Shan Emily Lauclass GlopBuilder {
37a15af1c45c3ad1d96e3012f1613a79a86c0b2547Glenn Kasten    PREVENT_COPY_AND_ASSIGN(GlopBuilder);
38a15af1c45c3ad1d96e3012f1613a79a86c0b2547Glenn Kastenpublic:
39a15af1c45c3ad1d96e3012f1613a79a86c0b2547Glenn Kasten    GlopBuilder(RenderState& renderState, Caches& caches, Glop* outGlop);
40a15af1c45c3ad1d96e3012f1613a79a86c0b2547Glenn Kasten
41a15af1c45c3ad1d96e3012f1613a79a86c0b2547Glenn Kasten    GlopBuilder& setMeshUnitQuad();
42a15af1c45c3ad1d96e3012f1613a79a86c0b2547Glenn Kasten    GlopBuilder& setMeshTexturedUnitQuad(const UvMapper* uvMapper, bool isAlphaMaskTexture);
43a15af1c45c3ad1d96e3012f1613a79a86c0b2547Glenn Kasten    GlopBuilder& setMeshVertexBuffer(const VertexBuffer& vertexBuffer, bool shadowInterp);
44b12deb54e78a45a8cfe380da7c047ec9ac3fe5d8Glenn Kasten    GlopBuilder& setMeshIndexedQuads(void* vertexData, int quadCount);
45b12deb54e78a45a8cfe380da7c047ec9ac3fe5d8Glenn Kasten
463b2a7f6713db24c529a117a67aaabbc676678748Yu Shan Emily Lau    GlopBuilder& setFillPaint(const SkPaint& paint, float alphaScale);
47a15af1c45c3ad1d96e3012f1613a79a86c0b2547Glenn Kasten    GlopBuilder& setFillTexturePaint(Texture& texture, bool isAlphaMaskTexture,
483b2a7f6713db24c529a117a67aaabbc676678748Yu Shan Emily Lau            const SkPaint* paint, float alphaScale);
493b2a7f6713db24c529a117a67aaabbc676678748Yu Shan Emily Lau    GlopBuilder& setFillPathTexturePaint(Texture& texture,
503b2a7f6713db24c529a117a67aaabbc676678748Yu Shan Emily Lau            const SkPaint& paint, float alphaScale);
51b12deb54e78a45a8cfe380da7c047ec9ac3fe5d8Glenn Kasten
52d48ff338b8338c1e3e54e0f9dcd03567a0aa9de4Glenn Kasten    GlopBuilder& setTransformClip(const Matrix4& ortho, const Matrix4& transform, bool fudgingOffset);
53d48ff338b8338c1e3e54e0f9dcd03567a0aa9de4Glenn Kasten
543b2a7f6713db24c529a117a67aaabbc676678748Yu Shan Emily Lau    GlopBuilder& setModelViewMapUnitToRect(const Rect destination);
55b12deb54e78a45a8cfe380da7c047ec9ac3fe5d8Glenn Kasten    GlopBuilder& setModelViewMapUnitToRectSnap(const Rect destination);
56a15af1c45c3ad1d96e3012f1613a79a86c0b2547Glenn Kasten    GlopBuilder& setModelViewOffsetRect(float offsetX, float offsetY, const Rect source);
573b2a7f6713db24c529a117a67aaabbc676678748Yu Shan Emily Lau
58a15af1c45c3ad1d96e3012f1613a79a86c0b2547Glenn Kasten    GlopBuilder& setRoundRectClipState(const RoundRectClipState* roundRectClipState);
59b12deb54e78a45a8cfe380da7c047ec9ac3fe5d8Glenn Kasten
60b12deb54e78a45a8cfe380da7c047ec9ac3fe5d8Glenn Kasten    void build();
61b12deb54e78a45a8cfe380da7c047ec9ac3fe5d8Glenn Kastenprivate:
623b2a7f6713db24c529a117a67aaabbc676678748Yu Shan Emily Lau    void setFill(int color, float alphaScale, SkXfermode::Mode mode,
633b2a7f6713db24c529a117a67aaabbc676678748Yu Shan Emily Lau            const SkShader* shader, const SkColorFilter* colorFilter);
643b2a7f6713db24c529a117a67aaabbc676678748Yu Shan Emily Lau
653b2a7f6713db24c529a117a67aaabbc676678748Yu Shan Emily Lau    enum StageFlags {
66a15af1c45c3ad1d96e3012f1613a79a86c0b2547Glenn Kasten        kInitialStage = 0,
673b2a7f6713db24c529a117a67aaabbc676678748Yu Shan Emily Lau        kMeshStage = 1 << 0,
68a15af1c45c3ad1d96e3012f1613a79a86c0b2547Glenn Kasten        kTransformStage = 1 << 1,
69a15af1c45c3ad1d96e3012f1613a79a86c0b2547Glenn Kasten        kModelViewStage = 1 << 2,
70a15af1c45c3ad1d96e3012f1613a79a86c0b2547Glenn Kasten        kFillStage = 1 << 3,
71a15af1c45c3ad1d96e3012f1613a79a86c0b2547Glenn Kasten        kRoundRectClipStage = 1 << 4,
72a15af1c45c3ad1d96e3012f1613a79a86c0b2547Glenn Kasten        kAllStages = kMeshStage | kFillStage | kTransformStage | kModelViewStage | kRoundRectClipStage,
73a15af1c45c3ad1d96e3012f1613a79a86c0b2547Glenn Kasten    } mStageFlags;
743b2a7f6713db24c529a117a67aaabbc676678748Yu Shan Emily Lau
753b2a7f6713db24c529a117a67aaabbc676678748Yu Shan Emily Lau    ProgramDescription mDescription;
763b2a7f6713db24c529a117a67aaabbc676678748Yu Shan Emily Lau    RenderState& mRenderState;
77a15af1c45c3ad1d96e3012f1613a79a86c0b2547Glenn Kasten    Caches& mCaches;
783b2a7f6713db24c529a117a67aaabbc676678748Yu Shan Emily Lau    const SkShader* mShader;
793b2a7f6713db24c529a117a67aaabbc676678748Yu Shan Emily Lau    Glop* mOutGlop;
803b2a7f6713db24c529a117a67aaabbc676678748Yu Shan Emily Lau};
813b2a7f6713db24c529a117a67aaabbc676678748Yu Shan Emily Lau
823b2a7f6713db24c529a117a67aaabbc676678748Yu Shan Emily Lau} /* namespace uirenderer */
833b2a7f6713db24c529a117a67aaabbc676678748Yu Shan Emily Lau} /* namespace android */
843b2a7f6713db24c529a117a67aaabbc676678748Yu Shan Emily Lau
853b2a7f6713db24c529a117a67aaabbc676678748Yu Shan Emily Lau#endif // RENDERSTATE_GLOPBUILDER_H
863b2a7f6713db24c529a117a67aaabbc676678748Yu Shan Emily Lau