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