public override object Parse(Asset asset, BinaryReader reader, AssetImportCollection imports, AssetParseContext context) { // TODO: Create ModelMesh object here. var w3xMesh = W3xMesh.Parse(reader, imports, asset.Header); return(null); }
public override object Parse(Asset asset, BinaryReader reader, AssetImportCollection imports, AssetParseContext context) { return(W3xMesh.Parse(reader, imports, asset.Header)); //var effectName = shaderName.Replace(".fx", string.Empty); //var effect = context.EffectLibrary.GetEffect( // shaderName, // vertexDescriptors); //// TODO: Extract state properties from shader material. //var rasterizerState = RasterizerStateDescriptionUtility.DefaultFrontIsCounterClockwise; //var depthState = DepthStencilStateDescription.DepthOnlyLessEqual; //var blendState = BlendStateDescription.SingleDisabled; //var material = new ShaderMaterial(context.EffectLibrary, effect) //{ // PipelineState = new EffectPipelineState( // rasterizerState, // depthState, // blendState, // RenderPipeline.GameOutputDescription) //}; //var materialPasses = new ModelMeshMaterialPass[1]; //materialPasses[0] = new ModelMeshMaterialPass( // context.GraphicsDevice, // null, // new ModelMeshPart[] // { // new ModelMeshPart(0, (uint) indices.Length, material) // }); //return new ModelMesh( // context.GraphicsDevice, // asset.Name, // vertexData, // indices, // effect, // materialPasses, // false, // isSkinned, // null, // parentBone, // 0, // numBones, // boundingBox, // hidden, // geometryType == MeshGeometryType.CameraOriented); }
private static ushort[] CreateIndices(W3xMesh w3xMesh) { var triangles = w3xMesh.Triangles; var indices = new ushort[(uint)triangles.Length * 3]; var indexIndex = 0; for (var i = 0; i < triangles.Length; i++) { indices[indexIndex++] = (ushort)triangles[i].VIndex0; indices[indexIndex++] = (ushort)triangles[i].VIndex1; indices[indexIndex++] = (ushort)triangles[i].VIndex2; } return(indices); }
private ModelMesh(W3xMesh w3xMesh, Asset asset, AssetLoadContext loadContext) { SetNameAndInstanceId(asset); var effectName = w3xMesh.FXShader.ShaderName.Replace(".fx", string.Empty); //var shaderResources = loadContext.ShaderResources.GetShaderMaterialResources(effectName); // TODO: Uncomment this. var shaderResources = loadContext.ShaderResources.GetShaderMaterialResources("NormalMapped"); _depthPipeline = loadContext.ShaderResources.MeshDepth.TriangleListPipeline; // TODO: Extract state properties from shader material. var pipeline = shaderResources.Pipeline; // TODO: Uncomment this. //var materialResourceSetBuilder = AddDisposable(new ShaderMaterialResourceSetBuilder( // loadContext.GraphicsDevice, // shaderResources)); //foreach (var shaderConstant in w3xMesh.FXShader.Constants) //{ // switch (shaderConstant.Type) // { // case FXShaderConstantType.Float: // switch (shaderConstant.FloatValueCount) // { // case 1: // materialResourceSetBuilder.SetConstant(shaderConstant.Name, shaderConstant.Value.Float); // break; // case 2: // materialResourceSetBuilder.SetConstant(shaderConstant.Name, shaderConstant.Value.Vector2); // break; // case 3: // materialResourceSetBuilder.SetConstant(shaderConstant.Name, shaderConstant.Value.Vector3); // break; // case 4: // materialResourceSetBuilder.SetConstant(shaderConstant.Name, shaderConstant.Value.Vector4); // break; // default: // throw new InvalidOperationException(); // } // break; // case FXShaderConstantType.Bool: // materialResourceSetBuilder.SetConstant(shaderConstant.Name, shaderConstant.Value.Bool); // break; // case FXShaderConstantType.Int: // materialResourceSetBuilder.SetConstant(shaderConstant.Name, shaderConstant.Value.Int); // break; // case FXShaderConstantType.Texture: // materialResourceSetBuilder.SetTexture(shaderConstant.Name, shaderConstant.TextureValue); // break; // default: // throw new NotSupportedException(); // } //} //var materialResourceSet = materialResourceSetBuilder.CreateResourceSet(); var materialResourceSet = (ResourceSet)null; MeshParts = new List <ModelMeshPart>(); MeshParts.Add(new ModelMeshPart( null, 0, (uint)(w3xMesh.Triangles.Length * 3), false, // TODO pipeline, materialResourceSet)); BoundingBox = w3xMesh.BoundingBox; _shaderSet = shaderResources.ShaderSet; Skinned = w3xMesh.GeometryType == MeshGeometryType.Skin; Hidden = w3xMesh.Hidden; CameraOriented = w3xMesh.GeometryType == MeshGeometryType.CameraOriented; _vertexBuffer = AddDisposable(loadContext.GraphicsDevice.CreateStaticBuffer( w3xMesh.VertexData.VertexData, BufferUsage.VertexBuffer)); _indexBuffer = AddDisposable(loadContext.GraphicsDevice.CreateStaticBuffer( CreateIndices(w3xMesh), BufferUsage.IndexBuffer)); var hasHouseColor = false; // TODO _meshConstantsResourceSet = loadContext.ShaderResources.Mesh.GetCachedMeshResourceSet( Skinned, hasHouseColor); PostInitialize(loadContext); }
internal static ModelMesh ParseAsset(BinaryReader reader, Asset asset, AssetImportCollection imports, AssetParseContext context) { var w3xMesh = W3xMesh.Parse(reader, imports, asset.Header); return(new ModelMesh(w3xMesh, asset, context.AssetStore.LoadContext)); }
public override object Parse(Asset asset, BinaryReader reader, AssetImportCollection imports, AssetParseContext context) { var w3xMesh = W3xMesh.Parse(reader, imports, asset.Header); return(new ModelMesh(w3xMesh, asset, context.AssetStore.LoadContext)); }