Changeset 331 for trunk/thune/gl
- Timestamp:
- 01/02/07 03:35:04 (2 years ago)
- Location:
- trunk/thune/gl
- Files:
-
- 8 modified
Legend:
- Unmodified
- Added
- Removed
-
trunk/thune/gl/draw_list.c
r330 r331 31 31 #include FT_FREETYPE_H 32 32 #include "TexFont.h" 33 34 35 #define ur_glpool(cell) (cell)->coord.elem[2]36 #define ur_gldl(cell) (cell)->series.end37 33 38 34 … … 643 639 static int _runDrawList( UThread* ur_thread, UCell* val ) 644 640 { 645 UBlock* blk = ur_blockPtr( val-> code.n );641 UBlock* blk = ur_blockPtr( val->series.n ); 646 642 UCell* pc = blk->ptr.cells; 647 643 UCell* end = pc + blk->used; … … 660 656 ++pc; 661 657 VAL_WORD_OR_PC 662 if( ur_is(val, UT_ CODE) )663 { 664 if( ur_ gldl(val) )658 if( ur_is(val, UT_DRAWLIST) ) 659 { 660 if( ur_dlGL(val) ) 665 661 { 666 //if( ur_ gldl(val) != 1 )667 // printf( "KR list %d\n", ur_ gldl(val) );668 glCallList( ur_ gldl(val) );662 //if( ur_dlGL(val) != 1 ) 663 // printf( "KR list %d\n", ur_dlGL(val) ); 664 glCallList( ur_dlGL(val) ); 669 665 } 670 666 else if( ! _runDrawList( ur_thread, val ) ) … … 933 929 934 930 935 extern ULanguage dl_language;936 937 938 931 /* 939 ( block -- code)932 (draw-list! block -- dlist) 940 933 */ 941 UR_CALL( dl_compile ) 942 { 943 UR_CALL_UNUSED_TH 934 UR_CALL_PUB( make_dlist ) 935 { 936 UCell* ops; 937 UCell* res = ur_s_prev(tos); 938 939 ops = ur_resolveArgPath( UT_WORD, UR_ATOM_DRAW_LIST_OPCODES, UT_NONE ); 940 if( ! ops ) 941 { 942 ur_throwErr( UR_ERR_INTERNAL, "draw-list-opcodes not found" ); 943 return; 944 } 944 945 945 946 if( ur_is(tos, UT_BLOCK) ) 946 947 { 947 ur_initType(tos, UT_CODE); 948 tos->code.langId = dl_language.langId; 949 // tos->code.n is already set. 950 ur_gldl(tos) = 0; 948 ur_infuse( ur_thread, ur_block(tos), ops ); 949 950 ur_initType(res, UT_DRAWLIST); 951 ur_setSeries(res, tos->series.n, tos->series.it ); 952 ur_dlGL(res) = 0; 953 //ur_dlPool(res) = 0; // Cleared by ur_initType. 951 954 } 952 955 else if( ur_is(tos, UT_PAREN) ) … … 954 957 int pool; 955 958 956 ur_initType(tos, UT_CODE); 957 tos->code.langId = dl_language.langId; 958 // tos->code.n is already set. 959 960 ur_gldl(tos) = gllist_alloc( &pool ); 961 ur_glpool(tos) = pool; 962 963 if( ! ur_gldl(tos) ) 964 { 965 ur_throwErr( UR_ERR_INTERNAL, "glGenLists() failed" ); 966 return; 967 } 959 ur_infuse( ur_thread, ur_block(tos), ops ); 960 961 ur_initType(res, UT_DRAWLIST); 962 ur_setSeries(res, tos->series.n, tos->series.it ); 963 ur_dlGL(res) = gllist_alloc( &pool ); 964 ur_dlPool(res) = pool; 968 965 969 966 gr_clearState(); 970 967 971 //printf( "KR compile %d\n", ur_ gldl(tos) );972 973 glNewList( ur_ gldl(tos), GL_COMPILE );968 //printf( "KR compile %d\n", ur_dlGL(tos) ); 969 970 glNewList( ur_dlGL(res), GL_COMPILE ); 974 971 975 972 if( ! _runDrawList( ur_thread, tos ) ) … … 980 977 glEndList(); 981 978 } 979 else 980 { 981 ur_throwErr( UR_ERR_DATATYPE, 982 "draw-list! make expected block!/paren!" ); 983 return; 984 } 985 986 UR_S_DROP; 982 987 } 983 988 984 989 985 990 /* 986 ( code-- )991 (dlist -- ) 987 992 */ 988 UR_CALL( dl_run ) 989 { 990 gr_clearState(); 991 992 if( ur_gldl(tos) ) 993 glCallList( ur_gldl(tos) ); 994 else 995 _runDrawList( ur_thread, tos ); 996 993 UR_CALL_PUB( uc_draw ) 994 { 995 if( ur_is(tos, UT_DRAWLIST) ) 996 { 997 gr_clearState(); 998 999 if( ur_dlGL(tos) ) 1000 glCallList( ur_dlGL(tos) ); 1001 else 1002 _runDrawList( ur_thread, tos ); 1003 } 997 1004 UR_S_DROP; 998 1005 } 999 1006 1000 1007 1001 static void dl_codeGC( UCollector* gc, UCell* cell )1002 {1003 //printf( "KR dl_codeGC\n" );1004 ur_gcMarkBlock( gc, cell->code.n );1005 1006 if( ur_gldl(cell) )1007 gllist_gcMark( ur_glpool(cell), ur_gldl(cell) );1008 }1009 1010 1011 ULanguage dl_language =1012 {1013 0, 0,1014 dl_compile,1015 dl_run,1016 dl_codeGC1017 };1018 1019 1020 1008 /*EOF*/ -
trunk/thune/gl/gx.c
r330 r331 1322 1322 1323 1323 1324 extern void uc_load_wav( UThread*, UCell* ); 1325 extern void uc_load_png( UThread*, UCell* ); 1326 extern void uc_save_png( UThread*, UCell* ); 1324 UR_EXTERN_CALL( uc_draw ); 1325 UR_EXTERN_CALL( uc_load_wav ); 1326 UR_EXTERN_CALL( uc_load_png ); 1327 UR_EXTERN_CALL( uc_save_png ); 1327 1328 1328 1329 static UCallDef _gxCalls[] = 1329 1330 { 1331 { uc_draw, "draw" }, 1330 1332 { uc_play, "play" }, 1331 1333 { uc_stop, "stop" }, … … 1366 1368 #endif 1367 1369 1370 FIXED_ATOM( "draw-list-opcodes", 17, UR_ATOM_DRAW_LIST_OPCODES ) 1368 1371 FIXED_ATOM( "width", 5, UR_ATOM_WIDTH ) 1369 1372 FIXED_ATOM( "height", 6, UR_ATOM_HEIGHT ) … … 1418 1421 1419 1422 1420 extern ULanguage dl_language;1421 1422 1423 int gx_startup( UrlanEnv* env ) 1423 1424 { … … 1440 1441 1441 1442 ur_makeCalls( env, _gxCalls, sizeof(_gxCalls) / sizeof(UCallDef) ); 1442 1443 ur_registerLanguage( env, "draw-list", &dl_language );1444 1443 1445 1444 { -
trunk/thune/gl/gx.h
r330 r331 30 30 31 31 32 #define UT_RASTER UT_BI_COUNT 33 #define UT_TEXTURE (UT_BI_COUNT+1) 34 #define UT_FONT (UT_BI_COUNT+2) 35 #define UT_SHADER (UT_BI_COUNT+3) 36 #define UT_FBO (UT_BI_COUNT+4) 32 #define UT_DRAWLIST UT_BI_COUNT 33 #define UT_RASTER (UT_BI_COUNT+1) 34 #define UT_TEXTURE (UT_BI_COUNT+2) 35 #define UT_FONT (UT_BI_COUNT+3) 36 #define UT_SHADER (UT_BI_COUNT+4) 37 #define UT_FBO (UT_BI_COUNT+5) 38 39 40 //---------------------------------------------------------------------------- 41 42 43 typedef struct 44 { 45 uint8_t type; 46 uint8_t flags; 47 uint16_t glListPool; 48 UIndex blkN; 49 UIndex _pad; 50 GLuint glListId; 51 } 52 UCellDrawList; 37 53 38 54 … … 180 196 UIndex ur_makeRaster( UCell*, int format, int w, int h, UBinary** ); 181 197 198 #define ur_dlGL(c) ((UCellDrawList*) (c))->glListId 199 #define ur_dlPool(c) ((UCellDrawList*) (c))->glListPool 200 #define ur_dlBlkN(c) ((UCellDrawList*) (c))->blkN 201 182 202 #define ur_rastHead(c) ((RasterHead*) ur_bin(c)->ptr.v) 183 203 #define ur_rastElem(bin) ((bin)->ptr.b + sizeof(RasterHead)) -
trunk/thune/gl/gx.t
r330 r331 141 141 142 142 143 [src block!]144 143 [ 145 code! 146 src draw-list-opcodes infuse 147 'draw-list make 144 draw-list! swap make 148 145 ] 149 func :draw-list ; (src -- dl)146 proc :draw-list ; (src -- dl) 150 147 151 148 152 [src block!]153 149 [ 154 code! 155 src draw-list-opcodes infuse paren! as 156 'draw-list make 150 draw-list! swap paren! as make 157 151 ] 158 func :draw-list.compile ; (src -- dl)152 proc :draw-list.compile ; (src -- dl) 159 153 160 154 -
trunk/thune/gl/gx_atoms.h
r330 r331 1 1 // This file is automatically generated - do not edit. 2 2 3 #define UR_ATOM_WIDTH 303 4 #define UR_ATOM_HEIGHT 304 5 #define UR_ATOM_AREA 305 6 #define UR_ATOM_RECT 306 7 #define UR_ATOM_RASTER 307 8 #define UR_ATOM_TEXTURE 308 9 #define UR_ATOM_ELEM 309 3 #define UR_ATOM_DRAW_LIST_OPCODES 303 4 #define UR_ATOM_WIDTH 304 5 #define UR_ATOM_HEIGHT 305 6 #define UR_ATOM_AREA 306 7 #define UR_ATOM_RECT 307 8 #define UR_ATOM_RASTER 308 9 #define UR_ATOM_TEXTURE 309 10 #define UR_ATOM_ELEM 310 10 11 #define UR_ATOM_CLOSE 171 11 #define UR_ATOM_FOCUS 31 012 #define UR_ATOM_RESIZE 31 113 #define UR_ATOM_KEY_DOWN 31 214 #define UR_ATOM_KEY_UP 31 315 #define UR_ATOM_MOUSE_MOVE 31 416 #define UR_ATOM_MOUSE_UP 31 517 #define UR_ATOM_MOUSE_DOWN 31 618 #define UR_ATOM_MOUSE_WHEEL 31 719 #define UR_ATOM_AMBIENT 31 820 #define UR_ATOM_DIFFUSE 3 1921 #define UR_ATOM_SPECULAR 32 022 #define UR_ATOM_POS 32 123 #define UR_ATOM_SHADER 32 224 #define UR_ATOM_VERTEX 32 325 #define UR_ATOM_FRAGMENT 32 426 #define UR_ATOM_DEFAULT 32 527 #define UR_ATOM_RGB 32 628 #define UR_ATOM_RGBA 32 729 #define UR_ATOM_DEPTH 32 830 #define UR_ATOM_CLAMP 3 2931 #define UR_ATOM_REPEAT 33 032 #define UR_ATOM_NEAREST 33 133 #define UR_ATOM_LINEAR 33 234 #define UR_ATOM_MIN 33 335 #define UR_ATOM_MAG 33 436 #define UR_ATOM_MIPMAP 33 512 #define UR_ATOM_FOCUS 311 13 #define UR_ATOM_RESIZE 312 14 #define UR_ATOM_KEY_DOWN 313 15 #define UR_ATOM_KEY_UP 314 16 #define UR_ATOM_MOUSE_MOVE 315 17 #define UR_ATOM_MOUSE_UP 316 18 #define UR_ATOM_MOUSE_DOWN 317 19 #define UR_ATOM_MOUSE_WHEEL 318 20 #define UR_ATOM_AMBIENT 319 21 #define UR_ATOM_DIFFUSE 320 22 #define UR_ATOM_SPECULAR 321 23 #define UR_ATOM_POS 322 24 #define UR_ATOM_SHADER 323 25 #define UR_ATOM_VERTEX 324 26 #define UR_ATOM_FRAGMENT 325 27 #define UR_ATOM_DEFAULT 326 28 #define UR_ATOM_RGB 327 29 #define UR_ATOM_RGBA 328 30 #define UR_ATOM_DEPTH 329 31 #define UR_ATOM_CLAMP 330 32 #define UR_ATOM_REPEAT 331 33 #define UR_ATOM_NEAREST 332 34 #define UR_ATOM_LINEAR 333 35 #define UR_ATOM_MIN 334 36 #define UR_ATOM_MAG 335 37 #define UR_ATOM_MIPMAP 336 37 38 #define UR_ATOM_ON 247 38 39 #define UR_ATOM_OFF 249 39 40 #define UR_ATOM_ADD 190 40 #define UR_ATOM_BURN 33 641 #define UR_ATOM_COLOR 33 742 #define UR_ATOM_TRANS 33 841 #define UR_ATOM_BURN 337 42 #define UR_ATOM_COLOR 338 43 #define UR_ATOM_TRANS 339 -
trunk/thune/gl/gx_dt.c
r330 r331 30 30 #include "rfont.h" 31 31 #include "shader.h" 32 33 34 /*--------------------------------------------------------------------------*/ 35 36 37 UR_EXTERN_CALL( make_dlist ); 38 39 40 static void toStr_dlist( const UCell* cell, UString* out, int depth ) 41 { 42 (void) cell; 43 (void) depth; 44 ur_strCat( out, "<draw-list>", 11 ); 45 } 46 47 48 static void mark_dlist( UCollector* gc, UCell* cell ) 49 { 50 if( ur_dlBlkN(cell) ) 51 ur_gcMarkBlock( gc, ur_dlBlkN(cell) ); 52 53 if( ur_dlGL(cell) ) 54 gllist_gcMark( ur_dlPool(cell), ur_dlGL(cell) ); 55 } 56 57 58 /*--------------------------------------------------------------------------*/ 32 59 33 60 … … 872 899 873 900 874 UDatatype ug_datatypes[ 5 ] = 875 { 901 UDatatype ug_datatypes[ 6 ] = 902 { 903 {"draw-list!", 0, 0, 904 make_dlist, to_nop, toStr_dlist, toStr_dlist, 905 select_nop, recycle_nop, mark_dlist, rmres_nop }, 906 876 907 {"raster!", 0, 0, 877 908 make_raster, to_nop, toStr_raster, toStr_raster, -
trunk/thune/gl/test.t
r321 r331 318 318 background handle.events 319 319 sim-update 320 background/draw ;do320 background/draw draw 321 321 none display.swap 322 322 ] forever -
trunk/thune/gl/test_fw.t
r330 r331 62 62 wid handle.events 63 63 sim-update 64 wid/draw ;do64 wid/draw draw 65 65 none display.swap 66 66 ]
