#include <stdexcept>
#include <msp/gl/extensions/arb_multitexture.h>
#include <msp/gl/extensions/arb_vertex_shader.h>
+#include <msp/gl/extensions/msp_legacy_features.h>
#include "gl.h"
#include "misc.h"
#include "texunit.h"
TexUnit *TexUnit::cur_unit = 0;
TexUnit::TexUnit():
- texture(0)
+ legacy(false),
+ texture(0),
+ tex_legacy(false)
{ }
-bool TexUnit::set_texture(const Texture *tex)
+bool TexUnit::set_texture(const Texture *tex, bool lgc)
{
- bool result = (tex!=texture);
+ lgc = (lgc && legacy && tex);
+ bool result = (tex!=texture || lgc!=tex_legacy);
texture = tex;
+ tex_legacy = lgc;
return result;
}
if(count<0)
{
if(ARB_vertex_shader)
- count = get_i(GL_MAX_TEXTURE_IMAGE_UNITS);
+ count = get_i(GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS);
else if(ARB_multitexture)
count = get_i(GL_MAX_TEXTURE_UNITS);
else
return count;
}
+unsigned TexUnit::get_n_legacy_units()
+{
+ static int count = -1;
+ if(count<0)
+ {
+ if(MSP_legacy_features)
+ count = get_i(GL_MAX_TEXTURE_UNITS);
+ else
+ count = 0;
+ }
+ return count;
+}
+
TexUnit &TexUnit::get_unit(unsigned n)
{
if(n>0)
if(units.size()<=n)
{
unsigned i = units.size();
+ unsigned n_legacy = get_n_legacy_units();
units.resize(n+1, TexUnit());
for(; i<units.size(); ++i)
+ {
units[i].index = i;
+ units[i].legacy = (i<n_legacy);
+ }
}
return units[n];