blob: e8e92bdc1d7660ca946e69177fcf7bed5438cc3a [file] [log] [blame]
Romain Guy06f96e22010-07-30 19:18:16 -07001/*
2 * Copyright (C) 2010 The Android Open Source Project
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
Romain Guy5b3b3522010-10-27 18:57:51 -070017#ifndef ANDROID_HWUI_SKIA_SHADER_H
18#define ANDROID_HWUI_SKIA_SHADER_H
Romain Guy06f96e22010-07-30 19:18:16 -070019
Chris Craik922d3a72015-02-13 17:47:21 -080020#include "FloatColor.h"
21#include "Matrix.h"
Romain Guy06f96e22010-07-30 19:18:16 -070022
23#include <GLES2/gl2.h>
Chris Craik922d3a72015-02-13 17:47:21 -080024#include <SkShader.h>
Romain Guy79537452011-10-12 13:48:51 -070025#include <cutils/compiler.h>
26
Romain Guy06f96e22010-07-30 19:18:16 -070027namespace android {
28namespace uirenderer {
29
Romain Guy8aa195d2013-06-04 18:00:09 -070030class Caches;
Tom Hudson2dc236b2014-10-15 15:46:42 -040031class Extensions;
Chris Craik922d3a72015-02-13 17:47:21 -080032class Texture;
Tom Hudson73edbfe2014-10-16 09:10:41 -040033struct ProgramDescription;
Romain Guy06f96e22010-07-30 19:18:16 -070034
35/**
Leon Scroggins IIId1ad5e62014-05-05 12:50:38 -040036 * Type of Skia shader in use.
Chris Craik922d3a72015-02-13 17:47:21 -080037 *
38 * Note that kBitmap | kGradient = kCompose, since Compose implies
39 * both its component types are in use simultaneously. No other
40 * composition of multiple types is supported.
Romain Guy06f96e22010-07-30 19:18:16 -070041 */
Leon Scroggins IIId1ad5e62014-05-05 12:50:38 -040042enum SkiaShaderType {
Chris Craik922d3a72015-02-13 17:47:21 -080043 kNone_SkiaShaderType = 0,
44 kBitmap_SkiaShaderType = 1,
45 kGradient_SkiaShaderType = 2,
46 kCompose_SkiaShaderType = kBitmap_SkiaShaderType | kGradient_SkiaShaderType,
Chris Craik922d3a72015-02-13 17:47:21 -080047};
48
49struct SkiaShaderData {
50 SkiaShaderType skiaShaderType;
51 struct BitmapShaderData {
52 Texture* bitmapTexture;
53 GLuint bitmapSampler;
54 GLenum wrapS;
55 GLenum wrapT;
56
57 Matrix4 textureTransform;
58 float textureDimension[2];
59 } bitmapData;
60 struct GradientShaderData {
61 Matrix4 screenSpace;
Chris Craik922d3a72015-02-13 17:47:21 -080062
63 // simple gradient
64 FloatColor startColor;
65 FloatColor endColor;
66
67 // complex gradient
68 Texture* gradientTexture;
69 GLuint gradientSampler;
70 GLenum wrapST;
Chris Craik922d3a72015-02-13 17:47:21 -080071 } gradientData;
Leon Scroggins IIId1ad5e62014-05-05 12:50:38 -040072};
73
Chris Craik564acf72014-01-02 16:46:18 -080074class SkiaShader {
75public:
Chris Craik53e51e42015-06-01 10:35:35 -070076 static void store(Caches& caches, const SkShader& shader, const Matrix4& modelViewMatrix,
John Reck1bcacfd2017-11-03 10:12:19 -070077 GLuint* textureUnit, ProgramDescription* description,
78 SkiaShaderData* outData);
79 static void apply(Caches& caches, const SkiaShaderData& data, const GLsizei width,
80 const GLsizei height);
Leon Scroggins IIId1ad5e62014-05-05 12:50:38 -040081};
Romain Guy06f96e22010-07-30 19:18:16 -070082
John Reck1bcacfd2017-11-03 10:12:19 -070083}; // namespace uirenderer
84}; // namespace android
Romain Guy06f96e22010-07-30 19:18:16 -070085
John Reck1bcacfd2017-11-03 10:12:19 -070086#endif // ANDROID_HWUI_SKIA_SHADER_H