Changeset 544
- Timestamp:
- 05/19/08 17:05:39 (8 months ago)
- Files:
-
- trunk/run/data/shaders/modelglow-pixel.glsl (added)
- trunk/run/data/shaders/modelglow-vertex.glsl (added)
- trunk/run/data/shaders/modelglow.cfg (added)
- trunk/run/data/shaders/modelglowpost-pixel.glsl (added)
- trunk/run/data/shaders/modelglowpost-vertex.glsl (added)
- trunk/run/data/shaders/modelglowpost.cfg (added)
- trunk/run/defend.cfg (modified) (1 diff)
- trunk/src/defend/Camera.d (modified) (1 diff)
- trunk/src/defend/Config.d (modified) (1 diff)
- trunk/src/defend/Graphics.d (added)
- trunk/src/defend/Main.d (modified) (2 diffs)
- trunk/src/defend/game/Game.d (modified) (10 diffs)
- trunk/src/defend/game/hud/MiniMap.d (modified) (1 diff)
- trunk/src/defend/objects/SceneNode.d (modified) (6 diffs)
- trunk/src/gen/gui/Window.d (modified) (3 diffs)
- trunk/src/gen/rend/Renderer.d (modified) (1 diff)
- trunk/src/gen/rend/opengl/FBO.d (modified) (2 diffs)
- trunk/src/gen/rend/opengl/Renderer.d (modified) (2 diffs)
- trunk/src/gen/rend/opengl/Shader.d (modified) (1 diff)
- trunk/src/gen/scene/Graph.d (modified) (6 diffs)
- trunk/src/gen/util/Sprite.d (modified) (4 diffs)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
trunk/run/defend.cfg
r540 r544 36 36 // light objects by the terrain lightmap 37 37 objects_lightmap = 1 38 39 // object's team colors glow 40 objects_glow = 1 trunk/src/defend/Camera.d
r543 r544 195 195 196 196 position = vec3(0, 0, 0); 197 198 197 rotate(vec3(-1, 0.0, 0)); 199 198 } trunk/src/defend/Config.d
r540 r544 54 54 "int graphics.shadowmapping.samples;" 55 55 "int graphics.lighting;" 56 "int graphics.objects_lightmap;") 56 "int graphics.objects_lightmap;" 57 "int graphics.objects_glow;") 57 58 58 59 defendConfig; trunk/src/defend/Main.d
r542 r544 306 306 307 307 InputChannel.global.dispatch(); 308 309 //Stdout(frameTime).newline;310 308 taskManager.update(cast(double)frameTime * 0.000001); 311 309 … … 316 314 timer.stop(); 317 315 frameTime = timer.microseconds(); 318 319 //Stdout("frame OVEEEEEEEEEEERRRRRRRRRRRRRRRRRRRRRRR!").newline;320 316 } 321 317 } trunk/src/defend/game/Game.d
r541 r544 39 39 import defend.Camera; 40 40 import defend.Map; 41 import defend.Graphics; 41 42 import defend.MapGenerator; 42 43 import defend.com.Gateway; … … 86 87 HUD hud; 87 88 88 // Main camera89 MainCamera mainCamera;90 91 89 // Demo recorder 92 90 DemoRecorder demoRecorder; … … 94 92 // Input 95 93 KeyboardReader keyboard; 94 95 // Graphics setups 96 Graphics graphics; 96 97 97 98 // Initializes singleplayer mode … … 115 116 logger.info("creating client"); 116 117 gateway = new NetworkClient(address, config.multiplayer.port, config.me); 117 }118 119 // Shadow mapping test120 void initShadowMapping()121 {122 auto size = defendConfig.graphics.shadowmapping.size;123 auto fb = renderer.createFramebuffer(vec2i(size, size), ImageFormat.A);124 125 auto camera = new StaticCamera(vec3(-20, 40, -39), vec3(-0.9, -1.57, 0),126 mat4.perspective(70, 1, 50, 200));127 128 sceneGraph.addCamera("shadow", camera, vec3(0, 0, 0), fb, true);129 118 } 130 119 … … 205 194 { 206 195 renderer.identity(); 207 renderer.setMatrix( mainCamera.modelview, MatrixType.Modelview);208 renderer.setMatrix( mainCamera.projection, MatrixType.Projection);196 renderer.setMatrix(graphics.mainCamera.modelview, MatrixType.Modelview); 197 renderer.setMatrix(graphics.mainCamera.projection, MatrixType.Projection); 209 198 vec4 lightPosition = vec4(10.0, 10.0, 0.0, 1); 210 199 glLightfv(GL_LIGHT0, GL_POSITION, lightPosition.ptr); … … 215 204 renderer.setRenderState(RenderState.Wireframe, true); 216 205 217 profile!("graph.render") 218 ({ 219 sceneGraph.render(); 220 }); 221 222 renderer.setMatrix(mainCamera.modelview, MatrixType.Modelview); 223 renderer.setMatrix(mainCamera.projection, MatrixType.Projection); 206 graphics.render(); 207 208 renderer.setMatrix(graphics.mainCamera.modelview, MatrixType.Modelview); 209 renderer.setMatrix(graphics.mainCamera.projection, MatrixType.Projection); 224 210 gameObjects.render(); 225 211 … … 284 270 logObjectUsage(); 285 271 286 // Preallocate objects 287 MeshNode.memoryPool.create(2000); 288 289 // Initialize scene graph 290 mainCamera = new MainCamera; 291 mainCamera.projection = mat4.perspective(defendConfig("screen").integer("fov"), 292 renderer.config.aspect, 1, 300); 293 sceneGraph.addCamera("main", mainCamera, vec3(0, 0, 0.2)); 294 295 if(defendConfig.graphics.shadowmapping.enable) 296 initShadowMapping(); 272 // Initialize graphics 273 graphics = new Graphics; 274 graphics.init(); 297 275 298 276 logger.info("initializing communication"); … … 313 291 if(object.owner == gateway.id) 314 292 { 315 mainCamera.position = terrain.getWorldPos(object.mapPos) + vec3(5, 0, 5);293 graphics.mainCamera.position = terrain.getWorldPos(object.mapPos) + vec3(5, 0, 5); 316 294 break; 317 295 } … … 320 298 // Create HUD and mouse 321 299 hud = new HUD(gameObjects); 322 323 particles = new ParticleSystemManager; 324 particles.addSystem("smoke", new SmokeParticleSystem("data/textures/smoke.bmp")); 325 300 301 // Disable the GC 326 302 logMemoryUsage(); 327 303 328 // Disable the GC329 304 GC.collect(); 330 305 GC.disable(); … … 378 353 delete demoRecorder; 379 354 380 sceneGraph.reset(); 381 MeshNode.memoryPool.release(); 382 383 delete particles; 355 graphics.release(); 384 356 385 357 GC.enable(); trunk/src/defend/game/hud/MiniMap.d
r537 r544 79 79 80 80 sprite = new Sprite(texture, Rect(0, 0, width - 1, height - 1), true); 81 sprite.scaling = 128.0f / width;81 sprite.scaling = vec2(128.0f / width, 128.0f / width); 82 82 83 83 position = vec2i(renderer.width - 150, renderer.height - HUD_HEIGHT + 10); trunk/src/defend/objects/SceneNode.d
r543 r544 13 13 import gen.rend.Texture; 14 14 import gen.rend.Renderer; 15 import gen.rend.Framebuffer; 15 16 16 17 import defend.Config; 17 18 import defend.terrain.Terrain; 19 20 version = GlowTest; 18 21 19 22 class GameObjectModel : SceneNode … … 78 81 private: 79 82 GameObjectModel parent; 80 81 83 Mesh mesh; 82 83 84 CameraData shadowCamera; 85 86 version(GlowTest) Shader glowShader; 84 87 85 88 static int renderPassNormal; 86 89 static int renderPassShadowMap; 90 version(GlowTest) static int renderPassGlow = -1; 87 91 88 92 static this() … … 154 158 ); 155 159 } 156 160 157 161 public: 158 162 mixin MAllocator; 159 163 164 static Framebuffer glowBuffer; 165 160 166 this(GameObjectModel parent, Mesh mesh) 161 167 { … … 166 172 167 173 shader = Shader.acquire("data/shaders/model.cfg"); 174 version(GlowTest) glowShader = Shader.acquire("data/shaders/modelglow.cfg"); 168 175 texture = mesh.texture; 169 176 renderShadow = true; 177 178 // get this out of here. 179 version(GlowTest) if(renderPassGlow == -1) 180 { 181 if(glowBuffer is null) 182 glowBuffer = renderer.createFramebuffer(vec2i(1024, 1024)); 183 184 renderPassGlow = sceneGraph.addRenderPass 185 ( 186 100, 187 188 function(NodeHolder[] nodes, Camera camera) 189 { 190 auto shader = Shader.acquire("data/shaders/modelglow.cfg"); 191 renderer.setShader(shader); 192 }, 193 194 function 195 { 196 Shader.release(Shader.get("data/shaders/modelglow.cfg")); 197 renderer.setShader(null); 198 199 renderer.setTexture(0, null); 200 }, 201 202 -1, 203 204 glowBuffer 205 ); 206 } 170 207 } 171 208 … … 173 210 { 174 211 Shader.release(shader); 212 version(GlowTest) Shader.release(glowShader); 175 213 } 176 214 177 215 override void process(Camera camera) 178 216 { 217 version(GlowTest) 218 { 219 sceneGraph.addToRender(renderPassGlow, this, &renderGlow); 220 //return; 221 } 222 179 223 if(!sceneGraph.cameraData.shadowMap) 180 224 sceneGraph.addToRender(renderPassNormal, this, &renderNormal); … … 220 264 } 221 265 266 version(GlowTest) void renderGlow() 267 { 268 renderer.pushMatrix(); 269 renderer.mulMatrix(absoluteModelview); 270 271 renderer.setTexture(0, texture); 272 273 glowShader.setUniform("color", parent.color); 274 glowShader.setUniform("diffuseTexture", 0); 275 276 mesh.render(); 277 278 renderer.popMatrix(); 279 } 280 222 281 void renderDebug() 223 282 { trunk/src/gen/gui/Window.d
r541 r544 21 21 void onMouseMove(MouseMoveEvent event) 22 22 { 23 return; 24 23 25 if(mouseDown) 24 26 localPosition = localPosition + event.delta; … … 27 29 void onMouseButton(MouseButtonEvent event) 28 30 { 31 return; 32 29 33 if(event.button == MouseButton.Left) 30 34 { … … 117 121 super.render(renderer); 118 122 119 renderer.rect(globalRect, backgroundColor);123 //renderer.rect(globalRect, backgroundColor); 120 124 121 125 if(font) trunk/src/gen/rend/Renderer.d
r541 r544 386 386 */ 387 387 void setFramebuffer(Framebuffer framebuffer); 388 void unsetFramebuffer(Framebuffer framebuffer); 388 389 389 390 /** trunk/src/gen/rend/opengl/FBO.d
r529 r544 19 19 void bind() 20 20 { 21 glPushAttrib(GL_VIEWPORT_BIT); 22 glViewport(0, 0, target.width, target.height); 21 23 glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, id); 22 24 } 23 25 24 staticvoid unbind()26 void unbind() 25 27 { 26 28 glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, 0); 29 glPopAttrib(); 27 30 } 28 31 … … 54 57 } 55 58 59 GLuint depthbuffer; 60 glGenRenderbuffersEXT(1, &depthbuffer); 61 glBindRenderbufferEXT(GL_RENDERBUFFER_EXT, depthbuffer); 62 glRenderbufferStorageEXT(GL_RENDERBUFFER_EXT, GL_DEPTH_COMPONENT, texture.width, texture.height); 63 glFramebufferRenderbufferEXT(GL_FRAMEBUFFER_EXT, GL_DEPTH_ATTACHMENT_EXT, GL_RENDERBUFFER_EXT, depthbuffer); 56 64 glFramebufferTexture2DEXT(GL_FRAMEBUFFER_EXT, format, GL_TEXTURE_2D, target.id, 0); 65 66 //glFramebufferTexture2DEXT(GL_FRAMEBUFFER_EXT, format, GL_TEXTURE_2D, target.id, 0); 57 67 } 58 68 trunk/src/gen/rend/opengl/Renderer.d
r542 r544 523 523 } 524 524 525 Framebuffer createFramebuffer(vec2i dimension, ImageFormat format = ImageFormat.RGB)525 override Framebuffer createFramebuffer(vec2i dimension, ImageFormat format = ImageFormat.RGB) 526 526 { 527 527 logger.info("creating {}*{} framebuffer", dimension.x, dimension.y); … … 530 530 } 531 531 532 void setFramebuffer(Framebuffer framebuffer) 533 { 534 if(framebuffer is null) 535 { 536 FBO.unbind(); 537 return; 538 } 539 532 override void setFramebuffer(Framebuffer framebuffer) 533 { 540 534 (cast(FBO)framebuffer).bind(); 535 } 536 537 override void unsetFramebuffer(Framebuffer framebuffer) 538 { 539 (cast(FBO)framebuffer).unbind(); 541 540 } 542 541 trunk/src/gen/rend/opengl/Shader.d
r541 r544 107 107 glShaderSourceARB(result, T.length, strings.ptr, lengths.ptr); 108 108 glCompileShaderARB(result); 109 110 checkError(result, GL_OBJECT_COMPILE_STATUS_ARB);111 109 112 110 glAttachObjectARB(context, result); 111 112 checkError(result, GL_OBJECT_COMPILE_STATUS_ARB); 113 113 114 114 return result; trunk/src/gen/scene/Graph.d
r543 r544 18 18 import gen.rend.Framebuffer; 19 19 import gen.rend.Texture; 20 import gen.rend.opengl.Wrapper; 20 21 import gen.scene.Node; 21 22 import gen.scene.Camera; … … 65 66 BufferedArray!(NodeHolder) nodes; 66 67 68 Framebuffer framebuffer; // optionally 69 67 70 void function(NodeHolder[], Camera) setup; 68 71 void function() clean; … … 108 111 void function(NodeHolder[], Camera) setup, 109 112 void function() clean, 110 int id = -1) 113 int id = -1, 114 Framebuffer framebuffer = null) 111 115 out(result) 112 116 { … … 137 141 pass.setup = setup; 138 142 pass.clean = clean; 143 pass.framebuffer = framebuffer; 139 144 140 145 renderPasses ~= pass; … … 382 387 foreach(ref pass; renderPasses) 383 388 pass.nodes.reset(); 384 385 if(cam.framebuffer !is null) 386 renderer.setViewport(Rect(0, 0, cam.framebuffer.texture.width, 387 cam.framebuffer.texture.height)); 388 else 389 renderer.setViewport(Rect(0, 0, renderer.width, 390 renderer.height)); 391 392 renderer.setFramebuffer(cam.framebuffer); 393 394 renderer.setClearColor(cam.clearColor); 395 renderer.clear(); 396 389 397 390 // Let nodes register themselves to be rendered 398 391 profile!("process") … … 406 399 407 400 // Go through all render passes 408 for each(ref pass; renderPasses) with(pass)409 { 410 if( nodes.length)401 for(uint i = 0; i <= 1; i++) // tmp 402 { 403 if(i == 0) 411 404 { 412 if(setup) 413 setup(nodes.toArray, camera); 405 if(cam.framebuffer) 406 { 407 renderer.setFramebuffer(cam.framebuffer); 408 renderer.setClearColor(cam.clearColor); 409 renderer.clear(); 410 } 411 } 412 413 foreach(ref pass; renderPasses) with(pass) 414 { 415 if(nodes.length) 416 { 417 if(i == 1) 418 { 419 if(framebuffer) 420 { 421 renderer.setFramebuffer(framebuffer); 422 renderer.clear(); 423 } 424 else 425 continue; 426 } 427 else if(framebuffer) 428 continue; 429 430 if(setup) 431 setup(nodes.toArray, camera); 432 433 foreach(node; nodes) 434 { 435 if(node.render) 436 node.render(); 437 else 438 node.node.render(); 439 } 414 440 415 foreach(node; nodes) 416 { 417 if(node.render) 418 node.render(); 419 else 420 node.node.render(); 441 if(clean) 442 clean(); 443 444 if(framebuffer) 445 renderer.unsetFramebuffer(framebuffer); 421 446 } 422 423 if(clean)424 clean();425 447 } 426 448 } 449 450 if(cam.framebuffer) 451 renderer.unsetFramebuffer(cam.framebuffer); 427 452 } 428 453 } trunk/src/gen/util/Sprite.d
r532 r544 15 15 import gen.rend.VertexFormat; 16 16 17 // will get removed very soon :P 17 // will get removed very soon :P (not) 18 18 class Sprite 19 19 { … … 23 23 Rect area; 24 24 25 float _scaling = 1.f;25 vec2 _scaling = vec2.one; 26 26 27 27 public: … … 33 33 Rect rect() { return area; } 34 34 35 void scaling( floats) { _scaling = s; }35 void scaling(vec2 s) { _scaling = s; } 36 36 37 37 this(char[] file, bool reverse = false) … … 94 94 renderer.pushMatrix(); 95 95 renderer.translate(position.x, position.y, 0.0); 96 renderer.scale(_scaling );96 renderer.scale(_scaling.tuple, 1); 97 97 98 98 render();
