diff --git a/Source/Editor/CustomEditors/CustomEditorsUtil.cs b/Source/Editor/CustomEditors/CustomEditorsUtil.cs
index 7d7ef123d..476219960 100644
--- a/Source/Editor/CustomEditors/CustomEditorsUtil.cs
+++ b/Source/Editor/CustomEditors/CustomEditorsUtil.cs
@@ -87,8 +87,11 @@ namespace FlaxEditor.CustomEditors
var targetTypeType = TypeUtils.GetType(targetType);
if (canUseRefPicker)
{
+ // TODO: add generic way of CustomEditor for ref pickers (use it on AssetRefEditor/GPUTextureEditor/...)
if (typeof(Asset).IsAssignableFrom(targetTypeType))
return new AssetRefEditor();
+ if (typeof(GPUTexture).IsAssignableFrom(targetTypeType))
+ return new GPUTextureEditor();
if (typeof(FlaxEngine.Object).IsAssignableFrom(targetTypeType))
return new FlaxObjectRefEditor();
}
diff --git a/Source/Editor/CustomEditors/Dedicated/GPUTextureEditor.cs b/Source/Editor/CustomEditors/Dedicated/GPUTextureEditor.cs
new file mode 100644
index 000000000..9df7ca377
--- /dev/null
+++ b/Source/Editor/CustomEditors/Dedicated/GPUTextureEditor.cs
@@ -0,0 +1,63 @@
+// Copyright (c) Wojciech Figat. All rights reserved.
+
+using FlaxEditor.GUI.ContextMenu;
+using FlaxEngine;
+using FlaxEngine.GUI;
+
+namespace FlaxEditor.CustomEditors.Dedicated
+{
+ ///
+ /// Basic editor/viewer for .
+ ///
+ [CustomEditor(typeof(GPUTexture)), DefaultEditor]
+ public class GPUTextureEditor : CustomEditor
+ {
+ private Image _image;
+
+ ///
+ public override DisplayStyle Style => DisplayStyle.Inline;
+
+ ///
+ public override void Initialize(LayoutElementsContainer layout)
+ {
+ _image = new Image
+ {
+ Brush = new GPUTextureBrush(),
+ Size = new Float2(200, 100),
+ Parent = layout.ContainerControl,
+ };
+ _image.Clicked += OnImageClicked;
+ }
+
+ private void OnImageClicked(Image image, MouseButton button)
+ {
+ var texture = Values[0] as GPUTexture;
+ if (!texture)
+ return;
+ var menu = new ContextMenu();
+ menu.AddButton("Save...", () => Screenshot.Capture(Values[0] as GPUTexture));
+ menu.AddButton("Enlarge", () => _image.Size *= 2);
+ menu.AddButton("Shrink", () => _image.Size /= 2).Enabled = _image.Height > 32;
+ var location = image.PointFromScreen(Input.MouseScreenPosition);
+ menu.Show(image, location);
+ }
+
+ ///
+ public override void Refresh()
+ {
+ base.Refresh();
+
+ var texture = Values[0] as GPUTexture;
+ ((GPUTextureBrush)_image.Brush).Texture = texture;
+ if (texture)
+ {
+ var desc = texture.Description;
+ _image.TooltipText = $"{texture.Name}\nType: {texture.ResourceType}\nSize: {desc.Width}x{desc.Height}\nFormat: {desc.Format}\nMemory: {Utilities.Utils.FormatBytesCount(texture.MemoryUsage)}";
+ }
+ else
+ {
+ _image.TooltipText = "None";
+ }
+ }
+ }
+}