Hi Christian,

Does this mean there is a bug in the MS version of math.h and the
floor function it provides?

Previously we haven't used cmath as some platforms didn't support it
properly, I recall IRIX being a problem, but am not sure if it extends
further than this.  IRIX support has long been deprecated so won't be
a constraint these days.  So... using #include<cmath> could well be a
viable solution,

It does still concern me that the MS version of math.h is giving
different results to cmath.

Robert.

On 9 January 2013 15:27, Christian Schulte <[email protected]> wrote:
> Hi all,
>
> I have investigated a little deeper the problem... Indeed, on Windows
> platform, the number of mipmaps returned by
> osg::Image::computeNumberOfMipmapLevels( s, t, r ) is wrong, but it is
> correct on Linux platforms for the same dds file...
> Here is attached a little test program that explains why (it is more or less
> a computeNumberOfMipmapLevels with s=t=1024 and r=1), and it is not linked
> to OSG. Compile it on Windows 32 bits (works on Win7 and WinXP) (g++
> main.cpp -o main.exe) You will see the following result :
>
> logf(wf)                   = 6.93147182464599609375
> log(wd)                    = 6.93147180559945308431
> logf(2.0f)                 = 0.69314718246459960938
> log(2.0)                   = 0.69314718055994528623
> logf(wf)/logf(2.0f)        = 10.00000000000000000000
> log(wd)/log(2.0)           = 10.00000000000000000000
> floor(logf(wf)/logf(2.0f)) = 9.00000000000000000000 -> Here is the error, it
> should be 10 too...
> floor(log(wd)/log(2.0))    = 10.00000000000000000000
> floor(testf)               = 10.00000000000000000000
> floor(testd)               = 10.00000000000000000000
>
> Replacing the include of math.h by cmath results in :
>
> logf(wf)                   = 6.93147182464599609375
> log(wd)                    = 6.93147180559945308431
> logf(2.0f)                 = 0.69314718246459960938
> log(2.0)                   = 0.69314718055994528623
> logf(wf)/logf(2.0f)        = 10.00000000000000000000
> log(wd)/log(2.0)           = 10.00000000000000000000
> floor(logf(wf)/logf(2.0f)) = 10.00000000000000000000
> floor(log(wd)/log(2.0))    = 10.00000000000000000000
> floor(testf)               = 10.00000000000000000000
> floor(testd)               = 10.00000000000000000000
>
> Under Linux both solutions give the second results.
> The problem is that osg/Math includes math.h and not cmath. I don't know
> which would be the best solution :
>
> Replace math.h by cmath in include/osg/Math
> Store the logf division (float testf = logf(wf)/logf(2.0f)) of
> osg::Image::computeNumberOfMipmapLevels( s, t, r ) in a float before
> computing the floor.
>
> Up to the list to give the answer...
>
> PS : this is also the solution to the discussion "osgPlugins : dds problem
> on windows platform" I launched 07/03/2011
>
> Cheers,
>
> Christian Schulte
>
>
>
>
> Le 20/12/2012 15:15, Lukasz Izdebski a écrit :
>
> Hi,
> i probably have solution for this problem, i have found a bug in dds plugin
> ReaderWriterDDS.cpp
> Line 633
> unsigned numMipmaps = osg::Image::computeNumberOfMipmapLevels( s, t, r );
>
> when compute numMipmaps returns wrong number. this number is less then
> number of mipmaps in dds file( ddsd.dwMipMapCount ) . This bug makes that
> when dds mipmaps are loaded to opengl last mipmap (4x4) isn't loaded. and
> with combination with LINEAR_MIPMAP_LINEAR make this bug.
>
>
> the numMipmaps should be taken form ddsd.dwMipMapCount
>
>
> in attachment i send a corrected version of file.
> ...
>
> Thank you!
>
> Cheers,
> Lukasz
>
> ------------------
> Read this topic online here:
> http://forum.openscenegraph.org/viewtopic.php?p=51653#51653
>
>
>
>
> Attachments:
> http://forum.openscenegraph.org//files/readerwriterdds_204.cpp
>
>
> _______________________________________________
> osg-users mailing list
> [email protected]
> http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org
>
>
>
> _______________________________________________
> osg-users mailing list
> [email protected]
> http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org
>
_______________________________________________
osg-users mailing list
[email protected]
http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org

Reply via email to