]> git.tdb.fi Git - libs/gltk.git/blobdiff - source/graphic.cpp
Use size_t to represent counts and indices
[libs/gltk.git] / source / graphic.cpp
index 5fc27ef3d153e5c2061ff5e891bab10a2eea5f0c..fb3f8893d2460112b88d0b71a6ce6c9790c92b61 100644 (file)
@@ -6,11 +6,6 @@ using namespace std;
 namespace Msp {
 namespace GLtk {
 
-Graphic::Graphic():
-       texture(0),
-       repeat(false)
-{ }
-
 void Graphic::build(unsigned wd, unsigned ht, GL::PrimitiveBuilder &bld) const
 {
        vector<float> x, y;
@@ -21,30 +16,35 @@ void Graphic::build(unsigned wd, unsigned ht, GL::PrimitiveBuilder &bld) const
        create_texcoords(slice.x, slice.x+slice.w, border.left, border.right, texture->get_width(), u);
        create_texcoords(slice.y, slice.y+slice.h, border.bottom, border.top, texture->get_height(), v);
 
-       unsigned xmin = border.left ? 0 : 1;
-       unsigned xmax = x.size()-(border.right ? 2 : 3);
-       unsigned ymin = border.bottom ? 0 : 1;
-       unsigned ymax = y.size()-(border.top ? 2 : 3);
+       size_t xmin = border.left ? 0 : 1;
+       size_t xmax = x.size()-(border.right ? 2 : 3);
+       size_t ymin = border.bottom ? 0 : 1;
+       size_t ymax = y.size()-(border.top ? 2 : 3);
 
        bld.color(1.0f, 1.0f, 1.0f);
-       bld.begin(GL::QUADS);
-       for(unsigned i=ymin; i<=ymax; ++i)
+       for(size_t i=ymin; i<=ymax; ++i)
        {
-               unsigned i2 = (i==0 ? 0 : i==y.size()-2 ? 2 : 1);
-               for(unsigned j=xmin; j<=xmax; ++j)
+               size_t i2 = (i==0 ? 0 : i==y.size()-2 ? 2 : 1);
+               for(size_t j=xmin; j<=xmax; ++j)
                {
-                       unsigned j2 = (j==0 ? 0 : j==x.size()-2 ? 2 : 1);
-                       bld.texcoord(u[j2], v[i2]);
-                       bld.vertex(x[j], y[i]);
-                       bld.texcoord(u[j2+1], v[i2]);
-                       bld.vertex(x[j+1], y[i]);
+                       size_t j2 = (j==0 ? 0 : j==x.size()-2 ? 2 : 1);
+                       if(j==xmin || (j>1 && j<x.size()-2))
+                       {
+                               if(j>xmin)
+                                       bld.end();
+                               bld.begin(GL::TRIANGLE_STRIP);
+                               bld.texcoord(u[j2], v[i2+1]);
+                               bld.vertex(x[j], y[i+1]);
+                               bld.texcoord(u[j2], v[i2]);
+                               bld.vertex(x[j], y[i]);
+                       }
                        bld.texcoord(u[j2+1], v[i2+1]);
                        bld.vertex(x[j+1], y[i+1]);
-                       bld.texcoord(u[j2], v[i2+1]);
-                       bld.vertex(x[j], y[i+1]);
+                       bld.texcoord(u[j2+1], v[i2]);
+                       bld.vertex(x[j+1], y[i]);
                }
+               bld.end();
        }
-       bld.end();
 }
 
 void Graphic::create_coords(float low, float high, float brd1, float brd2, float block, vector<float> &coords) const