void RenderingManager::update(float dt, bool paused) { if (!paused) { mEffectManager->update(dt); mSky->update(dt); } mWater->update(dt); mCamera->update(dt, paused); osg::Vec3f focal, cameraPos; mCamera->getPosition(focal, cameraPos); if (mWater->isUnderwater(cameraPos)) { setFogColor(mUnderwaterColor * mUnderwaterWeight + mFogColor * (1.f-mUnderwaterWeight)); mStateUpdater->setFogStart(mViewDistance * (1 - mUnderwaterFog)); mStateUpdater->setFogEnd(mViewDistance); } else { setFogColor(mFogColor); if (mFogDepth == 0.f) { mStateUpdater->setFogStart(0.f); mStateUpdater->setFogEnd(std::numeric_limits<float>::max()); } else { mStateUpdater->setFogStart(mViewDistance * (1 - mFogDepth)); mStateUpdater->setFogEnd(mViewDistance); } } }
void RenderingManager::update(float dt, bool paused) { if (!paused) { mEffectManager->update(dt); mSky->update(dt); } mWater->update(dt); mCamera->update(dt, paused); osg::Vec3f focal, cameraPos; mCamera->getPosition(focal, cameraPos); if (mWater->isUnderwater(cameraPos)) { setFogColor(osg::Vec4f(0.090195f, 0.115685f, 0.12745f, 1.f)); mStateUpdater->setFogStart(0.f); mStateUpdater->setFogEnd(1000); } else { setFogColor(mFogColor); if (mFogDepth == 0.f) { mStateUpdater->setFogStart(0.f); mStateUpdater->setFogEnd(FLT_MAX); } else { mStateUpdater->setFogStart(mViewDistance * (1 - mFogDepth)); mStateUpdater->setFogEnd(mViewDistance); } } }
void Fog::init() { if (m_useVolumetricFog) { #ifndef USES_JS_EMSCRIPTEN if (GLExtension::isExtensionSupported("GL_EXT_fog_coord")) { glFogCoordfEXT = (PFNGLFOGCOORDFEXTPROC) wglGetProcAddress("glFogCoordfEXT"); } else { Utils::print("WARNING: extension GL_EXT_fog_coord missing\n"); Assert(false); } #endif glFogi(GL_FOG_COORDINATE_SOURCE_EXT, GL_FOG_COORDINATE_EXT);//GL_FRAGMENT_DEPTH_EXT);// glEnable(GL_FOG); glFogi(GL_FOG_MODE, GL_EXP); } else { glEnable(GL_FOG); glFogi(GL_FOG_MODE, GL_LINEAR); } setFogColor(CoreUtils::colorWhite); setRange(0.f, 1.f); //glHint(GL_FOG_HINT, GL_DONT_CARE); glHint(GL_FOG_HINT, GL_NICEST); //glFogi(GL_FOG_COORD_SRC, GL_FOG_COORD); /*fogMaxDistance = parFogMaxDistance; glEnable(GL_FOG); glFogf(GL_FOG_START, 3.f*fogMaxDistance/4.f); glFogf(GL_FOG_END, fogMaxDistance); if (exponential) { glFogf(GL_FOG_DENSITY, 0.001f); glFogi (GL_FOG_MODE, GL_EXP2); } else { glFogf(GL_FOG_DENSITY, 0.35f); glFogi(GL_FOG_MODE, GL_LINEAR); } //glFogf(GL_FOG_COORD_SRC, GL_FOG_COORD);do not work float col[4]; col[0] = parColor.r() / 256.f; col[1] = parColor.g() / 256.f; col[2] = parColor.b() / 256.f; col[3] = parColor.a() / 256.f; glFogfv(GL_FOG_COLOR, col);*/ }
void Camera::read(std::fstream& stream, int versionNumber) { stream.read((char*)&fogColor, sizeof(fogColor)); setFogColor(fogColor); stream.read((char*)&fogStrength, sizeof(fogStrength)); setFogStrength(fogStrength); if (versionNumber >= 6) { stream.read((char*)&fogColor, sizeof(fogColor)); setFogColor(fogColor); stream.read((char*)&zoom ,sizeof(zoom)); } if (versionNumber >= 11) stream.read((char*)&sunStrength, sizeof(sunStrength)); }
OsmAnd::MapRenderer::MapRenderer() : _taskHostBridge(this) , currentConfiguration(_currentConfiguration) , _currentConfigurationInvalidatedMask(0xFFFFFFFF) , currentState(_currentState) , _currentStateInvalidated(true) , _invalidatedRasterLayerResourcesMask(0) , _invalidatedElevationDataResources(false) , tiledResources(_tiledResources) , _renderThreadId(nullptr) , _workerThreadId(nullptr) , renderAPI(_renderAPI) { _tileRequestsThreadPool.setMaxThreadCount(4); // Create all tiled resources for(auto resourceType = 0u; resourceType < TiledResourceTypesCount; resourceType++) { auto collection = new TiledResources(static_cast<TiledResourceType>(resourceType)); _tiledResources[resourceType].reset(collection); } // Fill-up default state for(auto layerId = 0u; layerId < RasterMapLayersCount; layerId++) setRasterLayerOpacity(static_cast<RasterMapLayerId>(layerId), 1.0f); setElevationDataScaleFactor(1.0f, true); setFieldOfView(16.5f, true); setDistanceToFog(400.0f, true); setFogOriginFactor(0.36f, true); setFogHeightOriginFactor(0.05f, true); setFogDensity(1.9f, true); setFogColor(FColorRGB(1.0f, 0.0f, 0.0f), true); setSkyColor(FColorRGB(140.0f / 255.0f, 190.0f / 255.0f, 214.0f / 255.0f), true); setAzimuth(0.0f, true); setElevationAngle(45.0f, true); const auto centerIndex = 1u << (ZoomLevel::MaxZoomLevel - 1); setTarget(PointI(centerIndex, centerIndex), true); setZoom(0, true); }
gxScene::gxScene( gxGraphics *g,gxCanvas *t ): graphics(g),target(t),dir3dDev( g->dir3dDev ), n_texs(0),tris_drawn(0){ memset( d3d_rs,0x55,sizeof(d3d_rs) ); memset( d3d_tss,0x55,sizeof(d3d_tss) ); //nomalize normals setRS( D3DRENDERSTATE_NORMALIZENORMALS,TRUE ); //vertex coloring setRS( D3DRENDERSTATE_COLORVERTEX,FALSE ); setRS( D3DRENDERSTATE_DIFFUSEMATERIALSOURCE,D3DMCS_COLOR1 ); setRS( D3DRENDERSTATE_AMBIENTMATERIALSOURCE,D3DMCS_COLOR1 ); setRS( D3DRENDERSTATE_EMISSIVEMATERIALSOURCE,D3DMCS_MATERIAL ); setRS( D3DRENDERSTATE_SPECULARMATERIALSOURCE,D3DMCS_MATERIAL ); //Alpha test setRS( D3DRENDERSTATE_ALPHATESTENABLE,false ); setRS( D3DRENDERSTATE_ALPHAFUNC,D3DCMP_GREATER ); setRS( D3DRENDERSTATE_ALPHAREF,128 ); //source/dest blending modes setRS( D3DRENDERSTATE_SRCBLEND,D3DBLEND_SRCALPHA ); setRS( D3DRENDERSTATE_DESTBLEND,D3DBLEND_INVSRCALPHA ); //suss out caps can_wb=false; hw_tex_stages=1; D3DDEVICEDESC7 devDesc={0}; if( dir3dDev->GetCaps( &devDesc )>=0 ){ DWORD caps=devDesc.dpcTriCaps.dwRasterCaps; //texture stages hw_tex_stages=devDesc.wMaxSimultaneousTextures; //depth buffer mode if( (caps & D3DPRASTERCAPS_WBUFFER) && graphics->zbuffFmt.dwRGBBitCount==16 ) can_wb=true; //fog mode if( (caps&D3DPRASTERCAPS_FOGTABLE)&&(caps&D3DPRASTERCAPS_WFOG) ){ setRS( D3DRENDERSTATE_FOGVERTEXMODE,D3DFOG_NONE ); setRS( D3DRENDERSTATE_FOGTABLEMODE,D3DFOG_LINEAR ); }else{ setRS( D3DRENDERSTATE_FOGTABLEMODE,D3DFOG_NONE ); setRS( D3DRENDERSTATE_FOGVERTEXMODE,D3DFOG_LINEAR ); } } tex_stages=hw_tex_stages; caps_level=100; if( devDesc.dpcTriCaps.dwTextureCaps & D3DPTEXTURECAPS_CUBEMAP ){ caps_level=110; } //default texture states for( int n=0;n<hw_tex_stages;++n ){ setTSS( n,D3DTSS_COLORARG1,D3DTA_TEXTURE ); setTSS( n,D3DTSS_COLORARG2,D3DTA_CURRENT ); setTSS( n,D3DTSS_ALPHAARG1,D3DTA_TEXTURE ); setTSS( n,D3DTSS_ALPHAARG2,D3DTA_CURRENT ); setTSS( n,D3DTSS_MINFILTER,D3DTFN_LINEAR ); setTSS( n,D3DTSS_MAGFILTER,D3DTFG_LINEAR ); setTSS( n,D3DTSS_MIPFILTER,D3DTFP_LINEAR ); } setHWMultiTex( true ); //ATI lighting hack dir3dDev->LightEnable( 0,true ); dir3dDev->LightEnable( 0,false ); //globals sphere_mat._11=.5f;sphere_mat._22=-.5f;sphere_mat._33=.5f; sphere_mat._41=.5f;sphere_mat._42=.5f;sphere_mat._43=.5f; nullmatrix._11=nullmatrix._22=nullmatrix._33=nullmatrix._44=1; //set null renderstate memset(&material,0,sizeof(material)); shininess=0;blend=BLEND_REPLACE;fx=0; for( int k=0;k<MAX_TEXTURES;++k ) memset( &texstate[k],0,sizeof(texstate[k]) ); wbuffer=can_wb; dither=false;setDither( true ); antialias=true;setAntialias( false ); wireframe=true;setWireframe( false ); flipped=true;setFlippedTris( false ); ambient=~0;setAmbient( GRAY ); ambient2=~0;setAmbient2( BLACK ); fogcolor=~0;setFogColor( BLACK ); fogrange_nr=fogrange_fr=0;setFogRange( 1,1000 ); fogmode=FOG_LINEAR;setFogMode( FOG_NONE ); zmode=-1;setZMode( ZMODE_NORMAL ); memset(&projmatrix,0,sizeof(projmatrix)); ortho_proj=true;frustum_nr=frustum_fr=frustum_w=frustum_h=0;setPerspProj( 1,1000,1,1 ); memset(&viewport,0,sizeof(viewport));viewport.dvMaxZ=1;setViewport( 0,0,target->getWidth(),target->getHeight() ); viewmatrix=nullmatrix;setViewMatrix( 0 ); worldmatrix=nullmatrix;setWorldMatrix( 0 ); //set default renderstate blend=fx=~0;shininess=1; RenderState state;memset(&state,0,sizeof(state)); state.color[0]=state.color[1]=state.color[2]=state.alpha=1; state.blend=BLEND_REPLACE; setRenderState( state ); }