2 * Copyright (C) 2010 - 2011 Samsung Electronics Co., Ltd. All rights reserved.
5 * DongKyun Yun <dk77.yun@samsung.com>
6 * SangJin Kim <sangjin3.kim@samsung.com>
7 * HyunGoo Kang <hyungoo1.kang@samsung.com>
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:
16 * The above copyright notice and this permission notice shall be included in all
17 * copies or substantial portions of the Software.
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
33 #include <GLES/glext.h>
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 */
42 void GL_APIENTRY EXTFN(BlendFuncSeparateOES)(GLenum srcRGB, GLenum dstRGB,
43 GLenum srcAlpha, GLenum dstAlpha) {
46 INTFN(SetError)(GL_INVALID_ENUM);
51 case GL_ONE_MINUS_SRC_COLOR:
53 case GL_ONE_MINUS_DST_COLOR:
55 case GL_ONE_MINUS_SRC_ALPHA:
57 case GL_ONE_MINUS_DST_ALPHA:
58 case GL_SRC_ALPHA_SATURATE:
63 INTFN(SetError)(GL_INVALID_ENUM);
68 case GL_ONE_MINUS_SRC_COLOR:
70 case GL_ONE_MINUS_DST_COLOR:
72 case GL_ONE_MINUS_SRC_ALPHA:
74 case GL_ONE_MINUS_DST_ALPHA:
79 INTFN(SetError)(GL_INVALID_ENUM);
84 case GL_ONE_MINUS_SRC_COLOR:
86 case GL_ONE_MINUS_DST_COLOR:
88 case GL_ONE_MINUS_SRC_ALPHA:
90 case GL_ONE_MINUS_DST_ALPHA:
91 case GL_SRC_ALPHA_SATURATE:
96 INTFN(SetError)(GL_INVALID_ENUM);
101 case GL_ONE_MINUS_SRC_COLOR:
103 case GL_ONE_MINUS_DST_COLOR:
105 case GL_ONE_MINUS_SRC_ALPHA:
107 case GL_ONE_MINUS_DST_ALPHA:
110 FNPTR(BlendFuncSeparate)(srcRGB, dstRGB, srcAlpha, dstAlpha);
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 */
121 void GL_APIENTRY EXTFN(BlendEquationOES)(GLenum mode) {
124 INTFN(SetError)(GL_INVALID_ENUM);
126 case GL_FUNC_ADD_OES:
127 case GL_FUNC_SUBTRACT_OES:
128 case GL_FUNC_REVERSE_SUBTRACT_OES:
131 FNPTR(BlendEquation)(mode);
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));
144 #if defined(PROVIDING_OES_fixed_point)
146 void GL_APIENTRY EXTFN(AlphaFuncxOES)(GLenum func, GLclampx ref) {
147 EXTFN(AlphaFuncx)(func, ref);
150 void GL_APIENTRY EXTFN(ClearColorxOES)(GLclampx red, GLclampx green,
151 GLclampx blue, GLclampx alpha) {
152 EXTFN(ClearColorx)(red, green, blue, alpha);
155 void GL_APIENTRY EXTFN(ClearDepthxOES)(GLclampx depth) {
156 EXTFN(ClearDepthx)(depth);
159 void GL_APIENTRY EXTFN(ClipPlanexOES)(GLenum plane, const GLfixed* equation) {
160 EXTFN(ClipPlanex)(plane, equation);
163 void GL_APIENTRY EXTFN(Color4xOES)(GLfixed red, GLfixed green, GLfixed blue, GLfixed alpha) {
164 EXTFN(Color4x)(red, green, blue, alpha);
167 void GL_APIENTRY EXTFN(DepthRangexOES)(GLclampx zNear, GLclampx zFar) {
168 EXTFN(DepthRangex)(zNear, zFar);
171 void GL_APIENTRY EXTFN(FogxOES)(GLenum pname, GLfixed param) {
172 EXTFN(Fogx)(pname, param);
175 void GL_APIENTRY EXTFN(FogxvOES)(GLenum pname, const GLfixed* params) {
176 EXTFN(Fogxv)(pname, params);
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);
184 void GL_APIENTRY EXTFN(GetClipPlanexOES)(GLenum pname, GLfixed eqn[4]) {
185 EXTFN(GetClipPlanex)(pname, eqn);
188 void GL_APIENTRY EXTFN(GetFixedvOES)(GLenum pname, GLfixed* params) {
189 EXTFN(GetFixedv)(pname, params);
192 void GL_APIENTRY EXTFN(GetLightxvOES)(GLenum light, GLenum pname, GLfixed* params) {
193 EXTFN(GetLightxv)(light, pname, params);
196 void GL_APIENTRY EXTFN(GetMaterialxvOES)(GLenum face, GLenum pname, GLfixed* params) {
197 EXTFN(GetMaterialxv)(face, pname, params);
200 void GL_APIENTRY EXTFN(GetTexEnvxvOES)(GLenum env, GLenum pname, GLfixed* params) {
201 EXTFN(GetTexEnvxv)(env, pname, params);
204 void GL_APIENTRY EXTFN(GetTexParameterxvOES)(GLenum target, GLenum pname, GLfixed* params) {
205 EXTFN(GetTexParameterxv)(target, pname, params);
208 void GL_APIENTRY EXTFN(LightModelxOES)(GLenum pname, GLfixed param) {
209 EXTFN(LightModelx)(pname, param);
212 void GL_APIENTRY EXTFN(LightModelxvOES)(GLenum pname, const GLfixed* params) {
213 EXTFN(LightModelxv)(pname, params);
216 void GL_APIENTRY EXTFN(LightxOES)(GLenum light, GLenum pname, GLfixed param) {
217 EXTFN(Lightx)(light, pname, param);
220 void GL_APIENTRY EXTFN(LightxvOES)(GLenum light, GLenum pname, const GLfixed* params) {
221 EXTFN(Lightxv)(light, pname, params);
224 void GL_APIENTRY EXTFN(LineWidthxOES)(GLfixed width) {
225 EXTFN(LineWidthx)(width);
228 void GL_APIENTRY EXTFN(LoadMatrixxOES)(const GLfixed* m) {
229 EXTFN(LoadMatrixx)(m);
232 void GL_APIENTRY EXTFN(MaterialxOES)(GLenum face, GLenum pname, GLfixed param) {
233 EXTFN(Materialx)(face, pname, param);
236 void GL_APIENTRY EXTFN(MaterialxvOES)(GLenum face, GLenum pname, const GLfixed* params) {
237 EXTFN(Materialxv)(face, pname, params);
240 void GL_APIENTRY EXTFN(MultMatrixxOES)(const GLfixed* m) {
241 EXTFN(MultMatrixx)(m);
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);
249 void GL_APIENTRY EXTFN(Normal3xOES)(GLfixed nx, GLfixed ny, GLfixed nz) {
250 EXTFN(Normal3x)(nx, ny, nz);
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);
258 void GL_APIENTRY EXTFN(PointParameterxOES)(GLenum pname, GLfixed param) {
259 EXTFN(PointParameterx)(pname, param);
262 void GL_APIENTRY EXTFN(PointParameterxvOES)(GLenum pname, const GLfixed* params) {
263 EXTFN(PointParameterxv)(pname, params);
266 void GL_APIENTRY EXTFN(PointSizexOES)(GLfixed size) {
267 EXTFN(PointSizex)(size);
270 void GL_APIENTRY EXTFN(PolygonOffsetxOES)(GLfixed factor, GLfixed units) {
271 EXTFN(PolygonOffsetx)(factor, units);
274 void GL_APIENTRY EXTFN(RotatexOES)(GLfixed angle, GLfixed x, GLfixed y, GLfixed z) {
275 EXTFN(Rotatex)(angle, x, y, z);
278 void GL_APIENTRY EXTFN(SampleCoveragexOES)(GLclampx value, GLboolean invert) {
279 EXTFN(SampleCoveragex)(value, invert);
282 void GL_APIENTRY EXTFN(ScalexOES)(GLfixed x, GLfixed y, GLfixed z) {
283 EXTFN(Scalex)(x, y, z);
286 void GL_APIENTRY EXTFN(TexEnvxOES)(GLenum target, GLenum pname, GLfixed param) {
287 EXTFN(TexEnvx)(target, pname, param);
290 void GL_APIENTRY EXTFN(TexEnvxvOES)(GLenum target, GLenum pname, const GLfixed* params) {
291 EXTFN(TexEnvxv)(target, pname, params);
294 void GL_APIENTRY EXTFN(TexParameterxOES)(GLenum target, GLenum pname, GLfixed param) {
295 EXTFN(TexParameterx)(target, pname, param);
298 void GL_APIENTRY EXTFN(TexParameterxvOES)(GLenum target, GLenum pname, const GLfixed* params) {
299 EXTFN(TexParameterxv)(target, pname, params);
302 void GL_APIENTRY EXTFN(TranslatexOES)(GLfixed x, GLfixed y, GLfixed z) {
303 EXTFN(Translatex)(x, y, z);
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
313 GLbitfield GL_APIENTRY EXTFN(QueryMatrixxOES)(GLfixed mantissa[16], GLint exponent[16]) {
316 GLbitfield flag = 0x0000;
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;
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);
331 flag |= (0x0001 << i);
340 #if defined(PROVIDING_OES_single_precision)
342 void GL_APIENTRY EXTFN(DepthRangefOES)(GLclampf zNear, GLclampf zFar) {
343 EXTFN(DepthRangef)(zNear, zFar);
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);
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);
356 void GL_APIENTRY EXTFN(ClipPlanefOES)(GLenum plane, const GLfloat* equation) {
357 EXTFN(ClipPlanef)(plane, equation);
360 void GL_APIENTRY EXTFN(GetClipPlanefOES)(GLenum pname, GLfloat eqn[4]) {
361 EXTFN(GetClipPlanef)(pname, eqn);
364 void GL_APIENTRY EXTFN(ClearDepthfOES)(GLclampf depth) {
365 EXTFN(ClearDepthf)(depth);
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 */
375 void GL_APIENTRY EXTFN(TexGeniOES)(GLenum coord, GLenum pname, GLint param) {
378 INTFN(SetError)(GL_INVALID_ENUM);
380 case GL_TEXTURE_GEN_STR_OES:
385 INTFN(SetError)(GL_INVALID_ENUM);
387 case GL_TEXTURE_GEN_MODE_OES:
392 INTFN(SetError)(GL_INVALID_ENUM);
394 case GL_NORMAL_MAP_OES:
395 case GL_REFLECTION_MAP_OES:
398 FNPTR(TexGeni)(coord, pname, param);
401 void GL_APIENTRY EXTFN(TexGenfOES)(GLenum coord, GLenum pname, GLfloat param) {
402 EXTFN(TexGeniOES)(coord, pname, (int)(param));
405 void GL_APIENTRY EXTFN(TexGenxOES)(GLenum coord, GLenum pname, GLfixed param) {
406 EXTFN(TexGeniOES)(coord, pname, param);
409 void GL_APIENTRY EXTFN(TexGenivOES)(GLenum coord, GLenum pname, const GLint *params) {
410 EXTFN(TexGeniOES)(coord, pname, *params);
413 void GL_APIENTRY EXTFN(TexGenfvOES)(GLenum coord, GLenum pname, const GLfloat *params) {
414 EXTFN(TexGeniOES)(coord, pname, (int)(*params));
417 void GL_APIENTRY EXTFN(TexGenxvOES)(GLenum coord, GLenum pname, const GLfixed *params) {
418 EXTFN(TexGeniOES)(coord, pname, *params);
421 void GL_APIENTRY EXTFN(GetTexGenivOES)(GLenum coord, GLenum pname, GLint *params) {
424 INTFN(SetError)(GL_INVALID_ENUM);
426 case GL_TEXTURE_GEN_STR_OES:
431 INTFN(SetError)(GL_INVALID_ENUM);
433 case GL_TEXTURE_GEN_MODE_OES:
436 FNPTR(GetTexGeniv)(coord, pname, params);
439 void GL_APIENTRY EXTFN(GetTexGenxvOES)(GLenum coord, GLenum pname, GLfixed *params) {
440 EXTFN(GetTexGenivOES)(coord, pname, params);
443 void GL_APIENTRY EXTFN(GetTexGenfvOES)(GLenum coord, GLenum pname, GLfloat *params) {
446 INTFN(SetError)(GL_INVALID_ENUM);
448 case GL_TEXTURE_GEN_STR_OES:
453 INTFN(SetError)(GL_INVALID_ENUM);
455 case GL_TEXTURE_GEN_MODE_OES:
458 FNPTR(GetTexGenfv)(coord, pname, params);
465 /* ----------------------- */
468 void GL_APIENTRY EXTFN(CurrentPaletteMatrixOES)(GLuint matrixpaletteindex) {
472 void GL_APIENTRY EXTFN(LoadPaletteFromModelViewMatrixOES)(void) {
476 void GL_APIENTRY EXTFN(MatrixIndexPointerOES)(GLint size, GLenum type,
477 GLsizei stride, const GLvoid* pointer) {
481 void GL_APIENTRY EXTFN(WeightPointerOES)(GLint size, GLenum type,
482 GLsizei stride, const GLvoid* pointer) {