144eb2c00861098dd3e2950d923646814b4cc57c2Chris Craik/*
244eb2c00861098dd3e2950d923646814b4cc57c2Chris Craik * Copyright (C) 2015 The Android Open Source Project
344eb2c00861098dd3e2950d923646814b4cc57c2Chris Craik *
444eb2c00861098dd3e2950d923646814b4cc57c2Chris Craik * Licensed under the Apache License, Version 2.0 (the "License");
544eb2c00861098dd3e2950d923646814b4cc57c2Chris Craik * you may not use this file except in compliance with the License.
644eb2c00861098dd3e2950d923646814b4cc57c2Chris Craik * You may obtain a copy of the License at
744eb2c00861098dd3e2950d923646814b4cc57c2Chris Craik *
844eb2c00861098dd3e2950d923646814b4cc57c2Chris Craik *      http://www.apache.org/licenses/LICENSE-2.0
944eb2c00861098dd3e2950d923646814b4cc57c2Chris Craik *
1044eb2c00861098dd3e2950d923646814b4cc57c2Chris Craik * Unless required by applicable law or agreed to in writing, software
1144eb2c00861098dd3e2950d923646814b4cc57c2Chris Craik * distributed under the License is distributed on an "AS IS" BASIS,
1244eb2c00861098dd3e2950d923646814b4cc57c2Chris Craik * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1344eb2c00861098dd3e2950d923646814b4cc57c2Chris Craik * See the License for the specific language governing permissions and
1444eb2c00861098dd3e2950d923646814b4cc57c2Chris Craik * limitations under the License.
1544eb2c00861098dd3e2950d923646814b4cc57c2Chris Craik */
1644eb2c00861098dd3e2950d923646814b4cc57c2Chris Craik#ifndef RENDERSTATE_BLEND_H
1744eb2c00861098dd3e2950d923646814b4cc57c2Chris Craik#define RENDERSTATE_BLEND_H
1844eb2c00861098dd3e2950d923646814b4cc57c2Chris Craik
1944eb2c00861098dd3e2950d923646814b4cc57c2Chris Craik#include "Vertex.h"
2044eb2c00861098dd3e2950d923646814b4cc57c2Chris Craik
2144eb2c00861098dd3e2950d923646814b4cc57c2Chris Craik#include <GLES2/gl2.h>
2244eb2c00861098dd3e2950d923646814b4cc57c2Chris Craik#include <GLES2/gl2ext.h>
23260ab726486317496bc12a57d599ea96dcde3284Mike Reed#include <SkBlendMode.h>
2444eb2c00861098dd3e2950d923646814b4cc57c2Chris Craik#include <memory>
2544eb2c00861098dd3e2950d923646814b4cc57c2Chris Craik
2644eb2c00861098dd3e2950d923646814b4cc57c2Chris Craiknamespace android {
2744eb2c00861098dd3e2950d923646814b4cc57c2Chris Craiknamespace uirenderer {
2844eb2c00861098dd3e2950d923646814b4cc57c2Chris Craik
2944eb2c00861098dd3e2950d923646814b4cc57c2Chris Craikclass Blend {
3044eb2c00861098dd3e2950d923646814b4cc57c2Chris Craik    friend class RenderState;
3144eb2c00861098dd3e2950d923646814b4cc57c2Chris Craikpublic:
32182952f5eeefc2a21d76d4664ada0e2d78c1105cChris Craik    // dictates whether to swap src/dst
33182952f5eeefc2a21d76d4664ada0e2d78c1105cChris Craik    enum class ModeOrderSwap {
34182952f5eeefc2a21d76d4664ada0e2d78c1105cChris Craik        NoSwap,
35182952f5eeefc2a21d76d4664ada0e2d78c1105cChris Craik        Swap,
36182952f5eeefc2a21d76d4664ada0e2d78c1105cChris Craik    };
3744eb2c00861098dd3e2950d923646814b4cc57c2Chris Craik    void syncEnabled();
38031888744e24b5c7243ac99ec98b78aff5db1c78Chris Craik
39260ab726486317496bc12a57d599ea96dcde3284Mike Reed    static void getFactors(SkBlendMode mode, ModeOrderSwap modeUsage,
40182952f5eeefc2a21d76d4664ada0e2d78c1105cChris Craik            GLenum* outSrc, GLenum* outDst);
41031888744e24b5c7243ac99ec98b78aff5db1c78Chris Craik    void setFactors(GLenum src, GLenum dst);
42117bdbcfa3e8306dad21e7e01fa71b00cdfa7265Chris Craik
43117bdbcfa3e8306dad21e7e01fa71b00cdfa7265Chris Craik    void dump();
4444eb2c00861098dd3e2950d923646814b4cc57c2Chris Craikprivate:
4544eb2c00861098dd3e2950d923646814b4cc57c2Chris Craik    Blend();
4644eb2c00861098dd3e2950d923646814b4cc57c2Chris Craik    void invalidate();
4744eb2c00861098dd3e2950d923646814b4cc57c2Chris Craik    bool mEnabled;
4844eb2c00861098dd3e2950d923646814b4cc57c2Chris Craik    GLenum mSrcMode;
4944eb2c00861098dd3e2950d923646814b4cc57c2Chris Craik    GLenum mDstMode;
5044eb2c00861098dd3e2950d923646814b4cc57c2Chris Craik};
5144eb2c00861098dd3e2950d923646814b4cc57c2Chris Craik
5244eb2c00861098dd3e2950d923646814b4cc57c2Chris Craik} /* namespace uirenderer */
5344eb2c00861098dd3e2950d923646814b4cc57c2Chris Craik} /* namespace android */
5444eb2c00861098dd3e2950d923646814b4cc57c2Chris Craik
5544eb2c00861098dd3e2950d923646814b4cc57c2Chris Craik#endif // RENDERSTATE_BLEND_H
56