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>
31 #define GL_TEXTURE0_ARB 0x84C0
32 #define GL_TEXTURE1_ARB 0x84C1
34 struct nanoState
35 {
36 GLboolean alpha_test;
37 GLboolean blend;
38 GLboolean clip_planei;
39 GLboolean color_logic_op;
40 GLboolean color_material;
41 GLboolean cull_face;
42 GLboolean depth_test;
43 GLboolean dither;
44 GLboolean fog;
45 GLboolean lighti;
46 GLboolean lighting;
47 GLboolean line_smooth;
48 GLboolean matrix_palette_oes;
49 GLboolean multisample;
50 GLboolean normalize;
51 GLboolean point_smooth;
52 GLboolean point_sprite_oes;
53 GLboolean polygon_offset_fill;
54 GLboolean rescale_normal;
55 GLboolean sample_alpha_to_coverage;
56 GLboolean sample_alpha_to_one;
57 GLboolean sample_coverage;
58 GLboolean scissor_test;
59 GLboolean stencil_test;
60 GLboolean depthmask;
61 GLclampf depth_range_near;
62 GLclampf depth_range_far;
63 GLenum depth_func;
64 GLenum cullface;
65 GLenum shademodel;
66 GLenum sfactor;
67 GLenum dfactor;
68 GLenum matrixmode;
69 };
74 {
75 GL_FALSE,
76 GL_FALSE,
77 GL_FALSE,
78 GL_FALSE,
79 GL_FALSE,
80 GL_FALSE,
81 GL_FALSE,
82 GL_TRUE,
83 GL_FALSE,
84 GL_FALSE,
85 GL_FALSE,
86 GL_FALSE,
87 GL_FALSE,
88 GL_TRUE,
89 GL_FALSE,
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_TRUE,
102 GL_LESS,
103 GL_BACK,
104 GL_SMOOTH,
105 GL_ONE,
106 GL_ZERO,
107 GL_MODELVIEW,
108 };
110 struct booleanstate
111 {
112 GLboolean value;
113 GLboolean changed;
114 };
116 struct floatstate
117 {
118 GLfloat value;
119 GLboolean changed;
120 };
122 struct uintstate
123 {
124 GLuint value;
125 GLboolean changed;
126 };
128 struct ptrstate
129 {
130 GLint size;
131 GLenum type;
132 GLsizei stride;
134 GLboolean changed;
135 GLboolean enabled;
136 };
139 struct nanotmuState
140 {
147 };
153 {
160 };
171 #if defined(__MULTITEXTURE_SUPPORT__)
173 #endif
176 #if !defined (__WINS__)
177 //#define __FORCEINLINE __forceinline
178 #define __FORCEINLINE inline
179 #else
180 #define __FORCEINLINE
181 #endif
186 struct VertexAttrib
187 {
191 #if !defined(__MULTITEXTURE_SUPPORT__)
193 #endif
201 #if defined(__MULTITEXTURE_SUPPORT__)
204 #endif
205 };
220 #if defined(__MULTITEXTURE_SUPPORT__)
225 };
226 #else
230 };
231 #endif
237 {
259 }
263 {
265 {
268 }
274 {
282 #if defined(__MULTITEXTURE_SUPPORT__)
287 #endif
289 }
294 #if defined(__MULTITEXTURE_SUPPORT__)
296 #endif
303 }
306 {
311 }
314 {
315 vertexCount+=((unsigned char*)ptrVertexAttribArray-(unsigned char*)ptrVertexAttribArrayMark)/sizeof(VertexAttrib);
317 {
319 }
321 {
323 {
332 }
335 {
338 {
343 }
344 }
347 {
354 {
358 indexCount++;
365 {
370 }
373 {
377 indexCount++;
378 }
379 }
380 else
381 {
382 //already aligned
388 {
394 }
397 {
402 indexCount++;
403 }
404 }
406 }
410 {
416 {
421 }
422 }
427 }
428 }
431 {
434 {
436 {
438 {
441 }
443 }
445 {
447 {
450 }
452 }
453 //case GL_CLIP_PLANEi
455 {
457 {
460 }
462 }
464 {
466 {
469 }
471 }
473 {
475 {
478 }
480 }
482 {
484 {
487 }
489 }
491 {
493 {
496 }
498 }
500 //case GL_LIGHTi
501 {
503 {
506 }
508 }
510 {
512 {
515 }
517 }
519 {
521 {
524 }
526 }
527 /* case GL_MATRIX_PALETTE_OES:
528 {
529 if (!nanoglState.matrix_palette_oes)
530 {
531 nanoglState.matrix_palette_oes = GL_TRUE;
532 statechanged = GL_TRUE;
533 }
534 break;
535 }*/
537 {
539 {
542 }
544 }
546 {
548 {
551 }
553 }
554 /* case GL_POINT_SPRITE_OES:
555 {
556 if (!nanoglState.point_sprite_oes)
557 {
558 nanoglState.point_sprite_oes = GL_TRUE;
559 statechanged = GL_TRUE;
560 }
561 break;
562 }*/
564 {
566 {
569 }
571 }
573 {
575 {
578 }
580 }
582 {
584 {
587 }
589 }
591 {
593 {
596 }
598 }
600 {
602 {
605 }
607 }
609 {
611 {
614 }
616 }
618 {
620 /* if (!nanoglState.stencil_test)
621 {
622 nanoglState.stencil_test = GL_TRUE;
623 statechanged = GL_TRUE;
624 }*/
626 }
628 {
630 {
635 }
637 }
640 }
643 {
646 }
647 }
650 {
653 {
655 {
657 {
660 }
662 }
664 {
666 {
669 }
671 }
672 //case GL_CLIP_PLANEi
674 {
676 {
679 }
681 }
683 {
685 {
688 }
690 }
692 {
694 {
697 }
699 }
701 {
703 {
706 }
708 }
710 {
712 {
715 }
717 }
719 //case GL_LIGHTi
720 {
722 {
725 }
727 }
729 {
731 {
734 }
736 }
738 {
740 {
743 }
745 }
746 /* case GL_MATRIX_PALETTE_OES:
747 {
748 if (nanoglState.matrix_palette_oes)
749 {
750 nanoglState.matrix_palette_oes = GL_FALSE;
751 statechanged = GL_TRUE;
752 }
753 break;
754 }*/
756 {
758 {
761 }
763 }
765 {
767 {
770 }
772 }
773 /* case GL_POINT_SPRITE_OES:
774 {
775 if (nanoglState.point_sprite_oes)
776 {
777 nanoglState.point_sprite_oes = GL_FALSE;
778 statechanged = GL_TRUE;
779 }
780 break;
781 }*/
783 {
785 {
788 }
790 }
792 {
794 {
797 }
799 }
801 {
803 {
806 }
808 }
810 {
812 {
815 }
817 }
819 {
821 {
824 }
826 }
828 {
830 {
833 }
835 }
837 {
839 /* if (nanoglState.stencil_test)
840 {
841 nanoglState.stencil_test = GL_FALSE;
842 statechanged = GL_TRUE;
843 }*/
845 }
847 {
849 {
856 }
858 }
861 }
864 {
867 }
868 }
871 {
873 }
877 {
880 {
882 }
884 }
887 {
892 }
896 {
898 }
902 {
905 }
908 {
911 }
914 {
917 }
920 {
925 }
927 void glOrtho (GLfloat left, GLfloat right, GLfloat bottom, GLfloat top, GLfloat zNear, GLfloat zFar)
928 {
931 }
934 {
936 {
938 }
942 }
945 {
947 {
949 }
953 {
955 }
959 }
962 {
964 }
966 void glTexImage2D (GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const GLvoid *pixels)
967 {
971 }
974 {
975 }
978 {
981 }
984 {
987 }
990 {
993 }
996 {
998 {
1000 }
1001 else
1002 {
1005 }
1008 }
1011 {
1013 {
1015 }
1016 else
1017 {
1019 }
1022 }
1025 {
1028 }
1031 {
1034 }
1037 {
1039 {
1041 }
1042 else
1043 {
1045 }
1048 }
1050 void glFrustum (GLfloat left, GLfloat right, GLfloat bottom, GLfloat top, GLfloat zNear, GLfloat zFar)
1051 {
1054 }
1057 {
1060 }
1064 {
1069 #if defined(__MULTITEXTURE_SUPPORT__)
1071 #else
1073 #endif
1075 }
1078 {
1083 }
1086 {
1091 }
1094 {
1095 //*((unsigned int*)(¤tVertexAttrib.red)) = *((unsigned int*)(v));
1100 }
1103 {
1108 }
1110 //-- nicknekit: xash3d funcs --
1113 {
1118 }
1121 {
1126 }
1129 {
1132 }
1134 void glCopyTexImage2D( GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border )
1135 {
1138 }
1140 void glTexImage1D(GLenum target, GLint level, GLint internalformat, GLsizei width, GLint border, GLenum format, GLenum type, const GLvoid *pixels)
1141 {
1143 }
1145 void glTexImage3D(GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const GLvoid *pixels)
1146 {
1147 glTexImage2D(GL_TEXTURE_2D, level, internalformat, width, height, border, format, type, pixels);
1148 }
1150 void glTexSubImage1D( GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum type, const GLvoid *pixels )
1151 {
1153 }
1159 GLenum format,
1161 {
1163 }
1168 {
1171 }
1175 {
1176 //for mirrors? not needed for original hl?
1177 }
1180 {
1181 //for mirrors? not needed for original hl?
1182 }
1184 //-- --//
1187 {
1190 }
1193 {
1195 {
1197 }
1202 }
1205 {
1208 }
1211 {
1213 {
1215 }
1219 }
1222 {
1225 }
1228 {
1230 {
1232 {
1234 {
1236 }
1237 else
1238 {
1243 }
1244 }
1245 }
1248 }
1251 {
1254 #if defined(__MULTITEXTURE_SUPPORT__)
1256 #else
1258 #endif
1259 }
1263 {
1265 {
1267 }
1271 }
1274 {
1276 {
1278 }
1282 }
1286 {
1289 }
1293 {
1296 {
1297 #if defined(__MULTITEXTURE_SUPPORT__)
1298 sprintf((char*)nano_extensions_string,"%s %s",glEsImpl->glGetString(name),"GL_ARB_multitexture EXT_texture_env_add");
1299 #else
1300 sprintf((char*)nano_extensions_string,"%s %s",glEsImpl->glGetString(name),"EXT_texture_env_add");
1301 #endif
1303 }
1305 }
1308 {
1311 }
1314 {
1317 }
1319 void glReadPixels (GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLvoid *pixels)
1320 {
1322 {
1323 // OpenglEs 1.1 does not support reading depth buffer without an extension
1326 }
1329 }
1332 {
1334 }
1337 {
1340 }
1342 void glTexSubImage2D (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *pixels)
1343 {
1346 }
1349 {
1352 }
1355 {
1358 }
1361 {
1363 {
1365 }
1367 {
1369 }
1370 else
1371 {
1374 }
1376 {
1378 }
1379 else
1380 {
1382 }
1384 }
1387 {
1389 }
1392 {
1393 }
1396 {
1399 }
1402 {
1405 }
1408 {
1416 }
1419 {
1422 }
1425 {
1428 }
1442 {
1443 // ensure that all primitives specified between glBegin/glEnd pairs
1444 // are rendered first, and that we have correct tmu in use..
1446 // setup correct vertex/color/texcoord pointers
1451 {
1453 }
1455 {
1457 {
1459 }
1460 else
1461 {
1463 }
1469 }
1471 {
1473 {
1475 }
1476 else
1477 {
1479 }
1485 }
1487 {
1490 {
1492 }
1493 else
1494 {
1496 }
1501 }
1504 {
1508 {
1510 }
1511 else
1512 {
1514 }
1519 }
1523 }
1526 {
1529 {
1531 }
1533 {
1535 }
1536 else
1537 {
1539 }
1541 {
1544 {
1546 }
1552 {
1554 }
1561 {
1563 }
1569 }
1570 }
1572 {
1575 {
1577 }
1579 {
1581 }
1582 else
1583 {
1585 }
1587 {
1590 {
1592 }
1598 {
1600 }
1607 {
1609 }
1615 }
1616 }
1618 {
1623 {
1625 }
1631 }
1633 {
1636 {
1638 }
1640 {
1642 }
1647 {
1649 }
1655 }
1657 {
1662 {
1664 }
1670 }
1672 {
1675 }
1679 #if defined(__MULTITEXTURE_SUPPORT__)
1684 {
1686 {
1688 }
1689 else
1690 {
1693 }
1694 }
1695 #endif
1697 /* Vladimir */
1699 {
1702 }
1704 {
1707 }
1710 {
1713 }
1717 {
1720 }
1723 {
1726 }
1729 {
1732 }
1735 // This gives: called unimplemented OpenGL ES API (Android)
1737 {
1740 }
1745 }
1749 }
1752 {
1755 }
1760 }
1763 }
1766 {
1769 }
1772 {
1775 }
1779 // End Vladimir