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