示例#1
0
        private void RecreateRenderData()
        {
            if (Mesh?.GetAsset() != null)
            {
                CRenderScene scene = CRenderer.Instance.ActiveScene;
                if (m_renderNode != null)
                {
                    scene.UnregisterRenderNode(m_renderNode);
                }

                if (m_overrideMaterial != null)
                {
                    m_renderNode = new CMeshRenderNode(this, Mesh, null, m_transform);
                    m_renderNode.SetMaterialOverride(m_overrideMaterial);
                }
                else
                {
                    m_renderNode = new CMeshRenderNode(this, Mesh, MaterialAsset, m_transform);
                }
                scene.RegisterRenderNode(m_renderNode);
            }
            else
            {
                if (m_renderNode != null)
                {
                    CRenderer.Instance.ActiveScene.UnregisterRenderNode(m_renderNode);
                }
            }
        }
示例#2
0
 public void SetTargetNode(CMeshRenderNode targetNode)
 {
     m_targetRenderNode = targetNode;
     IsUniqueMaterial   = targetNode.HasUniqueMaterial;
     if (m_parametersToUpdate.Count > 0)
     {
         ConnectRenderParamUpdate();
     }
 }
        private void RecreateRenderData(float deltaTime)
        {
            if (Model == null)
            {
                CRenderScene scene = CRenderer.Instance.ActiveScene;
                for (int i = 0; i < m_renderNodes.Length; i++)
                {
                    scene.UnregisterRenderNode(m_renderNodes[i]);
                }

                return;
            }

            CModelAsset modelAsset = Model.GetAsset();

            if (modelAsset != null && modelAsset.IsLoaded)
            {
                CRenderScene scene = CRenderer.Instance.ActiveScene;
                for (int i = 0; i < m_renderNodes.Length; i++)
                {
                    scene.UnregisterRenderNode(m_renderNodes[i]);
                }

                int meshCount = modelAsset.MeshChildren.Count;
                m_renderNodes = new CMeshRenderNode[meshCount];
                m_overrideMaterials.SetMinSize(meshCount);
                m_materialAssets.SetMinSize(meshCount);
                for (int i = 0; i < meshCount; i++)
                {
                    Transform childTransform = new Transform();
                    childTransform.SetFromMatrix(modelAsset.MeshChildren[i].relativeTransform);
                    childTransform.Parent = m_transform;
                    CMeshRenderNode newRenderNode;
                    if (m_overrideMaterials[i] != null)
                    {
                        newRenderNode = new CMeshRenderNode(this, modelAsset.MeshChildren[i].meshAsset, null, childTransform);
                        newRenderNode.SetMaterialOverride(m_overrideMaterials[i]);
                    }
                    else
                    {
                        newRenderNode = new CMeshRenderNode(this, modelAsset.MeshChildren[i].meshAsset, m_materialAssets[i], childTransform);
                    }
                    m_renderNodes[i] = newRenderNode;
                    scene.RegisterRenderNode(newRenderNode);
                }

                m_updateRenderDataScope?.Disconnect();
                m_updateRenderDataScope = null;
            }
        }
示例#4
0
        public void EngineThread_SetPreviewMesh(CMeshAsset meshAsset, bool bKeepMaterial, bool bZoomToFit)
        {
            m_currentMeshAsset = meshAsset;
            CMaterial nodeMaterial = m_previewMesh?.GetOverrideMaterial();

            if (m_previewMesh != null)
            {
                m_renderScene?.UnregisterRenderNode(m_previewMesh);
            }
            m_previewMesh = new CMeshRenderNode(null, meshAsset, null, m_previewMeshTransform);
            if (bKeepMaterial)
            {
                m_previewMesh.SetMaterialOverride(nodeMaterial);
            }
            m_renderScene?.RegisterRenderNode(m_previewMesh);

            if (bZoomToFit)
            {
                EngineThread_ZoomCameraToFitAsset();
            }
        }
        public bool TryExecute(Device device, DeviceContext deviceContext, CRenderScene scene)
        {
            if (!m_sourceAsset.IsLoaded)
            {
                return(false);
            }

            for (int i = 0; i < m_sourceAsset.MeshChildren.Count; i++)
            {
                SMeshChild meshChild      = m_sourceAsset.MeshChildren[i];
                Transform  childTransform = new Transform();
                childTransform.SetFromMatrix(in meshChild.relativeTransform);
                childTransform.Parent = m_modelTransform;

                CMeshRenderNode renderNode = new CMeshRenderNode(m_outer, meshChild.meshAsset, null, childTransform);
                if (meshChild.meshAsset.GetAsset().IsLoaded)
                {
                    renderNode.TryCreateResources();
                }
                scene.RegisterRenderNode(renderNode);
            }

            return(true);
        }
示例#6
0
 public CSetMaterialParametersCommand(CMeshRenderNode targetNode, List <SMaterialParameterEntry> parameters)
 {
     m_targetNode = targetNode;
     m_parameters = parameters.ToArray();
 }
示例#7
0
 public CSetMaterialParametersCommand(CMeshRenderNode targetNode, SMaterialParameterEntry[] parameters)
 {
     m_targetNode = targetNode;
     m_parameters = parameters;
 }
 public CCreateUniqueMaterialCommand(CMeshRenderNode targetNode)
 {
     m_targetNode = targetNode;
 }