vcglib/wrap/glw/renderable.h

201 lines
4.0 KiB
C++

#ifndef GLW_RENDERABLE_H
#define GLW_RENDERABLE_H
#include <string>
#include "./object.h"
namespace glw
{
class RenderableArguments : public ObjectArguments
{
public:
typedef ObjectArguments BaseType;
typedef RenderableArguments ThisType;
GLenum format;
RenderableArguments(void)
: BaseType ()
, format (GL_RGBA8)
{
;
}
RenderableArguments(GLenum aFormat)
: BaseType ()
, format (aFormat)
{
;
}
void clear(void)
{
BaseType::clear();
this->format = GL_RGBA8;
}
};
class Renderable : public Object
{
friend class Context;
public:
typedef Object BaseType;
typedef Renderable ThisType;
GLenum format(void) const
{
return this->m_format;
}
virtual int imageDimensions (void) const = 0;
virtual bool isArray (void) const = 0;
protected:
GLenum m_format;
Renderable(Context * ctx)
: BaseType (ctx)
, m_format (GL_NONE)
{
;
}
};
namespace detail { template <> struct BaseOf <Renderable> { typedef Object Type; }; };
typedef detail::ObjectSharedPointerTraits <Renderable> ::Type RenderablePtr;
class SafeRenderable : public SafeObject
{
friend class Context;
friend class BoundRenderable;
public:
typedef SafeObject BaseType;
typedef SafeRenderable ThisType;
SafeRenderable(void)
: BaseType()
{
;
}
GLenum format(void) const
{
return this->object()->format();
}
int imageDimensions(void) const
{
return this->object()->imageDimensions();
}
bool isArray(void) const
{
return this->object()->isArray();
}
protected:
SafeRenderable(const RenderablePtr & renderable)
: BaseType(renderable)
{
;
}
const RenderablePtr & object(void) const
{
return static_cast<const RenderablePtr &>(BaseType::object());
}
RenderablePtr & object(void)
{
return static_cast<RenderablePtr &>(BaseType::object());
}
};
namespace detail { template <> struct BaseOf <SafeRenderable> { typedef SafeObject Type; }; };
namespace detail { template <> struct ObjectBase <SafeRenderable> { typedef Renderable Type; }; };
namespace detail { template <> struct ObjectSafe <Renderable > { typedef SafeRenderable Type; }; };
typedef detail::ObjectSharedPointerTraits <SafeRenderable> ::Type RenderableHandle;
class RenderableBindingParams : public ObjectBindingParams
{
public:
typedef ObjectBindingParams BaseType;
typedef RenderableBindingParams ThisType;
RenderableBindingParams(void)
: BaseType()
{
;
}
RenderableBindingParams(GLenum aTarget, GLenum aUnit)
: BaseType(aTarget, aUnit)
{
;
}
};
class BoundRenderable : public BoundObject
{
friend class Context;
public:
typedef BoundObject BaseType;
typedef BoundRenderable ThisType;
BoundRenderable(void)
: BaseType()
{
;
}
const RenderableHandle & handle(void) const
{
return static_cast<const RenderableHandle &>(BaseType::handle());
}
RenderableHandle & handle(void)
{
return static_cast<RenderableHandle &>(BaseType::handle());
}
protected:
BoundRenderable(const RenderableHandle & handle, const RenderableBindingParams & params)
: BaseType(handle, params)
{
;
}
const RenderablePtr & object(void) const
{
return this->handle()->object();
}
RenderablePtr & object(void)
{
return this->handle()->object();
}
};
namespace detail { template <> struct ParamsOf <BoundRenderable> { typedef RenderableBindingParams Type; }; };
namespace detail { template <> struct BaseOf <BoundRenderable> { typedef BoundObject Type; }; };
namespace detail { template <> struct ObjectBase <BoundRenderable> { typedef Renderable Type; }; };
namespace detail { template <> struct ObjectBound <Renderable > { typedef BoundRenderable Type; }; };
typedef detail::ObjectSharedPointerTraits <BoundRenderable> ::Type BoundRenderableHandle;
};
#endif // GLW_RENDERABLE_H