Changeset 560
- Timestamp:
- 05/23/08 07:10:35 (8 months ago)
- Files:
-
- trunk/run/data/shaders/combineLightmaps-pixel.glsl (modified) (1 diff)
- trunk/run/data/shaders/copyVisibleFog-pixel.glsl (added)
- trunk/run/data/shaders/copyVisibleFog-vertex.glsl (added)
- trunk/run/data/shaders/copyVisibleFog.cfg (added)
- trunk/src/defend/FogOfWar.d (modified) (6 diffs)
- trunk/src/defend/Graphics.d (modified) (3 diffs)
- trunk/src/gen/rend/opengl/Shader.d (modified) (1 diff)
- trunk/src/gen/util/GameState.d (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
trunk/run/data/shaders/combineLightmaps-pixel.glsl
r555 r560 1 1 uniform sampler2D lightmap; 2 2 uniform sampler2D fogVisible; 3 uniform sampler2D fogVisited; 3 4 4 5 void main(void) 5 6 { 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])); 8 10 9 gl_FragColor = a * b;11 gl_FragColor = max(a, b * 0.5f) * c; 10 12 } trunk/src/defend/FogOfWar.d
r555 r560 9 9 import gen.util.Sprite; 10 10 import gen.util.Profiler; 11 import gen.util.Bind;12 11 import gen.math.Vector; 13 12 import gen.math.Rectangle; … … 28 27 Framebuffer framebuffer; 29 28 Framebuffer visibleBuffer; 29 Framebuffer visitedBuffer; 30 30 31 31 Sprite sprite; … … 33 33 Texture circleTexture; 34 34 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 35 128 void update() 36 129 { 37 130 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 ({ 42 132 with(renderer) 43 133 { 44 setRenderState(RenderState.Blending, true);45 134 setRenderState(RenderState.ZWrite, false); 46 135 setRenderState(RenderState.DepthTest, false); 47 48 // Render the visible texture 136 49 137 orthogonal(visibleBuffer.texture.dimension); 50 138 identity(); 51 52 setFramebuffer(visibleBuffer);53 clear();54 139 55 setBlendFunc(BlendFunc.One, BlendFunc.One); 140 updateVisibleTexture(); 141 updateVisitedTexture(); 142 combineTextures(); 56 143 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 100 145 101 unsetFramebuffer(framebuffer);102 103 setRenderState(RenderState.Blending, false);104 146 setRenderState(RenderState.ZWrite, true); 105 147 setRenderState(RenderState.DepthTest, true); … … 131 173 framebuffer = renderer.createFramebuffer(lightmap.dimension); 132 174 visibleBuffer = renderer.createFramebuffer(lightmap.dimension); 175 visitedBuffer = renderer.createFramebuffer(lightmap.dimension); 133 176 circleTexture = generateCircle(); 134 177 sprite = new Sprite(lightmap.dimension, true); … … 141 184 delete framebuffer; 142 185 delete visibleBuffer; 186 delete visitedBuffer; 143 187 delete circleTexture; 144 188 delete sprite; … … 147 191 Texture texture() 148 192 { 149 //return lightmap;150 193 return framebuffer.texture; 151 194 } trunk/src/defend/Graphics.d
r551 r560 68 68 renderToBuffer = defendConfig.graphics.objects_glow ? true : false; 69 69 70 glowPostShader = Shader.acquire("data/shaders/model glowpost.cfg");70 glowPostShader = Shader.acquire("data/shaders/modelGlowPost.cfg"); 71 71 72 72 // Create the main camera … … 77 77 bufferSprite = new Sprite(mainBuffer.texture, true); 78 78 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;80 79 } 81 80 else … … 139 138 Shader.release(glowPostShader); 140 139 140 if(renderToBuffer) 141 { 142 delete bufferSprite; 143 delete mainBuffer; 144 } 145 141 146 sceneGraph.reset(); 142 147 MeshNode.memoryPool.release(); trunk/src/gen/rend/opengl/Shader.d
r548 r560 179 179 180 180 public: 181 mixin MAllocator; 182 181 183 this(char[] file) 182 184 { trunk/src/gen/util/GameState.d
r547 r560 80 80 if(memoryUsageBefore != -1) 81 81 { 82 if( memoryUsageBefore < getMemoryUsage())82 if(getMemoryUsage() > memoryUsageBefore) 83 83 { 84 84 logger.warn("gamestate `{}' is not clean, {} bytes of memory are left",
