Changeset 560

Show
Ignore:
Timestamp:
05/23/08 07:10:35 (8 months ago)
Author:
LeoD
Message:

visited fog of war texture

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • trunk/run/data/shaders/combineLightmaps-pixel.glsl

    r555 r560  
    11uniform sampler2D lightmap; 
    22uniform sampler2D fogVisible; 
     3uniform sampler2D fogVisited; 
    34 
    45void main(void) 
    56{ 
    6     vec4 a = texture2D(lightmap, vec2(gl_TexCoord[0])); 
    7     vec4 b = texture2D(fogVisible, vec2(gl_TexCoord[0])); 
     7    vec4 a = texture2D(fogVisible, vec2(gl_TexCoord[0])); 
     8    vec4 b = texture2D(fogVisited, vec2(gl_TexCoord[0])); 
     9    vec4 c = texture2D(lightmap, vec2(gl_TexCoord[0])); 
    810 
    9     gl_FragColor = a * b
     11    gl_FragColor = max(a, b * 0.5f) * c
    1012} 
  • trunk/src/defend/FogOfWar.d

    r555 r560  
    99import gen.util.Sprite; 
    1010import gen.util.Profiler; 
    11 import gen.util.Bind; 
    1211import gen.math.Vector; 
    1312import gen.math.Rectangle; 
     
    2827    Framebuffer framebuffer; 
    2928    Framebuffer visibleBuffer; 
     29    Framebuffer visitedBuffer; 
    3030 
    3131    Sprite sprite; 
     
    3333    Texture circleTexture; 
    3434 
     35    bool foo; 
     36 
     37    void updateVisibleTexture() 
     38    { 
     39        with(renderer) 
     40        { 
     41            setRenderState(RenderState.Blending, true); 
     42         
     43            auto ratio = vec2.from(lightmap.dimension) / vec2.from(dimension); 
     44            auto scaleToOne = vec2(1.0f / sprite.width, 1.0f / sprite.height); 
     45         
     46            setFramebuffer(visibleBuffer); 
     47            clear(); 
     48             
     49            setBlendFunc(BlendFunc.One, BlendFunc.One); 
     50             
     51            foreach(object; gameObjects) 
     52            { 
     53                if(object.mayBeOrdered) 
     54                { 
     55                    auto sight = object.property(GameObject.Property.Sight); 
     56                    auto scaling = scaleToOne * sight; 
     57                    sprite.scaling = scaling * ratio; 
     58                     
     59                    auto position = (vec2(object.center.x, 
     60                                          dimension.y + object.center.z) - 
     61                                      
     62                                     scaling * sprite.width * 0.5f) * ratio; 
     63                     
     64                    sprite.render(position, circleTexture); 
     65                } 
     66            } 
     67             
     68            unsetFramebuffer(visibleBuffer); 
     69             
     70            sprite.scaling = vec2.one; 
     71             
     72            setRenderState(RenderState.Blending, false); 
     73        } 
     74    } 
     75     
     76    void updateVisitedTexture() 
     77    { 
     78        with(renderer) 
     79        { 
     80            setFramebuffer(visitedBuffer); 
     81 
     82            auto shader = Shader.get("data/shaders/copyVisibleFog.cfg"); 
     83            setShader(shader); 
     84             
     85            with(shader) 
     86            { 
     87                setUniform("fogVisible", 0); 
     88                setUniform("fogVisited", 1); 
     89            } 
     90             
     91            setTexture(1, visitedBuffer.texture); 
     92             
     93            sprite.render(vec2.zero, visibleBuffer.texture); 
     94             
     95            setShader(null); 
     96             
     97            unsetFramebuffer(visitedBuffer); 
     98        } 
     99    } 
     100     
     101    void combineTextures() 
     102    { 
     103        with(renderer) 
     104        { 
     105            setFramebuffer(framebuffer); 
     106            clear(); 
     107             
     108            auto shader = Shader.get("data/shaders/combineLightmaps.cfg"); 
     109            setShader(shader); 
     110                 
     111            with(shader) 
     112            { 
     113                setUniform("lightmap", 0); 
     114                setUniform("fogVisible", 1); 
     115                setUniform("fogVisited", 2); 
     116            } 
     117             
     118            setTexture(1, visibleBuffer.texture); 
     119            setTexture(2, visitedBuffer.texture); 
     120            sprite.render(vec2.zero, lightmap); 
     121             
     122            setShader(null); 
     123 
     124            unsetFramebuffer(framebuffer); 
     125        } 
     126    } 
     127 
    35128    void update() 
    36129    { 
    37130        profile!("fog of war") 
    38         ({ 
    39             auto ratio = vec2.from(lightmap.dimension) / vec2.from(dimension); 
    40             auto scaleToOne = vec2(1.0f / sprite.width, 1.0f / sprite.height); 
    41              
     131        ({           
    42132            with(renderer) 
    43133            { 
    44                 setRenderState(RenderState.Blending, true); 
    45134                setRenderState(RenderState.ZWrite, false); 
    46135                setRenderState(RenderState.DepthTest, false); 
    47              
    48                 // Render the visible texture 
     136                 
    49137                orthogonal(visibleBuffer.texture.dimension); 
    50138                identity(); 
    51              
    52                 setFramebuffer(visibleBuffer); 
    53                 clear(); 
    54139                 
    55                 setBlendFunc(BlendFunc.One, BlendFunc.One); 
     140                updateVisibleTexture(); 
     141                updateVisitedTexture(); 
     142                combineTextures(); 
    56143                 
    57                 foreach(object; gameObjects) 
    58                 { 
    59                     if(object.mayBeOrdered) 
    60                     { 
    61                         auto ti = object.typeInfo; 
    62                      
    63                         auto sight = object.property(GameObject.Property.Sight); 
    64                         auto scaling = scaleToOne * sight; 
    65                         sprite.scaling = scaling * ratio; 
    66                          
    67                         auto position = (vec2(object.center.x, 
    68                                               dimension.y + object.center.z) - 
    69                                           
    70                                          scaling * sprite.width * 0.5f) * ratio; 
    71                          
    72                         sprite.render(position, circleTexture); 
    73                     } 
    74                 } 
    75                  
    76                 unsetFramebuffer(visibleBuffer); 
    77                  
    78                 // Combine visible texture and lightmap 
    79                 setFramebuffer(framebuffer); 
    80                 clear(); 
    81                 identity(); 
    82                  
    83                 { 
    84                     auto shader = Shader.get("data/shaders/combineLightmaps.cfg"); 
    85                     setShader(shader); 
    86                      
    87                     with(shader) 
    88                     { 
    89                         setUniform("lightmap", 0); 
    90                         setUniform("fogVisible", 1); 
    91                     } 
    92                      
    93                     setTexture(1, visibleBuffer.texture); 
    94                      
    95                     sprite.scaling = vec2.one; 
    96                     sprite.render(vec2.zero, lightmap); 
    97                      
    98                     setShader(null); 
    99                 } 
     144                // nice usecase for some kind of effect/shader/wutevar abstraction 
    100145 
    101                 unsetFramebuffer(framebuffer); 
    102                  
    103                 setRenderState(RenderState.Blending, false); 
    104146                setRenderState(RenderState.ZWrite, true); 
    105147                setRenderState(RenderState.DepthTest, true); 
     
    131173        framebuffer = renderer.createFramebuffer(lightmap.dimension); 
    132174        visibleBuffer = renderer.createFramebuffer(lightmap.dimension); 
     175        visitedBuffer = renderer.createFramebuffer(lightmap.dimension); 
    133176        circleTexture = generateCircle(); 
    134177        sprite = new Sprite(lightmap.dimension, true); 
     
    141184        delete framebuffer; 
    142185        delete visibleBuffer; 
     186        delete visitedBuffer; 
    143187        delete circleTexture; 
    144188        delete sprite; 
     
    147191    Texture texture() 
    148192    { 
    149         //return lightmap; 
    150193        return framebuffer.texture; 
    151194    } 
  • trunk/src/defend/Graphics.d

    r551 r560  
    6868        renderToBuffer = defendConfig.graphics.objects_glow ? true : false; 
    6969         
    70         glowPostShader = Shader.acquire("data/shaders/modelglowpost.cfg"); 
     70        glowPostShader = Shader.acquire("data/shaders/modelGlowPost.cfg"); 
    7171         
    7272        // Create the main camera 
     
    7777            bufferSprite = new Sprite(mainBuffer.texture, true); 
    7878            bufferSprite.scaling = vec2(renderer.width / cast(float)size.x, renderer.height / cast(float)size.y); 
    79             //Stdout(vec2(renderer.width / size.x, renderer.height / size.y)).newline; 
    8079        } 
    8180        else 
     
    139138        Shader.release(glowPostShader); 
    140139         
     140        if(renderToBuffer) 
     141        { 
     142            delete bufferSprite; 
     143            delete mainBuffer; 
     144        } 
     145         
    141146        sceneGraph.reset(); 
    142147        MeshNode.memoryPool.release(); 
  • trunk/src/gen/rend/opengl/Shader.d

    r548 r560  
    179179 
    180180public: 
     181    mixin MAllocator; 
     182 
    181183    this(char[] file) 
    182184    { 
  • trunk/src/gen/util/GameState.d

    r547 r560  
    8080        if(memoryUsageBefore != -1) 
    8181        { 
    82             if(memoryUsageBefore < getMemoryUsage()
     82            if(getMemoryUsage() > memoryUsageBefore
    8383            { 
    8484                logger.warn("gamestate `{}' is not clean, {} bytes of memory are left",