Changeset 301 for trunk/thune/gl
- Timestamp:
- 10/23/06 04:19:31 (2 years ago)
- Location:
- trunk/thune/gl
- Files:
-
- 2 added
- 8 modified
Legend:
- Unmodified
- Added
- Removed
-
trunk/thune/gl/draw_list.c
r296 r301 25 25 #include "gllist.h" 26 26 #include "math3d.h" 27 #include "shader.h" 27 28 28 29 #include <ft2build.h> … … 389 390 pos[3] = w; 390 391 391 printf( "KR%d %d %g\n", light, pname, w );392 //printf( "KR light %d %d %g\n", light, pname, w ); 392 393 glLightfv( light, pname, pos ); 393 394 } … … 715 716 break; 716 717 718 case DOP_SHADER: 719 ++pc; 720 VAL_WORD_OR_PC 721 loadShader( val ); 722 break; 723 717 724 default: 718 725 assert( 0 && "Invalid Draw List Opcode" ); -
trunk/thune/gl/draw_ops.h
r296 r301 29 29 #define DOP_FONT 26 30 30 #define DOP_TEXT 27 31 #define DOP_SHADER 28 -
trunk/thune/gl/gx.c
r296 r301 1848 1848 FIXED_ATOM( "specular", 8, UR_ATOM_SPECULAR ); 1849 1849 FIXED_ATOM( "pos", 3, UR_ATOM_POS ); 1850 FIXED_ATOM( "vertex", 6, UR_ATOM_VERTEX ); 1851 FIXED_ATOM( "fragment", 8, UR_ATOM_FRAGMENT ); 1850 1852 1851 1853 #if MAKE_ATOM_HEADER -
trunk/thune/gl/gx.h
r295 r301 32 32 #define UT_RASTER UT_BI_COUNT 33 33 #define UT_FONT UT_BI_COUNT+1 34 #define UT_SHADER UT_BI_COUNT+2 34 35 35 36 -
trunk/thune/gl/gx.t
r296 r301 124 124 font 125 125 text 126 127 shader 126 128 ] 127 129 make-opcodes :draw-list-opcodes -
trunk/thune/gl/gx_dt.c
r286 r301 25 25 #include "gllist.h" 26 26 #include "rfont.h" 27 #include "shader.h" 27 28 28 29 … … 296 297 297 298 299 /* 300 (shader! spec -- shader) 301 302 Spec. block: [ 303 param1: 0 304 param2: 1.0 305 vertex {...} 306 fragment {...} 307 ] 308 */ 309 UR_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 364 UR_CALL( to_shader ) 365 { 366 UR_CALL_UNUSED_TOS 367 ur_throwErr( UR_ERR_DATATYPE, "'to cannot be used on shader!" ); 368 } 369 370 371 void 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 379 int 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 390 static void mark_shader( UCollector* gc, UCell* cell ) 391 { 392 ur_gcMarkBuffer( gc, cell->series.n ); 393 } 394 395 396 static 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 298 412 static void recycle_none( UrlanEnv* env, int phase ) 299 413 { … … 304 418 305 419 306 UDatatype ug_datatypes[ 2 ] = 420 static void rmbuf_none( UBuffer* buf ) 421 { 422 (void) buf; 423 } 424 425 426 UDatatype ug_datatypes[ 3 ] = 307 427 { 308 428 {"raster!", 0, 0, 309 429 make_raster, to_raster, toStr_raster, toStr_raster, 310 select_raster, recycle_none, mark_raster },430 select_raster, recycle_none, mark_raster, rmbuf_none }, 311 431 312 432 {"font!", 0, 0, 313 433 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 }, 315 439 }; 316 440 -
trunk/thune/gl/project.r
r286 r301 83 83 %TexFont.c 84 84 %rfont.c 85 %shader.c 85 86 ;%res.c 86 87 ;%../util/cbparse.c -
trunk/thune/gl/test.t
r296 r301 44 44 45 45 "data/d7.gx" load draw-list.compile :d7-list 46 "data/test-shader.gx" load do 46 47 47 48 … … 171 172 light/1 [on -1.0,-0.8,0.0 diffuse 0.8,0.5,0.5] 172 173 model 174 shader test-shader 173 175 call d7-list 176 shader none 174 177 175 178 camera ortho-cam … … 292 295 font! ["data/FederationBold_KR.ttf" 12 256,128] make :fontF 293 296 294 295 297 0,0,155 display.swap 296 298
