public override void OnInteractivePreviewGUI(Rect previewRect, GUIStyle background) { HandleZoomAndPan(previewRect); if (firstLockedPreviewTarget?.previewTexture != null && e.type == EventType.Repaint) { MixtureUtils.SetupDimensionKeyword(previewMaterial, firstLockedPreviewTarget.previewTexture.dimension); // Set texture property based on the dimension MixtureUtils.SetTextureWithDimension(previewMaterial, "_MainTex0", firstLockedPreviewTarget.previewTexture); MixtureUtils.SetTextureWithDimension(previewMaterial, "_MainTex1", secondLockedPreviewTarget.previewTexture); previewMaterial.SetFloat("_ComparisonSlider", compareSlider); previewMaterial.SetFloat("_ComparisonEnabled", compareEnabled ? 1 : 0); previewMaterial.SetFloat("_CompareMode", (int)compareMode); previewMaterial.SetFloat("_PreviewMip", mipLevel); previewMaterial.SetFloat("_YRatio", previewRect.height / previewRect.width); previewMaterial.SetFloat("_Zoom", zoom); previewMaterial.SetVector("_Pan", shaderPos / previewRect.size); previewMaterial.SetFloat("_FilterMode", (int)filterMode); previewMaterial.SetFloat("_Exp", exposure); previewMaterial.SetVector("_TextureSize", new Vector4(firstLockedPreviewTarget.previewTexture.width, firstLockedPreviewTarget.previewTexture.height, 1.0f / firstLockedPreviewTarget.previewTexture.width, 1.0f / firstLockedPreviewTarget.previewTexture.height)); previewMaterial.SetVector("_Channels", MixtureEditorUtils.GetChannelsMask(channels)); previewMaterial.SetFloat("_IsSRGB0", firstLockedPreviewTarget is OutputNode o0 && o0.mainOutput.sRGB ? 1 : 0); previewMaterial.SetFloat("_IsSRGB1", secondLockedPreviewTarget is OutputNode o1 && o1.mainOutput.sRGB ? 1 : 0); EditorGUI.DrawPreviewTexture(previewRect, Texture2D.whiteTexture, previewMaterial); } else { EditorGUI.DrawRect(previewRect, new Color(1, 0, 1, 1)); } }
void DrawPreviewImage() { var node = nodeView.nodeTarget as MixtureNode; var previewRect = previewImage.layout; previewRect.position = Vector2.zero; switch (node.previewTexture.dimension) { case TextureDimension.Tex2D: MixtureUtils.texture2DPreviewMaterial.SetTexture("_MainTex", node.previewTexture); MixtureUtils.texture2DPreviewMaterial.SetVector("_Size", new Vector4(node.previewTexture.width, node.previewTexture.height, 1, 1)); MixtureUtils.texture2DPreviewMaterial.SetVector("_Channels", MixtureEditorUtils.GetChannelsMask(node.previewMode)); MixtureUtils.texture2DPreviewMaterial.SetFloat("_PreviewMip", node.previewMip); MixtureUtils.texture2DPreviewMaterial.SetFloat("_EV100", node.previewEV100); MixtureUtils.texture2DPreviewMaterial.SetInt("_IsSRGB", node.previewSRGB ? 1 : 0); if (Event.current.type == EventType.Repaint) { EditorGUI.DrawPreviewTexture(previewRect, node.previewTexture, MixtureUtils.texture2DPreviewMaterial, ScaleMode.ScaleToFit, 0, 0); } break; case TextureDimension.Tex3D: MixtureUtils.texture3DPreviewMaterial.SetTexture("_Texture3D", node.previewTexture); MixtureUtils.texture3DPreviewMaterial.SetVector("_Channels", MixtureEditorUtils.GetChannelsMask(node.previewMode)); MixtureUtils.texture3DPreviewMaterial.SetFloat("_PreviewMip", node.previewMip); MixtureUtils.texture3DPreviewMaterial.SetFloat("_Depth", (node.previewSlice + 0.5f) / node.settings.GetResolvedDepth(graphView.graph)); MixtureUtils.texture3DPreviewMaterial.SetFloat("_EV100", node.previewEV100); MixtureUtils.texture3DPreviewMaterial.SetInt("_IsSRGB", node.previewSRGB ? 1 : 0); if (Event.current.type == EventType.Repaint) { EditorGUI.DrawPreviewTexture(previewRect, Texture2D.whiteTexture, MixtureUtils.texture3DPreviewMaterial, ScaleMode.ScaleToFit, 0, 0, ColorWriteMask.Red); } break; case TextureDimension.Cube: MixtureUtils.textureCubePreviewMaterial.SetTexture("_Cubemap", node.previewTexture); MixtureUtils.textureCubePreviewMaterial.SetVector("_Channels", MixtureEditorUtils.GetChannelsMask(node.previewMode)); MixtureUtils.textureCubePreviewMaterial.SetFloat("_PreviewMip", node.previewMip); MixtureUtils.textureCubePreviewMaterial.SetFloat("_EV100", node.previewEV100); MixtureUtils.textureCubePreviewMaterial.SetInt("_IsSRGB", node.previewSRGB ? 1 : 0); if (Event.current.type == EventType.Repaint) { EditorGUI.DrawPreviewTexture(previewRect, Texture2D.whiteTexture, MixtureUtils.textureCubePreviewMaterial, ScaleMode.ScaleToFit, 0, 0); } break; default: Debug.LogError(node.previewTexture + " is not a supported type for preview"); break; } }
protected virtual void DrawImGUIPreview(MixtureNode node, Rect previewRect, float currentSlice) { var outputNode = node as OutputNode; switch (node.previewTexture.dimension) { case TextureDimension.Tex2D: MixtureUtils.texture2DPreviewMaterial.SetTexture("_MainTex", node.previewTexture); MixtureUtils.texture2DPreviewMaterial.SetVector("_Size", new Vector4(node.previewTexture.width, node.previewTexture.height, 1, 1)); MixtureUtils.texture2DPreviewMaterial.SetVector("_Channels", MixtureEditorUtils.GetChannelsMask(nodeTarget.previewMode)); MixtureUtils.texture2DPreviewMaterial.SetFloat("_PreviewMip", nodeTarget.previewMip); MixtureUtils.texture2DPreviewMaterial.SetFloat("_EV100", nodeTarget.previewEV100); MixtureUtils.texture2DPreviewMaterial.SetFloat("_IsSRGB", outputNode != null && outputNode.mainOutput.sRGB ? 1 : 0); if (Event.current.type == EventType.Repaint) { EditorGUI.DrawPreviewTexture(previewRect, node.previewTexture, MixtureUtils.texture2DPreviewMaterial, ScaleMode.ScaleToFit, 0, 0); } break; case TextureDimension.Tex3D: MixtureUtils.texture3DPreviewMaterial.SetTexture("_Texture3D", node.previewTexture); MixtureUtils.texture3DPreviewMaterial.SetVector("_Channels", MixtureEditorUtils.GetChannelsMask(nodeTarget.previewMode)); MixtureUtils.texture3DPreviewMaterial.SetFloat("_PreviewMip", nodeTarget.previewMip); MixtureUtils.texture3DPreviewMaterial.SetFloat("_Depth", (currentSlice + 0.5f) / nodeTarget.rtSettings.GetDepth(owner.graph)); MixtureUtils.texture3DPreviewMaterial.SetFloat("_EV100", nodeTarget.previewEV100); MixtureUtils.texture3DPreviewMaterial.SetFloat("_IsSRGB", outputNode != null && outputNode.mainOutput.sRGB ? 1 : 0); if (Event.current.type == EventType.Repaint) { EditorGUI.DrawPreviewTexture(previewRect, Texture2D.whiteTexture, MixtureUtils.texture3DPreviewMaterial, ScaleMode.ScaleToFit, 0, 0, ColorWriteMask.Red); } break; case TextureDimension.Cube: MixtureUtils.textureCubePreviewMaterial.SetTexture("_Cubemap", node.previewTexture); MixtureUtils.textureCubePreviewMaterial.SetVector("_Channels", MixtureEditorUtils.GetChannelsMask(nodeTarget.previewMode)); MixtureUtils.textureCubePreviewMaterial.SetFloat("_PreviewMip", nodeTarget.previewMip); MixtureUtils.textureCubePreviewMaterial.SetFloat("_EV100", nodeTarget.previewEV100); MixtureUtils.textureCubePreviewMaterial.SetFloat("_IsSRGB", outputNode != null && outputNode.mainOutput.sRGB ? 1 : 0); if (Event.current.type == EventType.Repaint) { EditorGUI.DrawPreviewTexture(previewRect, Texture2D.whiteTexture, MixtureUtils.textureCubePreviewMaterial, ScaleMode.ScaleToFit, 0, 0); } break; default: Debug.LogError(node.previewTexture + " is not a supported type for preview"); break; } }
public override void OnInteractivePreviewGUI(Rect previewRect, GUIStyle background) { HandleZoomAndPan(previewRect); if (mixtureInspector.firstLockedPreviewTarget?.previewTexture != null && e.type == EventType.Repaint) { mixtureInspector.volumeCameraMatrix = Matrix4x4.Rotate(Quaternion.Euler(mixtureInspector.cameraYAxis, mixtureInspector.cameraXAxis, 0)); MixtureUtils.SetupDimensionKeyword(previewMaterial, mixtureInspector.firstLockedPreviewTarget.previewTexture.dimension); // Set texture property based on the dimension MixtureUtils.SetTextureWithDimension(previewMaterial, "_MainTex0", mixtureInspector.firstLockedPreviewTarget.previewTexture); MixtureUtils.SetTextureWithDimension(previewMaterial, "_MainTex1", mixtureInspector.secondLockedPreviewTarget.previewTexture); previewMaterial.SetFloat("_ComparisonSlider", mixtureInspector.compareSlider); previewMaterial.SetFloat("_ComparisonSlider3D", mixtureInspector.compareSlider3D); previewMaterial.SetVector("_MouseUV", mixtureInspector.mouseUV); previewMaterial.SetMatrix("_CameraMatrix", mixtureInspector.volumeCameraMatrix); previewMaterial.SetFloat("_CameraZoom", mixtureInspector.cameraZoom); previewMaterial.SetFloat("_ComparisonEnabled", mixtureInspector.compareEnabled ? 1 : 0); previewMaterial.SetFloat("_CompareMode", (int)mixtureInspector.compareMode); previewMaterial.SetFloat("_PreviewMip", mixtureInspector.mipLevel); previewMaterial.SetFloat("_YRatio", previewRect.height / previewRect.width); previewMaterial.SetFloat("_Zoom", mixtureInspector.zoom); previewMaterial.SetVector("_Pan", mixtureInspector.shaderPos / previewRect.size); previewMaterial.SetFloat("_FilterMode", (int)mixtureInspector.filterMode); previewMaterial.SetFloat("_Exp", mixtureInspector.exposure); previewMaterial.SetVector("_TextureSize", new Vector4(mixtureInspector.firstLockedPreviewTarget.previewTexture.width, mixtureInspector.firstLockedPreviewTarget.previewTexture.height, 1.0f / mixtureInspector.firstLockedPreviewTarget.previewTexture.width, 1.0f / mixtureInspector.firstLockedPreviewTarget.previewTexture.height)); previewMaterial.SetVector("_Channels", MixtureEditorUtils.GetChannelsMask(mixtureInspector.channels)); previewMaterial.SetFloat("_IsSRGB0", mixtureInspector.firstLockedPreviewTarget is OutputNode o0 && o0.mainOutput.sRGB ? 1 : 0); previewMaterial.SetFloat("_IsSRGB1", mixtureInspector.secondLockedPreviewTarget is OutputNode o1 && o1.mainOutput.sRGB ? 1 : 0); previewMaterial.SetFloat("_PreserveAspect", mixtureInspector.preserveAspect ? 1 : 0); previewMaterial.SetFloat("_Texture3DMode", (int)mixtureInspector.texture3DPreviewMode); previewMaterial.SetFloat("_Density", mixtureInspector.texture3DDensity); previewMaterial.SetFloat("_SDFOffset", mixtureInspector.texture3DDistanceFieldOffset); previewMaterial.SetFloat("_SDFChannel", (int)mixtureInspector.sdfChannel); previewMaterial.SetFloat("_ShowCubeBackface", mixtureInspector.showCubeBackface ? 1 : 0); previewMaterial.SetFloat("_InvertSurface", mixtureInspector.invertSurface ? 1 : 0); previewMaterial.SetFloat("_VolumetricDensityChannel", mixtureInspector.volumetricDensityChannel); EditorGUI.DrawPreviewTexture(previewRect, Texture2D.whiteTexture, previewMaterial); } else { EditorGUI.DrawRect(previewRect, new Color(1, 0, 1, 1)); } }