#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) { this->clear(); } void clear(void) { BaseType::clear(); } }; class SafeGeometryShader : public virtual SafeShader { public: typedef SafeShader BaseType; typedef SafeGeometryShader ThisType; protected: SafeGeometryShader(Context * ctx) : SafeObject (ctx) , BaseType (ctx) { ; } }; class GeometryShader : public Shader, public SafeGeometryShader { friend class Context; friend class detail::SharedObjectBinding<GeometryShader>; public: typedef Shader BaseType; typedef SafeGeometryShader SafeType; typedef GeometryShader ThisType; virtual Type type(void) const { return GeometryShaderType; } protected: GeometryShader(Context * ctx) : SafeObject (ctx) , SafeShader (ctx) , BaseType (ctx) , SafeType (ctx) { ; } virtual GLenum shaderType(void) const { return GL_GEOMETRY_SHADER; } bool create(const GeometryShaderArguments & args) { return BaseType::create(args); } }; typedef detail::SafeHandle <GeometryShader> GeometryShaderHandle; typedef detail::UnsafeHandle <GeometryShader> BoundGeometryShader; } // end namespace glw #endif // GLW_GEOMETRYSHADER_H