Working spot and point lights
Use 8bit normals if /sim/rendering/no-16bit-buffer is set to true. May be usefull for old card returning 0x8cda at fbo setup time White/gray specular material s/Tabs/Spaces/
This commit is contained in:
parent
47a910bccc
commit
2416f9f8d8
2 changed files with 82 additions and 77 deletions
src/Main
|
@ -183,6 +183,8 @@ namespace flightgear
|
|||
{
|
||||
void CameraInfo::updateCameras()
|
||||
{
|
||||
bufferSize->set( osg::Vec2f( width, height ) );
|
||||
|
||||
for (CameraMap::iterator ii = cameras.begin(); ii != cameras.end(); ++ii ) {
|
||||
float f = ii->second.scaleFactor;
|
||||
if ( f == 0.0f ) continue;
|
||||
|
@ -202,6 +204,8 @@ void CameraInfo::updateCameras()
|
|||
|
||||
void CameraInfo::resized(double w, double h)
|
||||
{
|
||||
bufferSize->set( osg::Vec2f( w, h ) );
|
||||
|
||||
for (RenderBufferMap::iterator ii = buffers.begin(); ii != buffers.end(); ++ii) {
|
||||
float s = ii->second.scaleFactor;
|
||||
if ( s == 0.0f ) continue;
|
||||
|
@ -1052,8 +1056,7 @@ void CameraGroup::setCameraCullMasks(Node::NodeMask nm)
|
|||
continue;
|
||||
osg::ref_ptr<osg::Camera> farCamera = info->getCamera(FAR_CAMERA);
|
||||
osg::Camera* camera = info->getCamera( MAIN_CAMERA );
|
||||
if ( camera == 0 )
|
||||
camera = info->getCamera( GEOMETRY_CAMERA );
|
||||
if (camera == 0) continue;
|
||||
if (farCamera.valid() && farCamera->getNodeMask() != 0) {
|
||||
camera->setCullMask(nm & ~simgear::BACKGROUND_BIT);
|
||||
camera->setCullMaskLeft(nm & ~simgear::BACKGROUND_BIT);
|
||||
|
|
|
@ -692,10 +692,9 @@ osg::Texture2D* buildDeferredBuffer(GLint internalFormat, GLenum sourceFormat, G
|
|||
if (shadowComparison) {
|
||||
tex->setShadowTextureMode(osg::Texture2D::LUMINANCE);
|
||||
tex->setBorderColor(osg::Vec4(1.0f,1.0f,1.0f,1.0f));
|
||||
} else {
|
||||
}
|
||||
tex->setSourceFormat(sourceFormat);
|
||||
tex->setSourceType(sourceType);
|
||||
}
|
||||
tex->setFilter( osg::Texture2D::MIN_FILTER, osg::Texture2D::LINEAR );
|
||||
tex->setFilter( osg::Texture2D::MAG_FILTER, osg::Texture2D::LINEAR );
|
||||
tex->setWrap( osg::Texture::WRAP_S, wrapMode );
|
||||
|
@ -703,14 +702,18 @@ osg::Texture2D* buildDeferredBuffer(GLint internalFormat, GLenum sourceFormat, G
|
|||
return tex;
|
||||
}
|
||||
|
||||
void buildDeferredBuffers( flightgear::CameraInfo* info, int shadowMapSize )
|
||||
void buildDeferredBuffers( flightgear::CameraInfo* info, int shadowMapSize, bool normal16 )
|
||||
{
|
||||
info->addBuffer(flightgear::RenderBufferInfo::DEPTH_BUFFER, buildDeferredBuffer( GL_DEPTH_COMPONENT32, GL_DEPTH_COMPONENT, GL_FLOAT, osg::Texture::CLAMP_TO_BORDER) );
|
||||
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::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) );
|
||||
info->addBuffer(flightgear::RenderBufferInfo::LIGHTING_BUFFER, buildDeferredBuffer( GL_RGBA8, GL_RGBA, GL_UNSIGNED_BYTE, osg::Texture::CLAMP_TO_BORDER) );
|
||||
info->addBuffer(flightgear::RenderBufferInfo::SHADOW_BUFFER, buildDeferredBuffer( GL_DEPTH_COMPONENT, GL_DEPTH_COMPONENT, GL_FLOAT, osg::Texture::CLAMP_TO_BORDER, true), 0.0f );
|
||||
info->addBuffer(flightgear::RenderBufferInfo::SHADOW_BUFFER, buildDeferredBuffer( GL_DEPTH_COMPONENT32, GL_DEPTH_COMPONENT, GL_FLOAT, osg::Texture::CLAMP_TO_BORDER, true), 0.0f );
|
||||
info->getBuffer(RenderBufferInfo::SHADOW_BUFFER)->setTextureSize(shadowMapSize,shadowMapSize);
|
||||
}
|
||||
|
||||
|
@ -1057,7 +1060,7 @@ const char *sunlight_frag_src = ""
|
|||
" vec3 Iemis = spec_emis.z * color;\n"
|
||||
" if (len > 0.0001) {\n"
|
||||
" halfDir /= len;\n"
|
||||
" Ispec = pow( clamp( dot( halfDir, normal ), 0.0, 1.0 ), spec_emis.y * 255.0 ) * spec_emis.x * color * fg_SunSpecularColor.rgb;\n"
|
||||
" Ispec = pow( clamp( dot( halfDir, normal ), 0.0, 1.0 ), spec_emis.y * 255.0 ) * spec_emis.x * fg_SunSpecularColor.rgb;\n"
|
||||
" }\n"
|
||||
" gl_FragColor = vec4(mix(vec3(0.0), Idiff + Ispec, shadow) + Iemis, 1.0);\n"
|
||||
// " gl_FragColor = mix(tint, vec4(mix(vec3(0.0), Idiff + Ispec, shadow) + Iemis, 1.0), 0.92);\n"
|
||||
|
@ -1307,7 +1310,7 @@ FGRenderer::buildDeferredPipeline(flightgear::CameraGroup* cgroup, unsigned flag
|
|||
osg::GraphicsContext* gc)
|
||||
{
|
||||
CameraInfo* info = new CameraInfo(flags);
|
||||
buildDeferredBuffers( info, _shadowMapSize );
|
||||
buildDeferredBuffers( info, _shadowMapSize, !fgGetBool("/sim/rendering/no-16bit-buffer", false ) );
|
||||
|
||||
osg::Camera* geometryCamera = buildDeferredGeometryCamera( info, gc );
|
||||
cgroup->getViewer()->addSlave(geometryCamera, false);
|
||||
|
@ -1315,7 +1318,7 @@ FGRenderer::buildDeferredPipeline(flightgear::CameraGroup* cgroup, unsigned flag
|
|||
int slaveIndex = cgroup->getViewer()->getNumSlaves() - 1;
|
||||
info->getRenderStageInfo(GEOMETRY_CAMERA).slaveIndex = slaveIndex;
|
||||
|
||||
osg::Camera* shadowCamera = buildDeferredShadowCamera( info, gc );
|
||||
Camera* shadowCamera = buildDeferredShadowCamera( info, gc );
|
||||
cgroup->getViewer()->addSlave(shadowCamera, false);
|
||||
installCullVisitor(shadowCamera);
|
||||
slaveIndex = cgroup->getViewer()->getNumSlaves() - 1;
|
||||
|
@ -1335,8 +1338,7 @@ FGRenderer::buildDeferredPipeline(flightgear::CameraGroup* cgroup, unsigned flag
|
|||
g->setUseDisplayList(false); //DEBUG
|
||||
simgear::EffectGeode* eg = new simgear::EffectGeode;
|
||||
simgear::Effect* effect = simgear::makeEffect("Effects/display", true);
|
||||
if (!effect)
|
||||
{
|
||||
if (!effect) {
|
||||
SG_LOG(SG_VIEW, SG_ALERT, "Effects/display not found");
|
||||
return 0;
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue