SkiaColorFilter.cpp revision ad93c2bb63dfc813b2eefa1043aa63afbddce655
1/* 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 17#include "SkiaColorFilter.h" 18 19namespace android { 20namespace uirenderer { 21 22/////////////////////////////////////////////////////////////////////////////// 23// Base color filter 24/////////////////////////////////////////////////////////////////////////////// 25 26SkiaColorFilter::SkiaColorFilter(SkColorFilter *skFilter, Type type, bool blend): 27 mType(type), mBlend(blend), mSkFilter(skFilter) { 28} 29 30SkiaColorFilter::~SkiaColorFilter() { 31} 32 33/////////////////////////////////////////////////////////////////////////////// 34// Color matrix filter 35/////////////////////////////////////////////////////////////////////////////// 36 37SkiaColorMatrixFilter::SkiaColorMatrixFilter(SkColorFilter *skFilter, float* matrix, float* vector): 38 SkiaColorFilter(skFilter, kColorMatrix, true), mMatrix(matrix), mVector(vector) { 39} 40 41SkiaColorMatrixFilter::~SkiaColorMatrixFilter() { 42 delete[] mMatrix; 43 delete[] mVector; 44} 45 46void SkiaColorMatrixFilter::describe(ProgramDescription& description, 47 const Extensions& extensions) { 48 description.colorOp = ProgramDescription::kColorMatrix; 49} 50 51void SkiaColorMatrixFilter::setupProgram(Program* program) { 52 glUniformMatrix4fv(program->getUniform("colorMatrix"), 1, GL_FALSE, &mMatrix[0]); 53 glUniform4fv(program->getUniform("colorMatrixVector"), 1, mVector); 54} 55 56/////////////////////////////////////////////////////////////////////////////// 57// Lighting color filter 58/////////////////////////////////////////////////////////////////////////////// 59 60SkiaLightingFilter::SkiaLightingFilter(SkColorFilter *skFilter, int multiply, int add): 61 SkiaColorFilter(skFilter, kLighting, true) { 62 mMulR = ((multiply >> 16) & 0xFF) / 255.0f; 63 mMulG = ((multiply >> 8) & 0xFF) / 255.0f; 64 mMulB = ((multiply ) & 0xFF) / 255.0f; 65 66 mAddR = ((add >> 16) & 0xFF) / 255.0f; 67 mAddG = ((add >> 8) & 0xFF) / 255.0f; 68 mAddB = ((add ) & 0xFF) / 255.0f; 69} 70 71void SkiaLightingFilter::describe(ProgramDescription& description, const Extensions& extensions) { 72 description.colorOp = ProgramDescription::kColorLighting; 73} 74 75void SkiaLightingFilter::setupProgram(Program* program) { 76 glUniform4f(program->getUniform("lightingMul"), mMulR, mMulG, mMulB, 1.0f); 77 glUniform4f(program->getUniform("lightingAdd"), mAddR, mAddG, mAddB, 0.0f); 78} 79 80/////////////////////////////////////////////////////////////////////////////// 81// Blend color filter 82/////////////////////////////////////////////////////////////////////////////// 83 84SkiaBlendFilter::SkiaBlendFilter(SkColorFilter *skFilter, int color, SkXfermode::Mode mode): 85 SkiaColorFilter(skFilter, kBlend, true), mMode(mode) { 86 const int alpha = (color >> 24) & 0xFF; 87 mA = alpha / 255.0f; 88 mR = mA * ((color >> 16) & 0xFF) / 255.0f; 89 mG = mA * ((color >> 8) & 0xFF) / 255.0f; 90 mB = mA * ((color ) & 0xFF) / 255.0f; 91} 92 93void SkiaBlendFilter::describe(ProgramDescription& description, const Extensions& extensions) { 94 description.colorOp = ProgramDescription::kColorBlend; 95 description.colorMode = mMode; 96} 97 98void SkiaBlendFilter::setupProgram(Program* program) { 99 glUniform4f(program->getUniform("colorBlend"), mR, mG, mB, mA); 100} 101 102}; // namespace uirenderer 103}; // namespace android 104