| 1063 | }; |
| 1064 | |
| 1065 | ModelInstance* DXRenderDevice::CreateModelInstance(ModelDef* modelDef, ModelCreateFlags flags) |
| 1066 | { |
| 1067 | DXModelInstance* dxModelInstance = new DXModelInstance(modelDef); |
| 1068 | |
| 1069 | //// |
| 1070 | |
| 1071 | VertexDefData vertexDefData[] = |
| 1072 | { |
| 1073 | {VertexElementUsage_Position3D, 0, VertexElementFormat_Vector3}, |
| 1074 | {VertexElementUsage_Color, 0, VertexElementFormat_Color}, |
| 1075 | {VertexElementUsage_TextureCoordinate, 0, VertexElementFormat_Vector2}, |
| 1076 | {VertexElementUsage_Normal, 0, VertexElementFormat_Vector3}, |
| 1077 | {VertexElementUsage_TextureCoordinate, 1, VertexElementFormat_Vector2}, |
| 1078 | {VertexElementUsage_Tangent, 0, VertexElementFormat_Vector3} |
| 1079 | }; |
| 1080 | |
| 1081 | auto vertexDefinition = CreateVertexDefinition(vertexDefData, sizeof(vertexDefData) / sizeof(vertexDefData[0])); |
| 1082 | RenderState* renderState = NULL; |
| 1083 | if ((flags & ModelCreateFlags_NoSetRenderState) == 0) |
| 1084 | { |
| 1085 | renderState = CreateRenderState(mDefaultRenderState); |
| 1086 | renderState->mShader = LoadShader(gBFApp->mInstallDir + "/shaders/ModelStd", vertexDefinition); |
| 1087 | renderState->mTexWrap = true; |
| 1088 | renderState->mDepthFunc = DepthFunc_LessEqual; |
| 1089 | renderState->mWriteDepthBuffer = true; |
| 1090 | } |
| 1091 | delete vertexDefinition; |
| 1092 | |
| 1093 | dxModelInstance->mRenderState = renderState; |
| 1094 | |
| 1095 | //// |
| 1096 | |
| 1097 | dxModelInstance->mD3DRenderDevice = this; |
| 1098 | dxModelInstance->mDXModelMeshs.Resize(modelDef->mMeshes.size()); |
| 1099 | int dxMeshIdx = 0; |
| 1100 | |
| 1101 | for (int meshIdx = 0; meshIdx < (int)modelDef->mMeshes.size(); meshIdx++) |
| 1102 | { |
| 1103 | ModelMesh* mesh = &modelDef->mMeshes[meshIdx]; |
| 1104 | DXModelMesh* dxMesh = &dxModelInstance->mDXModelMeshs[dxMeshIdx]; |
| 1105 | |
| 1106 | dxMesh->mPrimitives.Resize(mesh->mPrimitives.size()); |
| 1107 | |
| 1108 | for (int primitivesIdx = 0 ; primitivesIdx < (int)mesh->mPrimitives.size(); primitivesIdx++) |
| 1109 | { |
| 1110 | auto primitives = &mesh->mPrimitives[primitivesIdx]; |
| 1111 | auto dxPrimitives = &dxMesh->mPrimitives[primitivesIdx]; |
| 1112 | |
| 1113 | // String texPath = mesh->mTexFileName; |
| 1114 | // if (!texPath.IsEmpty()) |
| 1115 | // { |
| 1116 | // if ((int)texPath.IndexOf(':') == -1) |
| 1117 | // texPath = modelDef->mLoadDir + "Textures/" + texPath; |
| 1118 | // //texPath = gBFApp->mInstallDir + L"models/Textures/" + texPath; |
| 1119 | // |
| 1120 | // dxPrimitives->mTexture = (DXTexture*)((RenderDevice*)this)->LoadTexture(texPath, TextureFlag_NoPremult); |
| 1121 | // } |
| 1122 |
nothing calls this directly
no test coverage detected