WS30: Better landclass cache for tree generation
This commit is contained in:
parent
b5d78f7c1d
commit
e7659941ef
@ -169,10 +169,10 @@ void VPBTechnique::init(int dirtyMask, bool assumeMultiThreaded)
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
applyColorLayers(*buffer, masterLocator);
|
applyColorLayers(*buffer, masterLocator);
|
||||||
applyTrees(*buffer, masterLocator);
|
|
||||||
applyLineFeatures(*buffer, masterLocator);
|
applyLineFeatures(*buffer, masterLocator);
|
||||||
applyAreaFeatures(*buffer, masterLocator);
|
applyAreaFeatures(*buffer, masterLocator);
|
||||||
applyCoastline(*buffer, masterLocator);
|
applyCoastline(*buffer, masterLocator);
|
||||||
|
applyTrees(*buffer, masterLocator);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@ -1418,6 +1418,19 @@ void VPBTechnique::applyTrees(BufferData& buffer, Locator* masterLocator)
|
|||||||
lon, osg::Vec3d(0.0, 0.0, 1.0),
|
lon, osg::Vec3d(0.0, 0.0, 1.0),
|
||||||
0.0, osg::Vec3d(1.0, 0.0, 0.0));
|
0.0, osg::Vec3d(1.0, 0.0, 0.0));
|
||||||
|
|
||||||
|
// At the detailed tile level we are generating vegetation, and
|
||||||
|
// as we walk across the tile in a scanline, the landclass doesn't
|
||||||
|
// change regularly from point to point. Cache the required
|
||||||
|
// material information for the current landclass to reduce the
|
||||||
|
// number of lookups into the material cache.
|
||||||
|
int current_land_class = -1;
|
||||||
|
osg::Texture2D* object_mask = NULL;
|
||||||
|
osg::Image* img = NULL;
|
||||||
|
float x_scale = 1000.0;
|
||||||
|
float y_scale = 1000.0;
|
||||||
|
TreeBin* bin = NULL;
|
||||||
|
float wood_coverage = 0.0;
|
||||||
|
|
||||||
for (unsigned int i = 0; i < triangle_count; i++)
|
for (unsigned int i = 0; i < triangle_count; i++)
|
||||||
{
|
{
|
||||||
const int i0 = drawElements->index(3 * i);
|
const int i0 = drawElements->index(3 * i);
|
||||||
@ -1464,19 +1477,6 @@ void VPBTechnique::applyTrees(BufferData& buffer, Locator* masterLocator)
|
|||||||
|
|
||||||
const double D = det2(ll_x, ll_y);
|
const double D = det2(ll_x, ll_y);
|
||||||
|
|
||||||
// At the detailed tile level we are generating vegetation, and
|
|
||||||
// as we walk across the tile in a scanline, the landclass doesn't
|
|
||||||
// change regularly from point to point. Cache the required
|
|
||||||
// material information for the current landclass to reduce the
|
|
||||||
// number of lookups into the material cache.
|
|
||||||
int current_land_class = -1;
|
|
||||||
osg::Texture2D* object_mask = NULL;
|
|
||||||
osg::Image* img = NULL;
|
|
||||||
float x_scale = 1000.0;
|
|
||||||
float y_scale = 1000.0;
|
|
||||||
TreeBin* bin = NULL;
|
|
||||||
float wood_coverage = 0.0;
|
|
||||||
|
|
||||||
for (int lat_int = min_lat - 1; lat_int <= max_lat + 1; lat_int++)
|
for (int lat_int = min_lat - 1; lat_int <= max_lat + 1; lat_int++)
|
||||||
{
|
{
|
||||||
const double lat = (lat_int - off_y) * delta_lat;
|
const double lat = (lat_int - off_y) * delta_lat;
|
||||||
@ -1488,11 +1488,7 @@ void VPBTechnique::applyTrees(BufferData& buffer, Locator* masterLocator)
|
|||||||
double x = det2(ll_x, p) / D;
|
double x = det2(ll_x, p) / D;
|
||||||
double y = det2(p, ll_y) / D;
|
double y = det2(p, ll_y) / D;
|
||||||
|
|
||||||
if ((x < 0.0) || (y < 0.0) || (x + y > 1.0))
|
if ((x < 0.0) || (y < 0.0) || (x + y > 1.0)) continue;
|
||||||
{
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
if (!image) {
|
if (!image) {
|
||||||
SG_LOG(SG_TERRAIN, SG_ALERT, "Image disappeared under my feet.");
|
SG_LOG(SG_TERRAIN, SG_ALERT, "Image disappeared under my feet.");
|
||||||
|
Loading…
Reference in New Issue
Block a user