1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158
|
#ifndef GLW_GEOMETRYSHADER_H
#define GLW_GEOMETRYSHADER_H
#include "./shader.h"
namespace glw
{
class GeometryShaderArguments : public ShaderArguments
{
public:
typedef ShaderArguments BaseType;
typedef GeometryShaderArguments ThisType;
GeometryShaderArguments(void)
: BaseType()
{
;
}
void clear(void)
{
BaseType::clear();
}
};
class GeometryShader : public Shader
{
friend class Context;
public:
typedef Shader BaseType;
typedef GeometryShader ThisType;
virtual Type type(void) const
{
return GeometryShaderType;
}
protected:
GeometryShader(Context * ctx)
: BaseType(ctx)
{
;
}
virtual GLenum shaderType(void) const
{
return GL_GEOMETRY_SHADER;
}
bool create(const GeometryShaderArguments & args)
{
return BaseType::create(args);
}
};
namespace detail { template <> struct BaseOf <GeometryShader> { typedef Shader Type; }; };
typedef detail::ObjectSharedPointerTraits <GeometryShader> ::Type GeometryShaderPtr;
class SafeGeometryShader : public SafeShader
{
friend class Context;
friend class BoundGeometryShader;
public:
typedef SafeShader BaseType;
typedef SafeGeometryShader ThisType;
protected:
SafeGeometryShader(const GeometryShaderPtr & geometryShader)
: BaseType(geometryShader)
{
;
}
const GeometryShaderPtr & object(void) const
{
return static_cast<const GeometryShaderPtr &>(BaseType::object());
}
GeometryShaderPtr & object(void)
{
return static_cast<GeometryShaderPtr &>(BaseType::object());
}
};
namespace detail { template <> struct BaseOf <SafeGeometryShader> { typedef SafeShader Type; }; };
namespace detail { template <> struct ObjectBase <SafeGeometryShader> { typedef GeometryShader Type; }; };
namespace detail { template <> struct ObjectSafe <GeometryShader > { typedef SafeGeometryShader Type; }; };
typedef detail::ObjectSharedPointerTraits <SafeGeometryShader> ::Type GeometryShaderHandle;
class GeometryShaderBindingParams : public ShaderBindingParams
{
public:
typedef ShaderBindingParams BaseType;
typedef GeometryShaderBindingParams ThisType;
GeometryShaderBindingParams(void)
: BaseType(GL_GEOMETRY_SHADER, 0)
{
;
}
};
class BoundGeometryShader : public BoundShader
{
friend class Context;
public:
typedef BoundShader BaseType;
typedef BoundGeometryShader ThisType;
const GeometryShaderHandle & handle(void) const
{
return static_cast<const GeometryShaderHandle &>(BaseType::handle());
}
GeometryShaderHandle & handle(void)
{
return static_cast<GeometryShaderHandle &>(BaseType::handle());
}
protected:
BoundGeometryShader(const GeometryShaderHandle & handle, const ShaderBindingParams & params)
: BaseType(handle, params)
{
;
}
const GeometryShaderPtr & object(void) const
{
return this->handle()->object();
}
GeometryShaderPtr & object(void)
{
return this->handle()->object();
}
};
namespace detail { template <> struct ParamsOf <BoundGeometryShader> { typedef GeometryShaderBindingParams Type; }; };
namespace detail { template <> struct BaseOf <BoundGeometryShader> { typedef BoundShader Type; }; };
namespace detail { template <> struct ObjectBase <BoundGeometryShader> { typedef GeometryShader Type; }; };
namespace detail { template <> struct ObjectBound <GeometryShader > { typedef BoundGeometryShader Type; }; };
typedef detail::ObjectSharedPointerTraits <BoundGeometryShader> ::Type BoundGeometryShaderHandle;
};
#endif // GLW_GEOMETRYSHADER_H
|