#include <simgear/compiler.h>
-#include STL_STRING // Standard C++ string library
+#include <string> // Standard C++ string library
#include <vector>
#include <map>
#include <simgear/props/props.hxx>
#include <simgear/structure/SGSharedPtr.hxx>
+#include <simgear/scene/util/SGSceneFeatures.hxx>
#include "matmodel.hxx"
class SGMaterialGlyph;
-
/**
* A material in the scene graph.
*
// Public methods.
////////////////////////////////////////////////////////////////////
- /**
- * Force the texture to load if it hasn't already.
- *
- * @return true if the texture loaded, false if it was loaded
- * already.
- */
- bool load_texture (int n = -1);
-
-
/**
* Get the textured state.
*/
- osg::StateSet *get_state (int n = -1) const;
+ osg::StateSet *get_state (int n = -1);
/**
*
* A smaller number means more generated night lighting.
*
- * @return The area (m^2?) covered by each light.
+ * @return The area (m^2) covered by each light.
*/
inline double get_light_coverage () const { return light_coverage; }
+ /**
+ * Get the forest coverage.
+ *
+ * A smaller number means more generated forest canopy.
+ *
+ * @return The area (m^2) covered by each canopy.
+ */
+ inline double get_tree_coverage () const { return tree_coverage; }
+
+ /**
+ * Get the forest height.
+ *
+ * @return The average height of the trees.
+ */
+ inline double get_tree_height () const { return tree_height; }
+
+ /**
+ * Get the forest width.
+ *
+ * @return The average width of the trees.
+ */
+ inline double get_tree_width () const { return tree_width; }
+
+ /**
+ * Get the forest LoD range.
+ *
+ * @return The LoD range for the trees.
+ */
+ inline double get_tree_range () const { return tree_range; }
+
+ /**
+ * Get the number of tree varieties available
+ *
+ * @return the number of different trees defined in the texture strip
+ */
+ inline int get_tree_varieties () const { return tree_varieties; }
+
+ /**
+ * Get the texture strip to use for trees
+ *
+ * @return the texture to use for trees.
+ */
+ inline string get_tree_texture () const { return tree_texture; }
+
/**
* Return if the surface material is solid, if it is not solid, a fluid
* can be assumed, that is usually water.
double get_bumpiness () const { return bumpiness; }
/**
- * Get the load resistence
+ * Get the load resistance
*/
- double get_load_resistence () const { return load_resistence; }
+ double get_load_resistance () const { return load_resistance; }
/**
* Get the list of names for this material
*/
SGMaterialGlyph * get_glyph (const string& name) const;
+ void set_light_color(const SGVec4f& color)
+ { emission = color; }
+ const SGVec4f& get_light_color() const
+ { return emission; }
+
+ SGVec2f get_tex_coord_scale() const
+ {
+ float tex_width = get_xsize();
+ float tex_height = get_ysize();
+
+ return SGVec2f((0 < tex_width) ? 1000.0f/tex_width : 1.0f,
+ (0 < tex_height) ? 1000.0f/tex_height : 1.0f);
+ }
+
protected:
\f
bool wrapu, wrapv;
// use mipmapping?
- int mipmap;
-
- // use anisotropic filtering
- float filtering;
+ bool mipmap;
// coverage of night lighting.
double light_coverage;
+
+ // coverage of trees
+ double tree_coverage;
+
+ // Range at which trees become visible
+ double tree_range;
+
+ // Height of the tree
+ double tree_height;
+
+ // Width of the tree
+ double tree_width;
+
+ // Number of varieties of tree texture
+ int tree_varieties;
// True if the material is solid, false if it is a fluid
bool solid;
// the bumpiness of that surface material
double bumpiness;
- // the load resistence of that surface material
- double load_resistence;
+ // the load resistance of that surface material
+ double load_resistance;
// material properties
SGVec4f ambient, diffuse, specular, emission;
// taxiway-/runway-sign texture elements
map<string, SGSharedPtr<SGMaterialGlyph> > glyphs;
-
+
+ // Tree texture, typically a strip of applicable tree textures
+ string tree_texture;
\f
////////////////////////////////////////////////////////////////////
// Internal constructors and methods.
void build_state( bool defer_tex_load );
void set_state( osg::StateSet *s );
- void assignTexture( osg::StateSet *state, const std::string &fname, int _wrapu = TRUE, int _wrapv = TRUE, int _mipmap = TRUE, float filtering = 1.0f );
+ void assignTexture( osg::StateSet *state, const std::string &fname, bool _wrapu = true, bool _wrapv = true, bool _mipmap = true );
};
const SGMaterial* getMaterial() const
{ return mMaterial; }
private:
- SGSharedPtr<const SGMaterial> mMaterial;
+ // this cannot be an SGSharedPtr since that would create a cicrular reference
+ // making it impossible to ever free the space needed by SGMaterial
+ const SGMaterial* mMaterial;
};
+void
+SGSetTextureFilter( int max);
+
+int
+SGGetTextureFilter();
+
#endif // _SG_MAT_HXX