if(!texturing)
texturing = new Texturing;
- texturing->attach(index, *tex);
+ texturing->attach(index, *tex, texturing->get_attached_sampler(index));
}
int RenderPass::get_texture_index(const string &n) const
RenderPass::TextureLoader::TextureLoader(Texturing &t, unsigned i, Collection *c):
DataFile::CollectionObjectLoader<Texturing>(t, c),
- index(i)
+ index(i),
+ tex(0),
+ samp(0)
{
+ add("sampler", &TextureLoader::sampler);
add("texture", &TextureLoader::texture);
}
+void RenderPass::TextureLoader::finish()
+{
+ if(tex)
+ obj.attach(index, *tex, samp);
+ else if(samp)
+ obj.attach(index, *samp);
+}
+
+void RenderPass::TextureLoader::sampler(const string &name)
+{
+ samp = &get_collection().get<Sampler>(name);
+}
+
void RenderPass::TextureLoader::texture(const string &name)
{
- obj.attach(index, get_collection().get<Texture>(name));
+ tex = &get_collection().get<Texture>(name);
}
} // namespace GL
class Program;
class ProgramData;
class Renderer;
+class Sampler;
class Texture;
class Texturing;
{
private:
unsigned index;
+ const Texture *tex;
+ const Sampler *samp;
public:
TextureLoader(Texturing &, unsigned, Collection *);
private:
+ virtual void finish();
+
+ void sampler(const std::string &);
void texture(const std::string &);
};
#include "programcompiler.h"
#include "resourcemanager.h"
#include "resources.h"
+#include "sampler.h"
#include "technique.h"
#include "texture1d.h"
#include "texture2d.h"
add_type<PipelineTemplate>().suffix(".pipe").keyword("pipeline");
add_type<Pose>().keyword("pose");
add_type<Program>().keyword("shader").suffix(".glsl").creator(&Resources::create_program);
+ add_type<Sampler>().suffix(".samp").keyword("sampler");
add_type<Technique>().suffix(".tech").keyword("technique");
add_type<Texture1D>().base<Texture>().suffix(".tex1d").keyword("texture1d");
add_type<Texture2D>().base<Texture>().suffix(".tex2d").suffix(".png").suffix(".jpg").keyword("texture2d").creator(&Resources::create_texture2d);