"
This fixes some crashing issues I was having with certain FLT files that only had partial colour palettes
Which are typically found in older 14.x files and file converted through Polytrans or Deep exploration etc.
The code that grabs the color entries in ConvertFromFLT::visitColorPalette was assuming that there were full
palettes always coming in and stepping was out of bounds in certain cases (not all) and thus crashing with
access violations etc,
Although the normal from Creator is to have 1024 or 512 entries , this is not a really requirement of the format, just the way Creator creates its default palettes etc.
Code changed to look at the number of entries and use just those and fills in any missing entries with a default white colour"
"I add a new option in the HDR Reader.
The RAW option store the RGBE values into a Image, to use
this option you need to decode the RGBE value in the frag-
ment shader. Follow the cube map glsl decoder:
vec4 textureCubeRGBE( uniform samplerCube sampler, vec3 coords )
{
ivec4 rgbe = textureCube( sampler, coords ) * 255. + 0.5;
float e = rgbe.a - ( 128 + 8 );
return vec4( rgbe.rgb * exp2( e ), 1.0 );
}
This option is usefull for who have a outdate hardware like
FX cards and want to do cool things.
Finally this patch is need by a new HDR Rendering example
that I will put on the Wiki."
to be correctly importated from HDR files.
From Robert Osfield, tweaked the above to allow the original casting to RGB8 as an
options switched on by a osgDB::ReaderWriter::Options string with a value of "RGB8".
"On fixing the pointer access I discovered that reading osga archives
containing ive files went into a cpu loop. This turned out to be a
problem with proxy_streambuf on Solaris. Public methods in the Solaris
streambuf standard library implementation rely on the gptr() being set,
which proxy_streambuf was not doing. So I have modified
proxy_streambuf to set the input sequence pointers, and have also
aligned it more with the standard library streambuf implementation
where all input is through underflow(), not uflow() which merely calls
underflow() and advances the pointer."
From Robert Osfield, change from using pointer cast and assignment to using
a templated _write and _read method to avoid pointer aliasing to 2/4/8
byte boundaries that some computer system may produce. These changes
where inspried by Colin McDonalds change to using memcpy, these
changes weren't merged as memcpy is not as clear in naming as _read,
_write and memcpy will incurr a function call just for copy a
uint.
"I took a closer look at the conditional code in
SeamFinder::seamReplacement().
Because _info.minRange is a double and lod->getMinRange(0) is a float,
the difference will be calculated with double precision. If
_info.minRange is cast as a float it is exactly the same value as
lod->getMinRange(0) and the difference is exactly zero.
So if you change
if((fabs(_info.minRange-lod->getMinRange(0))<0.001)&&(fabs(_info.lod0Range-lod->getMaxRange(0))<0.001))
to
if((fabs((float)_info.minRange-lod->getMinRange(0))<0.001)&&(fabs((float)_info.lod0Range-lod->getMaxRange(0))<0.001))
it works a lot better."
"DOFAnimation's default state could now be controlled by the RW option.
The option string is "dofAnimation"
If the option string is omitted the default animation state is off."