|
1 /* |
|
2 * Copyright (C) 2007 The Android Open Source Project |
|
3 * |
|
4 * Licensed under the Apache License, Version 2.0 (the "License"); |
|
5 * you may not use this file except in compliance with the License. |
|
6 * You may obtain a copy of the License at |
|
7 * |
|
8 * http://www.apache.org/licenses/LICENSE-2.0 |
|
9 * |
|
10 * Unless required by applicable law or agreed to in writing, software |
|
11 * distributed under the License is distributed on an "AS IS" BASIS, |
|
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
|
13 * See the License for the specific language governing permissions and |
|
14 * limitations under the License. |
|
15 */ |
|
16 |
|
17 #ifndef ANDROID_PIXELFLINGER_H |
|
18 #define ANDROID_PIXELFLINGER_H |
|
19 |
|
20 #include <stdint.h> |
|
21 #include <sys/types.h> |
|
22 |
|
23 #include <pixelflinger/format.h> |
|
24 |
|
25 // GGL types |
|
26 |
|
27 typedef int8_t GGLbyte; // b |
|
28 typedef int16_t GGLshort; // s |
|
29 typedef int32_t GGLint; // i |
|
30 typedef ssize_t GGLsizei; // i |
|
31 typedef int32_t GGLfixed; // x |
|
32 typedef int32_t GGLclampx; // x |
|
33 typedef float GGLfloat; // f |
|
34 typedef float GGLclampf; // f |
|
35 typedef double GGLdouble; // d |
|
36 typedef double GGLclampd; // d |
|
37 typedef uint8_t GGLubyte; // ub |
|
38 typedef uint8_t GGLboolean; // ub |
|
39 typedef uint16_t GGLushort; // us |
|
40 typedef uint32_t GGLuint; // ui |
|
41 typedef unsigned int GGLenum; // ui |
|
42 typedef unsigned int GGLbitfield; // ui |
|
43 typedef void GGLvoid; |
|
44 typedef int32_t GGLfixed32; |
|
45 typedef int32_t GGLcolor; |
|
46 typedef int32_t GGLcoord; |
|
47 |
|
48 // ---------------------------------------------------------------------------- |
|
49 |
|
50 #define GGL_MAX_VIEWPORT_DIMS 4096 |
|
51 #define GGL_MAX_TEXTURE_SIZE 4096 |
|
52 #define GGL_MAX_ALIASED_POINT_SIZE 0x7FFFFFF |
|
53 #define GGL_MAX_SMOOTH_POINT_SIZE 2048 |
|
54 #define GGL_MAX_SMOOTH_LINE_WIDTH 2048 |
|
55 |
|
56 // ---------------------------------------------------------------------------- |
|
57 |
|
58 // All these names are compatible with their OpenGL equivalents |
|
59 // some of them are listed only for completeness |
|
60 enum GGLNames { |
|
61 GGL_FALSE = 0, |
|
62 GGL_TRUE = 1, |
|
63 |
|
64 // enable/disable |
|
65 GGL_SCISSOR_TEST = 0x0C11, |
|
66 GGL_TEXTURE_2D = 0x0DE1, |
|
67 GGL_ALPHA_TEST = 0x0BC0, |
|
68 GGL_BLEND = 0x0BE2, |
|
69 GGL_COLOR_LOGIC_OP = 0x0BF2, |
|
70 GGL_DITHER = 0x0BD0, |
|
71 GGL_STENCIL_TEST = 0x0B90, |
|
72 GGL_DEPTH_TEST = 0x0B71, |
|
73 GGL_AA = 0x80000001, |
|
74 GGL_W_LERP = 0x80000004, |
|
75 GGL_POINT_SMOOTH_NICE = 0x80000005, |
|
76 |
|
77 // buffers, pixel drawing/reading |
|
78 GGL_COLOR = 0x1800, |
|
79 |
|
80 // fog |
|
81 GGL_FOG = 0x0B60, |
|
82 |
|
83 // shade model |
|
84 GGL_FLAT = 0x1D00, |
|
85 GGL_SMOOTH = 0x1D01, |
|
86 |
|
87 // Texture parameter name |
|
88 GGL_TEXTURE_MIN_FILTER = 0x2801, |
|
89 GGL_TEXTURE_MAG_FILTER = 0x2800, |
|
90 GGL_TEXTURE_WRAP_S = 0x2802, |
|
91 GGL_TEXTURE_WRAP_T = 0x2803, |
|
92 GGL_TEXTURE_WRAP_R = 0x2804, |
|
93 |
|
94 // Texture Filter |
|
95 GGL_NEAREST = 0x2600, |
|
96 GGL_LINEAR = 0x2601, |
|
97 GGL_NEAREST_MIPMAP_NEAREST = 0x2700, |
|
98 GGL_LINEAR_MIPMAP_NEAREST = 0x2701, |
|
99 GGL_NEAREST_MIPMAP_LINEAR = 0x2702, |
|
100 GGL_LINEAR_MIPMAP_LINEAR = 0x2703, |
|
101 |
|
102 // Texture Wrap Mode |
|
103 GGL_CLAMP = 0x2900, |
|
104 GGL_REPEAT = 0x2901, |
|
105 GGL_CLAMP_TO_EDGE = 0x812F, |
|
106 |
|
107 // Texture Env Mode |
|
108 GGL_REPLACE = 0x1E01, |
|
109 GGL_MODULATE = 0x2100, |
|
110 GGL_DECAL = 0x2101, |
|
111 GGL_ADD = 0x0104, |
|
112 |
|
113 // Texture Env Parameter |
|
114 GGL_TEXTURE_ENV_MODE = 0x2200, |
|
115 GGL_TEXTURE_ENV_COLOR = 0x2201, |
|
116 |
|
117 // Texture Env Target |
|
118 GGL_TEXTURE_ENV = 0x2300, |
|
119 |
|
120 // Texture coord generation |
|
121 GGL_TEXTURE_GEN_MODE = 0x2500, |
|
122 GGL_S = 0x2000, |
|
123 GGL_T = 0x2001, |
|
124 GGL_R = 0x2002, |
|
125 GGL_Q = 0x2003, |
|
126 GGL_ONE_TO_ONE = 0x80000002, |
|
127 GGL_AUTOMATIC = 0x80000003, |
|
128 |
|
129 // AlphaFunction |
|
130 GGL_NEVER = 0x0200, |
|
131 GGL_LESS = 0x0201, |
|
132 GGL_EQUAL = 0x0202, |
|
133 GGL_LEQUAL = 0x0203, |
|
134 GGL_GREATER = 0x0204, |
|
135 GGL_NOTEQUAL = 0x0205, |
|
136 GGL_GEQUAL = 0x0206, |
|
137 GGL_ALWAYS = 0x0207, |
|
138 |
|
139 // LogicOp |
|
140 GGL_CLEAR = 0x1500, // 0 |
|
141 GGL_AND = 0x1501, // s & d |
|
142 GGL_AND_REVERSE = 0x1502, // s & ~d |
|
143 GGL_COPY = 0x1503, // s |
|
144 GGL_AND_INVERTED = 0x1504, // ~s & d |
|
145 GGL_NOOP = 0x1505, // d |
|
146 GGL_XOR = 0x1506, // s ^ d |
|
147 GGL_OR = 0x1507, // s | d |
|
148 GGL_NOR = 0x1508, // ~(s | d) |
|
149 GGL_EQUIV = 0x1509, // ~(s ^ d) |
|
150 GGL_INVERT = 0x150A, // ~d |
|
151 GGL_OR_REVERSE = 0x150B, // s | ~d |
|
152 GGL_COPY_INVERTED = 0x150C, // ~s |
|
153 GGL_OR_INVERTED = 0x150D, // ~s | d |
|
154 GGL_NAND = 0x150E, // ~(s & d) |
|
155 GGL_SET = 0x150F, // 1 |
|
156 |
|
157 // blending equation & function |
|
158 GGL_ZERO = 0, // SD |
|
159 GGL_ONE = 1, // SD |
|
160 GGL_SRC_COLOR = 0x0300, // D |
|
161 GGL_ONE_MINUS_SRC_COLOR = 0x0301, // D |
|
162 GGL_SRC_ALPHA = 0x0302, // SD |
|
163 GGL_ONE_MINUS_SRC_ALPHA = 0x0303, // SD |
|
164 GGL_DST_ALPHA = 0x0304, // SD |
|
165 GGL_ONE_MINUS_DST_ALPHA = 0x0305, // SD |
|
166 GGL_DST_COLOR = 0x0306, // S |
|
167 GGL_ONE_MINUS_DST_COLOR = 0x0307, // S |
|
168 GGL_SRC_ALPHA_SATURATE = 0x0308, // S |
|
169 |
|
170 // clear bits |
|
171 GGL_DEPTH_BUFFER_BIT = 0x00000100, |
|
172 GGL_STENCIL_BUFFER_BIT = 0x00000400, |
|
173 GGL_COLOR_BUFFER_BIT = 0x00004000, |
|
174 |
|
175 // errors |
|
176 GGL_NO_ERROR = 0, |
|
177 GGL_INVALID_ENUM = 0x0500, |
|
178 GGL_INVALID_VALUE = 0x0501, |
|
179 GGL_INVALID_OPERATION = 0x0502, |
|
180 GGL_STACK_OVERFLOW = 0x0503, |
|
181 GGL_STACK_UNDERFLOW = 0x0504, |
|
182 GGL_OUT_OF_MEMORY = 0x0505 |
|
183 }; |
|
184 |
|
185 // ---------------------------------------------------------------------------- |
|
186 |
|
187 typedef struct { |
|
188 GGLsizei version; // always set to sizeof(GGLSurface) |
|
189 GGLuint width; // width in pixels |
|
190 GGLuint height; // height in pixels |
|
191 GGLint stride; // stride in pixels |
|
192 GGLubyte* data; // pointer to the bits |
|
193 GGLubyte format; // pixel format |
|
194 GGLubyte rfu[3]; // must be zero |
|
195 // these values are dependent on the used format |
|
196 union { |
|
197 GGLint compressedFormat; |
|
198 GGLint vstride; |
|
199 }; |
|
200 void* reserved; |
|
201 } GGLSurface; |
|
202 |
|
203 |
|
204 typedef struct { |
|
205 // immediate rendering |
|
206 void (*pointx)(void *con, const GGLcoord* v, GGLcoord r); |
|
207 void (*linex)(void *con, |
|
208 const GGLcoord* v0, const GGLcoord* v1, GGLcoord width); |
|
209 void (*recti)(void* c, GGLint l, GGLint t, GGLint r, GGLint b); |
|
210 void (*trianglex)(void* c, |
|
211 GGLcoord const* v0, GGLcoord const* v1, GGLcoord const* v2); |
|
212 |
|
213 // scissor |
|
214 void (*scissor)(void* c, GGLint x, GGLint y, GGLsizei width, GGLsizei height); |
|
215 |
|
216 // Set the textures and color buffers |
|
217 void (*activeTexture)(void* c, GGLuint tmu); |
|
218 void (*bindTexture)(void* c, const GGLSurface* surface); |
|
219 void (*colorBuffer)(void* c, const GGLSurface* surface); |
|
220 void (*readBuffer)(void* c, const GGLSurface* surface); |
|
221 void (*depthBuffer)(void* c, const GGLSurface* surface); |
|
222 void (*bindTextureLod)(void* c, GGLuint tmu, const GGLSurface* surface); |
|
223 |
|
224 // enable/disable features |
|
225 void (*enable)(void* c, GGLenum name); |
|
226 void (*disable)(void* c, GGLenum name); |
|
227 void (*enableDisable)(void* c, GGLenum name, GGLboolean en); |
|
228 |
|
229 // specify the fragment's color |
|
230 void (*shadeModel)(void* c, GGLenum mode); |
|
231 void (*color4xv)(void* c, const GGLclampx* color); |
|
232 // specify color iterators (16.16) |
|
233 void (*colorGrad12xv)(void* c, const GGLcolor* grad); |
|
234 |
|
235 // specify Z coordinate iterators (0.32) |
|
236 void (*zGrad3xv)(void* c, const GGLfixed32* grad); |
|
237 |
|
238 // specify W coordinate iterators (16.16) |
|
239 void (*wGrad3xv)(void* c, const GGLfixed* grad); |
|
240 |
|
241 // specify fog iterator & color (16.16) |
|
242 void (*fogGrad3xv)(void* c, const GGLfixed* grad); |
|
243 void (*fogColor3xv)(void* c, const GGLclampx* color); |
|
244 |
|
245 // specify blending parameters |
|
246 void (*blendFunc)(void* c, GGLenum src, GGLenum dst); |
|
247 void (*blendFuncSeparate)(void* c, GGLenum src, GGLenum dst, |
|
248 GGLenum srcAlpha, GGLenum dstAplha); |
|
249 |
|
250 // texture environnement (REPLACE / MODULATE / DECAL / BLEND) |
|
251 void (*texEnvi)(void* c, GGLenum target, |
|
252 GGLenum pname, |
|
253 GGLint param); |
|
254 |
|
255 void (*texEnvxv)(void* c, GGLenum target, |
|
256 GGLenum pname, const GGLfixed* params); |
|
257 |
|
258 // texture parameters (Wrapping, filter) |
|
259 void (*texParameteri)(void* c, GGLenum target, |
|
260 GGLenum pname, |
|
261 GGLint param); |
|
262 |
|
263 // texture iterators (16.16) |
|
264 void (*texCoord2i)(void* c, GGLint s, GGLint t); |
|
265 void (*texCoord2x)(void* c, GGLfixed s, GGLfixed t); |
|
266 |
|
267 // s, dsdx, dsdy, scale, t, dtdx, dtdy, tscale |
|
268 // This api uses block floating-point for S and T texture coordinates. |
|
269 // All values are given in 16.16, scaled by 'scale'. In other words, |
|
270 // set scale to 0, for 16.16 values. |
|
271 void (*texCoordGradScale8xv)(void* c, GGLint tmu, const int32_t* grad8); |
|
272 |
|
273 void (*texGeni)(void* c, GGLenum coord, GGLenum pname, GGLint param); |
|
274 |
|
275 // masking |
|
276 void (*colorMask)(void* c, GGLboolean red, |
|
277 GGLboolean green, |
|
278 GGLboolean blue, |
|
279 GGLboolean alpha); |
|
280 |
|
281 void (*depthMask)(void* c, GGLboolean flag); |
|
282 |
|
283 void (*stencilMask)(void* c, GGLuint mask); |
|
284 |
|
285 // alpha func |
|
286 void (*alphaFuncx)(void* c, GGLenum func, GGLclampx ref); |
|
287 |
|
288 // depth func |
|
289 void (*depthFunc)(void* c, GGLenum func); |
|
290 |
|
291 // logic op |
|
292 void (*logicOp)(void* c, GGLenum opcode); |
|
293 |
|
294 // clear |
|
295 void (*clear)(void* c, GGLbitfield mask); |
|
296 void (*clearColorx)(void* c, |
|
297 GGLclampx r, GGLclampx g, GGLclampx b, GGLclampx a); |
|
298 void (*clearDepthx)(void* c, GGLclampx depth); |
|
299 void (*clearStencil)(void* c, GGLint s); |
|
300 |
|
301 // framebuffer operations |
|
302 void (*copyPixels)(void* c, GGLint x, GGLint y, |
|
303 GGLsizei width, GGLsizei height, GGLenum type); |
|
304 void (*rasterPos2x)(void* c, GGLfixed x, GGLfixed y); |
|
305 void (*rasterPos2i)(void* c, GGLint x, GGLint y); |
|
306 } GGLContext; |
|
307 |
|
308 // ---------------------------------------------------------------------------- |
|
309 |
|
310 #ifdef __cplusplus |
|
311 extern "C" { |
|
312 #endif |
|
313 |
|
314 // construct / destroy the context |
|
315 ssize_t gglInit(GGLContext** context); |
|
316 ssize_t gglUninit(GGLContext* context); |
|
317 |
|
318 GGLint gglBitBlti( |
|
319 GGLContext* c, |
|
320 int tmu, |
|
321 GGLint crop[4], |
|
322 GGLint where[4]); |
|
323 |
|
324 #ifdef __cplusplus |
|
325 }; |
|
326 #endif |
|
327 |
|
328 // ---------------------------------------------------------------------------- |
|
329 |
|
330 #endif // ANDROID_PIXELFLINGER_H |