106f96e2652e4855b6520ad9dd70583677605b79aRomain Guy/* 206f96e2652e4855b6520ad9dd70583677605b79aRomain Guy * Copyright (C) 2010 The Android Open Source Project 306f96e2652e4855b6520ad9dd70583677605b79aRomain Guy * 406f96e2652e4855b6520ad9dd70583677605b79aRomain Guy * Licensed under the Apache License, Version 2.0 (the "License"); 506f96e2652e4855b6520ad9dd70583677605b79aRomain Guy * you may not use this file except in compliance with the License. 606f96e2652e4855b6520ad9dd70583677605b79aRomain Guy * You may obtain a copy of the License at 706f96e2652e4855b6520ad9dd70583677605b79aRomain Guy * 806f96e2652e4855b6520ad9dd70583677605b79aRomain Guy * http://www.apache.org/licenses/LICENSE-2.0 906f96e2652e4855b6520ad9dd70583677605b79aRomain Guy * 1006f96e2652e4855b6520ad9dd70583677605b79aRomain Guy * Unless required by applicable law or agreed to in writing, software 1106f96e2652e4855b6520ad9dd70583677605b79aRomain Guy * distributed under the License is distributed on an "AS IS" BASIS, 1206f96e2652e4855b6520ad9dd70583677605b79aRomain Guy * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1306f96e2652e4855b6520ad9dd70583677605b79aRomain Guy * See the License for the specific language governing permissions and 1406f96e2652e4855b6520ad9dd70583677605b79aRomain Guy * limitations under the License. 1506f96e2652e4855b6520ad9dd70583677605b79aRomain Guy */ 1606f96e2652e4855b6520ad9dd70583677605b79aRomain Guy 175b3b35296e8b2c8d3f07d32bb645d5414db41a1dRomain Guy#ifndef ANDROID_HWUI_SKIA_SHADER_H 185b3b35296e8b2c8d3f07d32bb645d5414db41a1dRomain Guy#define ANDROID_HWUI_SKIA_SHADER_H 1906f96e2652e4855b6520ad9dd70583677605b79aRomain Guy 2006f96e2652e4855b6520ad9dd70583677605b79aRomain Guy#include <SkShader.h> 2106f96e2652e4855b6520ad9dd70583677605b79aRomain Guy#include <SkXfermode.h> 2206f96e2652e4855b6520ad9dd70583677605b79aRomain Guy 2306f96e2652e4855b6520ad9dd70583677605b79aRomain Guy#include <GLES2/gl2.h> 2406f96e2652e4855b6520ad9dd70583677605b79aRomain Guy 257953745dd565167113f8cbfc461bc0521d32d870Romain Guy#include <cutils/compiler.h> 267953745dd565167113f8cbfc461bc0521d32d870Romain Guy 2706f96e2652e4855b6520ad9dd70583677605b79aRomain Guy#include "Extensions.h" 2806f96e2652e4855b6520ad9dd70583677605b79aRomain Guy#include "ProgramCache.h" 2906f96e2652e4855b6520ad9dd70583677605b79aRomain Guy#include "TextureCache.h" 3006f96e2652e4855b6520ad9dd70583677605b79aRomain Guy#include "GradientCache.h" 3106f96e2652e4855b6520ad9dd70583677605b79aRomain Guy 3206f96e2652e4855b6520ad9dd70583677605b79aRomain Guynamespace android { 3306f96e2652e4855b6520ad9dd70583677605b79aRomain Guynamespace uirenderer { 3406f96e2652e4855b6520ad9dd70583677605b79aRomain Guy 358aa195d7081b889f3a7b1f426cbd8556377aae5eRomain Guyclass Caches; 36d1ad5e62fda248c6d185cde3cb6d9f01a223066cLeon Scroggins IIIclass Layer; 3706f96e2652e4855b6520ad9dd70583677605b79aRomain Guy 3806f96e2652e4855b6520ad9dd70583677605b79aRomain Guy/** 39d1ad5e62fda248c6d185cde3cb6d9f01a223066cLeon Scroggins III * Type of Skia shader in use. 4006f96e2652e4855b6520ad9dd70583677605b79aRomain Guy */ 41d1ad5e62fda248c6d185cde3cb6d9f01a223066cLeon Scroggins IIIenum SkiaShaderType { 42d1ad5e62fda248c6d185cde3cb6d9f01a223066cLeon Scroggins III kNone_SkiaShaderType, 43d1ad5e62fda248c6d185cde3cb6d9f01a223066cLeon Scroggins III kBitmap_SkiaShaderType, 44d1ad5e62fda248c6d185cde3cb6d9f01a223066cLeon Scroggins III kGradient_SkiaShaderType, 45d1ad5e62fda248c6d185cde3cb6d9f01a223066cLeon Scroggins III kCompose_SkiaShaderType, 46d1ad5e62fda248c6d185cde3cb6d9f01a223066cLeon Scroggins III kLayer_SkiaShaderType 47d1ad5e62fda248c6d185cde3cb6d9f01a223066cLeon Scroggins III}; 48d1ad5e62fda248c6d185cde3cb6d9f01a223066cLeon Scroggins III 49564acf7c9bff822f608cda0d5df0a64a9f9aaefdChris Craikclass SkiaShader { 50564acf7c9bff822f608cda0d5df0a64a9f9aaefdChris Craikpublic: 51d1ad5e62fda248c6d185cde3cb6d9f01a223066cLeon Scroggins III static SkiaShaderType getType(const SkShader& shader); 52d1ad5e62fda248c6d185cde3cb6d9f01a223066cLeon Scroggins III static void describe(Caches* caches, ProgramDescription& description, 53d1ad5e62fda248c6d185cde3cb6d9f01a223066cLeon Scroggins III const Extensions& extensions, const SkShader& shader); 54d1ad5e62fda248c6d185cde3cb6d9f01a223066cLeon Scroggins III static void setupProgram(Caches* caches, const mat4& modelViewMatrix, 55d1ad5e62fda248c6d185cde3cb6d9f01a223066cLeon Scroggins III GLuint* textureUnit, const Extensions& extensions, const SkShader& shader); 56d1ad5e62fda248c6d185cde3cb6d9f01a223066cLeon Scroggins III}; 57d1ad5e62fda248c6d185cde3cb6d9f01a223066cLeon Scroggins III 58d1ad5e62fda248c6d185cde3cb6d9f01a223066cLeon Scroggins IIIclass InvalidSkiaShader { 59d1ad5e62fda248c6d185cde3cb6d9f01a223066cLeon Scroggins IIIpublic: 60d1ad5e62fda248c6d185cde3cb6d9f01a223066cLeon Scroggins III static void describe(Caches* caches, ProgramDescription& description, 61d1ad5e62fda248c6d185cde3cb6d9f01a223066cLeon Scroggins III const Extensions& extensions, const SkShader& shader) { 62d1ad5e62fda248c6d185cde3cb6d9f01a223066cLeon Scroggins III // This shader is unsupported. Skip it. 6306f96e2652e4855b6520ad9dd70583677605b79aRomain Guy } 64d1ad5e62fda248c6d185cde3cb6d9f01a223066cLeon Scroggins III static void setupProgram(Caches* caches, const mat4& modelViewMatrix, 65d1ad5e62fda248c6d185cde3cb6d9f01a223066cLeon Scroggins III GLuint* textureUnit, const Extensions& extensions, const SkShader& shader) { 66d1ad5e62fda248c6d185cde3cb6d9f01a223066cLeon Scroggins III // This shader is unsupported. Skip it. 6714830948d02f768c41b97b7a8d15e1b3cab78267Romain Guy } 6814830948d02f768c41b97b7a8d15e1b3cab78267Romain Guy 69d1ad5e62fda248c6d185cde3cb6d9f01a223066cLeon Scroggins III}; 7006f96e2652e4855b6520ad9dd70583677605b79aRomain Guy/** 713f085429fd47ebd32ac2463b3eae2a5a6c17be25Chris Craik * A shader that draws a layer. 723f085429fd47ebd32ac2463b3eae2a5a6c17be25Chris Craik */ 73d1ad5e62fda248c6d185cde3cb6d9f01a223066cLeon Scroggins IIIclass SkiaLayerShader { 74d1ad5e62fda248c6d185cde3cb6d9f01a223066cLeon Scroggins IIIpublic: 75d1ad5e62fda248c6d185cde3cb6d9f01a223066cLeon Scroggins III static void describe(Caches* caches, ProgramDescription& description, 76d1ad5e62fda248c6d185cde3cb6d9f01a223066cLeon Scroggins III const Extensions& extensions, const SkShader& shader); 77d1ad5e62fda248c6d185cde3cb6d9f01a223066cLeon Scroggins III static void setupProgram(Caches* caches, const mat4& modelViewMatrix, 78d1ad5e62fda248c6d185cde3cb6d9f01a223066cLeon Scroggins III GLuint* textureUnit, const Extensions& extensions, const SkShader& shader); 79d1ad5e62fda248c6d185cde3cb6d9f01a223066cLeon Scroggins III}; // class SkiaLayerShader 803f085429fd47ebd32ac2463b3eae2a5a6c17be25Chris Craik 813f085429fd47ebd32ac2463b3eae2a5a6c17be25Chris Craik/** 8206f96e2652e4855b6520ad9dd70583677605b79aRomain Guy * A shader that draws a bitmap. 8306f96e2652e4855b6520ad9dd70583677605b79aRomain Guy */ 84d1ad5e62fda248c6d185cde3cb6d9f01a223066cLeon Scroggins IIIclass SkiaBitmapShader { 85d1ad5e62fda248c6d185cde3cb6d9f01a223066cLeon Scroggins IIIpublic: 86d1ad5e62fda248c6d185cde3cb6d9f01a223066cLeon Scroggins III static void describe(Caches* caches, ProgramDescription& description, 87d1ad5e62fda248c6d185cde3cb6d9f01a223066cLeon Scroggins III const Extensions& extensions, const SkShader& shader); 88d1ad5e62fda248c6d185cde3cb6d9f01a223066cLeon Scroggins III static void setupProgram(Caches* caches, const mat4& modelViewMatrix, 89d1ad5e62fda248c6d185cde3cb6d9f01a223066cLeon Scroggins III GLuint* textureUnit, const Extensions& extensions, const SkShader& shader); 9006f96e2652e4855b6520ad9dd70583677605b79aRomain Guy 9124c00216687ac87fe531dc4d4168ac0c0ca04ea6Romain Guy 92d1ad5e62fda248c6d185cde3cb6d9f01a223066cLeon Scroggins III}; // class SkiaBitmapShader 9306f96e2652e4855b6520ad9dd70583677605b79aRomain Guy 9406f96e2652e4855b6520ad9dd70583677605b79aRomain Guy/** 95d1ad5e62fda248c6d185cde3cb6d9f01a223066cLeon Scroggins III * A shader that draws one of three types of gradient, depending on shader param. 96ee916f14cbd1fe1422c063ce2ef7b185e2bc5c6fRomain Guy */ 97d1ad5e62fda248c6d185cde3cb6d9f01a223066cLeon Scroggins IIIclass SkiaGradientShader { 98d1ad5e62fda248c6d185cde3cb6d9f01a223066cLeon Scroggins IIIpublic: 99d1ad5e62fda248c6d185cde3cb6d9f01a223066cLeon Scroggins III static void describe(Caches* caches, ProgramDescription& description, 100d1ad5e62fda248c6d185cde3cb6d9f01a223066cLeon Scroggins III const Extensions& extensions, const SkShader& shader); 101d1ad5e62fda248c6d185cde3cb6d9f01a223066cLeon Scroggins III static void setupProgram(Caches* caches, const mat4& modelViewMatrix, 102d1ad5e62fda248c6d185cde3cb6d9f01a223066cLeon Scroggins III GLuint* textureUnit, const Extensions& extensions, const SkShader& shader); 103d1ad5e62fda248c6d185cde3cb6d9f01a223066cLeon Scroggins III}; 104ddb80bebb0776e6d852aab6e8bba5d5591847a55Romain Guy 105ddb80bebb0776e6d852aab6e8bba5d5591847a55Romain Guy/** 10606f96e2652e4855b6520ad9dd70583677605b79aRomain Guy * A shader that draws two shaders, composited with an xfermode. 10706f96e2652e4855b6520ad9dd70583677605b79aRomain Guy */ 108d1ad5e62fda248c6d185cde3cb6d9f01a223066cLeon Scroggins IIIclass SkiaComposeShader { 109d1ad5e62fda248c6d185cde3cb6d9f01a223066cLeon Scroggins IIIpublic: 110d1ad5e62fda248c6d185cde3cb6d9f01a223066cLeon Scroggins III static void describe(Caches* caches, ProgramDescription& description, 111d1ad5e62fda248c6d185cde3cb6d9f01a223066cLeon Scroggins III const Extensions& extensions, const SkShader& shader); 112d1ad5e62fda248c6d185cde3cb6d9f01a223066cLeon Scroggins III static void setupProgram(Caches* caches, const mat4& modelViewMatrix, 113d1ad5e62fda248c6d185cde3cb6d9f01a223066cLeon Scroggins III GLuint* textureUnit, const Extensions& extensions, const SkShader& shader); 114d1ad5e62fda248c6d185cde3cb6d9f01a223066cLeon Scroggins III}; // class SkiaComposeShader 11506f96e2652e4855b6520ad9dd70583677605b79aRomain Guy 11606f96e2652e4855b6520ad9dd70583677605b79aRomain Guy}; // namespace uirenderer 11706f96e2652e4855b6520ad9dd70583677605b79aRomain Guy}; // namespace android 11806f96e2652e4855b6520ad9dd70583677605b79aRomain Guy 1195b3b35296e8b2c8d3f07d32bb645d5414db41a1dRomain Guy#endif // ANDROID_HWUI_SKIA_SHADER_H 120