protected void OnRenderTextureGUI(GUIElements guiElements) { GUI.changed = false; EditorGUILayout.IntPopup(m_Dimension, styles.dimensionStrings, styles.dimensionValues, styles.dimension); // Note that TextureInspector.IsTexture3D/Cube/2DArray/etc. exist. Those functions will use the actual target object to determine the dimension. // This because they are drawing preview settings based on the selected target objects. // Here we are drawing the one and only Render Texture GUI so we have the dimension field as most correct value. bool isTexture3D = (m_Dimension.intValue == (int)UnityEngine.Rendering.TextureDimension.Tex3D); bool isTexture2DArray = (m_Dimension.intValue == (int)UnityEngine.Rendering.TextureDimension.Tex2DArray); GUILayout.BeginHorizontal(); EditorGUILayout.PrefixLabel(styles.size, EditorStyles.popup); EditorGUILayout.DelayedIntField(m_Width, GUIContent.none, GUILayout.MinWidth(40)); GUILayout.Label(styles.cross); EditorGUILayout.DelayedIntField(m_Height, GUIContent.none, GUILayout.MinWidth(40)); if (isTexture3D || isTexture2DArray) { GUILayout.Label(styles.cross); EditorGUILayout.DelayedIntField(m_Depth, GUIContent.none, GUILayout.MinWidth(40)); } GUILayout.FlexibleSpace(); GUILayout.EndHorizontal(); if ((guiElements & GUIElements.RenderTargetAAGUI) != 0) { EditorGUILayout.IntPopup(m_AntiAliasing, styles.renderTextureAntiAliasing, styles.renderTextureAntiAliasingValues, styles.antiAliasing); } GraphicsFormat colorFormat = (GraphicsFormat)m_ColorFormat.intValue; GraphicsFormat compatibleColorFormat = SystemInfo.GetCompatibleFormat(colorFormat, FormatUsage.Render); GraphicsFormat depthStencilFormat = (GraphicsFormat)m_DepthStencilFormat.intValue; bool isDepthStencilUnused = depthStencilFormat == GraphicsFormat.None; bool isDepthStencilFormatIncompatible = !isDepthStencilUnused && SystemInfo.GetCompatibleFormat(depthStencilFormat, FormatUsage.Render) == GraphicsFormat.None; GraphicsFormat compatibleDepthStencilFormat = (isDepthStencilUnused) ? GraphicsFormat.None : GraphicsFormatUtility.GetDepthStencilFormat(GraphicsFormatUtility.GetDepthBits(depthStencilFormat), (GraphicsFormatUtility.IsStencilFormat(depthStencilFormat)) ? 8 : 0); // If no fallbacks are found for the color AND depth stencil buffer, disable the EnableCompatibleFormat field // If only one of the two fails, checkbox can still be interacted with if (!(compatibleColorFormat == GraphicsFormat.None && compatibleDepthStencilFormat == GraphicsFormat.None)) { EditorGUILayout.PropertyField(m_EnableCompatibleFormat, styles.enableCompatibleFormat); } EditorGUILayout.PropertyField(m_ColorFormat, styles.colorFormat); m_sRGB.boolValue = GraphicsFormatUtility.IsSRGBFormat((GraphicsFormat)m_ColorFormat.intValue); if (compatibleColorFormat != colorFormat) { string text = string.Format("Format {0} is not supported on this platform. ", colorFormat.ToString()); if (compatibleColorFormat != GraphicsFormat.None) { if (m_EnableCompatibleFormat.boolValue) { text += string.Format("Using {0} as a compatible format.", compatibleColorFormat.ToString()); } else { text += string.Format("You may enable Compatible Format to fallback automatically to a platform specific compatible format, {0} on this device.", compatibleColorFormat.ToString()); } } EditorGUILayout.HelpBox(text, m_EnableCompatibleFormat.boolValue && compatibleColorFormat != GraphicsFormat.None ? MessageType.Warning : MessageType.Error); } // 3D Textures with a depth buffer aren't supported. if (!isTexture3D) { if ((guiElements & GUIElements.RenderTargetDepthGUI) != 0) { EditorGUILayout.PropertyField(m_DepthStencilFormat, styles.depthStencilFormat); } if (depthStencilFormat != compatibleDepthStencilFormat) { string text = string.Format("Format {0} is not supported on this platform. ", depthStencilFormat.ToString()); if (compatibleDepthStencilFormat != GraphicsFormat.None) { if (m_EnableCompatibleFormat.boolValue) { text += string.Format("Using {0} as a compatible format.", compatibleDepthStencilFormat.ToString()); } else { text += string.Format("You may enable Compatible Format to fallback automatically to a platform specific compatible format, {0} on this device.", compatibleDepthStencilFormat.ToString()); } } EditorGUILayout.HelpBox(text, m_EnableCompatibleFormat.boolValue && compatibleDepthStencilFormat != GraphicsFormat.None ? MessageType.Warning : MessageType.Error); } if ((GraphicsFormat)m_DepthStencilFormat.intValue == GraphicsFormat.None && (GraphicsFormat)m_ColorFormat.intValue == GraphicsFormat.None) { EditorGUILayout.HelpBox("You cannot set both color format and depth format to None", MessageType.Error); } } // Mip map generation is not supported yet for 3D textures (and for depth only textures). if (!(isTexture3D || RenderTextureIsDepthOnly())) { EditorGUILayout.PropertyField(m_EnableMipmaps, styles.enableMipmaps); if (m_EnableMipmaps.boolValue) { ++EditorGUI.indentLevel; EditorGUILayout.PropertyField(m_AutoGeneratesMipmaps, styles.autoGeneratesMipmaps); --EditorGUI.indentLevel; } } else { if (isTexture3D) { // Mip map generation is not supported yet for 3D textures. EditorGUILayout.HelpBox("3D RenderTextures do not support Mip Maps.", MessageType.Info); } if (RenderTextureIsDepthOnly()) { // Mip map generation is not supported yet for depth-only textures. EditorGUILayout.HelpBox("Depth-only RenderTextures do not support Mip Maps.", MessageType.Info); } } EditorGUILayout.PropertyField(m_UseDynamicScale, styles.useDynamicScale); var rt = target as RenderTexture; if (GUI.changed && rt != null) { rt.Release(); m_RepaintDelay = 5; } // Trigger delayed repaint to allow camera's to be rendered before thumbnail is generated. if (m_RepaintDelay > 0) { --m_RepaintDelay; if (m_RepaintDelay == 0) { EditorUtility.SetDirty(target); } } EditorGUILayout.Space(); EditorGUI.BeginChangeCheck(); DoWrapModePopup(); DoFilterModePopup(); if (!RenderTextureHasDepth()) // Render Textures with depth are forced to 0 Aniso Level { DoAnisoLevelSlider(); } else { EditorGUILayout.HelpBox("RenderTextures with depth are forced to have an Aniso Level of 0.", MessageType.Info); } if (RenderTextureHasDepth()) // Depth-only textures have shadow mode { EditorGUI.BeginChangeCheck(); EditorGUILayout.PropertyField(m_ShadowSamplingMode, styles.shadowSamplingMode); // Shadow mode unlike the other filter settings requires re-creating the rt if it changed // as it's an actual creation flag on the texture. if (EditorGUI.EndChangeCheck() && rt != null) { rt.Release(); } } else { EditorGUILayout.HelpBox("Only render textures with depth can have shadow filtering.", MessageType.Info); } serializedObject.ApplyModifiedProperties(); if (EditorGUI.EndChangeCheck()) { ApplySettingsToTextures(); } }