Merge pull request #3 from DCFApixels/dev_text

Dev text
This commit is contained in:
Demexis 2025-02-28 15:02:38 +02:00 committed by GitHub
commit 97d081779e
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
17 changed files with 450 additions and 225 deletions

View File

@ -29,7 +29,7 @@ namespace DCFApixels
private enum PauseStateX private enum DebugXPauseState
{ {
Unpaused = 0, Unpaused = 0,
PreUnpaused = 1, //нужно чтобы отщелкунть паузу с задержкой в один тик PreUnpaused = 1, //нужно чтобы отщелкунть паузу с задержкой в один тик

View File

@ -22,7 +22,7 @@ namespace DCFApixels
using IN = System.Runtime.CompilerServices.MethodImplAttribute; using IN = System.Runtime.CompilerServices.MethodImplAttribute;
public static unsafe partial class DebugX public static unsafe partial class DebugX
{ {
private static PauseStateX _pauseState = PauseStateX.Unpaused; private static DebugXPauseState _pauseState = DebugXPauseState.Unpaused;
private static bool _isCameraContext = false; private static bool _isCameraContext = false;
private static double _lastUnityTime; private static double _lastUnityTime;
@ -31,18 +31,12 @@ namespace DCFApixels
private static ulong _editorTicks = 0; private static ulong _editorTicks = 0;
private static ulong _lastEditorToRenderTicks = 1000; private static ulong _lastEditorToRenderTicks = 1000;
private static ulong _renderTicks = 100; private static ulong _renderTicks = 100;
//private static ulong _lastEditorToRenderGizmosTicks = 1000;
//private static ulong _renderGizmosTicks = 100;
private static ulong _timeTicks = 0; private static ulong _timeTicks = 0;
public static ulong RenderTicks public static ulong RenderTicks
{ {
get { return _renderTicks; } get { return _renderTicks; }
} }
//public static ulong RenderGizmosTicks
//{
// get { return _renderGizmosTicks; }
//}
public static ulong TimeTicks public static ulong TimeTicks
{ {
get { return _timeTicks; } get { return _timeTicks; }
@ -65,7 +59,7 @@ namespace DCFApixels
#if UNITY_EDITOR #if UNITY_EDITOR
private static void EditorApplication_pauseStateChanged(PauseState obj) private static void EditorApplication_pauseStateChanged(PauseState obj)
{ {
_pauseState = obj == PauseState.Paused ? PauseStateX.Paused : PauseStateX.PreUnpaused; _pauseState = obj == PauseState.Paused ? DebugXPauseState.Paused : DebugXPauseState.PreUnpaused;
} }
#endif #endif
#endregion #endregion
@ -234,12 +228,10 @@ namespace DCFApixels
private static void OnPreRender_BRP(Camera camera) private static void OnPreRender_BRP(Camera camera)
{ {
PreRender_General(camera); PreRender_General(camera);
//throw new NotImplementedException();
} }
private static void OnPostRender_BRP(Camera camera) private static void OnPostRender_BRP(Camera camera)
{ {
PostRender_General(CommandBufferExecutorBRP.GetInstance(), camera); PostRender_General(CommandBufferExecutorBRP.GetInstance(), camera);
//throw new NotImplementedException();
} }
private static void PreUpdateCallback() private static void PreUpdateCallback()
@ -250,7 +242,7 @@ namespace DCFApixels
if (_lastUnityTime < Time.unscaledTimeAsDouble) if (_lastUnityTime < Time.unscaledTimeAsDouble)
{ {
_timeTicks++; _timeTicks++;
if (_pauseState == PauseStateX.Unpaused) if (_pauseState == DebugXPauseState.Unpaused)
{ {
_deltaTime = Time.unscaledDeltaTime * _timeScaleCache; _deltaTime = Time.unscaledDeltaTime * _timeScaleCache;
} }
@ -269,9 +261,9 @@ namespace DCFApixels
} }
} }
_lastUnityTime = Time.unscaledTimeAsDouble; _lastUnityTime = Time.unscaledTimeAsDouble;
if (_pauseState == PauseStateX.PreUnpaused) if (_pauseState == DebugXPauseState.PreUnpaused)
{ {
_pauseState = PauseStateX.Unpaused; _pauseState = DebugXPauseState.Unpaused;
} }
SetGameSceneContext(); SetGameSceneContext();
} }
@ -294,7 +286,6 @@ namespace DCFApixels
_currentCamera = camera; _currentCamera = camera;
} }
private static void PostRender_General(ICommandBufferExecutor cbExecutor, Camera camera) private static void PostRender_General(ICommandBufferExecutor cbExecutor, Camera camera)
{ {
if (_lastEditorToRenderTicks != _editorTicks) if (_lastEditorToRenderTicks != _editorTicks)
@ -307,8 +298,9 @@ namespace DCFApixels
{ {
RenderContextController.StaicContextController.Prepare(); RenderContextController.StaicContextController.Prepare();
RenderContextController.StaicContextController.Render(cbExecutor); RenderContextController.StaicContextController.Render(cbExecutor);
cbExecutor.Submit();
CallDrawGizmos(camera); RenderContextController.StaicContextController.PostRender();
RenderContextController.StaicContextController.RunEnd();
} }
if (camera == null) { return; } if (camera == null) { return; }
@ -316,54 +308,10 @@ namespace DCFApixels
RenderContextController contextController = RenderContextController.GetController(new RenderContext(camera)); RenderContextController contextController = RenderContextController.GetController(new RenderContext(camera));
contextController.Prepare(); contextController.Prepare();
contextController.Render(cbExecutor); contextController.Render(cbExecutor);
cbExecutor.Submit();
contextController.PostRender();
contextController.RunEnd();
} }
#if UNITY_EDITOR
[DrawGizmo(GizmoType.NonSelected | GizmoType.Selected)]
private static void DrawGizmos(Camera obj, GizmoType gizmoType)
{
if (obj != Camera.main) { return; }
//if (_lastEditorToRenderGizmosTicks != _editorTicks)
//{
// _renderGizmosTicks++;
// _lastEditorToRenderGizmosTicks = _editorTicks;
//}
//Camera camera = Camera.current;
//CallDrawGizmos(camera);
}
#endif
private static void CallDrawGizmos(Camera camera)
{
Color guiColor = GUI.color;
Color guiContextColor = GUI.contentColor;
Color guiBackgroundColor = GUI.backgroundColor;
Color gizmosColor = Gizmos.color;
#if Handles
Color handlesColor = Handles.color;
#endif
GL.MultMatrix(Handles.matrix);
RenderContextController.StaicContextController.Render_UnityGizmos();
if (camera == null) { return; }
_currentCamera = camera;
RenderContextController.GetController(new RenderContext(camera)).Render_UnityGizmos();
GUI.color = guiColor;
GUI.contentColor = guiContextColor;
GUI.backgroundColor = guiBackgroundColor;
Gizmos.color = gizmosColor;
#if Handles
Handles.color = handlesColor;
#endif
}
#endregion #endregion
@ -585,14 +533,12 @@ namespace DCFApixels
{ {
_buffers[i].Render(cbExecutor); _buffers[i].Render(cbExecutor);
} }
RunEnd();
} }
} }
[IN(LINE)] [IN(LINE)]
public void Render_UnityGizmos() public void PostRender()
{ {
#if UNITY_EDITOR #if UNITY_EDITOR
using (_cameraMarker.Auto()) using (_cameraMarker.Auto())
@ -600,10 +546,8 @@ namespace DCFApixels
{ {
for (int i = 0, iMax = _buffers.Count; i < iMax; i++) for (int i = 0, iMax = _buffers.Count; i < iMax; i++)
{ {
_buffers[i].Render_UnityGizmos(); _buffers[i].PostRender();
} }
//RunEnd();
} }
} }
@ -631,7 +575,7 @@ namespace DCFApixels
public abstract int UpdateTimer(float deltaTime); public abstract int UpdateTimer(float deltaTime);
public abstract void Prepare(); public abstract void Prepare();
public abstract void Render(ICommandBufferExecutor cbExecutor); public abstract void Render(ICommandBufferExecutor cbExecutor);
public abstract void Render_UnityGizmos(); public abstract void PostRender();
public abstract int RunEnd(); public abstract int RunEnd();
public abstract void Clear(); public abstract void Clear();
} }
@ -654,7 +598,7 @@ namespace DCFApixels
//private readonly CommandBuffer _dynamicCommandBuffer; //private readonly CommandBuffer _dynamicCommandBuffer;
private readonly IGizmoRenderer<T> _renderer; private readonly IGizmoRenderer<T> _renderer;
private readonly IGizmoRenderer_UnityGizmos<T> _rendererUnityGizmos; private readonly IGizmoRenderer_PostRender<T> _rendererUnityGizmos;
private readonly bool _isStatic; private readonly bool _isStatic;
#if DEV_MODE #if DEV_MODE
@ -681,7 +625,7 @@ namespace DCFApixels
_renderer = new DummyRenderer(); _renderer = new DummyRenderer();
} }
_isStatic = _renderer.IsStaticRender; _isStatic = _renderer.IsStaticRender;
_rendererUnityGizmos = _renderer as IGizmoRenderer_UnityGizmos<T>; _rendererUnityGizmos = _renderer as IGizmoRenderer_PostRender<T>;
All.Add(this); All.Add(this);
All.Sort((a, b) => a.ExecuteOrder - b.ExecuteOrder); All.Sort((a, b) => a.ExecuteOrder - b.ExecuteOrder);
@ -800,7 +744,7 @@ namespace DCFApixels
cbExecutor.Execute(_staticCommandBuffer); cbExecutor.Execute(_staticCommandBuffer);
} }
} }
public override void Render_UnityGizmos() public override void PostRender()
{ {
if (_rendererUnityGizmos == null) { return; } if (_rendererUnityGizmos == null) { return; }
//Debug.Log(_gizmos._count); //Debug.Log(_gizmos._count);
@ -812,7 +756,7 @@ namespace DCFApixels
GizmosList<T> list = GizmosList.From(_gizmos._items, _gizmos._count); GizmosList<T> list = GizmosList.From(_gizmos._items, _gizmos._count);
try try
{ {
_rendererUnityGizmos.Render_UnityGizmos(GetCurrentCamera(), list); _rendererUnityGizmos.PostRender(GetCurrentCamera(), list);
} }
catch (Exception e) { throw new Exception($"[{_debugName}] [Render] ", e); } catch (Exception e) { throw new Exception($"[{_debugName}] [Render] ", e); }
} }

View File

@ -14,110 +14,150 @@ namespace DCFApixels
public readonly partial struct DrawHandler public readonly partial struct DrawHandler
{ {
#region Text #region Text
[IN(LINE)] public DrawHandler TextWorldScale(Vector3 position, object text) => Gizmo(new TextGizmo(position, text, DebugXTextSettings.Default, true)); [IN(LINE)] public DrawHandler Text(Vector3 position, object text) => Gizmo(new TextGizmo(position, text, DebugXTextSettings.Default));
[IN(LINE)] public DrawHandler TextWorldScale(Vector3 position, object text, DebugXTextSettings settings) => Gizmo(new TextGizmo(position, text, settings, true)); [IN(LINE)] public DrawHandler Text(Vector3 position, object text, DebugXTextSettings settings) => Gizmo(new TextGizmo(position, text, settings));
[IN(LINE)] public DrawHandler Text(Vector3 position, object text) => Gizmo(new TextGizmo(position, text, DebugXTextSettings.Default, false));
[IN(LINE)] public DrawHandler Text(Vector3 position, object text, DebugXTextSettings settings) => Gizmo(new TextGizmo(position, text, settings, false));
private readonly struct TextGizmo : IGizmo<TextGizmo> private readonly struct TextGizmo : IGizmo<TextGizmo>
{ {
public readonly Vector3 Position; public readonly Vector3 Position;
public readonly string Text; public readonly string Text;
public readonly DebugXTextSettings Settings; public readonly DebugXTextSettings Settings;
public readonly bool IsWorldSpaceScale;
[IN(LINE)] [IN(LINE)]
public TextGizmo(Vector3 position, object text, DebugXTextSettings settings, bool isWorldSpaceScale) public TextGizmo(Vector3 position, object text, DebugXTextSettings settings)
{ {
Position = position; Position = position;
Text = text.ToString(); Text = text.ToString();
Settings = settings; Settings = settings;
IsWorldSpaceScale = isWorldSpaceScale;
} }
public IGizmoRenderer<TextGizmo> RegisterNewRenderer() { return new Renderer(); } public IGizmoRenderer<TextGizmo> RegisterNewRenderer() { return new Renderer(); }
#region Renderer #region Renderer
private class Renderer : IGizmoRenderer_UnityGizmos<TextGizmo> private class Renderer : IGizmoRenderer_PostRender<TextGizmo>
{ {
private static GUIStyle _labelStyle; private static GUIStyle _labelStyle;
private static GUIContent _labelDummy; private static GUIContent _labelDummy;
private static Texture2D _whiteTexture;
public int ExecuteOrder => default(UnlitMat).GetExecuteOrder(); public int ExecuteOrder => default(UnlitMat).GetExecuteOrder();
public bool IsStaticRender => false; public bool IsStaticRender => false;
public void Prepare(Camera camera, GizmosList<TextGizmo> list) { } public void Prepare(Camera camera, GizmosList<TextGizmo> list) { }
public void Render(Camera camera, GizmosList<TextGizmo> list, CommandBuffer cb) { } public void Render(Camera camera, GizmosList<TextGizmo> list, CommandBuffer cb) { }
public void Render_UnityGizmos(Camera camera, GizmosList<TextGizmo> list) public void PostRender(Camera camera, GizmosList<TextGizmo> list)
{
if (camera == null) { return; }
if (Event.current.type != EventType.Repaint) { return; }
Color dfColor = GUI.color;
InitStatic();
bool isSceneView = false;
var backgroundMaterial = DebugXAssets.Materials.TextBackground;
#if UNITY_EDITOR
//TODO костыльный вариант, нужно поискать более надежный способ определить рендер SceneView
isSceneView = camera.name == "SceneCamera";
#endif
if (isSceneView)
{ {
#if UNITY_EDITOR #if UNITY_EDITOR
if (Event.current.type != EventType.Repaint) { return; }
//bool c = camera.name == "SceneCamera";
bool ccc = camera == Camera.main;
//bool x = camera == Camera.main;
bool x = true;
if (camera == null) { return; }
InitStatic();
var zoom = GetCameraZoom(camera);
Handles.BeginGUI(); Handles.BeginGUI();
#endif
}
else
{
GL.PushMatrix();
GL.LoadPixelMatrix(0, Screen.width, Screen.height, 0);
}
foreach (ref readonly var item in list) foreach (ref readonly var item in list)
{ {
_labelDummy.text = item.Value.Text; _labelDummy.text = item.Value.Text;
GUIStyle style = _labelStyle; GUIStyle style = _labelStyle;
style.fontSize = item.Value.IsWorldSpaceScale var zoom = GetCameraZoom(camera, item.Value.Position);
? Mathf.FloorToInt(item.Value.Settings.FontSize / zoom)
: item.Value.Settings.FontSize; style.fontSize = Mathf.FloorToInt(Mathf.Lerp(item.Value.Settings.FontSize, item.Value.Settings.FontSize / zoom, item.Value.Settings.WorldSpaceScaleFactor));
style.alignment = item.Value.Settings.TextAnchor; style.alignment = item.Value.Settings.TextAnchor;
if (!(WorldToGUIPointWithDepth(camera, item.Value.Position).z < 0f)) if (!(WorldToGUIPointWithDepth(camera, item.Value.Position).z < 0f))
{ {
Rect rect = WorldPointToSizedRect(camera, item.Value.Position, _labelDummy, _labelStyle); Rect rect = WorldPointToSizedRect(camera, item.Value.Position, _labelDummy, _labelStyle);
//if (x) Debug.Log(rect); Color backgroundColor = item.Value.Settings.BackgroundColor * GlobalColor;
Graphics.DrawTexture(rect, _whiteTexture, new Rect(0, 0, 1, 1), 0, 0, 0, 0, backgroundColor, backgroundMaterial, -1);
////GUI.DrawTexture(rect, EditorGUIUtility.whiteTexture);
//Rect screenRect = default;
//Rect originRect = default;
//CalculateScaledTextureRects(rect, ScaleMode.StretchToFill, ref screenRect, ref originRect);
GL.PushMatrix();
GL.LoadPixelMatrix(0, Screen.width, Screen.height, 0);
//Graphics.DrawTexture(screenRect, EditorGUIUtility.whiteTexture, screenRect, 0, 0, 0, 0);
Color c = item.Value.Settings.BackgroundColor * GlobalColor;
GUI.color = c;
GUI.DrawTexture(rect, EditorGUIUtility.whiteTexture);
//Graphics.DrawTexture(screenRect, EditorGUIUtility.whiteTexture, screenRect, 0, 0, 0, 0);
//Graphics.DrawTexture(screenRect, EditorGUIUtility.whiteTexture, screenRect, 0, 0, 0, 0);
GUI.color = item.Color * GlobalColor; GUI.color = item.Color * GlobalColor;
style.Draw(rect, _labelDummy, false, false, false, false); style.Draw(rect, _labelDummy, false, false, false, false);
}
}
GUI.color = dfColor;
backgroundMaterial.SetColor(ColorPropertyID, Color.white);
GL.PopMatrix(); if (isSceneView)
} {
} #if UNITY_EDITOR
Handles.EndGUI(); Handles.EndGUI();
#endif #endif
} }
else
{
GL.PopMatrix();
}
}
#region Init
private void InitStatic()
{
if (_labelStyle == null || _labelDummy == null || _whiteTexture == null)
{
GUIStyleState GenerateGUIStyleState()
{
var result = new GUIStyleState();
result.textColor = Color.white;
result.background = null;
return result;
}
GUISkin skin = (GUISkin)typeof(GUI).GetField("s_Skin", System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Static).GetValue(null); //GUI.s_Skin
//GUISkin skin = GUI.skin;
_labelStyle = new GUIStyle(skin.label)
{
richText = false,
padding = new RectOffset(1, 1, 0, 0),
margin = new RectOffset(0, 0, 0, 0),
normal = GenerateGUIStyleState(),
active = GenerateGUIStyleState(),
hover = GenerateGUIStyleState(),
focused = GenerateGUIStyleState(),
};
_labelDummy = new GUIContent();
_whiteTexture = new Texture2D(2, 2);
Color32[] color = new Color32[]
{
Color.white,
Color.white,
Color.white,
Color.white,
};
_whiteTexture.SetPixels32(color);
_whiteTexture.Apply();
}
}
#endregion
#region Utils #region Utils
public static Vector3 WorldToGUIPointWithDepth(Camera camera, Vector3 world) public static Vector3 WorldToGUIPointWithDepth(Camera camera, Vector3 world)
{ {
#if UNITY_EDITOR #if UNITY_EDITOR
world = Handles.matrix.MultiplyPoint(world); world = Handles.matrix.MultiplyPoint(world);
#endif
Vector3 vector = camera.WorldToScreenPoint(world); Vector3 vector = camera.WorldToScreenPoint(world);
vector.y = camera.pixelHeight - vector.y; vector.y = camera.pixelHeight - vector.y;
Vector2 vector2 = EditorGUIUtility.PixelsToPoints(vector); Vector2 vector2 = (Vector2)(vector);
return new Vector3(vector2.x, vector2.y, vector.z); #if UNITY_EDITOR
vector2 = EditorGUIUtility.PixelsToPoints(vector);
#endif #endif
return new Vector3(vector2.x, vector2.y, vector.z);
} }
public static Rect WorldPointToSizedRect(Camera camera, Vector3 position, GUIContent content, GUIStyle style) public static Rect WorldPointToSizedRect(Camera camera, Vector3 position, GUIContent content, GUIStyle style)
{ {
#if UNITY_EDITOR
Vector2 vector = (Vector2)WorldToGUIPointWithDepth(camera, position); Vector2 vector = (Vector2)WorldToGUIPointWithDepth(camera, position);
Vector2 vector2 = style.CalcSize(content); Vector2 vector2 = style.CalcSize(content);
Rect rect = new Rect(vector.x, vector.y, vector2.x, vector2.y); Rect rect = new Rect(vector.x, vector.y, vector2.x, vector2.y);
@ -152,88 +192,27 @@ namespace DCFApixels
rect.y -= rect.height; rect.y -= rect.height;
break; break;
} }
return style.padding.Add(rect); return style.padding.Add(rect);
#endif
} }
//internal static bool CalculateScaledTextureRects(Rect position, ScaleMode scaleMode, float imageAspect, ref Rect outScreenRect, ref Rect outSourceRect) private static float GetCameraZoom(Camera camera, Vector3 position)
internal static bool CalculateScaledTextureRects(Rect position, ScaleMode scaleMode, ref Rect outScreenRect, ref Rect outSourceRect)
{ {
const float imageAspect = 1; position = Handles.matrix.MultiplyPoint(position);
Transform transform = camera.transform;
Vector3 position2 = transform.position;
float z = Vector3.Dot(position - position2, transform.TransformDirection(new Vector3(0f, 0f, 1f)));
Vector3 vector = camera.WorldToScreenPoint(position2 + transform.TransformDirection(new Vector3(0f, 0f, z)));
Vector3 vector2 = camera.WorldToScreenPoint(position2 + transform.TransformDirection(new Vector3(1f, 0f, z)));
float magnitude = (vector - vector2).magnitude;
return 80f / Mathf.Max(magnitude, 0.0001f) * EditorGUIUtility.pixelsPerPoint;
float num = position.width / position.height; //const float DEFAULT_ZOOM = 1f;
bool result = false; //
switch (scaleMode) //if (camera != null)
{ //{
case ScaleMode.StretchToFill: // return camera.orthographicSize;
outScreenRect = position; //}
outSourceRect = new Rect(0f, 0f, 1f, 1f); //return DEFAULT_ZOOM;
result = true;
break;
case ScaleMode.ScaleAndCrop:
if (num > imageAspect)
{
float num4 = imageAspect / num;
outScreenRect = position;
outSourceRect = new Rect(0f, (1f - num4) * 0.5f, 1f, num4);
result = true;
}
else
{
float num5 = num / imageAspect;
outScreenRect = position;
outSourceRect = new Rect(0.5f - num5 * 0.5f, 0f, num5, 1f);
result = true;
}
break;
case ScaleMode.ScaleToFit:
if (num > imageAspect)
{
float num2 = imageAspect / num;
outScreenRect = new Rect(position.xMin + position.width * (1f - num2) * 0.5f, position.yMin, num2 * position.width, position.height);
outSourceRect = new Rect(0f, 0f, 1f, 1f);
result = true;
}
else
{
float num3 = num / imageAspect;
outScreenRect = new Rect(position.xMin, position.yMin + position.height * (1f - num3) * 0.5f, position.width, num3 * position.height);
outSourceRect = new Rect(0f, 0f, 1f, 1f);
result = true;
}
break;
}
return result;
}
#endregion
private void InitStatic()
{
if (_labelStyle == null || _labelDummy == null)
{
_labelStyle = new GUIStyle(GUI.skin.label)
{
richText = false,
padding = new RectOffset(0, 0, 0, 0),
margin = new RectOffset(0, 0, 0, 0)
};
_labelDummy = new GUIContent();
}
}
private static float GetCameraZoom(Camera camera)
{
const float DEFAULT_ZOOM = 1f;
if (camera != null)
{
return camera.orthographicSize;
}
return DEFAULT_ZOOM;
//var currentDrawingSceneView = SceneView.currentDrawingSceneView; //var currentDrawingSceneView = SceneView.currentDrawingSceneView;
// //
@ -251,6 +230,7 @@ namespace DCFApixels
// //
//return DEFAULT_ZOOM; //return DEFAULT_ZOOM;
} }
#endregion
} }
#endregion #endregion
} }

View File

@ -7,6 +7,7 @@ namespace DCFApixels.DebugXCore.Internal
internal interface ICommandBufferExecutor internal interface ICommandBufferExecutor
{ {
void Execute(CommandBuffer cb); void Execute(CommandBuffer cb);
void Submit();
} }
internal class CommandBufferExecutorSRP : ICommandBufferExecutor internal class CommandBufferExecutorSRP : ICommandBufferExecutor
{ {
@ -24,6 +25,10 @@ namespace DCFApixels.DebugXCore.Internal
{ {
RenderContext.ExecuteCommandBuffer(cb); RenderContext.ExecuteCommandBuffer(cb);
} }
public void Submit()
{
RenderContext.Submit();
}
} }
internal class CommandBufferExecutorBRP : ICommandBufferExecutor internal class CommandBufferExecutorBRP : ICommandBufferExecutor
{ {
@ -39,5 +44,6 @@ namespace DCFApixels.DebugXCore.Internal
{ {
Graphics.ExecuteCommandBuffer(cb); Graphics.ExecuteCommandBuffer(cb);
} }
public void Submit() { }
} }
} }

View File

@ -0,0 +1,135 @@
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!21 &2100000
Material:
serializedVersion: 8
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_Name: TextBackground
m_Shader: {fileID: 4800000, guid: 1af3913ae49e790418a8d901f8982caf, type: 3}
m_Parent: {fileID: 0}
m_ModifiedSerializedProperties: 0
m_ValidKeywords: []
m_InvalidKeywords: []
m_LightmapFlags: 4
m_EnableInstancingVariants: 0
m_DoubleSidedGI: 0
m_CustomRenderQueue: -1
stringTagMap: {}
disabledShaderPasses:
- MOTIONVECTORS
m_LockedProperties:
m_SavedProperties:
serializedVersion: 3
m_TexEnvs:
- _BaseMap:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _BumpMap:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _DetailAlbedoMap:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _DetailMask:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _DetailNormalMap:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _EmissionMap:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _MainTex:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _MetallicGlossMap:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _OcclusionMap:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _ParallaxMap:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- _SpecGlossMap:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- unity_Lightmaps:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- unity_LightmapsInd:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
- unity_ShadowMasks:
m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0}
m_Ints: []
m_Floats:
- _AddPrecomputedVelocity: 0
- _AlphaClip: 0
- _AlphaToMask: 0
- _Blend: 0
- _BlendModePreserveSpecular: 1
- _BumpScale: 1
- _ClearCoatMask: 0
- _ClearCoatSmoothness: 0
- _Cull: 2
- _Cutoff: 0.5
- _DetailAlbedoMapScale: 1
- _DetailNormalMapScale: 1
- _DstBlend: 0
- _DstBlendAlpha: 0
- _EnvironmentReflections: 1
- _GlossMapScale: 0
- _Glossiness: 0
- _GlossyReflections: 0
- _Metallic: 0
- _OcclusionStrength: 1
- _Parallax: 0.005
- _QueueOffset: 0
- _ReceiveShadows: 1
- _Smoothness: 0.5
- _SmoothnessTextureChannel: 0
- _SpecularHighlights: 1
- _SrcBlend: 1
- _SrcBlendAlpha: 1
- _Surface: 0
- _WorkflowMode: 1
- _ZWrite: 1
m_Colors:
- _BaseColor: {r: 1, g: 1, b: 1, a: 1}
- _Color: {r: 1, g: 1, b: 1, a: 1}
- _EmissionColor: {r: 0, g: 0, b: 0, a: 1}
- _SpecColor: {r: 0.19999996, g: 0.19999996, b: 0.19999996, a: 1}
m_BuildTextureStacks: []
m_AllowLocking: 1
--- !u!114 &1974214919826471110
MonoBehaviour:
m_ObjectHideFlags: 11
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 0}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: d0353a89b1f911e48b9e16bdc9f2e058, type: 3}
m_Name:
m_EditorClassIdentifier:
version: 9

View File

@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: 75409b93d220f694aa75eee6f4bfd840
NativeFormatImporter:
externalObjects: {}
mainObjectFileID: 2100000
userData:
assetBundleName:
assetBundleVariant:

View File

@ -86,6 +86,92 @@ MeshRenderer:
m_SortingLayer: 0 m_SortingLayer: 0
m_SortingOrder: 0 m_SortingOrder: 0
m_AdditionalVertexStreams: {fileID: 0} m_AdditionalVertexStreams: {fileID: 0}
--- !u!1 &549390746132496352
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 7483746332942052062}
- component: {fileID: 6763744428275037148}
- component: {fileID: 387838602774759695}
m_Layer: 0
m_Name: TextBackground
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!4 &7483746332942052062
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 549390746132496352}
serializedVersion: 2
m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
m_LocalPosition: {x: 12.5, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0
m_Children: []
m_Father: {fileID: 2844384060761577604}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!33 &6763744428275037148
MeshFilter:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 549390746132496352}
m_Mesh: {fileID: 4300000, guid: 873de0939b7f76947a258a8897199a8e, type: 2}
--- !u!23 &387838602774759695
MeshRenderer:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 549390746132496352}
m_Enabled: 1
m_CastShadows: 1
m_ReceiveShadows: 1
m_DynamicOccludee: 1
m_StaticShadowCaster: 0
m_MotionVectors: 1
m_LightProbeUsage: 1
m_ReflectionProbeUsage: 1
m_RayTracingMode: 2
m_RayTraceProcedural: 0
m_RayTracingAccelStructBuildFlagsOverride: 0
m_RayTracingAccelStructBuildFlags: 1
m_SmallMeshCulling: 1
m_RenderingLayerMask: 1
m_RendererPriority: 0
m_Materials:
- {fileID: 2100000, guid: 75409b93d220f694aa75eee6f4bfd840, type: 2}
m_StaticBatchInfo:
firstSubMesh: 0
subMeshCount: 0
m_StaticBatchRoot: {fileID: 0}
m_ProbeAnchor: {fileID: 0}
m_LightProbeVolumeOverride: {fileID: 0}
m_ScaleInLightmap: 1
m_ReceiveGI: 1
m_PreserveUVs: 0
m_IgnoreNormalsForChartDetection: 0
m_ImportantGI: 0
m_StitchLightmapSeams: 1
m_SelectedEditorRenderState: 3
m_MinimumChartSize: 4
m_AutoUVMaxDistance: 0.5
m_AutoUVMaxAngle: 89
m_LightmapParameters: {fileID: 0}
m_SortingLayerID: 0
m_SortingLayer: 0
m_SortingOrder: 0
m_AdditionalVertexStreams: {fileID: 0}
--- !u!1 &1299980064020930364 --- !u!1 &1299980064020930364
GameObject: GameObject:
m_ObjectHideFlags: 0 m_ObjectHideFlags: 0
@ -292,6 +378,7 @@ Transform:
- {fileID: 2770005348449356163} - {fileID: 2770005348449356163}
- {fileID: 5119875421667202613} - {fileID: 5119875421667202613}
- {fileID: 1046323005297189095} - {fileID: 1046323005297189095}
- {fileID: 7483746332942052062}
m_Father: {fileID: 0} m_Father: {fileID: 0}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!1 &6563773915565914195 --- !u!1 &6563773915565914195

View File

@ -0,0 +1,49 @@
Shader "DCFApixels/DebugX/TextBackground"
{
SubShader
{
Tags { "Queue"="Transparent" "IgnoreProjector"="True" "RenderType"="Transparent" "PreviewType"="Plane" }
Blend SrcAlpha OneMinusSrcAlpha
ZWrite Off Fog { Mode Off }
Lighting Off
ZTest Off
Pass
{
CGPROGRAM
#pragma vertex vert
#pragma fragment frag
#pragma multi_compile_instancing
#include "UnityCG.cginc"
struct appdata_t
{
float4 vertex : POSITION;
float4 color : COLOR;
};
struct v2f
{
float4 vertex : SV_POSITION;
float4 color : COLOR;
};
float4 _DebugX_GlobalColor;
v2f vert (appdata_t v)
{
v2f o;
o.vertex = UnityObjectToClipPos(v.vertex);
o.color = v.color * _DebugX_GlobalColor;
return o;
}
float4 frag (v2f i) : SV_Target
{
return i.color;
}
ENDCG
}
}
}

View File

@ -0,0 +1,9 @@
fileFormatVersion: 2
guid: 1af3913ae49e790418a8d901f8982caf
ShaderImporter:
externalObjects: {}
defaultTextures: []
nonModifiableTextures: []
userData:
assetBundleName:
assetBundleVariant:

View File

@ -47,6 +47,8 @@ namespace DCFApixels.DebugXCore
public readonly Material Billboard; public readonly Material Billboard;
public readonly Material Dot; public readonly Material Dot;
public readonly Material Wire; public readonly Material Wire;
internal readonly Material TextBackground;
} }
} }
} }

View File

@ -2,40 +2,44 @@
namespace DCFApixels namespace DCFApixels
{ {
public struct DebugXTextSettings public readonly struct DebugXTextSettings
{ {
public const TextAnchor DEFAULT_TEXT_ANCHOR = TextAnchor.MiddleLeft; public const TextAnchor DEFAULT_TEXT_ANCHOR = TextAnchor.MiddleLeft;
public const int DEFAULT_FONT_SIZE = 16; public const int DEFAULT_FONT_SIZE = 16;
public static readonly DebugXTextSettings Default = new DebugXTextSettings(DEFAULT_FONT_SIZE, DEFAULT_TEXT_ANCHOR, default); public static readonly DebugXTextSettings Default = new DebugXTextSettings(DEFAULT_FONT_SIZE, DEFAULT_TEXT_ANCHOR, default, 0);
public static readonly DebugXTextSettings WorldSpaceScale = Default.SetWorldSpaceScaleFactor(1f);
public int FontSize; public readonly int FontSize;
public TextAnchor TextAnchor; public readonly TextAnchor TextAnchor;
public Color BackgroundColor; public readonly Color BackgroundColor;
public readonly float WorldSpaceScaleFactor;
public bool IsHasBackground public bool IsHasBackground
{ {
get { return BackgroundColor.a > 0; } get { return BackgroundColor.a > 0; }
} }
public DebugXTextSettings(int fontSize, TextAnchor textAnchor, Color backgroundColor) public DebugXTextSettings(int fontSize, TextAnchor textAnchor, Color backgroundColor, float worldSpaceScaleFactor)
{ {
FontSize = fontSize; FontSize = fontSize;
TextAnchor = textAnchor; TextAnchor = textAnchor;
BackgroundColor = backgroundColor; BackgroundColor = backgroundColor;
WorldSpaceScaleFactor = worldSpaceScaleFactor;
} }
public DebugXTextSettings SetSize(int fontSize) public DebugXTextSettings SetSize(int fontSize)
{ {
FontSize = fontSize; return new DebugXTextSettings(fontSize, TextAnchor, BackgroundColor, WorldSpaceScaleFactor);
return this;
} }
public DebugXTextSettings SetAnchor(TextAnchor textAnchor) public DebugXTextSettings SetAnchor(TextAnchor textAnchor)
{ {
TextAnchor = textAnchor; return new DebugXTextSettings(FontSize, textAnchor, BackgroundColor, WorldSpaceScaleFactor);
return this;
} }
public DebugXTextSettings SetBackground(Color backgroundColor) public DebugXTextSettings SetBackground(Color backgroundColor)
{ {
BackgroundColor = backgroundColor; return new DebugXTextSettings(FontSize, TextAnchor, backgroundColor, WorldSpaceScaleFactor);
return this; }
public DebugXTextSettings SetWorldSpaceScaleFactor(float factor)
{
return new DebugXTextSettings(FontSize, TextAnchor, BackgroundColor, factor);
} }
} }
} }

View File

@ -17,9 +17,9 @@ namespace DCFApixels.DebugXCore
void Prepare(Camera camera, GizmosList<T> list); void Prepare(Camera camera, GizmosList<T> list);
void Render(Camera camera, GizmosList<T> list, CommandBuffer cb); void Render(Camera camera, GizmosList<T> list, CommandBuffer cb);
} }
public interface IGizmoRenderer_UnityGizmos<T> : IGizmoRenderer<T> where T : IGizmo<T> public interface IGizmoRenderer_PostRender<T> : IGizmoRenderer<T> where T : IGizmo<T>
{ {
void Render_UnityGizmos(Camera camera, GizmosList<T> list); void PostRender(Camera camera, GizmosList<T> list);
} }

View File

@ -54,6 +54,6 @@ Material:
- _QueueControl: 0 - _QueueControl: 0
- _QueueOffset: 0 - _QueueOffset: 0
m_Colors: m_Colors:
- _Color: {r: 0, g: 0.071999975, b: 0.09, a: 1} - _Color: {r: 0, g: 0.08608696, b: 0.11, a: 1}
m_BuildTextureStacks: [] m_BuildTextureStacks: []
m_AllowLocking: 1 m_AllowLocking: 1

View File

@ -135,14 +135,14 @@ Material:
- _GlossinessSource: 0 - _GlossinessSource: 0
- _GlossyReflections: 1 - _GlossyReflections: 1
- _LightingEnabled: 1 - _LightingEnabled: 1
- _Metallic: 0 - _Metallic: 0.046
- _Mode: 0 - _Mode: 0
- _OcclusionStrength: 1 - _OcclusionStrength: 1
- _Parallax: 0.02 - _Parallax: 0.02
- _QueueOffset: 0 - _QueueOffset: 0
- _ReceiveShadows: 0 - _ReceiveShadows: 0
- _Shininess: 0 - _Shininess: 0
- _Smoothness: 0 - _Smoothness: 0.047
- _SmoothnessSource: 0 - _SmoothnessSource: 0
- _SmoothnessTextureChannel: 0 - _SmoothnessTextureChannel: 0
- _SoftParticlesEnabled: 0 - _SoftParticlesEnabled: 0

View File

@ -1229,7 +1229,7 @@ Camera:
m_ShutterSpeed: 0.005 m_ShutterSpeed: 0.005
m_Aperture: 16 m_Aperture: 16
m_FocusDistance: 10 m_FocusDistance: 10
m_FocalLength: 50 m_FocalLength: 20.78461
m_BladeCount: 5 m_BladeCount: 5
m_Curvature: {x: 2, y: 11} m_Curvature: {x: 2, y: 11}
m_BarrelClipping: 0.25 m_BarrelClipping: 0.25
@ -1244,7 +1244,7 @@ Camera:
height: 1 height: 1
near clip plane: 0.3 near clip plane: 0.3
far clip plane: 1000 far clip plane: 1000
field of view: 60 field of view: 60.000004
orthographic: 0 orthographic: 0
orthographic size: 5 orthographic size: 5
m_Depth: -1 m_Depth: -1
@ -1277,7 +1277,7 @@ Transform:
m_Children: m_Children:
- {fileID: 1800693605} - {fileID: 1800693605}
m_Father: {fileID: 0} m_Father: {fileID: 0}
m_LocalEulerAnglesHint: {x: 60, y: 0, z: 0} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!114 &298618463 --- !u!114 &298618463
MonoBehaviour: MonoBehaviour:
m_ObjectHideFlags: 0 m_ObjectHideFlags: 0
@ -4135,7 +4135,7 @@ GameObject:
m_Component: m_Component:
- component: {fileID: 1482731616} - component: {fileID: 1482731616}
m_Layer: 0 m_Layer: 0
m_Name: Hello World Hello World Hello World m_Name: Hello World
m_TagString: Untagged m_TagString: Untagged
m_Icon: {fileID: 0} m_Icon: {fileID: 0}
m_NavMeshLayer: 0 m_NavMeshLayer: 0

View File

@ -8,7 +8,6 @@ namespace DCFApixels.DebugXCore.Samples
public Gradient Gradient; public Gradient Gradient;
public float GradientMultiplier = 5; public float GradientMultiplier = 5;
public Transform[] Points; public Transform[] Points;
private static readonly Color _background = new Color(0, 0, 0, 0.5f);
#if UNITY_EDITOR #if UNITY_EDITOR
private void OnDrawGizmos() private void OnDrawGizmos()
@ -29,7 +28,9 @@ namespace DCFApixels.DebugXCore.Samples
i++; DebugX.Draw(GetColor(Points[i])).Cross(Points[i].position, Points[i].localScale.x); i++; DebugX.Draw(GetColor(Points[i])).Cross(Points[i].position, Points[i].localScale.x);
i++; DebugX.Draw(GetColor(Points[i])).BillboardCircle(Points[i].position, Points[i].localScale.x * RADIUS_M); i++; DebugX.Draw(GetColor(Points[i])).BillboardCircle(Points[i].position, Points[i].localScale.x * RADIUS_M);
i++; DebugX.Draw(GetColor(Points[i])).WireMesh<SphereMesh>(Points[i].position, Points[i].rotation, Points[i].localScale * RADIUS_M); i++; DebugX.Draw(GetColor(Points[i])).WireMesh<SphereMesh>(Points[i].position, Points[i].rotation, Points[i].localScale * RADIUS_M);
i++; DebugX.Draw(GetColor(Points[i])).Text(Points[i].position, Points[i].name, DebugXTextSettings.Default.SetBackground(Color.black)); Color backgroundColor = Color.white - GetColor(Points[i]);
backgroundColor.a = 0.5f;
i++; DebugX.Draw(GetColor(Points[i])).Text(Points[i].position, Points[i].name, DebugXTextSettings.WorldSpaceScale.SetSize(26).SetBackground(backgroundColor));
i++; DebugX.Draw(GetColor(Points[i])).Dot(Points[i].position); i++; DebugX.Draw(GetColor(Points[i])).Dot(Points[i].position);
i++; DebugX.Draw(GetColor(Points[i])).WireDot(Points[i].position); i++; DebugX.Draw(GetColor(Points[i])).WireDot(Points[i].position);