Distributed unter the GPL
*/
+#include <msp/gl/extension.h>
#include <msp/gl/immediate.h>
#include <msp/gl/matrix.h>
#include <msp/gl/meshbuilder.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();
}
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());
}