Dither.h revision 8aa195d7081b889f3a7b1f426cbd8556377aae5e
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 Guy#include "Program.h"
23211efea7376371ee755edd2ad03e83ef6eea464eRomain Guy
24211efea7376371ee755edd2ad03e83ef6eea464eRomain Guynamespace android {
25211efea7376371ee755edd2ad03e83ef6eea464eRomain Guynamespace uirenderer {
26211efea7376371ee755edd2ad03e83ef6eea464eRomain Guy
278aa195d7081b889f3a7b1f426cbd8556377aae5eRomain Guyclass Caches;
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:
408aa195d7081b889f3a7b1f426cbd8556377aae5eRomain Guy    Dither();
41211efea7376371ee755edd2ad03e83ef6eea464eRomain Guy
42211efea7376371ee755edd2ad03e83ef6eea464eRomain Guy    void clear();
43211efea7376371ee755edd2ad03e83ef6eea464eRomain Guy    void setupProgram(Program* program, GLuint* textureUnit);
44211efea7376371ee755edd2ad03e83ef6eea464eRomain Guy
45211efea7376371ee755edd2ad03e83ef6eea464eRomain Guyprivate:
46211efea7376371ee755edd2ad03e83ef6eea464eRomain Guy    void bindDitherTexture();
47211efea7376371ee755edd2ad03e83ef6eea464eRomain Guy
488aa195d7081b889f3a7b1f426cbd8556377aae5eRomain Guy    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