/*
 * Copyright 2015 Google Inc.
 *
 * Use of this source code is governed by a BSD-style license that can be
 * found in the LICENSE file.
 */

#ifndef GrGLBlend_DEFINED
#define GrGLBlend_DEFINED

#include "include/core/SkBlendMode.h"
#include "src/gpu/ganesh/glsl/GrGLSLProgramDataManager.h"

class GrGLSLShaderBuilder;
class GrGLSLUniformHandler;
class GrProcessor;

namespace GrGLSLBlend {

/**
 * Returns an SkSL expression that blends the passed-in srcColor and dstColor values.
 * Matching calls to SetBlendModeUniformData and BlendKey must be made from your GrProcessor.
 */
std::string BlendExpression(const GrProcessor* processor,
                            GrGLSLUniformHandler* uniformHandler,
                            GrGLSLProgramDataManager::UniformHandle* uniform,
                            const char* srcColor,
                            const char* dstColor,
                            SkBlendMode mode);

/**
 * Returns a key, for use in onAddToKey from any GrProcessor. You must pass the same blend mode that
 * was passed to BlendExpression
 */
int BlendKey(SkBlendMode mode);

/**
 * Sets up uniforms, for use in onSetData from any GrProcessor. You must pass the same uniform and
 * blend mode that were passed to BlendExpression.
 */
void SetBlendModeUniformData(const GrGLSLProgramDataManager& pdman,
                             GrGLSLProgramDataManager::UniformHandle uniform,
                             SkBlendMode mode);

}  // namespace GrGLSLBlend

#endif
