]> git.tdb.fi Git - netvis.git/commitdiff
Properly support arbitary sizes in History
authorMikko Rasa <tdb@tdb.fi>
Sun, 25 Oct 2009 16:05:43 +0000 (16:05 +0000)
committerMikko Rasa <tdb@tdb.fi>
Sun, 25 Oct 2009 16:05:43 +0000 (16:05 +0000)
Pad the graph texture if NPOT textures are not supported
Remove an extraneous pop_matrix call

source/history.cpp
source/host.cpp

index adcc3ec4042c2c48205ac63659343b6917f224f6..b3e15f213cc151a18867b04a23825b8f7917b6c6 100644 (file)
@@ -5,6 +5,7 @@ Copyright @ 2008 Mikko Rasa, Mikkosoft Productions
 Distributed unter the GPL
 */
 
+#include <msp/gl/extension.h>
 #include <msp/gl/immediate.h>
 #include <msp/gl/matrix.h>
 #include <msp/gl/meshbuilder.h>
@@ -25,18 +26,28 @@ History::History(NetVis &n, unsigned w, unsigned h):
        scale(1024),
        mesh((GL::COLOR4_UBYTE, GL::TEXCOORD2, GL::VERTEX2))
 {
-       texture.storage(GL::RGBA, height, width, 0);
+       unsigned texw = height;
+       unsigned texh = width;
+       if(!GL::is_supported("ARB_texture_non_power_of_two"))
+       {
+               for(texw=1; texw<height; texw<<=1) ;
+               for(texh=1; texh<width; texh<<=1) ;
+       }
+       texture.storage(GL::RGBA, texw, texh, 0);
+       texture.image(0, GL::RGBA, GL::UNSIGNED_BYTE, 0);
        texture.set_min_filter(GL::LINEAR);
+       float wf = static_cast<float>(height)/texw;
+       float hf = static_cast<float>(width)/texh;
        GL::MeshBuilder bld(mesh);
        bld.color(1.0f, 1.0f, 1.0f);
        bld.begin(GL::QUADS);
-       bld.texcoord(0, 1);
+       bld.texcoord(0, hf);
        bld.vertex(0, 0);
        bld.texcoord(0, 0);
        bld.vertex(width, 0);
-       bld.texcoord(1, 0);
+       bld.texcoord(wf, 0);
        bld.vertex(width, height);
-       bld.texcoord(1, 1);
+       bld.texcoord(wf, hf);
        bld.vertex(0, height);
        bld.end();
 }
@@ -129,20 +140,20 @@ void History::create_texture()
                        up_min = min(value+1, up_min);
                        up_max = max(value, up_max);
                }
-               unsigned *row = &data[y*100];
-               for(unsigned x=0; x<100; ++x)
+               unsigned *row = &data[y*height];
+               for(unsigned x=0; x<height; ++x)
                {
                        if(x>=up_min && x<=up_max)
                                row[x] = 0xFF8000FF;
                        else if(x<=down)
                                row[x] = 0xFF80FF80;
-                       else if(x%25==24 || y%60==0)
+                       else if((x*4+4)%height==0 || y%60==0)
                                row[x] = 0x40FFFFFF;
                        else
                                row[x] = 0x00000000;
                }
        }
-       texture.image(0, GL::RGBA, GL::UNSIGNED_BYTE, data.data());
+       texture.sub_image(0, 0, 0, height, width, GL::RGBA, GL::UNSIGNED_BYTE, data.data());
 }
 
 
index 4314d75f63714c01c5a7e3f5f1ac42f9df06c9ae..1e92ed77da2acc848dd0ba1daf7e0926fb4f64df 100644 (file)
@@ -156,6 +156,4 @@ void Host::render() const
        imm.color(1.0f, 1.0f, 1.0f);
        font.draw_string(short_name, imm);
        GL::Texture::unbind();
-
-       GL::pop_matrix();
 }