Dither.h revision 117bdbcfa3e8306dad21e7e01fa71b00cdfa7265
1211efea7376371ee755edd2ad03e83ef6eea464eRomain Guy/* 2211efea7376371ee755edd2ad03e83ef6eea464eRomain Guy * Copyright (C) 2012 The Android Open Source Project 3211efea7376371ee755edd2ad03e83ef6eea464eRomain Guy * 4211efea7376371ee755edd2ad03e83ef6eea464eRomain Guy * Licensed under the Apache License, Version 2.0 (the "License"); 5211efea7376371ee755edd2ad03e83ef6eea464eRomain Guy * you may not use this file except in compliance with the License. 6211efea7376371ee755edd2ad03e83ef6eea464eRomain Guy * You may obtain a copy of the License at 7211efea7376371ee755edd2ad03e83ef6eea464eRomain Guy * 8211efea7376371ee755edd2ad03e83ef6eea464eRomain Guy * http://www.apache.org/licenses/LICENSE-2.0 9211efea7376371ee755edd2ad03e83ef6eea464eRomain Guy * 10211efea7376371ee755edd2ad03e83ef6eea464eRomain Guy * Unless required by applicable law or agreed to in writing, software 11211efea7376371ee755edd2ad03e83ef6eea464eRomain Guy * distributed under the License is distributed on an "AS IS" BASIS, 12211efea7376371ee755edd2ad03e83ef6eea464eRomain Guy * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13211efea7376371ee755edd2ad03e83ef6eea464eRomain Guy * See the License for the specific language governing permissions and 14211efea7376371ee755edd2ad03e83ef6eea464eRomain Guy * limitations under the License. 15211efea7376371ee755edd2ad03e83ef6eea464eRomain Guy */ 16211efea7376371ee755edd2ad03e83ef6eea464eRomain Guy 17211efea7376371ee755edd2ad03e83ef6eea464eRomain Guy#ifndef ANDROID_HWUI_DITHER_H 18211efea7376371ee755edd2ad03e83ef6eea464eRomain Guy#define ANDROID_HWUI_DITHER_H 19211efea7376371ee755edd2ad03e83ef6eea464eRomain Guy 20b48800428906ae455c2b63acacd44e390e1fee49Romain Guy#include <GLES3/gl3.h> 21211efea7376371ee755edd2ad03e83ef6eea464eRomain Guy 22211efea7376371ee755edd2ad03e83ef6eea464eRomain Guynamespace android { 23211efea7376371ee755edd2ad03e83ef6eea464eRomain Guynamespace uirenderer { 24211efea7376371ee755edd2ad03e83ef6eea464eRomain Guy 258aa195d7081b889f3a7b1f426cbd8556377aae5eRomain Guyclass Caches; 26117bdbcfa3e8306dad21e7e01fa71b00cdfa7265Chris Craikclass Extensions; 272dc236b2bae13b9a0ed9b3f7320502aecd7983b3Tom Hudsonclass Program; 28b48800428906ae455c2b63acacd44e390e1fee49Romain Guy 29b48800428906ae455c2b63acacd44e390e1fee49Romain Guy// Must be a power of two 30b48800428906ae455c2b63acacd44e390e1fee49Romain Guy#define DITHER_KERNEL_SIZE 4 31b48800428906ae455c2b63acacd44e390e1fee49Romain Guy// These must not use the .0f notation as they are used from GLSL 32b48800428906ae455c2b63acacd44e390e1fee49Romain Guy#define DITHER_KERNEL_SIZE_INV (1.0 / 4.0) 33b48800428906ae455c2b63acacd44e390e1fee49Romain Guy#define DITHER_KERNEL_SIZE_INV_SQUARE (1.0 / 16.0) 34b48800428906ae455c2b63acacd44e390e1fee49Romain Guy 35211efea7376371ee755edd2ad03e83ef6eea464eRomain Guy/** 36211efea7376371ee755edd2ad03e83ef6eea464eRomain Guy * Handles dithering for programs. 37211efea7376371ee755edd2ad03e83ef6eea464eRomain Guy */ 38211efea7376371ee755edd2ad03e83ef6eea464eRomain Guyclass Dither { 39211efea7376371ee755edd2ad03e83ef6eea464eRomain Guypublic: 4044eb2c00861098dd3e2950d923646814b4cc57c2Chris Craik Dither(Caches& caches); 41211efea7376371ee755edd2ad03e83ef6eea464eRomain Guy 42211efea7376371ee755edd2ad03e83ef6eea464eRomain Guy void clear(); 436c15ffa196fc9b7724c189d833c3435d8db12266Chris Craik void setupProgram(Program& program, GLuint* textureUnit); 44211efea7376371ee755edd2ad03e83ef6eea464eRomain Guy 45211efea7376371ee755edd2ad03e83ef6eea464eRomain Guyprivate: 46211efea7376371ee755edd2ad03e83ef6eea464eRomain Guy void bindDitherTexture(); 47211efea7376371ee755edd2ad03e83ef6eea464eRomain Guy 4844eb2c00861098dd3e2950d923646814b4cc57c2Chris Craik Caches& mCaches; 49211efea7376371ee755edd2ad03e83ef6eea464eRomain Guy bool mInitialized; 50211efea7376371ee755edd2ad03e83ef6eea464eRomain Guy GLuint mDitherTexture; 51211efea7376371ee755edd2ad03e83ef6eea464eRomain Guy}; 52211efea7376371ee755edd2ad03e83ef6eea464eRomain Guy 53211efea7376371ee755edd2ad03e83ef6eea464eRomain Guy}; // namespace uirenderer 54211efea7376371ee755edd2ad03e83ef6eea464eRomain Guy}; // namespace android 55211efea7376371ee755edd2ad03e83ef6eea464eRomain Guy 56211efea7376371ee755edd2ad03e83ef6eea464eRomain Guy#endif // ANDROID_HWUI_DITHER_H 57