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