void UpdateShaders() { using (UpdateShadersMarker.Auto()) { ProcessCompletedShaderCompilations(); if (m_NodesShaderChanged.Count > 0) { // nodes with shader changes cause all downstream nodes to need recompilation PropagateNodes(m_NodesShaderChanged, PropagationDirection.Downstream, m_NodesNeedsRecompile); m_NodesShaderChanged.Clear(); } // if there's nothing to update, or if too many nodes are still compiling, then just return if ((m_NodesNeedsRecompile.Count == 0) || (m_NodesCompiling.Count >= m_MaxNodesCompiling)) { return; } // flag all nodes in m_NodesNeedRecompile as having out of date textures, and redraw them foreach (var node in m_NodesNeedsRecompile) { PreviewRenderData previewRendererData = GetPreviewRenderData(node); if ((previewRendererData != null) && !previewRendererData.shaderData.isOutOfDate) { previewRendererData.shaderData.isOutOfDate = true; previewRendererData.NotifyPreviewChanged(); } } InitializeSRPIfNeeded(); // SRP must be initialized to compile master node previews KickOffShaderCompilations(); } }
void BeginCompile(PreviewRenderData renderData, string shaderStr, int shaderPass) { var shaderData = renderData.shaderData; ShaderUtil.UpdateShaderAsset(shaderData.shader, shaderStr, false); ShaderUtil.CompilePass(shaderData.mat, shaderPass); shaderData.isCompiling = true; renderData.NotifyPreviewChanged(); }
void BeginCompile(PreviewRenderData renderData, string shaderStr) { var shaderData = renderData.shaderData; ShaderUtil.ClearCachedData(shaderData.shader); ShaderUtil.UpdateShaderAsset(shaderData.shader, shaderStr, false); for (var i = 0; i < shaderData.mat.passCount; i++) { ShaderUtil.CompilePass(shaderData.mat, i); } shaderData.isCompiling = true; renderData.NotifyPreviewChanged(); }