void StatManager::incStat( int param, float value ) { switch( param ) { case EngineStats::TriCount: _statTriCount += ftoi_r( value ); break; case EngineStats::BatchCount: _statBatchCount += ftoi_r( value ); break; case EngineStats::LightPassCount: _statLightPassCount += ftoi_r( value ); break; case EngineStats::FrameTime: _frameTime += value; break; } }
bool EngineConfig::setOption( EngineOptions::List param, float value ) { int size; switch( param ) { case EngineOptions::MaxLogLevel: maxLogLevel = ftoi_r( value ); return true; case EngineOptions::MaxNumMessages: Modules::log().setMaxNumMessages( (uint32)ftoi_r( value ) ); return true; case EngineOptions::TrilinearFiltering: trilinearFiltering = (value != 0); return true; case EngineOptions::MaxAnisotropy: maxAnisotropy = ftoi_r( value ); return true; case EngineOptions::TexCompression: texCompression = (value != 0); return true; case EngineOptions::LoadTextures: loadTextures = (value != 0); return true; case EngineOptions::FastAnimation: fastAnimation = (value != 0); return true; case EngineOptions::ShadowMapSize: size = ftoi_r( value ); if( size == shadowMapSize ) return true; if( size != 128 && size != 256 && size != 512 && size != 1024 && size != 2048 ) return false; // Update shadow map Modules::renderer().destroyShadowBuffer(); if( !Modules::renderer().createShadowBuffer( size, size ) ) { Modules::log().writeWarning( "Failed to create shadow map" ); // Restore old buffer Modules::renderer().createShadowBuffer( shadowMapSize, shadowMapSize ); return false; } else { shadowMapSize = size; return true; } case EngineOptions::SampleCount: sampleCount = ftoi_r( value ); return true; case EngineOptions::WireframeMode: wireframeMode = (value != 0); return true; case EngineOptions::DebugViewMode: debugViewMode = (value != 0); return true; case EngineOptions::DumpFailedShaders: dumpFailedShaders = (value != 0); return true; default: return false; } }
uint32 RenderDevice::createTexture( TextureTypes::List type, int width, int height, int depth, TextureFormats::List format, bool hasMips, bool genMips, bool compress, bool sRGB ) { if( !_caps.texNPOT ) { // Check if texture is NPOT if( (width & (width-1)) != 0 || (height & (height-1)) != 0 ) Modules::log().writeWarning( "Texture has non-power-of-two dimensions although NPOT is not supported by GPU" ); } RDITexture tex; tex.type = type; tex.format = format; tex.width = width; tex.height = height; tex.depth = (type == TextureTypes::Tex3D ? depth : 1); tex.sRGB = sRGB && Modules::config().sRGBLinearization; tex.genMips = genMips; tex.hasMips = hasMips; switch( format ) { case TextureFormats::BGRA8: tex.glFmt = tex.sRGB ? GL_SRGB8_ALPHA8_EXT : GL_RGBA8; break; case TextureFormats::DXT1: tex.glFmt = tex.sRGB ? GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT1_EXT : GL_COMPRESSED_RGBA_S3TC_DXT1_EXT; break; case TextureFormats::DXT3: tex.glFmt = tex.sRGB ? GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT3_EXT : GL_COMPRESSED_RGBA_S3TC_DXT3_EXT; break; case TextureFormats::DXT5: tex.glFmt = tex.sRGB ? GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT5_EXT : GL_COMPRESSED_RGBA_S3TC_DXT5_EXT; break; case TextureFormats::RGBA16F: tex.glFmt = GL_RGBA16F_ARB; break; case TextureFormats::RGBA32F: tex.glFmt = GL_RGBA32F_ARB; break; case TextureFormats::DEPTH: tex.glFmt = _depthFormat; break; default: ASSERT( 0 ); break; }; glGenTextures( 1, &tex.glObj ); glActiveTexture( GL_TEXTURE15 ); glBindTexture( tex.type, tex.glObj ); float borderColor[] = { 1.0f, 1.0f, 1.0f, 1.0f }; glTexParameterfv( GL_TEXTURE_2D, GL_TEXTURE_BORDER_COLOR, borderColor ); tex.samplerState = 0; applySamplerState( tex ); glBindTexture( tex.type, 0 ); if( _texSlots[15].texObj ) glBindTexture( _textures.getRef( _texSlots[15].texObj ).type, _textures.getRef( _texSlots[15].texObj ).glObj ); // Calculate memory requirements tex.memSize = calcTextureSize( format, width, height, depth ); if( hasMips || genMips ) tex.memSize += ftoi_r( tex.memSize * 1.0f / 3.0f ); if( type == TextureTypes::TexCube ) tex.memSize *= 6; _textureMem += tex.memSize; return _textures.add( tex ); }
bool EngineConfig::setOption( EngineOptions::List param, float value ) { int size; switch( param ) { case EngineOptions::MaxLogLevel: maxLogLevel = ftoi_r( value ); return true; case EngineOptions::MaxNumMessages: Modules::log().setMaxNumMessages( (uint32)ftoi_r( value ) ); return true; case EngineOptions::TrilinearFiltering: trilinearFiltering = (value != 0); return true; case EngineOptions::MaxAnisotropy: maxAnisotropy = ftoi_r( value ); return true; case EngineOptions::SRGBLinearization: sRGBLinearization = (value != 0); return true; case EngineOptions::LoadTextures: loadTextures = (value != 0); return true; case EngineOptions::FastAnimation: fastAnimation = (value != 0); return true; case EngineOptions::ShadowMapSize: size = ftoi_r( value ); if( size == shadowMapSize ) return true; if( size != 128 && size != 256 && size != 512 && size != 1024 && size != 2048 ) return false; if ( !gRDI->getCaps().texDepth ) { Modules::log().writeWarning( "Failed to create shadow map: depth textures not supported" ); shadowMapSize = size; return false; } else { // Update shadow map Modules::renderer().releaseShadowRB(); if( !Modules::renderer().createShadowRB( size, size ) ) { Modules::log().writeWarning( "Failed to create shadow map" ); // Restore old buffer Modules::renderer().createShadowRB( shadowMapSize, shadowMapSize ); return false; } else { shadowMapSize = size; return true; } } case EngineOptions::SampleCount: sampleCount = ftoi_r( value ); return true; case EngineOptions::WireframeMode: wireframeMode = (value != 0); return true; case EngineOptions::DebugViewMode: debugViewMode = (value != 0); return true; case EngineOptions::DumpFailedShaders: dumpFailedShaders = (value != 0); return true; case EngineOptions::GatherTimeStats: gatherTimeStats = (value != 0); return true; default: Modules::setError( "Invalid param for h3dSetOption" ); return false; } }