Initial commit
[profile/ivi/simulator-opengl.git] / es_1_1 / 80ext.c
1 /* 
2  * Copyright (C) 2010 - 2011 Samsung Electronics Co., Ltd. All rights reserved.
3  * 
4  * Contact:
5  * DongKyun Yun <dk77.yun@samsung.com>
6  * SangJin Kim <sangjin3.kim@samsung.com>
7  * HyunGoo Kang <hyungoo1.kang@samsung.com>
8  *
9  * Permission is hereby granted, free of charge, to any person obtaining a copy of
10  * this software and associated documentation files (the "Software"), to deal in
11  * the Software without restriction, including without limitation the rights to
12  * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
13  * of the Software, and to permit persons to whom the Software is furnished to do
14  * so, subject to the following conditions:
15  * 
16  * The above copyright notice and this permission notice shall be included in all
17  * copies or substantial portions of the Software.
18  * 
19  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
20  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
21  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
22  * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
23  * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
24  * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
25  * SOFTWARE.
26  * 
27  * Contributors:
28  * - S-Core Co., Ltd
29  *
30  */
31
32 #include "gl_imp.h"
33 #include <GLES/glext.h>
34 #include <math.h>
35
36
37 #if defined(PROVIDING_ES_2_0) || defined(PROVIDING_OES_blend_func_separate)
38 /* 2. GL_OES_blend_func_separate */
39 /* based on GL_EXT_blend_func_separate, core of OpenGL 1.4 */
40 /* BlendFuncSeparate() in the core of OpenGL ES 2.0 */
41
42 void GL_APIENTRY EXTFN(BlendFuncSeparateOES)(GLenum srcRGB, GLenum dstRGB,
43         GLenum srcAlpha, GLenum dstAlpha) {
44         switch (srcRGB) {
45         default:
46                 INTFN(SetError)(GL_INVALID_ENUM);
47                 return;
48         case GL_ZERO:
49         case GL_ONE:
50         case GL_SRC_COLOR:
51         case GL_ONE_MINUS_SRC_COLOR:
52         case GL_DST_COLOR:
53         case GL_ONE_MINUS_DST_COLOR:
54         case GL_SRC_ALPHA:
55         case GL_ONE_MINUS_SRC_ALPHA:
56         case GL_DST_ALPHA:
57         case GL_ONE_MINUS_DST_ALPHA:
58         case GL_SRC_ALPHA_SATURATE:
59                 break;
60         }
61         switch (dstRGB) {
62         default:
63                 INTFN(SetError)(GL_INVALID_ENUM);
64                 return;
65         case GL_ZERO:
66         case GL_ONE:
67         case GL_SRC_COLOR:
68         case GL_ONE_MINUS_SRC_COLOR:
69         case GL_DST_COLOR:
70         case GL_ONE_MINUS_DST_COLOR:
71         case GL_SRC_ALPHA:
72         case GL_ONE_MINUS_SRC_ALPHA:
73         case GL_DST_ALPHA:
74         case GL_ONE_MINUS_DST_ALPHA:
75                 break;
76         }
77         switch (srcAlpha) {
78         default:
79                 INTFN(SetError)(GL_INVALID_ENUM);
80                 return;
81         case GL_ZERO:
82         case GL_ONE:
83         case GL_SRC_COLOR:
84         case GL_ONE_MINUS_SRC_COLOR:
85         case GL_DST_COLOR:
86         case GL_ONE_MINUS_DST_COLOR:
87         case GL_SRC_ALPHA:
88         case GL_ONE_MINUS_SRC_ALPHA:
89         case GL_DST_ALPHA:
90         case GL_ONE_MINUS_DST_ALPHA:
91         case GL_SRC_ALPHA_SATURATE:
92                 break;
93         }
94         switch (dstAlpha) {
95         default:
96                 INTFN(SetError)(GL_INVALID_ENUM);
97                 return;
98         case GL_ZERO:
99         case GL_ONE:
100         case GL_SRC_COLOR:
101         case GL_ONE_MINUS_SRC_COLOR:
102         case GL_DST_COLOR:
103         case GL_ONE_MINUS_DST_COLOR:
104         case GL_SRC_ALPHA:
105         case GL_ONE_MINUS_SRC_ALPHA:
106         case GL_DST_ALPHA:
107         case GL_ONE_MINUS_DST_ALPHA:
108                 break;
109         }
110         FNPTR(BlendFuncSeparate)(srcRGB, dstRGB, srcAlpha, dstAlpha);
111 }
112
113 #endif 
114
115
116 #if defined(PROVIDING_ES_2_0) || defined(PROVIDING_OES_blend_subtract)
117 /* 2. GL_OES_blend_subtract */
118 /* based on GL_EXT_blend_subtract, core of OpenGL 1.2 */
119 /* BlendEquation() in the core of OpenGL ES 2.0 */
120
121 void GL_APIENTRY EXTFN(BlendEquationOES)(GLenum mode) {
122         switch (mode) {
123         default:
124                 INTFN(SetError)(GL_INVALID_ENUM);
125                 return;
126         case GL_FUNC_ADD_OES:
127         case GL_FUNC_SUBTRACT_OES:
128         case GL_FUNC_REVERSE_SUBTRACT_OES:
129                 break;
130         }
131         FNPTR(BlendEquation)(mode);
132 }
133
134 #endif 
135
136
137 #if defined(PROVIDING_OES_byte_coordinates)
138 void GL_APIENTRY EXTFN(MultiTexCoord4bOES)(GLenum target,
139         GLbyte s, GLbyte t, GLbyte r, GLbyte q) {
140         FNPTR(MultiTexCoord4f)(target, b2f(s), b2f(t), b2f(r), b2f(q));
141 }
142 #endif 
143
144 #if defined(PROVIDING_OES_fixed_point)
145
146 void GL_APIENTRY EXTFN(AlphaFuncxOES)(GLenum func, GLclampx ref) {
147         EXTFN(AlphaFuncx)(func, ref);
148 }
149
150 void GL_APIENTRY EXTFN(ClearColorxOES)(GLclampx red, GLclampx green,
151         GLclampx blue, GLclampx alpha) {
152         EXTFN(ClearColorx)(red, green, blue, alpha);
153 }
154
155 void GL_APIENTRY EXTFN(ClearDepthxOES)(GLclampx depth) {
156         EXTFN(ClearDepthx)(depth);
157 }
158
159 void GL_APIENTRY EXTFN(ClipPlanexOES)(GLenum plane, const GLfixed* equation) {
160         EXTFN(ClipPlanex)(plane, equation);
161 }
162
163 void GL_APIENTRY EXTFN(Color4xOES)(GLfixed red, GLfixed green, GLfixed blue, GLfixed alpha) {
164         EXTFN(Color4x)(red, green, blue, alpha);
165 }
166
167 void GL_APIENTRY EXTFN(DepthRangexOES)(GLclampx zNear, GLclampx zFar) {
168         EXTFN(DepthRangex)(zNear, zFar);
169 }
170
171 void GL_APIENTRY EXTFN(FogxOES)(GLenum pname, GLfixed param) {
172         EXTFN(Fogx)(pname, param);
173 }
174
175 void GL_APIENTRY EXTFN(FogxvOES)(GLenum pname, const GLfixed* params) {
176         EXTFN(Fogxv)(pname, params);
177 }
178
179 void GL_APIENTRY EXTFN(FrustumxOES)(GLfixed left, GLfixed right,
180         GLfixed bottom, GLfixed top, GLfixed zNear, GLfixed zFar) {
181         EXTFN(Frustumx)(left, right,  bottom,  top,  zNear,  zFar);
182 }
183
184 void GL_APIENTRY EXTFN(GetClipPlanexOES)(GLenum pname, GLfixed eqn[4]) {
185         EXTFN(GetClipPlanex)(pname, eqn);
186 }
187
188 void GL_APIENTRY EXTFN(GetFixedvOES)(GLenum pname, GLfixed* params) {
189         EXTFN(GetFixedv)(pname, params);
190 }
191
192 void GL_APIENTRY EXTFN(GetLightxvOES)(GLenum light, GLenum pname, GLfixed* params) {
193         EXTFN(GetLightxv)(light, pname, params);
194 }
195
196 void GL_APIENTRY EXTFN(GetMaterialxvOES)(GLenum face, GLenum pname, GLfixed* params) {
197         EXTFN(GetMaterialxv)(face, pname, params);
198 }
199
200 void GL_APIENTRY EXTFN(GetTexEnvxvOES)(GLenum env, GLenum pname, GLfixed* params) {
201         EXTFN(GetTexEnvxv)(env, pname, params);
202 }
203
204 void GL_APIENTRY EXTFN(GetTexParameterxvOES)(GLenum target, GLenum pname, GLfixed* params) {
205         EXTFN(GetTexParameterxv)(target, pname, params);
206 }
207
208 void GL_APIENTRY EXTFN(LightModelxOES)(GLenum pname, GLfixed param) {
209         EXTFN(LightModelx)(pname, param);
210 }
211
212 void GL_APIENTRY EXTFN(LightModelxvOES)(GLenum pname, const GLfixed* params) {
213         EXTFN(LightModelxv)(pname, params);
214 }
215
216 void GL_APIENTRY EXTFN(LightxOES)(GLenum light, GLenum pname, GLfixed param) {
217         EXTFN(Lightx)(light, pname, param);
218 }
219
220 void GL_APIENTRY EXTFN(LightxvOES)(GLenum light, GLenum pname, const GLfixed* params) {
221         EXTFN(Lightxv)(light, pname, params);
222 }
223
224 void GL_APIENTRY EXTFN(LineWidthxOES)(GLfixed width) {
225         EXTFN(LineWidthx)(width);
226 }
227
228 void GL_APIENTRY EXTFN(LoadMatrixxOES)(const GLfixed* m) {
229         EXTFN(LoadMatrixx)(m);
230 }
231
232 void GL_APIENTRY EXTFN(MaterialxOES)(GLenum face, GLenum pname, GLfixed param) {
233         EXTFN(Materialx)(face, pname, param);
234 }
235
236 void GL_APIENTRY EXTFN(MaterialxvOES)(GLenum face, GLenum pname, const GLfixed* params) {
237         EXTFN(Materialxv)(face, pname, params);
238 }
239
240 void GL_APIENTRY EXTFN(MultMatrixxOES)(const GLfixed* m) {
241         EXTFN(MultMatrixx)(m);
242 }
243
244 void GL_APIENTRY EXTFN(MultiTexCoord4xOES)(GLenum target, GLfixed s, GLfixed t,
245         GLfixed r, GLfixed q) {
246         EXTFN(MultiTexCoord4x)(target, s, t, r, q);
247 }
248
249 void GL_APIENTRY EXTFN(Normal3xOES)(GLfixed nx, GLfixed ny, GLfixed nz) {
250         EXTFN(Normal3x)(nx, ny, nz);
251 }
252
253 void GL_APIENTRY EXTFN(OrthoxOES)(GLfixed left, GLfixed right,
254         GLfixed bottom, GLfixed top, GLfixed zNear, GLfixed zFar) {
255         EXTFN(Orthox)(left, right, bottom, top, zNear, zFar);
256 }
257
258 void GL_APIENTRY EXTFN(PointParameterxOES)(GLenum pname, GLfixed param) {
259         EXTFN(PointParameterx)(pname, param);
260 }
261
262 void GL_APIENTRY EXTFN(PointParameterxvOES)(GLenum pname, const GLfixed* params) {
263         EXTFN(PointParameterxv)(pname, params);
264 }
265
266 void GL_APIENTRY EXTFN(PointSizexOES)(GLfixed size) {
267         EXTFN(PointSizex)(size);
268 }
269
270 void GL_APIENTRY EXTFN(PolygonOffsetxOES)(GLfixed factor, GLfixed units) {
271         EXTFN(PolygonOffsetx)(factor, units);
272 }
273
274 void GL_APIENTRY EXTFN(RotatexOES)(GLfixed angle, GLfixed x, GLfixed y, GLfixed z) {
275         EXTFN(Rotatex)(angle, x, y, z);
276 }
277
278 void GL_APIENTRY EXTFN(SampleCoveragexOES)(GLclampx value, GLboolean invert) {
279         EXTFN(SampleCoveragex)(value, invert);
280 }
281
282 void GL_APIENTRY EXTFN(ScalexOES)(GLfixed x, GLfixed y, GLfixed z) {
283         EXTFN(Scalex)(x, y, z);
284 }
285
286 void GL_APIENTRY EXTFN(TexEnvxOES)(GLenum target, GLenum pname, GLfixed param) {
287         EXTFN(TexEnvx)(target, pname, param);
288 }
289
290 void GL_APIENTRY EXTFN(TexEnvxvOES)(GLenum target, GLenum pname, const GLfixed* params) {
291         EXTFN(TexEnvxv)(target, pname, params);
292 }
293
294 void GL_APIENTRY EXTFN(TexParameterxOES)(GLenum target, GLenum pname, GLfixed param) {
295         EXTFN(TexParameterx)(target, pname, param);
296 }
297
298 void GL_APIENTRY EXTFN(TexParameterxvOES)(GLenum target, GLenum pname, const GLfixed* params) {
299         EXTFN(TexParameterxv)(target, pname, params);
300 }
301
302 void GL_APIENTRY EXTFN(TranslatexOES)(GLfixed x, GLfixed y, GLfixed z) {
303         EXTFN(Translatex)(x, y, z);
304 }
305
306 #endif
307
308 #if defined(PROVIDING_OES_query_matrix)
309 #if ! defined(PROVIDING_OES_fixed_point)
310 #error PROVIDING_OES_query_matrix requires PROVIDING_OES_fixed_point
311 #endif
312
313 GLbitfield GL_APIENTRY EXTFN(QueryMatrixxOES)(GLfixed mantissa[16], GLint exponent[16]) {
314         GLfloat fMatrix[16];
315         GLint eMatrixMode;
316         GLbitfield flag = 0x0000;
317         int i;
318         FNPTR(GetIntegerv)(GL_MATRIX_MODE, &eMatrixMode);
319         switch (eMatrixMode) {
320         case GL_MODELVIEW:      FNPTR(GetFloatv)(GL_MODELVIEW_MATRIX, fMatrix); break;
321         case GL_PROJECTION:     FNPTR(GetFloatv)(GL_PROJECTION_MATRIX, fMatrix); break;
322         case GL_TEXTURE:        FNPTR(GetFloatv)(GL_TEXTURE_MATRIX, fMatrix); break;
323         default:
324                 return 0xFFFF; 
325         }
326         for (i = 0; i < 16; i++) {
327                 if (finitef(fMatrix[i])) {
328                         GLfloat man = frexpf(fMatrix[i], &exponent[i]);
329                         mantissa[i] = f2x(man);
330                 } else {
331                         flag |= (0x0001 << i);
332                 }
333         }
334         return flag;
335 }
336
337 #endif 
338
339
340 #if defined(PROVIDING_OES_single_precision)
341
342 void GL_APIENTRY EXTFN(DepthRangefOES)(GLclampf zNear, GLclampf zFar) {
343         EXTFN(DepthRangef)(zNear, zFar);
344 }
345
346 void GL_APIENTRY EXTFN(FrustumfOES)(GLfloat left, GLfloat right,
347         GLfloat bottom, GLfloat top, GLfloat zNear, GLfloat zFar) {
348         EXTFN(Frustumf)(left, right, bottom, top, zNear, zFar);
349 }
350
351 void GL_APIENTRY EXTFN(OrthofOES)(GLfloat left, GLfloat right,
352         GLfloat bottom, GLfloat top, GLfloat zNear, GLfloat zFar) {
353         EXTFN(Orthof)(left, right, bottom, top, zNear, zFar);
354 }
355
356 void GL_APIENTRY EXTFN(ClipPlanefOES)(GLenum plane, const GLfloat* equation) {
357         EXTFN(ClipPlanef)(plane, equation);
358 }
359
360 void GL_APIENTRY EXTFN(GetClipPlanefOES)(GLenum pname, GLfloat eqn[4]) {
361         EXTFN(GetClipPlanef)(pname, eqn);
362 }
363
364 void GL_APIENTRY EXTFN(ClearDepthfOES)(GLclampf depth) {
365         EXTFN(ClearDepthf)(depth);
366 }
367
368 #endif 
369
370
371 #if defined(PROVIDING_OES_texture_cube_map)
372 /* 20. GL_OES_texture_cube_map */
373 /* based on ARB_texture_cube_map and core of OpenGL 1.1 */
374
375 void GL_APIENTRY EXTFN(TexGeniOES)(GLenum coord, GLenum pname, GLint param) {
376         switch (coord) {
377         default:
378                 INTFN(SetError)(GL_INVALID_ENUM);
379                 break;
380         case GL_TEXTURE_GEN_STR_OES:
381                 break;
382         }
383         switch (pname) {
384         default:
385                 INTFN(SetError)(GL_INVALID_ENUM);
386                 break;
387         case GL_TEXTURE_GEN_MODE_OES:
388                 break;
389         }
390         switch (param) {
391         default:
392                 INTFN(SetError)(GL_INVALID_ENUM);
393                 break;
394         case GL_NORMAL_MAP_OES:
395         case GL_REFLECTION_MAP_OES:
396                 break;
397         }
398         FNPTR(TexGeni)(coord, pname, param);
399 }
400
401 void GL_APIENTRY EXTFN(TexGenfOES)(GLenum coord, GLenum pname, GLfloat param) {
402         EXTFN(TexGeniOES)(coord, pname, (int)(param));
403 }
404
405 void GL_APIENTRY EXTFN(TexGenxOES)(GLenum coord, GLenum pname, GLfixed param) {
406         EXTFN(TexGeniOES)(coord, pname, param);
407 }
408
409 void GL_APIENTRY EXTFN(TexGenivOES)(GLenum coord, GLenum pname, const GLint *params) {
410         EXTFN(TexGeniOES)(coord, pname, *params);
411 }
412
413 void GL_APIENTRY EXTFN(TexGenfvOES)(GLenum coord, GLenum pname, const GLfloat *params) {
414         EXTFN(TexGeniOES)(coord, pname, (int)(*params));
415 }
416
417 void GL_APIENTRY EXTFN(TexGenxvOES)(GLenum coord, GLenum pname, const GLfixed *params) {
418         EXTFN(TexGeniOES)(coord, pname, *params);
419 }
420
421 void GL_APIENTRY EXTFN(GetTexGenivOES)(GLenum coord, GLenum pname, GLint *params) {
422         switch (coord) {
423         default:
424                 INTFN(SetError)(GL_INVALID_ENUM);
425                 break;
426         case GL_TEXTURE_GEN_STR_OES:
427                 break;
428         }
429         switch (pname) {
430         default:
431                 INTFN(SetError)(GL_INVALID_ENUM);
432                 break;
433         case GL_TEXTURE_GEN_MODE_OES:
434                 break;
435         }
436         FNPTR(GetTexGeniv)(coord, pname, params);
437 }
438
439 void GL_APIENTRY EXTFN(GetTexGenxvOES)(GLenum coord, GLenum pname, GLfixed *params) {
440         EXTFN(GetTexGenivOES)(coord, pname, params);
441 }
442
443 void GL_APIENTRY EXTFN(GetTexGenfvOES)(GLenum coord, GLenum pname, GLfloat *params) {
444         switch (coord) {
445         default:
446                 INTFN(SetError)(GL_INVALID_ENUM);
447                 break;
448         case GL_TEXTURE_GEN_STR_OES:
449                 break;
450         }
451         switch (pname) {
452         default:
453                 INTFN(SetError)(GL_INVALID_ENUM);
454                 break;
455         case GL_TEXTURE_GEN_MODE_OES:
456                 break;
457         }
458         FNPTR(GetTexGenfv)(coord, pname, params);
459 }
460
461
462 #endif 
463
464
465 /* ----------------------- */
466
467
468 void GL_APIENTRY EXTFN(CurrentPaletteMatrixOES)(GLuint matrixpaletteindex) {
469         return;
470 }
471
472 void GL_APIENTRY EXTFN(LoadPaletteFromModelViewMatrixOES)(void) {
473         return;
474 }
475
476 void GL_APIENTRY EXTFN(MatrixIndexPointerOES)(GLint size, GLenum type,
477                 GLsizei stride, const GLvoid* pointer) {
478         return;
479 }
480
481 void GL_APIENTRY EXTFN(WeightPointerOES)(GLint size, GLenum type,
482         GLsizei stride, const GLvoid* pointer) {
483         return;
484 }
485