Changeset 420 for branches/thune
- Timestamp:
- 06/30/07 08:14:01 (17 months ago)
- Location:
- branches/thune/thread_safe/gl
- Files:
-
- 12 modified
-
boot.c (modified) (1 diff)
-
data/shader/clsbmap.gx (modified) (2 diffs)
-
data/shader/clsmap.gx (modified) (1 diff)
-
draw_list.c (modified) (10 diffs)
-
draw_ops.h (modified) (1 diff)
-
gx.c (modified) (3 diffs)
-
gx.h (modified) (1 diff)
-
gx.t (modified) (1 diff)
-
gx_atoms.h (modified) (1 diff)
-
scripts/view.t (modified) (8 diffs)
-
test.t (modified) (4 diffs)
-
test_fw.t (modified) (2 diffs)
Legend:
- Unmodified
- Added
- Removed
-
branches/thune/thread_safe/gl/boot.c
r409 r420 73 73 " model\n" 74 74 " decal\n" 75 " image\n" 75 76 " particle\n" 76 77 " color\n" -
branches/thune/thread_safe/gl/data/shader/clsbmap.gx
r395 r420 44 44 vec3 n, col; 45 45 vec4 texel, lumi; 46 float intensity, shad ow, NdotHV;46 float intensity, shade, NdotHV; 47 47 48 48 … … 53 53 n = normalize( T * n.x + B * n.y + normal * n.z ); 54 54 55 shadow = shadow2DProj(smap, gl_TexCoord[1]).r; 56 intensity = max( min(shadow, dot(lightDir, n)), lumi.r); 55 shade = shadow2DProj(smap, gl_TexCoord[1]).r; 56 shade = min(shade, dot(lightDir, n)); 57 intensity = max( shade, lumi.r); 57 58 58 59 texel = texture2D(cmap, gl_TexCoord[0].st); 59 col = texel.rgb * (intensity + gl_LightSource[0].ambient.rgb); 60 col = texel.rgb * 61 (max(intensity * gl_LightSource[0].diffuse.rgb, lumi.r) + 62 gl_LightSource[0].ambient.rgb); 60 63 61 if( intensity> 0.0 )64 if( shade > 0.0 ) 62 65 { 63 66 NdotHV = max(dot(normalize(halfVector), n), 0.0); -
branches/thune/thread_safe/gl/data/shader/clsmap.gx
r352 r420 36 36 vec3 n, col; 37 37 vec4 texel, lumi; 38 float intensity, shad ow, NdotHV;38 float intensity, shade, NdotHV; 39 39 40 40 lumi = texture2D(lmap, gl_TexCoord[0].st); 41 41 n = normalize(normal); 42 shadow = shadow2DProj(smap, gl_TexCoord[1]).r; 43 intensity = max( min(shadow, dot(lightDir, n)), lumi.r); 42 shade = shadow2DProj(smap, gl_TexCoord[1]).r; 43 shade = min(shade, dot(lightDir, n)); 44 intensity = max( shade, lumi.r); 44 45 45 46 texel = texture2D(cmap, gl_TexCoord[0].st); 46 col = texel.rgb * (intensity + gl_LightSource[0].ambient.rgb); 47 col = texel.rgb * 48 (max(intensity * gl_LightSource[0].diffuse.rgb, lumi.r) + 49 gl_LightSource[0].ambient.rgb); 47 50 48 if( intensity> 0.0 )51 if( shade > 0.0 ) 49 52 { 50 53 NdotHV = max(dot(normalize(halfVector), n), 0.0); -
branches/thune/thread_safe/gl/draw_list.c
r409 r420 28 28 #include "shader.h" 29 29 #include "TexFont.h" 30 31 32 extern struct GXEnv gxEnv; 30 33 31 34 … … 66 69 void gr_disableTexture() 67 70 { 68 glDisable( GL_TEXTURE_2D ); 69 } 71 GLint i; 72 for( i = 0; i < gxEnv.maxTextureUnits; ++i ) 73 { 74 glActiveTexture( GL_TEXTURE0 + i ); 75 glDisable( GL_TEXTURE_2D ); 76 } 77 } 78 #endif 70 79 71 80 72 81 void gr_enableTexture0() 73 82 { 74 #if 1 83 GLint i; 84 for( i = 1; i < gxEnv.maxTextureUnits; ++i ) 85 { 86 glActiveTexture( GL_TEXTURE0 + i ); 87 glDisable( GL_TEXTURE_2D ); 88 } 89 glActiveTexture( GL_TEXTURE0 ); 75 90 glEnable( GL_TEXTURE_2D ); 76 #else 77 glActiveTexture( GL_TEXTURE0 + 0 ); 78 glEnable( GL_TEXTURE_2D ); 79 glActiveTexture( GL_TEXTURE0 + 1 ); 80 glEnable( GL_TEXTURE_2D ); 81 #endif 82 } 83 #endif 91 } 84 92 85 93 … … 144 152 glDepthMask( GL_FALSE ); 145 153 146 gr_enable( "bt" ); 154 // NOTE: Must disable all texture units but GL_TEXTURE0 if not 155 // using a shader or text may not render properly. 156 gr_enableTexture0(); 157 158 gr_enable( "b" ); 147 159 gr_disable( "adl" ); 148 160 /* … … 150 162 glDisable( GL_DEPTH_TEST ); 151 163 glDisable( GL_LIGHTING ); 152 153 164 glEnable( GL_BLEND ); 154 gr_enableTexture0();155 165 */ 156 166 glBlendFunc( GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA ); 157 158 167 159 168 //glTexEnvi( GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE ); … … 379 388 380 389 390 static void gr_image( UThread* ut, UCell* val, GLfloat x, GLfloat y, 391 UAtom atom ) 392 { 393 RasterHead* rh; 394 395 if( atom == UR_ATOM_TRANS ) 396 { 397 //gr_disable( "adl" ); 398 //gr_enable( "b" ); 399 400 glDisable( GL_ALPHA_TEST ); 401 glDisable( GL_DEPTH_TEST ); 402 glDisable( GL_LIGHTING ); 403 glEnable( GL_BLEND ); 404 405 glBlendFunc( GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA ); 406 } 407 else 408 { 409 gr_disable( "abdl" ); 410 } 411 412 glDepthMask( GL_FALSE ); 413 414 gr_enableTexture0(); 415 glBindTexture( GL_TEXTURE_2D, ur_texId(val) ); 416 //printf( "KR tex %d\n", ur_texId(val) ); 417 418 rh = (RasterHead*) ur_binPtr( ur_texRast(val) )->ptr.v; 419 420 glBegin( GL_QUADS ); 421 422 glMultiTexCoord2f( GL_TEXTURE0, 0.0f, 1.0f ); 423 glVertex2f( x, y ); 424 glMultiTexCoord2f( GL_TEXTURE0, 1.0f, 1.0f ); 425 glVertex2f( x + rh->width, y ); 426 glMultiTexCoord2f( GL_TEXTURE0, 1.0f, 0.0f ); 427 glVertex2f( x + rh->width, y + rh->height ); 428 glMultiTexCoord2f( GL_TEXTURE0, 0.0f, 0.0f ); 429 glVertex2f( x, y + rh->height ); 430 431 glEnd(); 432 } 433 434 435 //---------------------------------------------------------------------------- 436 437 381 438 #if 0 382 439 GLuint gr_querySamples() … … 1075 1132 ++pc; 1076 1133 VAL_WORD_OR_PC 1077 glBindTexture( GL_TEXTURE_2D, ur_texId(val) ); 1134 if( ur_is(val, UT_TEXTURE) ) 1135 { 1136 glBindTexture( GL_TEXTURE_2D, ur_texId(val) ); 1137 } 1138 break; 1139 1140 case DOP_IMAGE: // image [x,y] texture 1141 { 1142 GLfloat x, y; 1143 int atom = ur_sel(pc); 1144 ++pc; 1145 VAL_WORD_OR_PC 1146 if( ur_is(val, UT_COORD) ) 1147 { 1148 x = (GLfloat) val->coord.elem[0]; 1149 y = (GLfloat) val->coord.elem[1]; 1150 ++pc; 1151 VAL_WORD_OR_PC 1152 } 1153 else if( ur_is(val, UT_VEC3) ) 1154 { 1155 x = val->vec3.xyz[0]; 1156 y = val->vec3.xyz[1]; 1157 ++pc; 1158 VAL_WORD_OR_PC 1159 } 1160 else 1161 { 1162 x = y = 0.0; 1163 } 1164 if( ur_is(val, UT_TEXTURE) ) 1165 gr_image( ut, val, x, y, atom ); 1166 } 1078 1167 break; 1079 1168 … … 1311 1400 VAL_WORD_OR_PC 1312 1401 } 1402 else if( ur_is(val, UT_VEC3) ) 1403 { 1404 _state.penX = val->vec3.xyz[0]; 1405 _state.penY = val->vec3.xyz[1]; 1406 ++pc; 1407 VAL_WORD_OR_PC 1408 } 1313 1409 gr_drawTextCell( ut, val ); 1314 1410 break; … … 1344 1440 int hidden = ur_sel(pc); // UR_ATOM_HIDDEN 1345 1441 1346 ++pc;1347 if( ! ur_is(pc, UT_BLOCK) )1348 return 0;1349 1350 1442 _state.samplesQueryId = 0; 1351 1443 … … 1358 1450 } 1359 1451 1360 // Run draw-list containing samples-begin ops. 1361 if( ! _runDrawList( ut, pc ) ) 1362 return 0; 1452 // Run draw-list containing samples-begin (DOP_SAMPLES_BEGIN). 1453 ++pc; 1454 if( ur_is(pc, UT_BLOCK) ) 1455 { 1456 if( ! _runDrawList( ut, pc ) ) 1457 return 0; 1458 } 1459 #if 1 1460 else if( ur_is(pc, UT_DRAWLIST) ) 1461 { 1462 if( ur_dlGL(pc) ) 1463 glCallList( ur_dlGL(pc) ); 1464 } 1465 #endif 1363 1466 1364 1467 if( _state.samplesQueryId ) … … 1376 1479 GLuint samples; 1377 1480 GLuint id; 1378 //UBinary* bin;1379 //UIndex binN;1380 1481 1381 1482 // Push query results on stack and call process-block. 1382 1383 //bin = ur_binaryPtr( binN );1384 1483 1385 1484 for( id = 1; id <= _state.samplesQueryId; ++id ) -
branches/thune/thread_safe/gl/draw_ops.h
r409 r420 10 10 #define DOP_MODEL 7 11 11 #define DOP_DECAL 8 12 #define DOP_PARTICLE 9 13 #define DOP_COLOR 10 14 #define DOP_COLORS 11 15 #define DOP_VERTS 12 16 #define DOP_NORMALS 13 17 #define DOP_UVS 14 18 #define DOP_ATTRIB 15 19 #define DOP_POINTS 16 20 #define DOP_LINES 17 21 #define DOP_LINE_STRIP 18 22 #define DOP_TRIS 19 23 #define DOP_TRI_STRIP 20 24 #define DOP_TRI_FAN 21 25 #define DOP_QUADS 22 26 #define DOP_QUAD_STRIP 23 27 #define DOP_CAMERA 24 28 #define DOP_LIGHT 25 29 #define DOP_LIGHTING 26 30 #define DOP_PUSH 27 31 #define DOP_POP 28 32 #define DOP_TRANSLATE 29 33 #define DOP_ROTATE 30 34 #define DOP_SCALE 31 35 #define DOP_FONT 32 36 #define DOP_TEXT 33 37 #define DOP_SHADER 34 38 #define DOP_FRAMEBUFFER 35 39 #define DOP_SHADOW_BEGIN 36 40 #define DOP_SHADOW_END 37 41 #define DOP_SAMPLES_QUERY 38 42 #define DOP_SAMPLES_BEGIN 39 12 #define DOP_IMAGE 9 13 #define DOP_PARTICLE 10 14 #define DOP_COLOR 11 15 #define DOP_COLORS 12 16 #define DOP_VERTS 13 17 #define DOP_NORMALS 14 18 #define DOP_UVS 15 19 #define DOP_ATTRIB 16 20 #define DOP_POINTS 17 21 #define DOP_LINES 18 22 #define DOP_LINE_STRIP 19 23 #define DOP_TRIS 20 24 #define DOP_TRI_STRIP 21 25 #define DOP_TRI_FAN 22 26 #define DOP_QUADS 23 27 #define DOP_QUAD_STRIP 24 28 #define DOP_CAMERA 25 29 #define DOP_LIGHT 26 30 #define DOP_LIGHTING 27 31 #define DOP_PUSH 28 32 #define DOP_POP 29 33 #define DOP_TRANSLATE 30 34 #define DOP_ROTATE 31 35 #define DOP_SCALE 32 36 #define DOP_FONT 33 37 #define DOP_TEXT 34 38 #define DOP_SHADER 35 39 #define DOP_FRAMEBUFFER 36 40 #define DOP_SHADOW_BEGIN 37 41 #define DOP_SHADOW_END 38 42 #define DOP_SAMPLES_QUERY 39 43 #define DOP_SAMPLES_BEGIN 40 -
branches/thune/thread_safe/gl/gx.c
r403 r420 1217 1217 } 1218 1218 ur_throwErr( UR_ERR_DATATYPE, 1219 "lerp expected decimal!/vec3! decimal!/vec3! decimal!" );1219 "lerp expected decimal!/vec3! decimal!/vec3! decimal!" ); 1220 1220 } 1221 1221 … … 1528 1528 #endif 1529 1529 1530 gxEnv.maxTextureUnits = 0; 1530 1531 gxEnv.view = 0; 1531 1532 gxEnv.prevMouseX = MOUSE_UNSET; 1532 1533 gxEnv.prevMouseY = MOUSE_UNSET; 1534 gxEnv.eventBlk = 0; 1533 1535 1534 1536 _createFixedAtoms( ut ); 1535 1536 gxEnv.eventBlk = 0;1537 1538 1537 1539 1538 ur_makeCalls( ut, _gxCalls, sizeof(_gxCalls) / sizeof(UCallDef) ); … … 1579 1578 glfbo_startup(); 1580 1579 1580 glGetIntegerv( GL_MAX_TEXTURE_UNITS, &gxEnv.maxTextureUnits ); 1581 1581 1582 return UR_EVAL_OK; 1582 1583 } -
branches/thune/thread_safe/gl/gx.h
r409 r420 151 151 struct GXEnv 152 152 { 153 GLint maxTextureUnits; 154 153 155 GLView* view; 154 156 double view_wd; // Floating-point versions of GLView width & height. -
branches/thune/thread_safe/gl/gx.t
r409 r420 132 132 model 133 133 decal 134 image 134 135 particle 135 136 -
branches/thune/thread_safe/gl/gx_atoms.h
r409 r420 1 1 // This file is automatically generated - do not edit. 2 2 3 #define UR_ATOM_DRAW_LIST_OPCODES 3 074 #define UR_ATOM_WIDTH 3 085 #define UR_ATOM_HEIGHT 3 096 #define UR_ATOM_AREA 31 07 #define UR_ATOM_RECT 3 118 #define UR_ATOM_RASTER 3 129 #define UR_ATOM_TEXTURE 3 1310 #define UR_ATOM_ELEM 3 1411 #define UR_ATOM_CLOSE 17 412 #define UR_ATOM_FOCUS 3 1513 #define UR_ATOM_RESIZE 3 1614 #define UR_ATOM_KEY_DOWN 3 1715 #define UR_ATOM_KEY_UP 3 1816 #define UR_ATOM_MOUSE_MOVE 3 1917 #define UR_ATOM_MOUSE_UP 32 018 #define UR_ATOM_MOUSE_DOWN 3 2119 #define UR_ATOM_MOUSE_WHEEL 3 2220 #define UR_ATOM_AMBIENT 3 2321 #define UR_ATOM_DIFFUSE 3 2422 #define UR_ATOM_SPECULAR 3 2523 #define UR_ATOM_POS 3 2624 #define UR_ATOM_SHADER 3 2725 #define UR_ATOM_VERTEX 3 2826 #define UR_ATOM_FRAGMENT 3 2927 #define UR_ATOM_DEFAULT 33 028 #define UR_ATOM_WAIT 3 3129 #define UR_ATOM_RGB 3 3230 #define UR_ATOM_RGBA 3 3331 #define UR_ATOM_DEPTH 3 3432 #define UR_ATOM_CLAMP 3 3533 #define UR_ATOM_REPEAT 3 3634 #define UR_ATOM_NEAREST 3 3735 #define UR_ATOM_LINEAR 3 3836 #define UR_ATOM_MIN 3 3937 #define UR_ATOM_MAG 34 038 #define UR_ATOM_MIPMAP 3 4139 #define UR_ATOM_ON 25 340 #define UR_ATOM_OFF 25 541 #define UR_ATOM_ADD 19 342 #define UR_ATOM_BURN 3 4243 #define UR_ATOM_COLOR 3 4344 #define UR_ATOM_TRANS 3 4445 #define UR_ATOM_SPRITE 3 453 #define UR_ATOM_DRAW_LIST_OPCODES 316 4 #define UR_ATOM_WIDTH 317 5 #define UR_ATOM_HEIGHT 318 6 #define UR_ATOM_AREA 319 7 #define UR_ATOM_RECT 320 8 #define UR_ATOM_RASTER 321 9 #define UR_ATOM_TEXTURE 322 10 #define UR_ATOM_ELEM 323 11 #define UR_ATOM_CLOSE 176 12 #define UR_ATOM_FOCUS 324 13 #define UR_ATOM_RESIZE 325 14 #define UR_ATOM_KEY_DOWN 326 15 #define UR_ATOM_KEY_UP 327 16 #define UR_ATOM_MOUSE_MOVE 328 17 #define UR_ATOM_MOUSE_UP 329 18 #define UR_ATOM_MOUSE_DOWN 330 19 #define UR_ATOM_MOUSE_WHEEL 331 20 #define UR_ATOM_AMBIENT 332 21 #define UR_ATOM_DIFFUSE 333 22 #define UR_ATOM_SPECULAR 334 23 #define UR_ATOM_POS 335 24 #define UR_ATOM_SHADER 336 25 #define UR_ATOM_VERTEX 337 26 #define UR_ATOM_FRAGMENT 338 27 #define UR_ATOM_DEFAULT 339 28 #define UR_ATOM_WAIT 340 29 #define UR_ATOM_RGB 341 30 #define UR_ATOM_RGBA 342 31 #define UR_ATOM_DEPTH 343 32 #define UR_ATOM_CLAMP 344 33 #define UR_ATOM_REPEAT 345 34 #define UR_ATOM_NEAREST 346 35 #define UR_ATOM_LINEAR 347 36 #define UR_ATOM_MIN 348 37 #define UR_ATOM_MAG 349 38 #define UR_ATOM_MIPMAP 350 39 #define UR_ATOM_ON 255 40 #define UR_ATOM_OFF 257 41 #define UR_ATOM_ADD 195 42 #define UR_ATOM_BURN 351 43 #define UR_ATOM_COLOR 352 44 #define UR_ATOM_TRANS 353 45 #define UR_ATOM_SPRITE 354 -
branches/thune/thread_safe/gl/scripts/view.t
r409 r420 1 1 ; Thune GL View 2 2 3 4 "test_fw.t" load do 5 3 < 4 "test_fw.t" load do 5 "scripts/stars.t" load do 6 > 7 8 0.6 :zoom 6 9 10,0,10 :bg-color 7 10 ;off key-repeat 8 11 0.0,0 :win-size 9 10 "shader/matte.gx" load.shader :matte 11 12 "scripts/stars.t" load do 400 make-stars :star-dl 13 "shader/particle-star.gx" 14 load.shader :star-sh 15 16 12 20.0,400 :logo-pos 13 20.0,400 :text-pos 14 15 ;font! ["font/FederationBold_KR.ttf" 16 256,128] make :fontF 16 font! ["font/20thfont.ttf" 22 256,128] make :fontF 17 18 "shader/matte.gx" load.shader :matte 19 "shader/particle-star.gx" load.shader :star-sh 17 20 "shader/particle-sprite.gx" load.shader :sprite-sh 18 21 19 10 make-stars :bstar-dl20 22 sprite-sh :bstar-sh 21 23 500.0 :bstar-sh/size 22 "image/star .png" load.tex :bstar-sh/cmap24 "image/star01.png" load.tex :bstar-sh/cmap 23 25 24 26 "shader/ship-lights.gx" load.shader :flare-sh 25 27 "image/lightFlareA.png" load.tex :flare-sh/cmap 28 29 [ 30 push 31 scale 20.0 ; TODO: move to view-cam pos 32 ;translate view-cam/ 33 34 particle 35 shader star-sh 36 call <400 make-stars> 37 38 particle/sprite 39 shader bstar-sh 40 call <10 make-stars> 41 pop 42 ;particle/off 43 ] 44 draw-list :starfield-dl 45 26 46 27 47 /* … … 76 96 77 97 78 /* 79 [ 80 "model/d7.gx" load draw-list.compile :model-list 81 ;"shader/lumimap.gx" 82 "shader/clsmap.gx" 83 ;"shader/tv.gx" 84 load.shader :model-shader 85 "image/d7_colormap.png" load.tex :model-shader/cmap 86 "image/d7_lights.png" load.tex :model-shader/lmap 98 [ 99 "shader/clsbmap.gx" load.shader :d7-shader 100 "image/d7_colormap.png" load.tex :d7-shader/cmap 101 "image/d7_lights.png" load.tex :d7-shader/lmap 102 "image/d7_normal.png" load.tex :d7-shader/nmap 103 "model/d7_bump.gx" load draw-list.compile dup :model-list :d7-dl 104 105 "model/d7_lights.gx" load do 106 107 [ 108 model 109 shader d7-shader 110 call d7-dl 111 112 shader matte 113 call d7-lights-query 114 particle/sprite 115 shader flare-sh call d7-lights 116 ;particle/off 117 ] 118 draw-list dup :ship-dl :d7-model 87 119 ] :d7 88 */ 89 90 [ 91 "shader/clsbmap.gx" load.shader :model-shader 92 "image/d7_colormap.png" load.tex :model-shader/cmap 93 "image/d7_lights.png" load.tex :model-shader/lmap 94 "image/d7_normal.png" load.tex :model-shader/nmap 95 "model/d7_bump.gx" load draw-list.compile :model-list 96 model-list :d7-dl 97 model-shader :d7-shader 98 99 "model/d7_lights.gx" load do 100 101 now :start-time 102 [ 103 now start-time sub :flare-sh/time 104 ] 105 proc :sim-update 106 107 ] :d7 108 109 [ 110 "model/enterprise.gx" load draw-list.compile :model-list 111 "shader/clsmap.gx" load.shader :model-shader 112 "image/ent_colormap.png" load.mip :model-shader/cmap 113 "image/ent_lights.png" load.tex :model-shader/lmap 114 model-list :ent-dl 115 model-shader :ent-shader 120 121 [ 122 "shader/clsmap.gx" load.shader :ent-shader 123 "image/ent_colormap.png" load.mip :ent-shader/cmap 124 "image/ent_lights.png" load.tex :ent-shader/lmap 125 "model/enterprise.gx" load draw-list.compile dup :model-list :ent-dl 126 127 "model/ent_lights.gx" load do 128 129 [ 130 model 131 shader ent-shader ; FIXME: Causes text not to render. 132 call ent-dl 133 134 shader matte 135 call ent-lights-query 136 particle/sprite 137 shader flare-sh call ent-lights 138 ;particle/off 139 ] 140 draw-list dup :ship-dl :ent-model 116 141 ] :ent 117 142 … … 146 171 147 172 148 /* 149 "model/enterprise.gx" load draw-list.compile :model-list 150 "shader/lh_specular.gx" load.shader :model-shader 151 ;0.5 :model-shader/specular 152 ;0.5 :model-shader/shininess 153 */ 154 155 156
