Changeset 555
- Timestamp:
- 05/23/08 05:50:23 (8 months ago)
- Files:
-
- trunk/run/data/shaders/combineLightmaps-pixel.glsl (added)
- trunk/run/data/shaders/combineLightmaps-vertex.glsl (added)
- trunk/run/data/shaders/combineLightmaps.cfg (added)
- trunk/run/data/shaders/model-pixel.glsl (modified) (1 diff)
- trunk/run/data/shaders/modelGlow.cfg (modified) (1 diff)
- trunk/run/data/shaders/terrain-pixel.glsl (modified) (2 diffs)
- trunk/src/defend/FogOfWar.d (modified) (4 diffs)
- trunk/src/defend/Main.d (modified) (2 diffs)
- trunk/src/defend/objects/SceneNode.d (modified) (3 diffs)
- trunk/src/defend/objects/types/Building.d (modified) (2 diffs)
- trunk/src/defend/objects/types/Citizen.d (modified) (5 diffs)
- trunk/src/defend/objects/types/House.d (modified) (1 diff)
- trunk/src/defend/objects/types/Resource.d (modified) (3 diffs)
- trunk/src/defend/objects/types/Unit.d (modified) (2 diffs)
- trunk/src/defend/terrain/Ranges.d (modified) (1 diff)
- trunk/src/gen/gui/Renderer.d (modified) (1 diff)
- trunk/src/gen/rend/Renderer.d (modified) (1 diff)
- trunk/src/gen/rend/opengl/Renderer.d (modified) (1 diff)
- trunk/src/gen/sound/SoundSystem.d (modified) (3 diffs)
- trunk/src/gen/sound/data/Wav.d (modified) (3 diffs)
- trunk/src/gen/sound/openal/SoundSystem.d (modified) (5 diffs)
- trunk/src/windefend.cbp (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
trunk/run/data/shaders/model-pixel.glsl
r551 r555 24 24 #if defined(OBJECTS_LIGHTMAP) 25 25 vec4 light = texture2D(lightTexture, vec2(gl_TexCoord[1])); 26 gl_FragColor *= light ;26 gl_FragColor *= light * 2; 27 27 #endif 28 28 trunk/run/data/shaders/modelGlow.cfg
r552 r555 1 pixel_shader = "model glow-pixel.glsl"2 vertex_shader = "model glow-vertex.glsl"1 pixel_shader = "modelGlow-pixel.glsl" 2 vertex_shader = "modelGlow-vertex.glsl" trunk/run/data/shaders/terrain-pixel.glsl
r551 r555 19 19 20 20 vec4 a = texture2D(alphaMap, coord0); 21 vec4 l = texture2D(lightMap, coord0); 22 21 23 vec4 c1 = texture2D(texture1, coord1); 22 24 vec4 c2 = texture2D(texture2, coord1); 23 25 vec4 c3 = texture2D(texture3, coord1); 24 vec4 l = texture2D(lightMap, coord0);25 26 26 27 float inverse = 1.0f / (a.r + a.g + a.b); … … 28 29 c2 *= a.g * inverse; 29 30 c3 *= a.b * inverse; 30 31 gl_FragColor = (c1 + c2 + c3) * l;31 32 gl_FragColor = (c1 + c2 + c3) * (l * 2); 32 33 33 34 #if defined(SHADOWMAPPING) trunk/src/defend/FogOfWar.d
r551 r555 5 5 import gen.core.TaskManager; 6 6 import gen.rend.Renderer; 7 import gen.image.Image; 7 8 import gen.util.Log; 8 9 import gen.util.Sprite; 9 import gen.image.Image; 10 import gen.util.Profiler; 11 import gen.util.Bind; 10 12 import gen.math.Vector; 11 13 import gen.math.Rectangle; … … 33 35 void update() 34 36 { 35 auto ratio = vec2.from(lightmap.dimension) / vec2.from(dimension); 36 auto scaleToOne = vec2(1.0f / sprite.width, 1.0f / sprite.height); 37 38 with(renderer) 39 { 40 setRenderState(RenderState.Blending, true); 41 setRenderState(RenderState.ZWrite, false); 42 setRenderState(RenderState.DepthTest, false); 43 44 // Render the visible texture 45 orthogonal(visibleBuffer.texture.dimension); 46 identity(); 47 48 setFramebuffer(visibleBuffer); 49 clear(); 37 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); 50 41 51 setBlendFunc(BlendFunc.One, BlendFunc.One); 42 with(renderer) 43 { 44 setRenderState(RenderState.Blending, true); 45 setRenderState(RenderState.ZWrite, false); 46 setRenderState(RenderState.DepthTest, false); 52 47 53 foreach(object; gameObjects) 54 { 55 if(object.mayBeOrdered) 48 // Render the visible texture 49 orthogonal(visibleBuffer.texture.dimension); 50 identity(); 51 52 setFramebuffer(visibleBuffer); 53 clear(); 54 55 setBlendFunc(BlendFunc.One, BlendFunc.One); 56 57 foreach(object; gameObjects) 56 58 { 57 auto ti = object.typeInfo; 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 } 58 75 59 auto sight = object.property(GameObject.Property.Sight); 60 auto scaling = scaleToOne * sight; 61 sprite.scaling = scaling * ratio; 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); 62 86 63 auto position = (vec2(object.center.x, 64 dimension.y + object.center.z) - 65 66 scaling * sprite.width * 0.5f) * ratio; 87 with(shader) 88 { 89 setUniform("lightmap", 0); 90 setUniform("fogVisible", 1); 91 } 67 92 68 sprite.render(position, circleTexture); 93 setTexture(1, visibleBuffer.texture); 94 95 sprite.scaling = vec2.one; 96 sprite.render(vec2.zero, lightmap); 97 98 setShader(null); 69 99 } 100 101 unsetFramebuffer(framebuffer); 102 103 setRenderState(RenderState.Blending, false); 104 setRenderState(RenderState.ZWrite, true); 105 setRenderState(RenderState.DepthTest, true); 70 106 } 71 72 unsetFramebuffer(visibleBuffer); 73 74 // Combine visible texture and lightmap 75 setFramebuffer(framebuffer); 76 clear(); 77 identity(); 78 79 //sprite.render(vec2.zero, lightmap); 80 81 //setBlendFunc(BlendFunc.SrcAlpha, BlendFunc.OneMinusSrcAlpha); 82 //sprite.render(vec2.zero, visibleBuffer.texture); 83 84 unsetFramebuffer(framebuffer); 85 86 setRenderState(RenderState.Blending, false); 87 setRenderState(RenderState.ZWrite, true); 88 setRenderState(RenderState.DepthTest, true); 89 } 90 91 //terrain.lightmapTexture = texture; 107 }); 92 108 } 93 109 94 110 // Generate a circle, which can be rendered on the fog of war texture 95 Texture generateCircle(vec2i size = vec2i(64, 64), float intensity = 1.5)111 static Texture generateCircle(vec2i size = vec2i(64, 64), float intensity = 1.3) 96 112 { 97 113 scope image = new Image(size.tuple, ImageFormat.A); 98 114 vec2 center = vec2.from(size) / 2.f; 99 115 100 for(uint x = 0; x < size.x; x++) 101 { 102 for(uint y = 0; y < size.y; y++) 103 { 104 auto value = cast(ubyte)clamp((center.x - (center - vec2(x, y)).length()) / center.y * 255.0f * intensity, 0, 255); 105 image.setAlpha(x, y, value); 106 } 107 } 116 for(uint x = 0; x < size.x; x++) for(uint y = 0; y < size.y; y++) 117 image.setAlpha(x, y, cast(ubyte)clamp((center.x - (center - vec2(x, y)).length()) / center.y * 255.0f * intensity, 0, 255)); 108 118 109 119 return renderer.createTexture(image); … … 122 132 visibleBuffer = renderer.createFramebuffer(lightmap.dimension); 123 133 circleTexture = generateCircle(); 124 sprite = new Sprite(lightmap.dimension );134 sprite = new Sprite(lightmap.dimension, true); 125 135 126 taskManager.addRepeatedTask(&update, 25);136 taskManager.addRepeatedTask(&update, 15); 127 137 } 128 138 … … 137 147 Texture texture() 138 148 { 139 return visibleBuffer.texture; 149 //return lightmap; 150 return framebuffer.texture; 140 151 } 141 152 } trunk/src/defend/Main.d
r550 r555 18 18 import gen.rend.opengl.Renderer : OGLRenderer; 19 19 import gen.scene.Graph : SceneGraph, sceneGraph; 20 import gen.sound.SoundSystem : SoundSystem ;20 import gen.sound.SoundSystem : SoundSystem, soundSystem; 21 21 import gen.sound.openal.SoundSystem : OALSoundSystem; 22 22 import gen.util.FPS : FPSCounter; … … 286 286 // Create the sound system 287 287 logger.info("creating sound system"); 288 //soundSystem = new OALSoundSystem();288 soundSystem = new OALSoundSystem(); 289 289 290 290 // Create the scene graph trunk/src/defend/objects/SceneNode.d
r551 r555 177 177 { 178 178 if(defendConfig.graphics.objects_glow) 179 glowShader = Shader.acquire("data/shaders/model glow.cfg");179 glowShader = Shader.acquire("data/shaders/modelGlow.cfg"); 180 180 } 181 181 … … 195 195 function(NodeHolder[] nodes, Camera camera) 196 196 { 197 auto shader = Shader.acquire("data/shaders/model glow.cfg");197 auto shader = Shader.acquire("data/shaders/modelGlow.cfg"); 198 198 renderer.setShader(shader); 199 199 }, … … 201 201 function 202 202 { 203 Shader.release(Shader.get("data/shaders/model glow.cfg"));203 Shader.release(Shader.get("data/shaders/modelGlow.cfg")); 204 204 renderer.setShader(null); 205 205 trunk/src/defend/objects/types/Building.d
r551 r555 448 448 449 449 if(status == Status.BuildUp) 450 { 450 451 _sceneNode.scaling = vec3(typeInfo.scale.x, 451 452 typeInfo.scale.y * 0.1f, 452 453 typeInfo.scale.z); 454 455 propertyFactors[GameObject.Property.Sight] = 0.1; 456 } 453 457 } 454 458 … … 469 473 _sceneNode.scaling = typeInfo.scale; 470 474 status = Status.Finished; 475 propertyFactors[GameObject.Property.Sight] = 1; 471 476 } 472 477 } trunk/src/defend/objects/types/Citizen.d
r551 r555 98 98 override OrderError checkOrder(GameObject[] objects, OrderPlaceObject* order) 99 99 { 100 return OrderError.Okay; 100 auto ti = gameObjects.getTypeInfo(owner, order.objectType); 101 102 return ti.isPlaceable(MapPos(order.x, order.y)) ? OrderError.Okay : OrderError.Error; 101 103 } 102 104 … … 109 111 { 110 112 auto owner = objects[0].owner; 111 112 auto ti = gameObjects.getTypeInfo(owner, order.objectType);113 if(!ti.isPlaceable(MapPos(order.x, order.y)))114 return;115 113 116 114 auto building = cast(Building)gameObjects.localCreate(owner, order.objectType, … … 262 260 if(building.status != Building.Status.BuildUp) 263 261 { 264 debug( citizen)265 trace("building is finished, stopping to build");262 debug(gameoobjects) 263 logger.info("building is finished, stopping to build"); 266 264 267 265 status = Unit.Status.Idle; … … 273 271 { 274 272 // TODO: uhm, where's logger gone? D: 275 trace("trying to build while not staying nearby a building"); 273 debug(gameoobjects) 274 logger.warn("trying to build while not staying nearby a building"); 275 276 276 status = Unit.Status.Idle; 277 277 } … … 303 303 if(resource.whacked) 304 304 { 305 debug( citizen)306 trace("resource is whacked, stopping to mine it");305 debug(gameoobjects) 306 logger.info("resource is whacked, stopping to mine it"); 307 307 308 308 status = Unit.Status.Idle; trunk/src/defend/objects/types/House.d
r551 r555 19 19 model = "data/models/house/model.obj"; 20 20 parentType = "building"; 21 dimension = vec2i( 4, 6);21 dimension = vec2i(5, 6); 22 22 posOffset = vec3(2, 0.2, -2.5); 23 23 scale = vec3(0.4, 0.4, 0.4); trunk/src/defend/objects/types/Resource.d
r549 r555 6 6 import gen.scene.Graph; 7 7 import gen.scene.Node; 8 import gen.scene.ModelNode;9 8 10 9 import defend.terrain.Terrain; 10 import defend.player.Manager; 11 11 import defend.objects.Core; 12 import defend. player.Manager;12 import defend.objects.SceneNode; 13 13 14 14 static this() … … 81 81 { 82 82 protected: 83 ModelNode_sceneNode;83 GameObjectModel _sceneNode; 84 84 ResourceTypeInfo resourceInfo; 85 85 … … 98 98 amountLeft = resourceInfo.initialAmount; 99 99 100 _sceneNode = new ModelNode(sceneGraph.root, typeInfo.model);100 _sceneNode = new GameObjectModel(sceneGraph.root, typeInfo.model, vec3.one); 101 101 102 102 realPos = terrain.getWorldPos(mapPos); trunk/src/defend/objects/types/Unit.d
r551 r555 18 18 import gen.scene.ModelNode; 19 19 import gen.rend.Renderer; 20 import gen.sound.SoundSystem; 20 21 21 22 import defend.Map; … … 157 158 158 159 override void onOrder(GameObject[] objects, OrderMapRightClick* order) 159 { 160 { 160 161 // TODO: Group pathfinding 161 162 iterateObjects(objects, (Unit object) trunk/src/defend/terrain/Ranges.d
r507 r555 3 3 //float[3] terrainMinRange = [ 0, 5, 12 ]; 4 4 //float[3] terrainMaxRange = [ 10, 16, 21 ]; 5 float[3] terrainMinRange = [ 0, 1 , 15 ];5 float[3] terrainMinRange = [ 0, 1.7, 15 ]; 6 6 float[3] terrainMaxRange = [ 2, 16, 21 ]; trunk/src/gen/gui/Renderer.d
r541 r555 105 105 106 106 glDisable(GL_BLEND); 107 renderer.setColor(vec 3.one);107 renderer.setColor(vec4.one); 108 108 } 109 109 } trunk/src/gen/rend/Renderer.d
r551 r555 435 435 Window window(); 436 436 437 /** 438 * Temporary 439 */ 440 void setColor(vec3 color); 437 // tmp 438 void setColor(vec4 color); 439 final void setColor(vec3 color) { setColor(vec4(color.tuple, 1)); } 441 440 442 441 /** trunk/src/gen/rend/opengl/Renderer.d
r551 r555 643 643 } 644 644 645 override void setColor(vec 3color)646 { 647 glColor 3f(color.tuple);645 override void setColor(vec4 color) 646 { 647 glColor4f(color.tuple); 648 648 } 649 649 trunk/src/gen/sound/SoundSystem.d
r343 r555 13 13 * May be used by SoundSystem implementations. 14 14 */ 15 template MSoundManager() 15 template MSoundManager() // TODO: MResource should be used 16 16 { 17 17 import gen.sound.data.Wav; … … 25 25 if(sound is null) 26 26 { 27 logger.info("loading sound from `{}'", file); 27 28 SoundData data = new WAVSoundData(file); 28 29 … … 62 63 * Set the listener's position. 63 64 */ 64 void setListenerPosition( float x, float y, float z);65 void setListenerPosition(vec3 v); 65 66 66 67 /** 67 68 * Set the listener's velocity. 68 69 */ 69 void setListenerVelocity( float x, float y, float z);70 void setListenerVelocity(vec3 v); 70 71 71 72 /** 72 73 * Set the listener's orientation. 73 74 */ 74 void setListenerOrientation( float dx, float dy, float dz, float ux, float uy, float uz);75 void setListenerOrientation(vec3 d, vec3 u); 75 76 76 77 /** 77 78 * Play a sound. 78 79 */ 80 void play(char[] file); 79 81 void play(SoundSource sound); 80 82 } trunk/src/gen/sound/data/Wav.d
r343 r555 8 8 import gen.sound.data.Data; 9 9 10 private align(1) struct RIFFHeader10 private extern(C) 11 11 { 12 char[4] riff; 13 uint size; 14 char[4] format; 15 } 12 struct RIFFHeader 13 { 14 char[4] riff; 15 uint size; 16 char[4] format; 17 } 16 18 17 private align(1)struct ChunkHeader18 {19 char[4] type;20 uint size;21 }19 struct ChunkHeader 20 { 21 char[4] type; 22 uint size; 23 } 22 24 23 private align(1) struct WaveFormat 24 { 25 short format; 26 short channels; 27 uint samples; 28 uint bytes; 29 short blockalign; 30 short bits; 31 short size; 25 struct WaveFormat 26 { 27 short format; 28 short channels; 29 uint samples; 30 uint bytes; 31 short blockalign; 32 short bits; 33 short size; 34 } 32 35 } 33 36 … … 44 47 this(char[] name) 45 48 { 46 scope auto file = new FileConduit(name); 49 scope file = new FileConduit(name); 50 scope(exit) file.close(); 47 51 48 52 { 49 53 RIFFHeader header; 50 54 file.input.read((cast(void*)&header)[0 .. header.sizeof]); 55 51 56 assert(toLower(header.riff) == "riff"); 52 57 assert(toLower(header.format) == "wave"); 58 59 _size = header.size; 53 60 } 54 61 55 62 WaveFormat format; 63 bool hasFormat; 56 64 57 65 while(true) … … 66 74 assert(header.size <= format.sizeof); 67 75 file.input.read((cast(void*)&format)[0 .. header.size]); 76 hasFormat = true; 77 68 78 break; 69 79 70 80 case "data": 71 81 assert(_data is null); 82 assert(hasFormat); 72 83 73 84 _data.alloc(header.size); 74 85 file.input.read(_data); 75 _size = header.size;86 76 87 break; 77 88 trunk/src/gen/sound/openal/SoundSystem.d
r343 r555 7 7 8 8 import gen.util.Log; 9 import gen.math.Vector; 9 10 import gen.sound.Buffer; 10 11 import gen.sound.Source; … … 30 31 31 32 if(error) 32 logger.warn("error: " ~ Integer.toString(error));33 logger.warn("error: {}", error); 33 34 } 34 35 … … 50 51 } 51 52 52 device = alcOpenDevice( "DirectSound3D");53 device = alcOpenDevice(null); 53 54 54 55 if(!device) … … 85 86 override SoundSource createSource(SoundBuffer buffer) 86 87 { 87 if(!initialized )88 if(!initialized || buffer is null) 88 89 return null; 89 90 … … 102 103 } 103 104 104 override void setListenerPosition( float x, float y, float z)105 override void setListenerPosition(vec3 v) 105 106 { 106 107 if(!initialized) 107 108 return null; 108 109 109 alListener3f(AL_POSITION, x, y, z);110 alListener3f(AL_POSITION, v.tuple); 110 111 } 111 112 112 override void setListenerVelocity( float x, float y, float z)113 override void setListenerVelocity(vec3 v) 113 114 { 114 115 if(!initialized) 115 116 return null; 116 117 117 alListener3f(AL_VELOCITY, x, y, z);118 alListener3f(AL_VELOCITY, v.tuple); 118 119 } 119 120 120 override void setListenerOrientation( float dx, float dy, float dz, float ux, float uy, float uz)121 override void setListenerOrientation(vec3 d, vec3 u) 121 122 { 122 123 if(!initialized) 123 124 return null; 124 125 125 float[ ] array = [ dx, dy, dz, ux, uy, uz];126 float[6] array = [ d.tuple, u.tuple ]; 126 127 127 128 alListenerfv(AL_ORIENTATION, array.ptr); 128 129 } 129 130 131 override void play(char[] file) 132 { 133 if(!initialized) 134 return; 135 136 play(createSource(getBuffer(file))); // TODO: i r evul GC abuser! 137 } 138 130 139 override void play(SoundSource sound) 131 140 { 132 if(!initialized )133 return null;141 if(!initialized || sound is null) 142 return; 134 143 135 144 alSourcePlay((cast(OALSoundSource)sound).id); trunk/src/windefend.cbp
r551 r555 182 182 <Unit filename="gen\rend\Framebuffer.d" /> 183 183 <Unit filename="gen\rend\IndexBuffer.d" /> 184 <Unit filename="gen\rend\PrimitiveType.d" />185 184 <Unit filename="gen\rend\Renderer.d" /> 186 185 <Unit filename="gen\rend\Shader.d" />
