Changeset 592

Show
Ignore:
Timestamp:
06/01/08 10:42:15 (7 months ago)
Author:
LeoD
Message:

--

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • trunk/run/defend.cfg

    r548 r592  
    3939    // object's team colors glow 
    4040    objects_glow = 0 
     41     
     42    // use a shader for rendering the terrain? 
     43    terrain_use_shaders = 0 
  • trunk/src/defend/Config.d

    r583 r592  
    5555              "int graphics.lighting;" 
    5656              "int graphics.objects_lightmap;" 
    57               "int graphics.objects_glow;") 
     57              "int graphics.objects_glow;" 
     58              "int graphics.terrain_use_shaders;") 
    5859               
    5960              defendConfig; 
  • trunk/src/defend/game/Game.d

    r590 r592  
    209209    void logMemoryUsage() 
    210210    { 
    211         logger.trace("manual memory usage {}b ({}kb), gc usage {}b ({}kb)", 
    212                      getMemoryUsage(), 
     211        logger.trace("manual memory {}kb, gc {}kb, overall {}kb", 
    213212                     getMemoryUsage() / 1024, 
    214                      gc_stats().usedsize
    215                      gc_stats().usedsize / 1024); 
     213                     gc_stats().usedsize / 1024
     214                     (getMemoryUsage() + gc_stats().usedsize) / 1024); 
    216215    } 
    217216     
     
    275274 
    276275        // Fog of war 
    277         fogOfWar = new FogOfWar(gameObjects, terrain.lightmapTexture, vec2i.from(terrain.dimension), true); 
     276        fogOfWar = new FogOfWar(gameObjects, terrain.lightmapTexture, vec2i.from(terrain.dimension), false); 
    278277 
    279278        // Create the HUD 
     
    295294        //dumpGCStats(); 
    296295         
    297         sceneGraph.debugVisible = true; 
     296        //sceneGraph.debugVisible = true; 
    298297         
    299298        taskManager.addRepeatedTask(&InputChannel.global.update, 100); 
  • trunk/src/defend/game/hud/MiniMap.d

    r583 r592  
    33import tango.io.Stdout; 
    44 
     5import engine.util.Debug; 
    56import engine.core.TaskManager; 
    67import engine.image.Image; 
     
    107108        renderer.setTexture(1, fogOfWar.texture); 
    108109         
     110        int a, b; 
     111        glGetIntegerv(GL_BLEND_SRC, &a); 
     112        glGetIntegerv(GL_BLEND_DST, &b); 
     113 
    109114        for(uint i = 0; i < 2; i++) 
    110115        { 
     
    130135        renderer.setTexture(0, null); 
    131136        renderer.setTexture(1, null); 
    132  
    133         /+sprite.render(position); 
    134          
    135         renderer.setBlendFunc(BlendFunc.DstColor, BlendFunc.OneMinusDstColor); 
    136         sprite.render(position, fogOfWar.texture);+/ 
    137137         
    138138        renderer.setRenderState(RenderState.Blending, false); 
  • trunk/src/defend/sim/obj/Unit.d

    r590 r592  
    402402                    bool considerObjects = false, bool isFinalGoal = true) 
    403403    { 
     404        if(p == mapPos) 
     405            return; 
     406     
    404407        pause = 0; 
    405      
     408        
    406409        debug(gameobjects) 
    407410            logger.trace("moving to [{}|{}] (order: {})", 
     
    426429            if(path.length) 
    427430            { 
     431                assert(path[$ - 1] == p); 
     432             
    428433                if(!checkCollision(path[0])) 
    429434                { 
     
    431436                 
    432437                    status = Status.Moving; 
    433                  
     438                    
    434439                    moveToPoint(path[0]); 
    435440                     
     
    768773                { 
    769774                    debug(gameobjects) 
    770                         logger.spam("path finished"); 
    771                      
     775                        logger.spam("path finished, reached {}", mapPos); 
     776 
    772777                    status = Status.Idle; 
    773778                    path = null; 
     
    778783                    { 
    779784                        debug(gameobjects) 
    780                             logger.spam("moving to the final goal now"); 
     785                            logger.spam("moving to the final goal ({}) now", finalGoal); 
    781786                         
    782787                        move(finalGoal, false, false, true); 
     
    793798                    path = path[1 .. $]; 
    794799                    moveToPoint(path[0]); 
     800                    assert(mapPos == path[0]); 
    795801                } 
    796802            } 
     
    801807                assert(percent >= 0.0f && percent <= 1.0f); 
    802808                 
     809                // interpolation 
    803810                currentRealPos = lastWayPoint * (1.0 - percent) + nextWayPoint * percent; 
    804                 //realPos = currentRealPos; 
    805             } 
    806  
    807             // interpolation 
    808             calcNextRealPos(); 
     811                calcNextRealPos(); 
     812            } 
    809813             
    810814            break; 
  • trunk/src/defend/terrain/Terrain.d

    r589 r592  
    66import derelict.opengl.extension.arb.multitexture; 
    77 
     8import engine.util.Debug; 
    89import engine.math.Ray; 
    910import engine.math.Misc; 
     
    5657    Texture[3] diffuseMaps; 
    5758    Texture alphaMap; 
     59    Texture[3] alphaMaps; 
    5860     
    5961    Shader shader; 
     
    247249    { 
    248250        Image map = new Image(128, 128, ImageFormat.RGB); 
    249      
     251 
    250252        foreach(i, diffuseMap; diffuseMaps) 
    251253        { 
     254            Image alphaMap = new Image(128, 128, ImageFormat.A); 
     255         
    252256            for(uint x = 0; x < map.width; x++) 
    253257            { 
     
    255259                { 
    256260                    auto height = getHeightForImage(x, y, 128); 
    257  
    258                     map.setByte(x, y, i, 
    259                                 ((height >= terrainMinRange[i] && 
    260                                   height <= terrainMaxRange[i]) ? 255 : 0)); 
     261                    auto value = ((height >= terrainMinRange[i] && 
     262                                  height <= terrainMaxRange[i]) ? 255 : 0); 
     263                     
     264                    map.setByte(x, y, i, value); 
     265                    alphaMap.setAlpha(x, y, value); 
    261266                } 
    262267            } 
     268             
     269            alphaMaps[i] = renderer.createTexture(alphaMap); 
    263270        } 
    264271         
     
    329336    mixin MAllocator; 
    330337 
    331     Texture lightmapTexture; // tmp public 
     338    Texture lightmapTexture; 
    332339    TerrainHeightmap heightmap() { return _heightmap; } 
    333340 
     
    381388    override void process(Camera camera) 
    382389    { 
    383         sceneGraph.addToRender(RenderPass.Solid, this); 
     390        if(defendConfig.graphics.terrain_use_shaders) 
     391            sceneGraph.addToRender(RenderPass.Solid, this); 
     392        else 
     393            sceneGraph.addToRender(RenderPass.Solid, this, &renderNoShaders); 
     394         
     395        debug if(sceneGraph.debugNodeVisible(this)) 
     396            sceneGraph.addToRender(RenderPass.Debug, this, &renderDebug); 
    384397    } 
    385398     
     
    429442            renderer.setTexture(1, null); 
    430443            renderer.setTexture(0, null); 
    431  
    432             debug if(sceneGraph.debugNodeVisible(this)) 
    433             { 
    434                 //foreach(patch; patches) if(patch.visible) 
    435                 //  renderer.drawBoundingBox(patch.boundingBox, vec3(0, 0.7, 1)); 
    436                      
    437                 renderer.setRenderState(RenderState.Wireframe, true); 
    438                 renderer.setRenderState(RenderState.Blending, true); 
    439                 renderer.setColor(vec4(1, 1, 1, 0.5)); 
    440  
    441                 renderer.translate(0, 0.1, 0); 
    442  
    443                 foreach(patch; patches) 
    444                     if(patch.visible) patch.render(); 
    445  
    446                 renderer.setRenderState(RenderState.Blending, false); 
    447                 renderer.setRenderState(RenderState.Wireframe, false); 
    448                              
    449                 version(none) for(uint x = 0; x < dimension.x; x++) 
    450                 { 
    451                     for(uint y = 0; y < dimension.y; y++) 
    452                     { 
    453                         auto visible = fogOfWar.isVisible(x, y); 
    454                          
    455                         if(visible) 
    456                         { 
    457                             auto pos = getWorldPos(x, y); 
    458                             renderer.drawLine(pos, pos + vec3(0, 0.1, 0), vec3(1, 0, 0)); 
    459                         } 
    460                     } 
    461                 } 
    462             } 
    463444             
    464445            renderer.popMatrix(); 
     
    467448            renderer.setRenderState(RenderState.BackfaceCulling, false); 
    468449        }); 
     450    } 
     451     
     452    void renderNoShaders() 
     453    { 
     454        profile!("terrain render") 
     455        ({ 
     456            renderer.pushMatrix(); 
     457            renderer.mulMatrix(absoluteModelview); 
     458 
     459            renderer.setRenderState(RenderState.Blending, false); 
     460            renderer.setRenderState(RenderState.BackfaceCulling, true); 
     461 
     462            renderer.setBlendFunc(BlendFunc.SrcAlpha, BlendFunc.OneMinusSrcAlpha); 
     463            //renderer.setBlendFunc(BlendFunc.SrcAlpha, BlendFunc.One); 
     464 
     465            renderer.setTexture(3, null); 
     466            renderer.setTexture(2, null); 
     467            renderer.setTexture(1, null); 
     468            renderer.setTexture(0, null); 
     469 
     470            //renderer.setTextureMode(1, TextureMode.Replace); 
     471            //renderer.setTexture(2, fogOfWar.texture); 
     472 
     473            uint k = 0; 
     474         
     475            void renderPatches() 
     476            { 
     477                /+for(uint i_ = 0; i_ < alphaMaps.length * 2; i_++) 
     478                { 
     479                    int i = i_ / 2; 
     480                 
     481                    if(i_ & 1) 
     482                        renderer.setBlendFunc(BlendFunc.SrcAlpha, BlendFunc.One); 
     483                    else 
     484                        renderer.setBlendFunc(BlendFunc.SrcAlpha, BlendFunc.OneMinusSrcAlpha); 
     485                     
     486                    renderer.setTexture(0, alphaMaps[1]); 
     487                    renderer.setTexture(1, diffuseMaps[1]); 
     488                     
     489                    foreach(patch; patches) 
     490                    { 
     491                        if(patch.visible //&& 
     492                        /+   patch.maxHeight[i] != -10_000 && 
     493                           patch.minHeight[i] != 10_000 && 
     494                           patch.maxHeight[i] >= terrainMinRange[i] && 
     495                           patch.maxHeight[i] <= terrainMaxRange[i]+/) 
     496                        { 
     497                            patch.render(); 
     498                            k++; 
     499                        } 
     500                    } 
     501                }+/ 
     502 
     503                renderer.setTexture(0, alphaMaps[1]); 
     504                renderer.setTexture(1, diffuseMaps[1]); 
     505                 
     506                foreach(patch; patches) patch.render(); 
     507 
     508                renderer.setTexture(0, alphaMaps[0]); 
     509                renderer.setTexture(1, diffuseMaps[0]); 
     510                 
     511                foreach(patch; patches) patch.render(); 
     512            } 
     513 
     514            renderPatches(); 
     515 
     516            renderer.setTexture(3, null); 
     517            renderer.setTexture(2, null); 
     518            renderer.setTexture(1, null); 
     519            renderer.setTexture(0, null); 
     520 
     521            renderer.popMatrix(); 
     522             
     523            //renderer.setRenderState(RenderState.Blending, false); 
     524            renderer.setRenderState(RenderState.BackfaceCulling, false); 
     525        });      
     526    } 
     527     
     528    debug void renderDebug() 
     529    { 
     530        //foreach(patch; patches) if(patch.visible) 
     531        //  renderer.drawBoundingBox(patch.boundingBox, vec3(0, 0.7, 1)); 
     532             
     533        renderer.setRenderState(RenderState.Wireframe, true); 
     534        renderer.setRenderState(RenderState.Blending, true); 
     535        renderer.setColor(vec4(1, 1, 1, 0.5)); 
     536 
     537        renderer.translate(0, 0.1, 0); 
     538 
     539        foreach(patch; patches) 
     540            if(patch.visible) patch.render(); 
     541 
     542        renderer.setRenderState(RenderState.Blending, false); 
     543        renderer.setRenderState(RenderState.Wireframe, false); 
     544                     
     545        version(none) for(uint x = 0; x < dimension.x; x++) 
     546        { 
     547            for(uint y = 0; y < dimension.y; y++) 
     548            { 
     549                auto visible = fogOfWar.isVisible(x, y); 
     550                 
     551                if(visible) 
     552                { 
     553                    auto pos = getWorldPos(x, y); 
     554                    renderer.drawLine(pos, pos + vec3(0, 0.1, 0), vec3(1, 0, 0)); 
     555                } 
     556            } 
     557        } 
    469558    } 
    470559     
  • trunk/src/engine/rend/Renderer.d

    r583 r592  
    106106    Zero, 
    107107    One, 
     108    SrcColor, 
     109    OneMinusSrcColor, 
    108110    DstColor, 
    109111    OneMinusDstColor, 
  • trunk/src/engine/rend/opengl/Renderer.d

    r583 r592  
    7979        blendFuncMap[BlendFunc.Zero] = GL_ZERO; 
    8080        blendFuncMap[BlendFunc.One] = GL_ONE; 
     81        blendFuncMap[BlendFunc.SrcColor] = GL_SRC_COLOR; 
     82        blendFuncMap[BlendFunc.OneMinusSrcColor] = GL_ONE_MINUS_SRC_COLOR; 
    8183        blendFuncMap[BlendFunc.DstColor] = GL_DST_COLOR; 
    8284        blendFuncMap[BlendFunc.OneMinusDstColor] = GL_ONE_MINUS_DST_COLOR; 
     
    262264        setRenderState(RenderState.DepthTest, true); 
    263265        setRenderState(RenderState.Texture, true); 
    264         glDepthFunc(GL_LESS); 
     266        glDepthFunc(GL_LEQUAL); 
    265267    } 
    266268