Dither.h revision 44eb2c00861098dd3e2950d923646814b4cc57c2
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;
262dc236b2bae13b9a0ed9b3f7320502aecd7983b3Tom Hudsonclass Program;
27b48800428906ae455c2b63acacd44e390e1fee49Romain Guy
28b48800428906ae455c2b63acacd44e390e1fee49Romain Guy// Must be a power of two
29b48800428906ae455c2b63acacd44e390e1fee49Romain Guy#define DITHER_KERNEL_SIZE 4
30b48800428906ae455c2b63acacd44e390e1fee49Romain Guy// These must not use the .0f notation as they are used from GLSL
31b48800428906ae455c2b63acacd44e390e1fee49Romain Guy#define DITHER_KERNEL_SIZE_INV (1.0 / 4.0)
32b48800428906ae455c2b63acacd44e390e1fee49Romain Guy#define DITHER_KERNEL_SIZE_INV_SQUARE (1.0 / 16.0)
33b48800428906ae455c2b63acacd44e390e1fee49Romain Guy
34211efea7376371ee755edd2ad03e83ef6eea464eRomain Guy/**
35211efea7376371ee755edd2ad03e83ef6eea464eRomain Guy * Handles dithering for programs.
36211efea7376371ee755edd2ad03e83ef6eea464eRomain Guy */
37211efea7376371ee755edd2ad03e83ef6eea464eRomain Guyclass Dither {
38211efea7376371ee755edd2ad03e83ef6eea464eRomain Guypublic:
3944eb2c00861098dd3e2950d923646814b4cc57c2Chris Craik    Dither(Caches& caches);
40211efea7376371ee755edd2ad03e83ef6eea464eRomain Guy
41211efea7376371ee755edd2ad03e83ef6eea464eRomain Guy    void clear();
42211efea7376371ee755edd2ad03e83ef6eea464eRomain Guy    void setupProgram(Program* program, GLuint* textureUnit);
43211efea7376371ee755edd2ad03e83ef6eea464eRomain Guy
44211efea7376371ee755edd2ad03e83ef6eea464eRomain Guyprivate:
45211efea7376371ee755edd2ad03e83ef6eea464eRomain Guy    void bindDitherTexture();
46211efea7376371ee755edd2ad03e83ef6eea464eRomain Guy
4744eb2c00861098dd3e2950d923646814b4cc57c2Chris Craik    Caches& mCaches;
48211efea7376371ee755edd2ad03e83ef6eea464eRomain Guy    bool mInitialized;
49211efea7376371ee755edd2ad03e83ef6eea464eRomain Guy    GLuint mDitherTexture;
50211efea7376371ee755edd2ad03e83ef6eea464eRomain Guy};
51211efea7376371ee755edd2ad03e83ef6eea464eRomain Guy
52211efea7376371ee755edd2ad03e83ef6eea464eRomain Guy}; // namespace uirenderer
53211efea7376371ee755edd2ad03e83ef6eea464eRomain Guy}; // namespace android
54211efea7376371ee755edd2ad03e83ef6eea464eRomain Guy
55211efea7376371ee755edd2ad03e83ef6eea464eRomain Guy#endif // ANDROID_HWUI_DITHER_H
56