Changeset 331 for trunk/thune/gl

Show
Ignore:
Timestamp:
01/02/07 03:35:04 (2 years ago)
Author:
krobillard
Message:

Thune GL - Added draw-list! and 'draw.

Location:
trunk/thune/gl
Files:
8 modified

Legend:

Unmodified
Added
Removed
  • trunk/thune/gl/draw_list.c

    r330 r331  
    3131#include FT_FREETYPE_H 
    3232#include "TexFont.h" 
    33  
    34  
    35 #define ur_glpool(cell)     (cell)->coord.elem[2] 
    36 #define ur_gldl(cell)       (cell)->series.end 
    3733 
    3834 
     
    643639static int _runDrawList( UThread* ur_thread, UCell* val ) 
    644640{ 
    645     UBlock* blk = ur_blockPtr( val->code.n ); 
     641    UBlock* blk = ur_blockPtr( val->series.n ); 
    646642    UCell* pc  = blk->ptr.cells; 
    647643    UCell* end = pc + blk->used; 
     
    660656                ++pc; 
    661657                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) ) 
    665661                    { 
    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) ); 
    669665                    } 
    670666                    else if( ! _runDrawList( ur_thread, val ) ) 
     
    933929 
    934930 
    935 extern ULanguage dl_language; 
    936  
    937  
    938931/* 
    939    (block -- code) 
     932   (draw-list! block -- dlist) 
    940933*/ 
    941 UR_CALL( dl_compile ) 
    942 { 
    943     UR_CALL_UNUSED_TH 
     934UR_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    } 
    944945 
    945946    if( ur_is(tos, UT_BLOCK) ) 
    946947    { 
    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. 
    951954    } 
    952955    else if( ur_is(tos, UT_PAREN) ) 
     
    954957        int pool; 
    955958 
    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; 
    968965 
    969966        gr_clearState(); 
    970967 
    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 ); 
    974971 
    975972        if( ! _runDrawList( ur_thread, tos ) ) 
     
    980977        glEndList(); 
    981978    } 
     979    else 
     980    { 
     981        ur_throwErr( UR_ERR_DATATYPE, 
     982                     "draw-list! make expected block!/paren!" ); 
     983        return; 
     984    } 
     985 
     986    UR_S_DROP; 
    982987} 
    983988 
    984989 
    985990/* 
    986    (code -- ) 
     991   (dlist -- ) 
    987992*/ 
    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  
     993UR_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    } 
    9971004    UR_S_DROP; 
    9981005} 
    9991006 
    10001007 
    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_codeGC 
    1017 }; 
    1018  
    1019  
    10201008/*EOF*/ 
  • trunk/thune/gl/gx.c

    r330 r331  
    13221322 
    13231323 
    1324 extern void uc_load_wav( UThread*, UCell* ); 
    1325 extern void uc_load_png( UThread*, UCell* ); 
    1326 extern void uc_save_png( UThread*, UCell* ); 
     1324UR_EXTERN_CALL( uc_draw ); 
     1325UR_EXTERN_CALL( uc_load_wav ); 
     1326UR_EXTERN_CALL( uc_load_png ); 
     1327UR_EXTERN_CALL( uc_save_png ); 
    13271328 
    13281329static UCallDef _gxCalls[] = 
    13291330{ 
     1331    { uc_draw,           "draw" }, 
    13301332    { uc_play,           "play" }, 
    13311333    { uc_stop,           "stop" }, 
     
    13661368#endif 
    13671369 
     1370    FIXED_ATOM( "draw-list-opcodes", 17, UR_ATOM_DRAW_LIST_OPCODES ) 
    13681371    FIXED_ATOM( "width",        5, UR_ATOM_WIDTH ) 
    13691372    FIXED_ATOM( "height",       6, UR_ATOM_HEIGHT ) 
     
    14181421 
    14191422 
    1420 extern ULanguage dl_language; 
    1421  
    14221423int gx_startup( UrlanEnv* env ) 
    14231424{ 
     
    14401441 
    14411442    ur_makeCalls( env, _gxCalls, sizeof(_gxCalls) / sizeof(UCallDef) ); 
    1442  
    1443     ur_registerLanguage( env, "draw-list", &dl_language ); 
    14441443 
    14451444    { 
  • trunk/thune/gl/gx.h

    r330 r331  
    3030 
    3131 
    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 
     43typedef struct 
     44{ 
     45    uint8_t  type; 
     46    uint8_t  flags; 
     47    uint16_t glListPool; 
     48    UIndex   blkN; 
     49    UIndex   _pad; 
     50    GLuint   glListId; 
     51} 
     52UCellDrawList; 
    3753 
    3854 
     
    180196UIndex ur_makeRaster( UCell*, int format, int w, int h, UBinary** ); 
    181197 
     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 
    182202#define ur_rastHead(c)      ((RasterHead*) ur_bin(c)->ptr.v) 
    183203#define ur_rastElem(bin)    ((bin)->ptr.b + sizeof(RasterHead)) 
  • trunk/thune/gl/gx.t

    r330 r331  
    141141 
    142142 
    143 [src block!] 
    144143[ 
    145     code! 
    146     src draw-list-opcodes infuse 
    147     'draw-list make 
     144    draw-list! swap make 
    148145] 
    149 func :draw-list     ; (src -- dl) 
     146proc :draw-list     ; (src -- dl) 
    150147 
    151148 
    152 [src block!] 
    153149[ 
    154     code! 
    155     src draw-list-opcodes infuse  paren! as 
    156     'draw-list make 
     150    draw-list! swap paren! as make 
    157151] 
    158 func :draw-list.compile     ; (src -- dl) 
     152proc :draw-list.compile     ; (src -- dl) 
    159153 
    160154 
  • trunk/thune/gl/gx_atoms.h

    r330 r331  
    11// This file is automatically generated - do not edit. 
    22 
    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 
    1011#define UR_ATOM_CLOSE           171 
    11 #define UR_ATOM_FOCUS           310 
    12 #define UR_ATOM_RESIZE          311 
    13 #define UR_ATOM_KEY_DOWN                312 
    14 #define UR_ATOM_KEY_UP          313 
    15 #define UR_ATOM_MOUSE_MOVE              314 
    16 #define UR_ATOM_MOUSE_UP                315 
    17 #define UR_ATOM_MOUSE_DOWN              316 
    18 #define UR_ATOM_MOUSE_WHEEL             317 
    19 #define UR_ATOM_AMBIENT         318 
    20 #define UR_ATOM_DIFFUSE         319 
    21 #define UR_ATOM_SPECULAR                320 
    22 #define UR_ATOM_POS             321 
    23 #define UR_ATOM_SHADER          322 
    24 #define UR_ATOM_VERTEX          323 
    25 #define UR_ATOM_FRAGMENT                324 
    26 #define UR_ATOM_DEFAULT         325 
    27 #define UR_ATOM_RGB             326 
    28 #define UR_ATOM_RGBA            327 
    29 #define UR_ATOM_DEPTH           328 
    30 #define UR_ATOM_CLAMP           329 
    31 #define UR_ATOM_REPEAT          330 
    32 #define UR_ATOM_NEAREST         331 
    33 #define UR_ATOM_LINEAR          332 
    34 #define UR_ATOM_MIN             333 
    35 #define UR_ATOM_MAG             334 
    36 #define UR_ATOM_MIPMAP          335 
     12#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 
    3738#define UR_ATOM_ON              247 
    3839#define UR_ATOM_OFF             249 
    3940#define UR_ATOM_ADD             190 
    40 #define UR_ATOM_BURN            336 
    41 #define UR_ATOM_COLOR           337 
    42 #define UR_ATOM_TRANS           338 
     41#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  
    3030#include "rfont.h" 
    3131#include "shader.h" 
     32 
     33 
     34/*--------------------------------------------------------------------------*/ 
     35 
     36 
     37UR_EXTERN_CALL( make_dlist ); 
     38 
     39 
     40static 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 
     48static 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/*--------------------------------------------------------------------------*/ 
    3259 
    3360 
     
    872899 
    873900 
    874 UDatatype ug_datatypes[ 5 ] = 
    875 { 
     901UDatatype 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 
    876907    {"raster!", 0, 0, 
    877908        make_raster, to_nop, toStr_raster, toStr_raster, 
  • trunk/thune/gl/test.t

    r321 r331  
    318318    background handle.events 
    319319    sim-update 
    320     background/draw ;do 
     320    background/draw draw 
    321321    none display.swap 
    322322] forever 
  • trunk/thune/gl/test_fw.t

    r330 r331  
    6262        wid handle.events 
    6363        sim-update 
    64         wid/draw ;do 
     64        wid/draw draw 
    6565        none display.swap 
    6666    ]