//============================================================ // <T>将字符串转化为8位字符串</T> // // @param pTarget转换后的字符串 // @param size pTarget容量 // @param pValue 被转换字符串 // @return 所需要长度,如果失败返回-1 //============================================================ TInt RString16::ConvertToString8(TChar8* pTarget, TInt size, TChar16C* pValue){ MO_ASSERT(pTarget); MO_ASSERT(pValue); TSize length = MO_LIB_STRING_LENGTH16(pValue); #ifdef _MO_WINDOWS TInt result = WideCharToMultiByte(CP_ACP, 0, pValue, length, pTarget, size, NULL, NULL); #endif // _MO_WINDOWS #ifdef _MO_LINUX iconv_t code = iconv_open("GBK", "UTF-8"); if(NULL == code){ MO_STATIC_FATAL("Iconv open failure."); } TChar8* pInput = (TChar8*)pValue; TSize inputLength = length; TSize outputLength = size; TInt result = iconv(code, &pInput, &inputLength, &pTarget, &outputLength); if(-1 == result){ MO_STATIC_FATAL("Iconv convert failure."); return -1; } iconv_close(code); pTarget[outputLength] = 0; #endif // _MO_LINUX #ifdef _MO_ANDROID TInt result = length; // g_lpdlIcuuc = dlopen("/system/lib/libicuuc.so", RTLD_LAZY); #endif // _MO_ANDROID return result; }
MO_NAMESPACE_BEGIN //============================================================ // <T>½âÎö×Ö·û´®ÎªÃ¶¾ÙÄÚÈÝ¡£</T> // // @param pValue ×Ö·û´® // @param bufferCd ĬÈÏÄÚÈÝ // @return ö¾ÙÄÚÈÝ //============================================================ ERenderShaderBuffer RRenderShaderBuffer::Parse(TCharC* pValue, ERenderShaderBuffer bufferCd){ if(pValue != NULL){ TFsCode code = pValue; code.ToLower(); if(code.Equals("globalstatic")){ return ERenderShaderBuffer_GlobalStatic; }else if(code.Equals("globaldynamic")){ return ERenderShaderBuffer_GlobalDynamic; }else if(code.Equals("techniquestatic")){ return ERenderShaderBuffer_TechniqueStatic; }else if(code.Equals("techniquedynamic")){ return ERenderShaderBuffer_TechniqueDynamic; }else if(code.Equals("effectstatic")){ return ERenderShaderBuffer_EffectStatic; }else if(code.Equals("effectdynamic")){ return ERenderShaderBuffer_EffectDynamic; }else if(code.Equals("renderabledynamic")){ return ERenderShaderBuffer_RenderableDynamic; }else if(code.Equals("renderablematerial")){ return ERenderShaderBuffer_RenderableMaterial; }else{ MO_STATIC_FATAL("Parse shader buffer type failure. (value=%s)", pValue); } } return bufferCd; }
MO_NAMESPACE_BEGIN //============================================================ // <T>½âÎö×Ö·û´®ÎªÃ¶¾ÙÄÚÈÝ¡£</T> // // @param pValue ×Ö·û´® // @param blendModeCd ĬÈÏÄÚÈÝ // @return ö¾ÙÄÚÈÝ //============================================================ ERenderBlendMode RRenderBlendMode::Parse(TCharC* pValue, ERenderBlendMode blendModeCd){ if(pValue != NULL){ TFsCode code = pValue; code.ToLower(); if(code.Equals("none")){ return ERenderBlendMode_None; }else if(code.Equals("sourcealpha")){ return ERenderBlendMode_SourceAlpha; }else if(code.Equals("oneminussourcealpha")){ return ERenderBlendMode_OneMinusSourceAlpha; }else{ MO_STATIC_FATAL("Parse blend mode failure. (value=%s)", pValue); } } return blendModeCd; }
//============================================================ // <T>²éÕÒ¶¥µã×ø±ê¡£</T> //============================================================ TCharC* RFbxEnum::ParseName(FbxNodeAttribute::EType typeCd){ switch(typeCd){ case FbxNodeAttribute::eUnknown: return TC("Unknown"); case FbxNodeAttribute::eNull: return TC("Null"); case FbxNodeAttribute::eMarker: return TC("Marker"); case FbxNodeAttribute::eSkeleton: return TC("Skeleton"); case FbxNodeAttribute::eMesh: return TC("Mesh"); case FbxNodeAttribute::eNurbs: return TC("Nurbs"); case FbxNodeAttribute::ePatch: return TC("Patch"); case FbxNodeAttribute::eCamera: return TC("Camera"); case FbxNodeAttribute::eCameraStereo: return TC("CameraStereo"); case FbxNodeAttribute::eCameraSwitcher: return TC("CameraSwitcher"); case FbxNodeAttribute::eLight: return TC("Light"); case FbxNodeAttribute::eOpticalReference: return TC("OpticalReference"); case FbxNodeAttribute::eOpticalMarker: return TC("OpticalMarker"); case FbxNodeAttribute::eNurbsCurve: return TC("NurbsCurve"); case FbxNodeAttribute::eTrimNurbsSurface: return TC("TrimNurbsSurface"); case FbxNodeAttribute::eBoundary: return TC("Boundary"); case FbxNodeAttribute::eNurbsSurface: return TC("NurbsSurface"); case FbxNodeAttribute::eShape: return TC("Shape"); case FbxNodeAttribute::eLODGroup: return TC("LODGroup"); case FbxNodeAttribute::eSubDiv: return TC("SubDiv"); case FbxNodeAttribute::eCachedEffect: return TC("CachedEffect"); case FbxNodeAttribute::eLine: return TC("Line"); default: MO_STATIC_FATAL(TC("Invalid type. (type_cd=%d)"), typeCd); } return TC("Unknown"); }
//============================================================ // <T>½âÎö»º³åΪ²å²ÛλÖá£</T> // // @param bufferCd »º³åÀàÐÍ // @return ²å²ÛλÖà //============================================================ TInt RRenderShaderBuffer::ParseSlot(ERenderShaderBuffer bufferCd){ switch(bufferCd){ case ERenderShaderBuffer_GlobalStatic: return 0; case ERenderShaderBuffer_GlobalDynamic: return 1; case ERenderShaderBuffer_TechniqueStatic: return 2; case ERenderShaderBuffer_TechniqueDynamic: return 3; case ERenderShaderBuffer_EffectStatic: return 4; case ERenderShaderBuffer_EffectDynamic: return 5; case ERenderShaderBuffer_RenderableDynamic: return 6; case ERenderShaderBuffer_RenderableMaterial: return 7; default: MO_STATIC_FATAL("Parse shader buffer group failure. (buffer=%d)", bufferCd); } return ERenderShaderBuffer_Unknown; }
//============================================================ // <T>½âÎö»º³åΪ·Ö×黺³å¡£</T> // // @param bufferCd »º³åÄÚÈÝ // @return ö¾ÙÄÚÈÝ //============================================================ ERenderShaderBuffer RRenderShaderBuffer::ParseGroup(ERenderShaderBuffer bufferCd){ switch(bufferCd){ case ERenderShaderBuffer_Global: case ERenderShaderBuffer_GlobalStatic: case ERenderShaderBuffer_GlobalDynamic: return ERenderShaderBuffer_Global; case ERenderShaderBuffer_Technique: case ERenderShaderBuffer_TechniqueStatic: case ERenderShaderBuffer_TechniqueDynamic: return ERenderShaderBuffer_Technique; case ERenderShaderBuffer_Effect: case ERenderShaderBuffer_EffectStatic: case ERenderShaderBuffer_EffectDynamic: return ERenderShaderBuffer_Effect; case ERenderShaderBuffer_Renderable: case ERenderShaderBuffer_RenderableDynamic: case ERenderShaderBuffer_RenderableMaterial: return ERenderShaderBuffer_Renderable; default: MO_STATIC_FATAL("Parse shader buffer group failure. (buffer=%d)", bufferCd); } return ERenderShaderBuffer_Unknown; }
MO_NAMESPACE_BEGIN //============================================================ // <T>½âÎö×Ö·û´®ÎªÃ¶¾ÙÄÚÈÝ¡£</T> // // @param pValue ×Ö·û´® // @param deviceCd ĬÈÏÄÚÈÝ // @return ö¾ÙÄÚÈÝ //============================================================ ERenderDevice RRenderDevice::Parse(TCharC* pValue, ERenderDevice deviceCd){ if(pValue != NULL){ TFsCode code = pValue; code.ToLower(); if(code.Equals("unknown")){ return ERenderDevice_Unknown; }else if(code.Equals("directx9")){ return ERenderDevice_DirectX9; }else if(code.Equals("directx10")){ return ERenderDevice_DirectX10; }else if(code.Equals("directx11")){ return ERenderDevice_DirectX11; }else if(code.Equals("opengl2")){ return ERenderDevice_OpenGL2; }else if(code.Equals("opengl3")){ return ERenderDevice_OpenGL3; }else if(code.Equals("opengl4")){ return ERenderDevice_OpenGL4; }else if(code.Equals("opengles2")){ return ERenderDevice_OpenGLEs2; }else if(code.Equals("opengles3")){ return ERenderDevice_OpenGLEs3; }else{ MO_STATIC_FATAL("Parse render device failure. (value=%s)", pValue); } } return deviceCd; }