1 /*
2 Copyright (C) 2007-2009 Olli Hinkka
4 This program is free software; you can redistribute it and/or
5 modify it under the terms of the GNU General Public License
6 as published by the Free Software Foundation; either version 2
7 of the License, or (at your option) any later version.
9 This program is distributed in the hope that it will be useful,
10 but WITHOUT ANY WARRANTY; without even the implied warranty of
11 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
13 See the GNU General Public License for more details.
15 You should have received a copy of the GNU General Public License
16 along with this program; if not, write to the Free Software
17 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
19 */
20 /*
21 #include <e32def.h>
22 #include <e32std.h>
23 */
25 #include <stdio.h>
26 #include <stdlib.h>
27 #include <string.h>
32 #define GL_TEXTURE0_ARB 0x84C0
33 #define GL_TEXTURE1_ARB 0x84C1
35 struct nanoState
36 {
37 GLboolean alpha_test;
38 GLboolean blend;
39 GLboolean clip_planei;
40 GLboolean color_logic_op;
41 GLboolean color_material;
42 GLboolean cull_face;
43 GLboolean depth_test;
44 GLboolean dither;
45 GLboolean fog;
46 GLboolean lighti;
47 GLboolean lighting;
48 GLboolean line_smooth;
49 GLboolean matrix_palette_oes;
50 GLboolean multisample;
51 GLboolean normalize;
52 GLboolean point_smooth;
53 GLboolean point_sprite_oes;
54 GLboolean polygon_offset_fill;
55 GLboolean rescale_normal;
56 GLboolean sample_alpha_to_coverage;
57 GLboolean sample_alpha_to_one;
58 GLboolean sample_coverage;
59 GLboolean scissor_test;
60 GLboolean stencil_test;
61 GLboolean depthmask;
62 GLclampf depth_range_near;
63 GLclampf depth_range_far;
64 GLenum depth_func;
65 GLenum cullface;
66 GLenum shademodel;
67 GLenum sfactor;
68 GLenum dfactor;
69 GLenum matrixmode;
70 };
75 {
76 GL_FALSE,
77 GL_FALSE,
78 GL_FALSE,
79 GL_FALSE,
80 GL_FALSE,
81 GL_FALSE,
82 GL_FALSE,
83 GL_TRUE,
84 GL_FALSE,
85 GL_FALSE,
86 GL_FALSE,
87 GL_FALSE,
88 GL_FALSE,
89 GL_TRUE,
90 GL_FALSE,
91 GL_FALSE,
92 GL_FALSE,
93 GL_FALSE,
94 GL_FALSE,
95 GL_FALSE,
96 GL_FALSE,
97 GL_FALSE,
98 GL_FALSE,
99 GL_FALSE,
100 GL_TRUE,
103 GL_LESS,
104 GL_BACK,
105 GL_SMOOTH,
106 GL_ONE,
107 GL_ZERO,
108 GL_MODELVIEW,
109 };
111 struct booleanstate
112 {
113 GLboolean value;
114 GLboolean changed;
115 };
117 struct floatstate
118 {
119 GLfloat value;
120 GLboolean changed;
121 };
123 struct uintstate
124 {
125 GLuint value;
126 GLboolean changed;
127 };
129 struct ptrstate
130 {
131 GLint size;
132 GLenum type;
133 GLsizei stride;
135 GLboolean changed;
136 GLboolean enabled;
137 };
140 struct nanotmuState
141 {
148 };
154 {
161 };
172 #if defined(__MULTITEXTURE_SUPPORT__)
174 #endif
177 #if !defined (__WINS__)
178 //#define __FORCEINLINE __forceinline
179 #define __FORCEINLINE inline
180 #else
181 #define __FORCEINLINE
182 #endif
187 struct VertexAttrib
188 {
192 #if !defined(__MULTITEXTURE_SUPPORT__)
194 #endif
202 #if defined(__MULTITEXTURE_SUPPORT__)
205 #endif
206 };
221 #if defined(__MULTITEXTURE_SUPPORT__)
226 };
227 #else
231 };
232 #endif
238 {
260 }
264 {
266 {
269 }
275 {
283 #if defined(__MULTITEXTURE_SUPPORT__)
288 #endif
290 }
295 #if defined(__MULTITEXTURE_SUPPORT__)
297 #endif
304 }
307 {
312 }
315 {
316 vertexCount+=((unsigned char*)ptrVertexAttribArray-(unsigned char*)ptrVertexAttribArrayMark)/sizeof(VertexAttrib);
318 {
320 }
322 {
324 {
333 }
336 {
339 {
344 }
345 }
348 {
355 {
359 indexCount++;
366 {
371 }
374 {
378 indexCount++;
379 }
380 }
381 else
382 {
383 //already aligned
389 {
395 }
398 {
403 indexCount++;
404 }
405 }
407 }
411 {
417 {
422 }
423 }
428 }
429 }
432 {
435 {
437 {
439 {
442 }
444 }
446 {
448 {
451 }
453 }
454 //case GL_CLIP_PLANEi
456 {
458 {
461 }
463 }
465 {
467 {
470 }
472 }
474 {
476 {
479 }
481 }
483 {
485 {
488 }
490 }
492 {
494 {
497 }
499 }
501 //case GL_LIGHTi
502 {
504 {
507 }
509 }
511 {
513 {
516 }
518 }
520 {
522 {
525 }
527 }
528 /* case GL_MATRIX_PALETTE_OES:
529 {
530 if (!nanoglState.matrix_palette_oes)
531 {
532 nanoglState.matrix_palette_oes = GL_TRUE;
533 statechanged = GL_TRUE;
534 }
535 break;
536 }*/
538 {
540 {
543 }
545 }
547 {
549 {
552 }
554 }
555 /* case GL_POINT_SPRITE_OES:
556 {
557 if (!nanoglState.point_sprite_oes)
558 {
559 nanoglState.point_sprite_oes = GL_TRUE;
560 statechanged = GL_TRUE;
561 }
562 break;
563 }*/
565 {
567 {
570 }
572 }
574 {
576 {
579 }
581 }
583 {
585 {
588 }
590 }
592 {
594 {
597 }
599 }
601 {
603 {
606 }
608 }
610 {
612 {
615 }
617 }
619 {
621 /* if (!nanoglState.stencil_test)
622 {
623 nanoglState.stencil_test = GL_TRUE;
624 statechanged = GL_TRUE;
625 }*/
627 }
629 {
631 {
636 }
638 }
641 }
644 {
647 }
648 }
651 {
654 {
656 {
658 {
661 }
663 }
665 {
667 {
670 }
672 }
673 //case GL_CLIP_PLANEi
675 {
677 {
680 }
682 }
684 {
686 {
689 }
691 }
693 {
695 {
698 }
700 }
702 {
704 {
707 }
709 }
711 {
713 {
716 }
718 }
720 //case GL_LIGHTi
721 {
723 {
726 }
728 }
730 {
732 {
735 }
737 }
739 {
741 {
744 }
746 }
747 /* case GL_MATRIX_PALETTE_OES:
748 {
749 if (nanoglState.matrix_palette_oes)
750 {
751 nanoglState.matrix_palette_oes = GL_FALSE;
752 statechanged = GL_TRUE;
753 }
754 break;
755 }*/
757 {
759 {
762 }
764 }
766 {
768 {
771 }
773 }
774 /* case GL_POINT_SPRITE_OES:
775 {
776 if (nanoglState.point_sprite_oes)
777 {
778 nanoglState.point_sprite_oes = GL_FALSE;
779 statechanged = GL_TRUE;
780 }
781 break;
782 }*/
784 {
786 {
789 }
791 }
793 {
795 {
798 }
800 }
802 {
804 {
807 }
809 }
811 {
813 {
816 }
818 }
820 {
822 {
825 }
827 }
829 {
831 {
834 }
836 }
838 {
840 /* if (nanoglState.stencil_test)
841 {
842 nanoglState.stencil_test = GL_FALSE;
843 statechanged = GL_TRUE;
844 }*/
846 }
848 {
850 {
857 }
859 }
862 }
865 {
868 }
869 }
872 {
874 }
878 {
881 {
883 }
885 }
888 {
893 }
897 {
899 }
903 {
906 }
909 {
912 }
915 {
918 }
921 {
926 }
928 void glOrtho (GLfloat left, GLfloat right, GLfloat bottom, GLfloat top, GLfloat zNear, GLfloat zFar)
929 {
932 }
935 {
937 {
939 }
943 }
946 {
948 {
950 }
954 {
956 }
960 }
963 {
965 }
967 void glTexImage2D (GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const GLvoid *pixels)
968 {
972 }
975 {
976 }
979 {
982 }
985 {
988 }
991 {
994 }
997 {
999 {
1001 }
1002 else
1003 {
1006 }
1009 }
1012 {
1014 {
1016 }
1017 else
1018 {
1020 }
1023 }
1026 {
1029 }
1032 {
1035 }
1038 {
1040 {
1042 }
1043 else
1044 {
1046 }
1049 }
1051 void glFrustum (GLfloat left, GLfloat right, GLfloat bottom, GLfloat top, GLfloat zNear, GLfloat zFar)
1052 {
1055 }
1058 {
1061 }
1065 {
1070 #if defined(__MULTITEXTURE_SUPPORT__)
1072 #else
1074 #endif
1076 }
1079 {
1084 }
1087 {
1092 }
1095 {
1096 //*((unsigned int*)(¤tVertexAttrib.red)) = *((unsigned int*)(v));
1101 }
1104 {
1109 }
1111 //-- nicknekit: xash3d funcs --
1114 {
1119 }
1122 {
1127 }
1130 {
1133 }
1135 void glCopyTexImage2D( GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border )
1136 {
1139 }
1141 void glTexImage1D(GLenum target, GLint level, GLint internalformat, GLsizei width, GLint border, GLenum format, GLenum type, const GLvoid *pixels)
1142 {
1144 }
1146 void glTexImage3D(GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const GLvoid *pixels)
1147 {
1148 glTexImage2D(GL_TEXTURE_2D, level, internalformat, width, height, border, format, type, pixels);
1149 }
1151 void glTexSubImage1D( GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum type, const GLvoid *pixels )
1152 {
1154 }
1160 GLenum format,
1162 {
1164 }
1169 {
1172 }
1176 {
1177 //for mirrors? not needed for original hl?
1178 }
1181 {
1182 //for mirrors? not needed for original hl?
1183 }
1185 //-- --//
1188 {
1191 }
1194 {
1196 {
1198 }
1203 }
1206 {
1209 }
1212 {
1214 {
1216 }
1220 }
1223 {
1226 }
1229 {
1231 {
1233 {
1235 {
1237 }
1238 else
1239 {
1244 }
1245 }
1246 }
1249 }
1252 {
1255 #if defined(__MULTITEXTURE_SUPPORT__)
1257 #else
1259 #endif
1260 }
1264 {
1266 {
1268 }
1272 }
1275 {
1277 {
1279 }
1283 }
1287 {
1290 }
1294 {
1297 {
1298 #if defined(__MULTITEXTURE_SUPPORT__)
1299 sprintf((char*)nano_extensions_string,"%s %s",glEsImpl->glGetString(name),"GL_ARB_multitexture EXT_texture_env_add");
1300 #else
1301 sprintf((char*)nano_extensions_string,"%s %s",glEsImpl->glGetString(name),"EXT_texture_env_add");
1302 #endif
1304 }
1306 }
1309 {
1312 }
1315 {
1318 }
1320 void glReadPixels (GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLvoid *pixels)
1321 {
1323 {
1324 // OpenglEs 1.1 does not support reading depth buffer without an extension
1327 }
1330 }
1333 {
1335 }
1338 {
1341 }
1343 void glTexSubImage2D (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *pixels)
1344 {
1347 }
1350 {
1353 }
1356 {
1359 }
1362 {
1364 {
1366 }
1368 {
1370 }
1371 else
1372 {
1375 }
1377 {
1379 }
1380 else
1381 {
1383 }
1385 }
1388 {
1390 }
1393 {
1394 }
1397 {
1400 }
1403 {
1406 }
1409 {
1417 }
1420 {
1423 }
1426 {
1429 }
1443 {
1444 // ensure that all primitives specified between glBegin/glEnd pairs
1445 // are rendered first, and that we have correct tmu in use..
1447 // setup correct vertex/color/texcoord pointers
1452 {
1454 }
1456 {
1458 {
1460 }
1461 else
1462 {
1464 }
1470 }
1472 {
1474 {
1476 }
1477 else
1478 {
1480 }
1486 }
1488 {
1491 {
1493 }
1494 else
1495 {
1497 }
1502 }
1505 {
1509 {
1511 }
1512 else
1513 {
1515 }
1520 }
1524 }
1527 {
1530 {
1532 }
1534 {
1536 }
1537 else
1538 {
1540 }
1542 {
1545 {
1547 }
1553 {
1555 }
1562 {
1564 }
1570 }
1571 }
1573 {
1576 {
1578 }
1580 {
1582 }
1583 else
1584 {
1586 }
1588 {
1591 {
1593 }
1599 {
1601 }
1608 {
1610 }
1616 }
1617 }
1619 {
1624 {
1626 }
1632 }
1634 {
1637 {
1639 }
1641 {
1643 }
1648 {
1650 }
1656 }
1658 {
1663 {
1665 }
1671 }
1673 {
1676 }
1680 #if defined(__MULTITEXTURE_SUPPORT__)
1685 {
1687 {
1689 }
1690 else
1691 {
1694 }
1695 }
1696 #endif
1698 /* Vladimir */
1700 {
1703 }
1705 {
1708 }
1711 {
1714 }
1718 {
1721 }
1724 {
1727 }
1730 {
1733 }
1736 // This gives: called unimplemented OpenGL ES API (Android)
1738 {
1741 }
1746 }
1750 }
1753 {
1756 }
1761 }
1764 }
1767 {
1770 }
1773 {
1776 }
1780 // End Vladimir