00001
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00033
00034 #ifndef GROOVX_GFX_GXMATERIAL_CC_UTC20050626084024_DEFINED
00035 #define GROOVX_GFX_GXMATERIAL_CC_UTC20050626084024_DEFINED
00036
00037 #include "gfx/gxmaterial.h"
00038
00039 #include "gfx/glcanvas.h"
00040
00041 #include "io/reader.h"
00042 #include "io/writer.h"
00043
00044 #include "rutz/error.h"
00045
00046 #include "rutz/trace.h"
00047
00048 namespace
00049 {
00050 const int GXMATERIAL_SVID = 0;
00051 }
00052
00053 const FieldMap& GxMaterial::classFields()
00054 {
00055 GVX_TRACE("GxMaterial::classFields");
00056 static const Field FIELD_ARRAY[] =
00057 {
00058 Field("specularColor", Field::ValueType(), &GxMaterial::specularColor,
00059 "0.0 0.0 0.0 0.0", "0.0 0.0 0.0 0.0", "1.0 1.0 1.0 1.0",
00060 "0.01 0.01 0.01 0.01", Field::NEW_GROUP | Field::MULTI),
00061 Field("diffuseColor", Field::ValueType(), &GxMaterial::diffuseColor,
00062 "0.0 0.0 0.0 0.0", "0.0 0.0 0.0 0.0", "1.0 1.0 1.0 1.0",
00063 "0.01 0.01 0.01 0.01", Field::MULTI),
00064 Field("ambientColor", Field::ValueType(), &GxMaterial::ambientColor,
00065 "0.0 0.0 0.0 0.0", "0.0 0.0 0.0 0.0", "1.0 1.0 1.0 1.0",
00066 "0.01 0.01 0.01 0.01", Field::MULTI),
00067 Field("shininess", &GxMaterial::shininess, 50.0, 0.0, 128.0, 1.0)
00068 };
00069
00070 static FieldMap FIELD_MAP(FIELD_ARRAY);
00071
00072 return FIELD_MAP;
00073 }
00074
00075 GxMaterial* GxMaterial::make()
00076 {
00077 GVX_TRACE("GxMaterial::make");
00078 return new GxMaterial;
00079 }
00080
00081 GxMaterial::GxMaterial() :
00082 FieldContainer(&sigNodeChanged),
00083 specularColor(1.0, 1.0, 1.0, 1.0),
00084 diffuseColor(1.0, 1.0, 1.0, 1.0),
00085 ambientColor(0.0, 0.0, 0.0, 1.0),
00086 shininess(50.0)
00087 {
00088 GVX_TRACE("GxMaterial::GxMaterial");
00089 setFieldMap(GxMaterial::classFields());
00090 }
00091
00092 GxMaterial::~GxMaterial() throw()
00093 {
00094 GVX_TRACE("GxMaterial::~GxMaterial");
00095 }
00096
00097 io::version_id GxMaterial::class_version_id() const
00098 {
00099 GVX_TRACE("GxMaterial::class_version_id");
00100 return GXMATERIAL_SVID;
00101 }
00102
00103 void GxMaterial::read_from(io::reader& reader)
00104 {
00105 GVX_TRACE("GxMaterial::read_from");
00106 readFieldsFrom(reader, classFields());
00107 }
00108
00109 void GxMaterial::write_to(io::writer& writer) const
00110 {
00111 GVX_TRACE("GxMaterial::write_to");
00112 writeFieldsTo(writer, classFields(), GXMATERIAL_SVID);
00113 }
00114
00116
00118
00119 void GxMaterial::getBoundingCube(Gfx::Bbox&) const
00120 {}
00121
00122 void GxMaterial::draw(Gfx::Canvas& canvas) const
00123 {
00124 GVX_TRACE("GxMaterial::draw");
00125
00126 GLCanvas* glcanvas = dynamic_cast<GLCanvas*>(&canvas);
00127
00128 if (glcanvas == 0)
00129 throw rutz::error("can't use GxLighting with non-OpenGL canvas", SRC_POS);
00130
00131 glcanvas->material(&specularColor,
00132 &diffuseColor,
00133 &ambientColor,
00134 &shininess);
00135 }
00136
00137 static const char __attribute__((used)) vcid_groovx_gfx_gxmaterial_cc_utc20050626084024[] = "$Id: gxmaterial.cc 10065 2007-04-12 05:54:56Z rjpeters $ $HeadURL: file:
00138 #endif // !GROOVX_GFX_GXMATERIAL_CC_UTC20050626084024_DEFINED