Changeset 205

Show
Ignore:
Timestamp:
11/08/07 16:48:09 (1 year ago)
Author:
LeoD
Message:

--

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • branches/jobs/defend/Config.d

    r188 r205  
    2323const uint MAX_UNIT_NUMBER = 400; 
    2424const uint MAX_COLORS = 8; 
    25 const uint HUD_HEIGHT = 170; 
     25const uint HUD_HEIGHT = 150; 
    2626 
    2727Vec3f playerColors[MAX_PLAYERS]; 
  • branches/jobs/defend/Main.d

    r203 r205  
    7979 
    8080    // Create job system 
    81     jobSystem = new JobSystem(); 
     81    jobSystem = new JobSystem(Integer.toInt(Config["threads"])); 
    8282 
    8383    // Create the renderer 
     
    139139 
    140140            jobHub.update(); 
     141            FPSCounter.update(); 
    141142 
    142143            //profile!("sleep") 
  • branches/jobs/defend/game/Game.d

    r204 r205  
    448448 
    449449                if(miniScreenActivated) 
    450                     miniScreenSprite.render(Vec2ui(renderer.width - miniScreenSprite.rect.width - 50, renderer.height - HUD_HEIGHT + 20)); 
     450                    miniScreenSprite.render(Vec2ui(renderer.width - miniScreenSprite.rect.width - 50, renderer.height - HUD_HEIGHT + 10)); 
    451451                     
    452452                mouse.render(); 
     
    455455            }); 
    456456 
    457             renderer.end(); 
    458             renderer.clear(); 
     457            profile!("flip") 
     458            ({ 
     459                renderer.end(); 
     460                renderer.clear(); 
     461            }); 
    459462        } 
    460463         
  • branches/jobs/defend/game/hud/Hud.d

    r201 r205  
    4545    HUDConsole console; 
    4646     
    47     debug 
    48    
     47    //debug 
     48    //
    4949        ProfilingDisplay profiling; 
    5050        bool profile = false; 
    5151        bool statistic = false; 
    52    
     52    //
    5353 
    5454    ObjectTypeInfo minimalType; 
     
    111111        screenDebugger.active = true; 
    112112         
    113         debug 
    114        
     113        //debug 
     114        //
    115115            profiling = new ProfilingDisplay(littlefont); 
    116116            profilerJob = jobSystem.addPostFrameJob(&profiling.update); 
    117117            profilerJob.disable; 
    118        
     118        //
    119119         
    120120        buttonsRoot = gui.add(new Widget(Vec2ui(10, renderer.height - HUD_HEIGHT + 10))); 
     
    140140    void update(float time) 
    141141    {        
    142         debug 
    143        
     142        //debug 
     143        //
    144144            if(inputManager.keyPressedFirst(KeyType.P)) 
    145145                profilerJob.toggleEnabled(); 
     
    153153            if(profile) 
    154154                profiling.update(); 
    155        
     155        //
    156156         
    157157        frametime = time; 
     
    169169    void render() 
    170170    {        
    171         font.write(10, 10, Vec3f(1), "FPS: {}", getFPS()); 
    172          
    173         debug 
    174        
     171        font.write(10, 10, Vec3f(1), "FPS: {}", FPSCounter.get()); 
     172         
     173        //debug 
     174        //
    175175            font.write(10, 30, Vec3f(1), "Time: {}", frametime); 
    176176 
     
    186186                statistics.reset(); 
    187187            } 
    188        
     188        //
    189189         
    190190        glDisable(GL_TEXTURE_2D); 
  • branches/jobs/gen/core/JobSystem.d

    r203 r205  
    242242     
    243243public: 
    244     this(
     244    this(uint numThreads = 0
    245245    { 
    246246        jobQueue = new typeof(jobQueue)(2048); 
    247      
    248         uint numThreads = 0; 
    249247         
    250248        for(uint i = 0; i < numThreads; i++) 
  • branches/jobs/gen/list/Indexed.d

    r173 r205  
    112112    { 
    113113        checkSort(); 
     114         
     115        if(top == 0) 
     116            return -1; 
    114117         
    115118        if(sorted) 
  • branches/jobs/gen/renderer/Renderer.d

    r198 r205  
    44 
    55import gen.util.Window; 
     6import gen.util.Profiler; 
    67import gen.image.Image; 
    78import gen.image.Bitmap; 
  • branches/jobs/gen/renderer/opengl/Texture.d

    r193 r205  
    44 
    55import derelict.opengl.gl; 
     6import derelict.opengl.glu; 
    67 
    78import gen.image.Image; 
     
    3940        _format = image.format; 
    4041 
    41         glTexImage2D(GL_TEXTURE_2D, 0, cast(uint)format,  
    42                      image.width, image.height, 0, Image.formatToOpenGL(format),  
    43                      GL_UNSIGNED_BYTE, image.data.ptr); 
    44  
     42        //glTexImage2D(GL_TEXTURE_2D, 0, cast(uint)format,  
     43        //             image.width, image.height, 0, Image.formatToOpenGL(format),  
     44        //             GL_UNSIGNED_BYTE, image.data.ptr); 
     45         
     46        gluBuild2DMipmaps(GL_TEXTURE_2D, cast(uint)format, image.width, image.height, Image.formatToOpenGL(format), GL_UNSIGNED_BYTE, image.data.ptr); 
     47         
    4548        _image.free(); 
    4649    } 
  • branches/jobs/gen/scene/Graph.d

    r203 r205  
    2626public import gen.scene.RenderPass; 
    2727 
     28private struct NodeHolder 
     29{ 
     30    SceneNode node; 
     31    float distance; 
     32} 
     33 
    2834class CameraData 
    2935{ 
     36package: 
     37    TurboList!(NodeHolder)[RenderPass.max + 1] renderPasses; 
    3038    bool active = true; 
    31     ICamera core; 
    3239    Vec3f clearColor; 
     40     
     41public: 
     42    ICamera core; 
    3343    ITexture texture; // The texture that is rendered to (not available for the main camera) 
    3444} 
     
    4151    SceneNode root; 
    4252 
    43     TurboList!(NodeHolder)[RenderPass.max + 1] renderPasses; 
    44  
    45     struct NodeHolder 
    46     { 
    47         SceneNode node; 
    48         float distance; 
    49     } 
    50  
    5153    // Debug data like bounding boxes visible? 
    5254    mixin(property("bool", "debugVisible")); 
     
    5658 
    5759    // Current camera 
     60    CameraData cameraData; 
    5861    mixin(readProperty("ICamera", "camera")); 
    5962     
     
    7174         
    7275        root = new SceneNode; 
    73  
    74         foreach(ref pass; renderPasses) 
    75             pass = new typeof(pass); 
    7676    } 
    7777 
     
    8686        data.core = core; 
    8787        data.texture = texture; 
     88 
     89        foreach(ref pass; data.renderPasses) 
     90            pass = new typeof(pass); 
    8891 
    8992        cameras[name] = data; 
     
    185188    void update(float time) 
    186189    { 
     190        root.doUpdate(time); 
     191         
    187192        foreach(cam; cameras) 
    188             cam.core.update(time); 
    189          
    190         root.doUpdate(time, Mat4f.identity()); 
    191     } 
    192  
    193     // Render anything, for each camera 
    194     void draw() 
    195     { 
    196         // Render for each camera 
    197         foreach(key, camData; cameras) 
    198         { 
    199             if(!camData.active) 
     193        { 
     194            if(!cam.active) 
    200195                continue; 
    201196 
    202             camera = camData.core; 
     197            cameraData = cam; 
     198            camera = cam.core; 
    203199            frustum = camera.frustum; 
    204200            assert(frustum !is null); 
    205  
     201             
     202            camera.update(time); 
     203             
     204            foreach(pass; cam.renderPasses) 
     205                pass.reset(); 
     206             
    206207            // Let nodes register themselves to be rendered 
    207208            profile!("process") 
     
    214215            ({ 
    215216                // Solid objects are sorted by their texture 
    216                 renderPasses[RenderPass.Solid].sort((NodeHolder first, NodeHolder second) 
     217                cam.renderPasses[RenderPass.Solid].sort((NodeHolder first, NodeHolder second) 
    217218                { 
    218219                    return cast(void*)first.node.texture - cast(void*)second.node.texture; 
     
    220221 
    221222                // Sort blended objects by their distance from the camera 
    222                 renderPasses[RenderPass.Blended].sort((NodeHolder first, NodeHolder second) 
     223                cam.renderPasses[RenderPass.Blended].sort((NodeHolder first, NodeHolder second) 
    223224                { 
    224225                    return cast(int)first.distance - cast(int)second.distance; 
    225226                }); 
    226227            }); 
    227  
    228             if(camData.texture !is null) 
    229                 renderer.setViewport(Rect(0, 0, camData.texture.width, camData.texture.height)); 
     228        } 
     229    } 
     230 
     231    // Render anything, for each camera 
     232    void draw() 
     233    { 
     234        // Render for each camera 
     235        foreach(cam; cameras) 
     236        { 
     237            if(!cam.active) 
     238                continue; 
     239 
     240            cameraData = cam; 
     241            camera = cam.core; 
     242            frustum = camera.frustum; 
     243            assert(frustum !is null); 
     244             
     245            if(cam.texture !is null) 
     246                renderer.setViewport(Rect(0, 0, cam.texture.width, cam.texture.height)); 
    230247            else 
    231248                renderer.setViewport(Rect(0, 0, renderer.width, renderer.height)); 
    232249 
    233             renderer.setClearColor(camData.clearColor); 
     250            renderer.setClearColor(cam.clearColor); 
    234251            renderer.clear(); 
    235252 
     
    238255 
    239256            // Render skyboxes 
    240             profile!("skyboxes") 
     257            /*profile!("skyboxes") 
    241258            ({ 
    242                 if(renderPasses[RenderPass.Skybox].length) 
     259                if(cam.renderPasses[RenderPass.Skybox].length) 
    243260                { 
    244261                    renderPass = RenderPass.Skybox; 
     
    246263                    renderer.translate(camera.position()); 
    247264 
    248                     foreach(object; renderPasses[renderPass]) 
     265                    foreach(object; cam.renderPasses[renderPass]) 
    249266                        object.node.render(); 
    250267                         
     
    252269                    renderer.setRenderState(RenderState.DepthTest, true); 
    253270                } 
    254             }); 
     271            });*/ 
    255272             
    256273            // Use the camera's matrices 
     
    262279            ({ 
    263280                renderPass = RenderPass.Solid; 
    264  
    265                foreach(object; renderPasses[renderPass]) 
    266                    object.node.render(); 
     281                 
     282                foreach(object; cam.renderPasses[renderPass]) 
     283                    object.node.render(); 
    267284            }); 
    268285 
    269286            // Render blended objects 
    270             profile!("blended") 
     287            /*profile!("blended") 
    271288            ({ 
    272289                renderPass = RenderPass.Blended; 
    273290                renderer.setRenderState(RenderState.DepthTest, false); 
    274291 
    275                 foreach(object; renderPasses[renderPass]) 
     292                foreach(object; cam.renderPasses[renderPass]) 
    276293                    object.node.render(); 
    277294 
    278295                renderer.setRenderState(RenderState.DepthTest, true); 
    279             }); 
    280  
    281             if(camData.texture !is null) 
     296            });*/ 
     297 
     298            if(cam.texture !is null) 
    282299            { 
    283300                profile!("copy framebuffer") 
    284301                ({ 
    285                     camData.texture.copyFromScreen(); 
     302                    cam.texture.copyFromScreen(); 
    286303                }); 
    287304            } 
    288              
    289             // Empty all lists 
    290             foreach(pass; renderPasses) 
    291                 pass.reset(); 
    292305        } 
    293306    } 
     
    302315            holder.distance = node.absolutePosition.distance(camera.position); 
    303316 
    304         renderPasses[pass] ~= holder; 
     317        assert(cameraData !is null); 
     318        cameraData.renderPasses[pass].append(holder); 
    305319    } 
    306320 
  • branches/jobs/gen/scene/MeshNode.d

    r194 r205  
    5858    override void render() 
    5959    { 
    60         profile!("render meshnode") 
    61         ({ 
    62             renderer.pushMatrix(); 
    63             renderer.mulMatrix(absoluteModelview); 
    64             mesh.render(); 
    65              
    66             //debug 
    67             //{ 
    68             //    if(sceneGraph.debugVisible(this)) 
    69             //        renderer.drawBoundingBox(mesh.boundingBox, Vec3f(0, 0, 1)); 
    70             //} 
    71              
    72             renderer.popMatrix(); 
    73         }); 
     60        renderer.pushMatrix(); 
     61        renderer.mulMatrix(absoluteModelview); 
     62        mesh.render(); 
     63         
     64        debug 
     65        { 
     66            if(sceneGraph.debugVisible(this)) 
     67                renderer.drawBoundingBox(mesh.boundingBox, Vec3f(0, 0, 1)); 
     68        } 
     69         
     70        renderer.popMatrix(); 
    7471    } 
    7572} 
  • branches/jobs/gen/scene/ModelNode.d

    r193 r205  
    6565        debug 
    6666        { 
    67             if(sceneGraph.debugVisible(this) && child && child.next !is null
     67            if(sceneGraph.debugVisible(this)
    6868                sceneGraph.addToRender(RenderPass.Solid, this); 
    6969        } 
     
    7272    override void render() 
    7373    { 
    74         renderer.drawBoundingBox(bbox, Vec3f(.8, .1, .1)); 
     74        renderer.pushMatrix(); 
     75        renderer.mulMatrix(absoluteModelview); 
     76        renderer.drawBoundingBox(model.boundingBox, Vec3f(.8, .1, .1)); 
     77        renderer.popMatrix(); 
    7578    } 
    7679     
  • branches/jobs/gen/scene/Node.d

    r194 r205  
    5858package: 
    5959    // Update the modelview matrices and recurse for any childs and neighbours 
    60     void doUpdate(float time, Mat4f m
     60    void doUpdate(float time
    6161    { 
    6262        if(recalcModelview) 
     
    6565        if(recalcModelview || (parent !is null && parent.recalcModelview)) 
    6666        { 
    67             absoluteModelview = m * relativeModelview; 
     67            if(parent !is null) 
     68                absoluteModelview = parent.absoluteModelview * relativeModelview; 
     69             
    6870            recalcModelview = true; 
    6971        } 
     
    7274         
    7375        if(child !is null) 
    74             child.doUpdate(time, absoluteModelview); 
     76            child.doUpdate(time); 
    7577             
    7678        if(next !is null) 
    77             next.doUpdate(time, m); 
     79            next.doUpdate(time); 
    7880             
    7981        recalcModelview = false; 
     
    123125    void rotation(ref Vec3f v) 
    124126    { 
     127        if(v == rotation) 
     128            return; 
     129         
    125130        _rotation = v; 
    126131        matrixRotation = Mat4f.rotation(_rotation); 
  • branches/jobs/gen/util/FPS.d

    r61 r205  
    33import gen.util.Wrapper; 
    44 
    5 uint getFPS() 
     5class FPSCounter 
    66{ 
    7     static uint outfps = 0; 
    8     static uint fps = 0; 
    9     static uint last = 0; 
    10      
    11     if(getTickCount() - last < 1000) 
    12         fps++; 
    13     else 
    14     { 
    15         last = getTickCount(); 
    16         outfps = fps; 
    17         fps = 0; 
    18     } 
    19      
    20     return outfps; 
     7private: 
     8    static uint fps = 0; 
     9    static uint lastFPS = 0; 
     10    static uint lastFrame = 0; 
     11     
     12public: 
     13    static void update() 
     14    { 
     15        if(getTickCount() - lastFrame < 1000) 
     16            fps++; 
     17        else 
     18        { 
     19            lastFrame = getTickCount(); 
     20            lastFPS = fps; 
     21            fps = 0; 
     22        } 
     23    } 
     24     
     25    static uint get() 
     26    { 
     27        return lastFPS; 
     28    } 
    2129} 
  • branches/jobs/gen/util/Network.d

    r173 r205  
    210210            buffer[0 .. data.length] = data[]; 
    211211            buffer[data.length .. data.length + seperator.length] = seperator[]; 
    212             socket.output.write(buffer[0 .. data.length + seperator.length]); 
     212            auto slice = buffer[0 .. data.length + seperator.length]; 
     213             
     214            uint sent = socket.output.write(slice); 
     215            assert(sent == slice.length); 
    213216        //} 
    214217    } 
  • branches/jobs/gen/util/Profiler.d

    r201 r205  
    2626    Object mutex; 
    2727    ThreadLocal!(int*) _currentBlock; 
     28    //int block = -1; 
    2829     
    2930    int currentBlock() 
    3031    { 
     32        //return block; 
     33         
    3134        if(_currentBlock.val is null) 
    3235        { 
     
    4043    void currentBlock(int val) 
    4144    { 
     45        //block = val; 
     46        //return; 
     47         
    4248        if(_currentBlock.val is null) 
    4349        { 
     
    124130        else 
    125131        { 
    126            static if(is(T == void)) 
     132            static if(is(T == void)) 
    127133                dg(); 
    128134            else 
  • branches/jobs/gen/util/ProfilingDisplay.d

    r203 r205  
    1010import gen.util.Profiler; 
    1111import gen.util.JobHub; 
     12import gen.util.FPS; 
    1213 
    1314private struct Node 
     
    111112                 
    112113                node.text = layout.sprint(node.textBuffer, 
    113                                           "{}: {} calls; {} ms; {} ms/call; {}%", 
     114                                          "{}: {} calls; {} calls/frame; {} ms; {} ms/call; {}%", 
    114115                                          data.name, 
    115116                                          data.calls, 
     117                                          data.calls / cast(float)FPSCounter.get(), 
    116118                                          data.time * 0.001, 
    117119                                          (data.time * 0.001) / data.calls, 
  • branches/jobs/gen/util/ScreenDebugger.d

    r200 r205  
    3939            l = new Line; 
    4040            l.text = new char[512]; 
    41             l.color = (i % 2 == 0) ? Vec3f(1) : Vec3f(0.8); 
    4241        } 
    4342         
     
    7372 
    7473        int i; 
     74        bool color = false; 
    7575        foreach(l; sortList) 
    7676        { 
    77             font.write(pos.x, pos.y + (font.maxHeight + 4) * i, l.color, l.text[0 .. l.length]); 
     77            color = !color; 
     78             
     79            font.write(pos.x, pos.y + (font.maxHeight + 4) * i, color ? Vec3f(1) : Vec3f(0.8), l.text[0 .. l.length]); 
    7880 
    7981            l.length = 0; 
  • branches/jobs/run/config.ini

    r190 r205  
    44 
    55# fov 
    6 fov=95 
     6fov=70 
    77 
    88# make the game nice or have much performance 
     
    1717# port for multiplayer 
    1818port=6000 
     19 
     20# number of threads for the job system (0 = run everything in main thread) 
     21threads=0 
  • branches/jobs/windefend.cbp

    r201 r205  
    4848                    <Add option="-release" /> 
    4949                    <Add option="-O" /> 
    50                     <Add option="-inline" /> 
    5150                </Compiler> 
    5251            </Target>