/* * Copyright 2014 Google Inc. * * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. */ #include "GrInvariantOutput.h" #ifdef SK_DEBUG void GrInvariantOutput::validate() const { if (fIsSingleComponent) { SkASSERT(0 == fValidFlags || kRGBA_GrColorComponentFlags == fValidFlags); if (kRGBA_GrColorComponentFlags == fValidFlags) { SkASSERT(this->colorComponentsAllEqual()); } } SkASSERT(this->validPreMulColor()); // If we claim that we are not using the input color we must not be modulating the input. SkASSERT(fNonMulStageFound || fWillUseInputColor); } bool GrInvariantOutput::colorComponentsAllEqual() const { unsigned colorA = GrColorUnpackA(fColor); return(GrColorUnpackR(fColor) == colorA && GrColorUnpackG(fColor) == colorA && GrColorUnpackB(fColor) == colorA); } bool GrInvariantOutput::validPreMulColor() const { if (kA_GrColorComponentFlag & fValidFlags) { float c[4]; GrColorToRGBAFloat(fColor, c); if (kR_GrColorComponentFlag & fValidFlags) { if (c[0] > c[3]) { return false; } } if (kG_GrColorComponentFlag & fValidFlags) { if (c[1] > c[3]) { return false; } } if (kB_GrColorComponentFlag & fValidFlags) { if (c[2] > c[3]) { return false; } } } return true; } #endif // end DEBUG