void ViewerCmdLine::parse() { const CmdLineOption options[] = { HELP, HELP_SHORT, OPTIONS_FILE, LISTEN, HOST, PORT, PASSWORD, SHOW_CONTROLS, VIEW_ONLY, USE_CLIPBOARD, SCALE, FULL_SCREEN, WARN_FULL_SCREEN, ENCODING, COPY_RECT, MOUSE_CURSOR, MOUSE_LOCAL, MOUSE_SWAP, JPEG_IMAGE_QUALITY, COMPRESSION_LEVEL }; if (!processCmdLine(&options[0], sizeof(options) / sizeof(CmdLineOption))) { throw CommandLineFormatException(); } if (isHelpPresent()) { throw CommandLineFormatHelp(); } if (m_wpcl.getArgumentsCount() > 2) { throw CommandLineFormatException(); } if (m_wpcl.getArgumentsCount() > 1) { if (isPresent(ViewerCmdLine::HOST)) { throw CommandLineFormatException(); } } if (isPresent(ViewerCmdLine::OPTIONS_FILE)) { parseOptionsFile(); } else { if (isPresent(ViewerCmdLine::LISTEN)) { *m_isListening = true; } else { if (!parseHost()) { throw CommandLineFormatException(); } } } parsePassword(); parseEncoding(); parseMouseShape(); parseMouseCursor(); parseScale(); parseFullScreen(); parseCompressionLevel(); parseWarnFullScr(); parseMouseSwap(); parseUseClipboard(); parseShowControl(); parseCopyRect(); parseViewOnly(); parseJpegImageQuality(); }
//----------------------------------------------------------------------------------- void HlmsJsonPbs::loadMaterial( const rapidjson::Value &json, const HlmsJson::NamedBlocks &blocks, HlmsDatablock *datablock ) { assert( dynamic_cast<HlmsPbsDatablock*>(datablock) ); HlmsPbsDatablock *pbsDatablock = static_cast<HlmsPbsDatablock*>(datablock); rapidjson::Value::ConstMemberIterator itor = json.FindMember("workflow"); if( itor != json.MemberEnd() && itor->value.IsString() ) pbsDatablock->setWorkflow( parseWorkflow( itor->value.GetString() ) ); itor = json.FindMember("brdf"); if( itor != json.MemberEnd() && itor->value.IsString() ) pbsDatablock->setBrdf( parseBrdf(itor->value.GetString()) ); itor = json.FindMember("two_sided"); if( itor != json.MemberEnd() && itor->value.IsBool() ) { pbsDatablock->setTwoSidedLighting( itor->value.GetBool(), true, pbsDatablock->getMacroblock(true)->mCullMode ); } itor = json.FindMember( "receive_shadows" ); if( itor != json.MemberEnd() && itor->value.IsBool() ) pbsDatablock->setReceiveShadows( itor->value.GetBool() ); itor = json.FindMember("transparency"); if( itor != json.MemberEnd() && itor->value.IsObject() ) { const rapidjson::Value &subobj = itor->value; float transparencyValue = pbsDatablock->getTransparency(); HlmsPbsDatablock::TransparencyModes transpMode = pbsDatablock->getTransparencyMode(); bool useAlphaFromTextures = pbsDatablock->getUseAlphaFromTextures(); itor = subobj.FindMember( "value" ); if( itor != subobj.MemberEnd() && itor->value.IsNumber() ) transparencyValue = static_cast<float>( itor->value.GetDouble() ); itor = subobj.FindMember( "mode" ); if( itor != subobj.MemberEnd() && itor->value.IsString() ) transpMode = parseTransparencyMode( itor->value.GetString() ); itor = subobj.FindMember( "use_alpha_from_textures" ); if( itor != subobj.MemberEnd() && itor->value.IsBool() ) useAlphaFromTextures = itor->value.GetBool(); const bool changeBlendblock = !json.HasMember( "blendblock" ); pbsDatablock->setTransparency( transparencyValue, transpMode, useAlphaFromTextures, changeBlendblock ); } PackedTexture packedTextures[NUM_PBSM_TEXTURE_TYPES]; itor = json.FindMember("diffuse"); if( itor != json.MemberEnd() && itor->value.IsObject() ) { const rapidjson::Value &subobj = itor->value; loadTexture( subobj, blocks, PBSM_DIFFUSE, pbsDatablock, packedTextures ); itor = subobj.FindMember( "value" ); if( itor != subobj.MemberEnd() && itor->value.IsArray() ) pbsDatablock->setDiffuse( parseVector3Array( itor->value ) ); itor = subobj.FindMember( "background" ); if( itor != subobj.MemberEnd() && itor->value.IsArray() ) pbsDatablock->setBackgroundDiffuse( parseColourValueArray( itor->value ) ); } itor = json.FindMember("specular"); if( itor != json.MemberEnd() && itor->value.IsObject() ) { const rapidjson::Value &subobj = itor->value; loadTexture( subobj, blocks, PBSM_SPECULAR, pbsDatablock, packedTextures ); itor = subobj.FindMember( "value" ); if( itor != subobj.MemberEnd() && itor->value.IsArray() ) pbsDatablock->setSpecular( parseVector3Array( itor->value ) ); } itor = json.FindMember("roughness"); if( itor != json.MemberEnd() && itor->value.IsObject() ) { const rapidjson::Value &subobj = itor->value; loadTexture( subobj, blocks, PBSM_ROUGHNESS, pbsDatablock, packedTextures ); itor = subobj.FindMember( "value" ); if( itor != subobj.MemberEnd() && itor->value.IsNumber() ) pbsDatablock->setRoughness( static_cast<float>( itor->value.GetDouble() ) ); } itor = json.FindMember("fresnel"); if( itor != json.MemberEnd() && itor->value.IsObject() ) { const rapidjson::Value &subobj = itor->value; loadTexture( subobj, blocks, PBSM_SPECULAR, pbsDatablock, packedTextures ); bool useIOR = false; bool isColoured = false; itor = subobj.FindMember( "mode" ); if( itor != subobj.MemberEnd() && itor->value.IsString() ) parseFresnelMode( itor->value.GetString(), isColoured, useIOR ); itor = subobj.FindMember( "value" ); if( itor != subobj.MemberEnd() && (itor->value.IsArray() || itor->value.IsNumber()) ) { Vector3 value; if( itor->value.IsArray() ) value = parseVector3Array( itor->value ); else value = static_cast<Real>( itor->value.GetDouble() ); if( !useIOR ) pbsDatablock->setFresnel( value, isColoured ); else pbsDatablock->setIndexOfRefraction( value, isColoured ); } } //There used to be a typo, so allow the wrong spelling. itor = json.FindMember("metalness"); if( itor == json.MemberEnd() ) itor = json.FindMember("metallness"); if( itor != json.MemberEnd() && itor->value.IsObject() ) { const rapidjson::Value &subobj = itor->value; loadTexture( subobj, blocks, PBSM_METALLIC, pbsDatablock, packedTextures ); itor = subobj.FindMember( "value" ); if( itor != subobj.MemberEnd() && itor->value.IsNumber() ) pbsDatablock->setMetalness( static_cast<float>( itor->value.GetDouble() ) ); } itor = json.FindMember("normal"); if( itor != json.MemberEnd() && itor->value.IsObject() ) { const rapidjson::Value &subobj = itor->value; loadTexture( subobj, blocks, PBSM_NORMAL, pbsDatablock, packedTextures ); itor = subobj.FindMember( "value" ); if( itor != subobj.MemberEnd() && itor->value.IsNumber() ) pbsDatablock->setNormalMapWeight( static_cast<float>( itor->value.GetDouble() ) ); } itor = json.FindMember("detail_weight"); if( itor != json.MemberEnd() && itor->value.IsObject() ) { const rapidjson::Value &subobj = itor->value; loadTexture( subobj, blocks, PBSM_DETAIL_WEIGHT, pbsDatablock, packedTextures ); } for( int i=0; i<4; ++i ) { const String iAsStr = StringConverter::toString(i); String texTypeName = "detail_diffuse" + iAsStr; itor = json.FindMember(texTypeName.c_str()); if( itor != json.MemberEnd() && itor->value.IsObject() ) { const rapidjson::Value &subobj = itor->value; loadTexture( subobj, blocks, static_cast<PbsTextureTypes>(PBSM_DETAIL0 + i), pbsDatablock, packedTextures ); itor = subobj.FindMember( "value" ); if( itor != subobj.MemberEnd() && itor->value.IsNumber() ) pbsDatablock->setDetailMapWeight( i, static_cast<float>( itor->value.GetDouble() ) ); itor = subobj.FindMember( "mode" ); if( itor != subobj.MemberEnd() && itor->value.IsString() ) pbsDatablock->setDetailMapBlendMode( i, parseBlendMode( itor->value.GetString() ) ); Vector4 offsetScale( 0, 0, 1, 1 ); itor = subobj.FindMember( "offset" ); if( itor != subobj.MemberEnd() && itor->value.IsArray() ) parseOffset( itor->value, offsetScale ); itor = subobj.FindMember( "scale" ); if( itor != subobj.MemberEnd() && itor->value.IsArray() ) parseScale( itor->value, offsetScale ); pbsDatablock->setDetailMapOffsetScale( i, offsetScale ); } texTypeName = "detail_normal" + iAsStr; itor = json.FindMember(texTypeName.c_str()); if( itor != json.MemberEnd() && itor->value.IsObject() ) { const rapidjson::Value &subobj = itor->value; loadTexture( subobj, blocks, static_cast<PbsTextureTypes>(PBSM_DETAIL0_NM + i), pbsDatablock, packedTextures ); itor = subobj.FindMember( "value" ); if( itor != subobj.MemberEnd() && itor->value.IsNumber() ) { pbsDatablock->setDetailNormalWeight( i, static_cast<float>( itor->value.GetDouble() ) ); } Vector4 offsetScale( 0, 0, 1, 1 ); itor = subobj.FindMember( "offset" ); if( itor != subobj.MemberEnd() && itor->value.IsArray() ) parseOffset( itor->value, offsetScale ); itor = subobj.FindMember( "scale" ); if( itor != subobj.MemberEnd() && itor->value.IsArray() ) parseScale( itor->value, offsetScale ); pbsDatablock->setDetailMapOffsetScale( i, offsetScale ); } } itor = json.FindMember("emissive"); if( itor != json.MemberEnd() && itor->value.IsObject() ) { const rapidjson::Value &subobj = itor->value; loadTexture( subobj, blocks, PBSM_EMISSIVE, pbsDatablock, packedTextures ); itor = subobj.FindMember( "value" ); if( itor != subobj.MemberEnd() && itor->value.IsArray() ) pbsDatablock->setEmissive( parseVector3Array( itor->value ) ); } itor = json.FindMember("reflection"); if( itor != json.MemberEnd() && itor->value.IsObject() ) { const rapidjson::Value &subobj = itor->value; loadTexture( subobj, blocks, PBSM_REFLECTION, pbsDatablock, packedTextures ); } pbsDatablock->_setTextures( packedTextures ); }