private void OnGUI() { // Display any errors at the top of our GUI. // Error will have one frame of latency. ErrorDisplay(); if (ErrorCapture(ComputeAndDisplayTexture3DSettings(ref texture3DSettings))) { return; } if (ErrorCapture(ComputeAndDisplayTextureSlices(ref textureSlices, ref textureSlicesData))) { return; } if (GUILayout.Button(SAVE_BUTTON_NAME)) { Texture3D texture3D = null; if (ErrorCapture(Texture3DEditor.ComputeTexture3DFromTextureSlices(ref texture3D, textureSlices, textureSlicesData, texture3DSettings))) { return; } if (ErrorCapture(Texture3DEditor.SaveAssetFromTexture3D(texture3DSettings, texture3D))) { return; } } }
private Texture3DEditorError ComputeAndDisplayTexture3DSettings(ref Texture3DSettings res) { isTexture3DSettingsDisplayed = EditorGUILayout.Foldout(isTexture3DSettingsDisplayed, GUI_NAME_IS_TEXTURE_3D_SETTINGS_DISPLAYED); if (isTexture3DSettingsDisplayed) { EditorGUILayout.BeginVertical(); ++EditorGUI.indentLevel; res.name = EditorGUILayout.TextField(GUI_NAME_NAME, res.name); res.resampleMode = (ResampleMode)EditorGUILayout.Popup(GUI_NAME_RESAMPLE_MODE, (int)res.resampleMode, RESAMPLE_MODE_NAMES); res.textureFormatValid = (TextureFormatValid)EditorGUILayout.Popup(GUI_NAME_TEXTURE_FORMAT_VALID, (int)res.textureFormatValid, TEXTURE_FORMAT_VALID_NAMES); res.filterModeValid = (FilterModeValid)EditorGUILayout.Popup(GUI_NAME_FILTER_MODE_VALID, (int)res.filterModeValid, FILTER_MODE_VALID_NAMES); res.textureWrapModeValid = (TextureWrapModeValid)EditorGUILayout.Popup(GUI_NAME_WRAP_MODE_VALID, (int)res.textureWrapModeValid, TEXTURE_WRAP_MODE_VALID_NAMES); res.isMipmapEnabled = EditorGUILayout.Toggle(GUI_NAME_IS_MIPMAP_ENABLED, res.isMipmapEnabled); res.anisoLevel = EditorGUILayout.IntSlider(GUI_NAME_ANISO_LEVEL, res.anisoLevel, 1, 9); res.width = Texture3DEditor.SanitizeResolution(EditorGUILayout.IntField(GUI_NAME_WIDTH, res.width)); res.height = Texture3DEditor.SanitizeResolution(EditorGUILayout.IntField(GUI_NAME_HEIGHT, res.height)); res.depth = Texture3DEditor.SanitizeResolution(EditorGUILayout.IntField(GUI_NAME_DEPTH, res.depth)); --EditorGUI.indentLevel; EditorGUILayout.EndVertical(); } return(Texture3DEditorError.None); }
private static Texture3DEditorError ComputeTexture3DFromTextureSlices(ref Texture3D res, List <Texture2D> textureSlices, List <Color[]> textureSlicesData, Texture3DSettings settings) { if (textureSlices.Count == 0) { return(Texture3DEditorError.NoSlicesSpecified); } for (int i = 0, iLen = textureSlices.Count; i < iLen; ++i) { if (textureSlices[i] == null) { return(Texture3DEditorError.NoTextureAssigned); } } Color[] data = new Color[settings.width * settings.height * settings.depth]; res = new Texture3D( settings.width, settings.height, settings.depth, Texture3DEditor.GetTextureFormat(settings.textureFormatValid), settings.isMipmapEnabled ); res.wrapMode = Texture3DEditor.GetTextureWrapMode(settings.textureWrapModeValid); res.filterMode = Texture3DEditor.GetTextureFilterMode(settings.filterModeValid); res.anisoLevel = settings.anisoLevel; Debug.Assert((int)settings.resampleMode >= 0 && settings.resampleMode < ResampleMode.Count); Texture3DEditorError error = Texture3DEditorError.None; switch (settings.resampleMode) { case ResampleMode.Nearest: error = ResampleNearest(ref data, textureSlices, textureSlicesData, settings); break; case ResampleMode.Trilinear: error = ResampleTrilinear(ref data, textureSlices, textureSlicesData, settings); break; default: break; } if (error != Texture3DEditorError.None) { return(error); } res.SetPixels(data, 0); res.Apply(settings.isMipmapEnabled); return(Texture3DEditorError.None); }
public static void ShowWindow() { Texture3DEditor window = EditorWindow.GetWindow <Texture3DEditor>(); window.Show(); }