Changeset 301 for trunk/thune/gl

Show
Ignore:
Timestamp:
10/23/06 04:19:31 (2 years ago)
Author:
krobillard
Message:

Thune - Added UBuffer & shader! datatype.

Location:
trunk/thune/gl
Files:
2 added
8 modified

Legend:

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

    r296 r301  
    2525#include "gllist.h" 
    2626#include "math3d.h" 
     27#include "shader.h" 
    2728 
    2829#include <ft2build.h> 
     
    389390    pos[3] = w; 
    390391 
    391     printf( "KR %d %d %g\n", light, pname, w ); 
     392    //printf( "KR light %d %d %g\n", light, pname, w ); 
    392393    glLightfv( light, pname, pos );  
    393394} 
     
    715716                break; 
    716717 
     718            case DOP_SHADER: 
     719                ++pc; 
     720                VAL_WORD_OR_PC 
     721                loadShader( val ); 
     722                break; 
     723 
    717724            default: 
    718725                assert( 0 && "Invalid Draw List Opcode" ); 
  • trunk/thune/gl/draw_ops.h

    r296 r301  
    2929#define DOP_FONT            26 
    3030#define DOP_TEXT            27 
     31#define DOP_SHADER          28 
  • trunk/thune/gl/gx.c

    r296 r301  
    18481848    FIXED_ATOM( "specular", 8, UR_ATOM_SPECULAR ); 
    18491849    FIXED_ATOM( "pos",      3, UR_ATOM_POS ); 
     1850    FIXED_ATOM( "vertex",   6, UR_ATOM_VERTEX ); 
     1851    FIXED_ATOM( "fragment", 8, UR_ATOM_FRAGMENT ); 
    18501852 
    18511853#if MAKE_ATOM_HEADER 
  • trunk/thune/gl/gx.h

    r295 r301  
    3232#define UT_RASTER   UT_BI_COUNT 
    3333#define UT_FONT     UT_BI_COUNT+1 
     34#define UT_SHADER   UT_BI_COUNT+2 
    3435 
    3536 
  • trunk/thune/gl/gx.t

    r296 r301  
    124124    font 
    125125    text 
     126 
     127    shader 
    126128] 
    127129make-opcodes :draw-list-opcodes 
  • trunk/thune/gl/gx_dt.c

    r286 r301  
    2525#include "gllist.h" 
    2626#include "rfont.h" 
     27#include "shader.h" 
    2728 
    2829 
     
    296297 
    297298 
     299/* 
     300  (shader! spec -- shader) 
     301 
     302  Spec. block: [ 
     303    param1: 0 
     304    param2: 1.0 
     305    vertex {...} 
     306    fragment {...} 
     307  ] 
     308*/ 
     309UR_CALL( make_shader ) 
     310{ 
     311    UBlock* blk; 
     312    UCell* it; 
     313    UCell* end; 
     314    UCell* res = ur_s_prev(tos); 
     315    UAtom cmd = 0; 
     316    const char* vprog = 0; 
     317    const char* fprog = 0; 
     318 
     319    if( ur_is(res, UT_DATATYPE) ) 
     320    { 
     321        if( ur_is(tos, UT_BLOCK) ) 
     322        { 
     323            blk = ur_block(tos); 
     324            UR_ITER_BLOCK( it, end, blk, tos ); 
     325            while( it != end ) 
     326            { 
     327                switch( ur_type(it) ) 
     328                { 
     329                    case UT_WORD: 
     330                        cmd = ur_atom(it); 
     331                        break; 
     332 
     333                    case UT_STRING: 
     334                    case UT_SLICE: 
     335                        if( cmd == UR_ATOM_VERTEX ) 
     336                            vprog = ur_cstring( it ); 
     337                        else if( cmd == UR_ATOM_FRAGMENT ) 
     338                            fprog = ur_cstring( it ); 
     339                        break; 
     340                } 
     341                ++it; 
     342            } 
     343 
     344            if( vprog && fprog ) 
     345            { 
     346                if( ! makeShader( ur_thread, res, vprog, fprog ) ) 
     347                    return; 
     348            } 
     349            else 
     350            { 
     351                ur_throwErr( UR_ERR_SCRIPT, 
     352                    "shader! make expected vertex & fragment programs" ); 
     353                return; 
     354            } 
     355 
     356            UR_S_DROP; 
     357            return; 
     358        } 
     359    } 
     360    ur_throwErr( UR_ERR_DATATYPE, "shader! make expected block!" ); 
     361} 
     362 
     363 
     364UR_CALL( to_shader ) 
     365{ 
     366    UR_CALL_UNUSED_TOS 
     367    ur_throwErr( UR_ERR_DATATYPE, "'to cannot be used on shader!" ); 
     368} 
     369 
     370 
     371void toStr_shader( const UCell* cell, UString* out, int depth ) 
     372{ 
     373    (void) cell; 
     374    (void) depth; 
     375    ur_strCat( out, "<shader>", 8 ); 
     376} 
     377 
     378 
     379int select_shader( UThread* ur_thread, UCell* val, const UCell* sel, 
     380                   UCell* res ) 
     381{ 
     382    (void) val; 
     383    (void) sel; 
     384    (void) res; 
     385    ur_throwErr( UR_ERR_SCRIPT, "Invalid select!" ); 
     386    return 0; 
     387} 
     388 
     389 
     390static void mark_shader( UCollector* gc, UCell* cell ) 
     391{ 
     392    ur_gcMarkBuffer( gc, cell->series.n ); 
     393} 
     394 
     395 
     396static void rmbuf_shader( UBuffer* buf ) 
     397{ 
     398    //printf( "KR rmbuf_shader()\n" ); 
     399    Shader* sh = (Shader*) buf->ptr; 
     400    if( sh ) 
     401    { 
     402        destroyShader( sh ); 
     403        memFree( sh ); 
     404        buf->ptr = 0; 
     405    } 
     406} 
     407 
     408 
     409/*--------------------------------------------------------------------------*/ 
     410 
     411 
    298412static void recycle_none( UrlanEnv* env, int phase ) 
    299413{ 
     
    304418 
    305419 
    306 UDatatype ug_datatypes[ 2 ] = 
     420static void rmbuf_none( UBuffer* buf ) 
     421{ 
     422    (void) buf; 
     423} 
     424 
     425 
     426UDatatype ug_datatypes[ 3 ] = 
    307427{ 
    308428    {"raster!", 0, 0, 
    309429        make_raster, to_raster, toStr_raster, toStr_raster, 
    310         select_raster, recycle_none, mark_raster }, 
     430        select_raster, recycle_none, mark_raster, rmbuf_none }, 
    311431 
    312432    {"font!", 0, 0, 
    313433        make_rfont, to_rfont, toStr_rfont, toStr_rfont, 
    314         select_rfont, recycle_rfont, mark_rfont }, 
     434        select_rfont, recycle_rfont, mark_rfont, rmbuf_none }, 
     435 
     436    {"shader!", 0, 0, 
     437        make_shader, to_shader, toStr_shader, toStr_shader, 
     438        select_shader, recycle_none, mark_shader, rmbuf_shader }, 
    315439}; 
    316440 
  • trunk/thune/gl/project.r

    r286 r301  
    8383        %TexFont.c 
    8484        %rfont.c 
     85        %shader.c 
    8586        ;%res.c 
    8687        ;%../util/cbparse.c 
  • trunk/thune/gl/test.t

    r296 r301  
    4444 
    4545"data/d7.gx" load draw-list.compile :d7-list 
     46"data/test-shader.gx" load do 
    4647 
    4748 
     
    171172        light/1 [on -1.0,-0.8,0.0 diffuse 0.8,0.5,0.5] 
    172173        model 
     174        shader test-shader 
    173175        call d7-list 
     176        shader none 
    174177 
    175178        camera ortho-cam 
     
    292295font! ["data/FederationBold_KR.ttf" 12 256,128] make :fontF 
    293296 
    294  
    2952970,0,155 display.swap 
    296298