Changeset 409 for branches/thune/thread_safe/gl/draw_list.c
- Timestamp:
- 06/11/07 04:15:55 (18 months ago)
- Files:
-
- 1 modified
-
branches/thune/thread_safe/gl/draw_list.c (modified) (22 diffs)
Legend:
- Unmodified
- Added
- Removed
-
branches/thune/thread_safe/gl/draw_list.c
r405 r409 30 30 31 31 32 enum EnableMask 33 { 34 EN_ALPHA_TEST = 0x0001, 35 EN_BLEND = 0x0002, 36 EN_CULL_FACE = 0x0004, 37 EN_DEPTH_TEST = 0x0008, 38 EN_LIGHTING = 0x0010, 39 EN_LINE_SMOOTH = 0x0020, 40 EN_POINT_SMOOTH = 0x0040, 41 EN_POINT_SPRITE = 0x0080, 42 EN_SCISSOR_TEST = 0x0100, 43 EN_STENCIL_TEST = 0x0200, 44 EN_TEXTURE_2D = 0x0400, 45 EN_VERTEX_PROGRAM_POINT_SIZE = 0x0800 46 }; 47 48 #define EN_DEFAULT 0 49 50 32 51 enum CameraContext 33 52 { … … 44 63 45 64 65 #if 0 46 66 void gr_disableTexture() 47 67 { … … 61 81 #endif 62 82 } 83 #endif 63 84 64 85 65 86 void gr_clearState() 66 87 { 67 _state.stateId = GRS_UNSET; 68 _state.fontN = 0; 69 _state.penX = 0; 70 _state.penY = 0; 71 _state.vertVals = 0; 72 _state.normVals = 0; 73 _state.uvVals = 0; 74 _state.colorVals = 0; 88 _state.stateId = GRS_UNSET; 89 _state.enableMask = EN_DEFAULT; 90 _state.fontN = 0; 91 _state.penX = 0; 92 _state.penY = 0; 93 _state.vertVals = 0; 94 _state.normVals = 0; 95 _state.uvVals = 0; 96 _state.colorVals = 0; 75 97 _state.attr[0].vals = 0; 76 98 _state.attr[1].vals = 0; … … 79 101 80 102 103 static void gr_enable( const char* ); 104 static void gr_disable( const char* ); 105 106 81 107 void gr_setState( int sid ) 82 108 { … … 88 114 case GRS_SOLID: 89 115 glDepthMask( GL_FALSE ); 116 gr_disable( "lbct" ); 117 /* 90 118 glDisable( GL_LIGHTING ); 91 119 glDisable( GL_BLEND ); 92 120 glDisable( GL_CULL_FACE ); 93 94 121 gr_disableTexture(); 122 */ 95 123 break; 96 124 97 125 case GRS_MODEL: 98 126 glDepthMask( GL_TRUE ); 99 glShadeModel( GL_SMOOTH );100 101 //glColorMaterial( GL_FRONT, GL_DIFFUSE);102 //glEnable( GL_COLOR_MATERIAL);103 127 //glShadeModel( GL_SMOOTH ); 128 129 gr_enable( "dlc" ); 130 gr_disable( "b" ); 131 /* 104 132 glEnable( GL_DEPTH_TEST ); 105 133 glEnable( GL_LIGHTING ); … … 107 135 108 136 glDisable( GL_BLEND ); 137 */ 109 138 110 139 //gr_disableTexture(); 111 gr_enableTexture0();140 //gr_enableTexture0(); 112 141 break; 113 142 … … 115 144 glDepthMask( GL_FALSE ); 116 145 146 gr_enable( "bt" ); 147 gr_disable( "adl" ); 148 /* 117 149 glDisable( GL_ALPHA_TEST ); 118 150 glDisable( GL_DEPTH_TEST ); 119 glDisable( GL_FOG );120 151 glDisable( GL_LIGHTING ); 121 glDisable( GL_COLOR_MATERIAL );122 152 123 153 glEnable( GL_BLEND ); 154 gr_enableTexture0(); 155 */ 124 156 glBlendFunc( GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA ); 125 157 126 gr_enableTexture0();127 158 128 159 //glTexEnvi( GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE ); … … 130 161 131 162 case GRS_PARTICLE: 132 if( _state.stateId != GRS_TEXT ) 133 { 134 glDepthMask( GL_FALSE ); 135 136 //glEnable( GL_DEPTH_TEST ); 137 138 glDisable( GL_ALPHA_TEST ); 139 glDisable( GL_DEPTH_TEST ); 140 glDisable( GL_FOG ); 141 glDisable( GL_LIGHTING ); 142 glDisable( GL_COLOR_MATERIAL ); 143 144 glEnable( GL_BLEND ); 145 } 146 glEnable( GL_VERTEX_PROGRAM_POINT_SIZE ); 163 glDepthMask( GL_FALSE ); 164 165 gr_enable( "bv" ); 166 gr_disable( "adl" ); 167 /* 168 glDisable( GL_ALPHA_TEST ); 169 glDisable( GL_DEPTH_TEST ); 170 glDisable( GL_LIGHTING ); 171 172 glEnable( GL_BLEND ); 173 */ 174 175 //glEnable( GL_VERTEX_PROGRAM_POINT_SIZE ); 147 176 //gr_disableTexture(); 148 177 … … 171 200 172 201 glDisable( GL_POLYGON_STIPPLE ); 173 174 glColorMaterial( GL_FRONT, GL_DIFFUSE );175 glEnable( GL_COLOR_MATERIAL );176 202 177 203 glEnable( GL_DEPTH_TEST ); … … 588 614 589 615 glDepthMask( GL_TRUE ); 616 gr_enable( "d" ); 617 gr_disable( "blt" ); 618 /* 590 619 glEnable( GL_DEPTH_TEST ); 591 620 glDisable( GL_LIGHTING ); 592 621 glDisable( GL_BLEND ); 593 622 gr_disableTexture(); 623 */ 594 624 595 625 … … 598 628 599 629 #ifdef SHADOW_BACK_FACES 600 g lEnable( GL_CULL_FACE );630 gr_enable( "c" ); //glEnable( GL_CULL_FACE ); 601 631 glCullFace( GL_FRONT ); 602 632 #else … … 820 850 821 851 852 #ifdef DEBUG 853 #define PRINT_STATE(txt,f,e) \ 854 s = glIsEnabled( e ); \ 855 sf = s ? f : 0; \ 856 mf = _state.enableMask & f; \ 857 if( sf ^ mf ) \ 858 printf( "%d/%d %s\n", s, mf ? 1 : 0, txt ); 859 860 void gr_printEnabled() 861 { 862 GLboolean s; 863 int mf; 864 int sf; 865 866 PRINT_STATE( "GL_ALPHA_TEST/a", EN_ALPHA_TEST, GL_ALPHA_TEST ) 867 PRINT_STATE( "GL_BLEND/b", EN_BLEND, GL_BLEND ) 868 PRINT_STATE( "GL_CULL_FACE/c", EN_CULL_FACE, GL_CULL_FACE ) 869 PRINT_STATE( "GL_DEPTH_TEST/d", EN_DEPTH_TEST, GL_DEPTH_TEST ) 870 PRINT_STATE( "GL_LIGHTING/l", EN_LIGHTING, GL_LIGHTING ) 871 PRINT_STATE( "GL_LINE_SMOOTH/n", EN_LINE_SMOOTH, GL_LINE_SMOOTH ) 872 PRINT_STATE( "GL_POINT_SMOOTH/o", EN_POINT_SMOOTH, GL_POINT_SMOOTH ) 873 PRINT_STATE( "GL_POINT_SPRITE/p", EN_POINT_SPRITE, GL_POINT_SPRITE ) 874 PRINT_STATE( "GL_STENCIL_TEST/s", EN_STENCIL_TEST, GL_STENCIL_TEST ) 875 PRINT_STATE( "GL_TEXTURE_2D/t", EN_TEXTURE_2D, GL_TEXTURE_2D ) 876 PRINT_STATE( "GL_VERTEX_PROGRAM_POINT_SIZE/v", 877 EN_VERTEX_PROGRAM_POINT_SIZE, GL_VERTEX_PROGRAM_POINT_SIZE ) 878 PRINT_STATE( "GL_SCISSOR_TEST/x", EN_SCISSOR_TEST, GL_SCISSOR_TEST ) 879 } 880 #endif 881 882 883 #define ENABLE(f,e) \ 884 if( ! (_state.enableMask & f) ) { \ 885 _state.enableMask |= f; \ 886 glEnable( e ); } 887 888 #define DISABLE(f,e) \ 889 if( _state.enableMask & f ) { \ 890 _state.enableMask &= ~f; \ 891 glDisable( e ); } 892 893 static void gr_enable( const char* cp ) 894 { 895 //printf( "KR %s\n", cp ); 896 while( *cp != '\0' ) 897 { 898 switch( *cp ) 899 { 900 case 'a': 901 ENABLE( EN_ALPHA_TEST, GL_ALPHA_TEST ) 902 break; 903 case 'b': 904 ENABLE( EN_BLEND, GL_BLEND ) 905 break; 906 case 'c': 907 ENABLE( EN_CULL_FACE, GL_CULL_FACE ) 908 break; 909 case 'd': 910 ENABLE( EN_DEPTH_TEST, GL_DEPTH_TEST ) 911 break; 912 case 'l': 913 ENABLE( EN_LIGHTING, GL_LIGHTING ) 914 break; 915 case 'n': 916 ENABLE( EN_LINE_SMOOTH, GL_LINE_SMOOTH ) 917 break; 918 case 'o': 919 ENABLE( EN_POINT_SMOOTH, GL_POINT_SMOOTH ) 920 break; 921 case 'p': 922 ENABLE( EN_POINT_SPRITE, GL_POINT_SPRITE ) 923 break; 924 case 's': 925 ENABLE( EN_STENCIL_TEST, GL_STENCIL_TEST ) 926 break; 927 case 't': 928 ENABLE( EN_TEXTURE_2D, GL_TEXTURE_2D ) 929 break; 930 case 'v': 931 ENABLE( EN_VERTEX_PROGRAM_POINT_SIZE, 932 GL_VERTEX_PROGRAM_POINT_SIZE ) 933 break; 934 case 'x': 935 ENABLE( EN_SCISSOR_TEST, GL_SCISSOR_TEST ) 936 break; 937 #ifdef DEBUG 938 case '?': 939 gr_printEnabled(); 940 break; 941 #endif 942 } 943 ++cp; 944 } 945 } 946 947 948 static void gr_disable( const char* cp ) 949 { 950 while( *cp != '\0' ) 951 { 952 switch( *cp ) 953 { 954 case 'a': 955 DISABLE( EN_ALPHA_TEST, GL_ALPHA_TEST ) 956 break; 957 case 'b': 958 DISABLE( EN_BLEND, GL_BLEND ) 959 break; 960 case 'c': 961 DISABLE( EN_CULL_FACE, GL_CULL_FACE ) 962 break; 963 case 'd': 964 DISABLE( EN_DEPTH_TEST, GL_DEPTH_TEST ) 965 break; 966 case 'l': 967 DISABLE( EN_LIGHTING, GL_LIGHTING ) 968 break; 969 case 'n': 970 DISABLE( EN_LINE_SMOOTH, GL_LINE_SMOOTH ) 971 break; 972 case 'o': 973 DISABLE( EN_POINT_SMOOTH, GL_POINT_SMOOTH ) 974 break; 975 case 'p': 976 DISABLE( EN_POINT_SPRITE, GL_POINT_SPRITE ) 977 break; 978 case 's': 979 DISABLE( EN_STENCIL_TEST, GL_STENCIL_TEST ) 980 break; 981 case 't': 982 DISABLE( EN_TEXTURE_2D, GL_TEXTURE_2D ) 983 break; 984 case 'v': 985 DISABLE( EN_VERTEX_PROGRAM_POINT_SIZE, 986 GL_VERTEX_PROGRAM_POINT_SIZE ) 987 break; 988 case 'x': 989 DISABLE( EN_SCISSOR_TEST, GL_SCISSOR_TEST ) 990 break; 991 #ifdef DEBUG 992 case '?': 993 gr_printEnabled(); 994 break; 995 #endif 996 } 997 ++cp; 998 } 999 } 1000 1001 822 1002 #define VAL_WORD_OR_PC \ 823 1003 if( ur_is(pc, UT_WORD) ) { \ … … 849 1029 case DOP_CLEAR: 850 1030 glDepthMask( GL_TRUE ); 1031 glColorMask( GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE ); 851 1032 glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT ); 1033 break; 1034 1035 case DOP_ENABLE: 1036 if( ur_selIsAtom(pc) ) 1037 { 1038 gr_enable( ur_atomCStr( ur_sel(pc), 0 ) ); 1039 } 1040 break; 1041 1042 case DOP_DISABLE: 1043 if( ur_selIsAtom(pc) ) 1044 { 1045 gr_disable( ur_atomCStr( ur_sel(pc), 0 ) ); 1046 } 852 1047 break; 853 1048 … … 887 1082 { 888 1083 case UR_ATOM_OFF: 1084 gr_disable( "pv" ); 1085 /* 889 1086 glDisable( GL_VERTEX_PROGRAM_POINT_SIZE ); 890 1087 glDisable( GL_POINT_SPRITE ); 1088 */ 891 1089 break; 892 1090 … … 911 1109 //glBlendFunc( GL_ONE, GL_ONE_MINUS_SRC_ALPHA ); 912 1110 glBlendFunc( GL_SRC_ALPHA, GL_ONE ); 913 glEnable( GL_POINT_SPRITE ); 1111 gr_enable( "p" ); 1112 //glEnable( GL_POINT_SPRITE ); 914 1113 break; 915 1114 … … 941 1140 } 942 1141 break; 943 1142 #if 0 944 1143 case DOP_LIGHTING: // logic! on/off 945 1144 ++pc; … … 952 1151 } 953 1152 break; 954 1153 #endif 955 1154 case DOP_COLOR: 956 1155 ++pc; … … 984 1183 case DOP_COLORS: 985 1184 ++pc; 986 if( ur_is(pc, UT_BLOCK) ) 987 _state.colorVals = ur_block(pc)->ptr.cells; 1185 VAL_WORD_OR_PC 1186 if( ur_is(val, UT_BLOCK) ) 1187 _state.colorVals = ur_block(val)->ptr.cells; 988 1188 break; 989 1189 990 1190 case DOP_VERTS: 991 1191 ++pc; 992 if( ur_is(pc, UT_VECTOR) ) 993 _state.vertVals = ur_bin(pc)->ptr.f; 1192 VAL_WORD_OR_PC 1193 if( ur_is(val, UT_VECTOR) ) 1194 _state.vertVals = ur_bin(val)->ptr.f; 994 1195 break; 995 1196 996 1197 case DOP_NORMALS: 997 1198 ++pc; 998 if( ur_is(pc, UT_VECTOR) ) 999 _state.normVals = ur_bin(pc)->ptr.f; 1199 VAL_WORD_OR_PC 1200 if( ur_is(val, UT_VECTOR) ) 1201 _state.normVals = ur_bin(val)->ptr.f; 1000 1202 break; 1001 1203 1002 1204 case DOP_UVS: 1003 1205 ++pc; 1004 if( ur_is(pc, UT_VECTOR) ) 1005 _state.uvVals = ur_bin(pc)->ptr.f; 1206 VAL_WORD_OR_PC 1207 if( ur_is(val, UT_VECTOR) ) 1208 _state.uvVals = ur_bin(val)->ptr.f; 1006 1209 break; 1007 1210 … … 1138 1341 1139 1342 case DOP_SAMPLES_QUERY: // dlist-block process-block 1343 { 1344 int hidden = ur_sel(pc); // UR_ATOM_HIDDEN 1345 1140 1346 ++pc; 1141 1347 if( ! ur_is(pc, UT_BLOCK) ) … … 1144 1350 _state.samplesQueryId = 0; 1145 1351 1146 glEnable( GL_CULL_FACE ); 1147 glColorMask( GL_FALSE, GL_FALSE, GL_FALSE, GL_FALSE ); 1148 glDepthMask( GL_FALSE ); 1352 if( hidden ) 1353 { 1354 gr_enable( "c" ); //glEnable( GL_CULL_FACE ); 1355 1356 glColorMask( GL_FALSE, GL_FALSE, GL_FALSE, GL_FALSE ); 1357 glDepthMask( GL_FALSE ); 1358 } 1149 1359 1150 1360 // Run draw-list containing samples-begin ops. … … 1155 1365 glEndQuery( GL_SAMPLES_PASSED ); 1156 1366 1157 glColorMask( GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE ); 1158 glDepthMask( GL_TRUE ); 1367 if( hidden ) 1368 { 1369 glColorMask( GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE ); 1370 glDepthMask( GL_TRUE ); 1371 } 1159 1372 1160 1373 ++pc; … … 1186 1399 1187 1400 _state.samplesQueryId = 0; 1401 } 1188 1402 break; 1189 1403
