/* * Copyright 2011 Google Inc. * * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. */ #include "GrGLSL.h" #include "GrGLSLCaps.h" #include "SkString.h" bool GrGLSLSupportsNamedFragmentShaderOutputs(GrGLSLGeneration gen) { switch (gen) { case k110_GrGLSLGeneration: return false; case k130_GrGLSLGeneration: case k140_GrGLSLGeneration: case k150_GrGLSLGeneration: case k330_GrGLSLGeneration: case k400_GrGLSLGeneration: case k310es_GrGLSLGeneration: case k320es_GrGLSLGeneration: return true; } return false; } void GrGLSLAppendDefaultFloatPrecisionDeclaration(GrSLPrecision p, const GrGLSLCaps& glslCaps, SkString* out) { if (glslCaps.usesPrecisionModifiers()) { switch (p) { case kHigh_GrSLPrecision: out->append("precision highp float;\n"); break; case kMedium_GrSLPrecision: out->append("precision mediump float;\n"); break; case kLow_GrSLPrecision: out->append("precision lowp float;\n"); break; default: SkFAIL("Unknown precision value."); } } } void GrGLSLMulVarBy4f(SkString* outAppend, const char* vec4VarName, const GrGLSLExpr4& mulFactor) { if (mulFactor.isOnes()) { *outAppend = SkString(); } if (mulFactor.isZeros()) { outAppend->appendf("%s = vec4(0);", vec4VarName); } else { outAppend->appendf("%s *= %s;", vec4VarName, mulFactor.c_str()); } }