00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020 #ifndef GLUONGRAPHICS_MATERIAL_H
00021 #define GLUONGRAPHICS_MATERIAL_H
00022
00023 #include "gluon_graphics_export.h"
00024 #include <core/gluonobject.h>
00025
00026 namespace GluonGraphics
00027 {
00028 class MaterialInstance;
00029 class Technique;
00030
00051 class GLUON_GRAPHICS_EXPORT Material : public GluonCore::GluonObject
00052 {
00053 Q_OBJECT
00054 GLUON_OBJECT( Material )
00055
00056 public:
00062 Material( QObject* parent = 0 );
00066 virtual ~Material();
00067
00079 bool load( const QUrl& url );
00080
00094 void build( const QString& name = QString() );
00095
00105 Technique* technique( const QString& name = QString() ) const;
00106
00115 void addTechnique( Technique* technique );
00116
00125 void removeTechnique( const QString& name );
00126
00135 void setDefaultTechnique( const QString& name );
00136
00152 MaterialInstance* createInstance( const QString& name );
00153
00161 MaterialInstance* instance( const QString& name );
00162
00169 uint glProgram();
00170
00171 QHash<QString, QVariant> uniformList();
00172
00173 private:
00174 class MaterialPrivate;
00175 MaterialPrivate* const d;
00176 };
00177 }
00178
00179 Q_DECLARE_METATYPE( GluonGraphics::Material );
00180 Q_DECLARE_METATYPE( GluonGraphics::Material* );
00181
00182 #endif // GLUONGRAPHICS_MATERIAL_H