On Thu, 2012-04-12 at 10:43 +0200, Erik Hofman wrote:
> even GL_RGB16 works.

And therefore I propose this patch.

Erik
diff --git a/src/Main/renderer.cxx b/src/Main/renderer.cxx
index 1c6e77b..1c5ea0a 100644
--- a/src/Main/renderer.cxx
+++ b/src/Main/renderer.cxx
@@ -65,6 +65,7 @@
 #include <osgViewer/Renderer>
 
 #include <simgear/math/SGMath.hxx>
+#include <simgear/screen/extensions.hxx>
 #include <simgear/scene/material/matlib.hxx>
 #include <simgear/scene/material/EffectCullVisitor.hxx>
 #include <simgear/scene/material/Effect.hxx>
@@ -735,7 +736,7 @@ void buildDeferredBuffers( flightgear::CameraInfo* info, int shadowMapSize, bool
     if (normal16)
         info->addBuffer(flightgear::RenderBufferInfo::NORMAL_BUFFER, buildDeferredBuffer( 0x822C /*GL_RG16*/, 0x8227 /*GL_RG*/, GL_UNSIGNED_SHORT, osg::Texture::CLAMP_TO_BORDER) );
     else
-        info->addBuffer(flightgear::RenderBufferInfo::NORMAL_BUFFER, buildDeferredBuffer( GL_RGBA8, GL_RGBA, GL_UNSIGNED_SHORT, osg::Texture::CLAMP_TO_BORDER) );
+        info->addBuffer(flightgear::RenderBufferInfo::NORMAL_BUFFER, buildDeferredBuffer( GL_RGB16, GL_RGB, GL_UNSIGNED_SHORT, osg::Texture::CLAMP_TO_BORDER) );
 
     info->addBuffer(flightgear::RenderBufferInfo::DIFFUSE_BUFFER, buildDeferredBuffer( GL_RGBA8, GL_RGBA, GL_UNSIGNED_BYTE, osg::Texture::CLAMP_TO_BORDER) );
     info->addBuffer(flightgear::RenderBufferInfo::SPEC_EMIS_BUFFER, buildDeferredBuffer( GL_RGBA8, GL_RGBA, GL_UNSIGNED_BYTE, osg::Texture::CLAMP_TO_BORDER) );
@@ -1356,7 +1357,10 @@ FGRenderer::buildDeferredPipeline(flightgear::CameraGroup* cgroup, unsigned flag
                                     osg::GraphicsContext* gc)
 {
     CameraInfo* info = new CameraInfo(flags);
-	buildDeferredBuffers( info, _shadowMapSize, !fgGetBool("/sim/rendering/no-16bit-buffer", false ) );
+
+    bool gl_ext_texture_rg = SGIsOpenGLExtensionSupported("GL_ARB_texture_rg") &
+                           !fgGetBool("/sim/rendering/no-16bit-buffer", false );
+	buildDeferredBuffers( info, _shadowMapSize, gl_ext_texture_rg );
 
     osg::Camera* geometryCamera = buildDeferredGeometryCamera( info, gc );
     cgroup->getViewer()->addSlave(geometryCamera, false);
------------------------------------------------------------------------------
For Developers, A Lot Can Happen In A Second.
Boundary is the first to Know...and Tell You.
Monitor Your Applications in Ultra-Fine Resolution. Try it FREE!
http://p.sf.net/sfu/Boundary-d2dvs2
_______________________________________________
Flightgear-devel mailing list
Flightgear-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/flightgear-devel

Reply via email to