3 #if SILICONSTUDIO_PARADOX_GRAPHICS_API_DIRECT3D
5 using System.Runtime.InteropServices;
7 using SharpDX.Direct3D;
8 using SharpDX.Direct3D11;
11 using SiliconStudio.Core;
13 namespace SiliconStudio.
Paradox.Graphics
18 public abstract partial class GraphicsResourceBase
20 protected internal SharpDX.Direct3D11.DeviceChild _nativeDeviceChild;
22 protected internal SharpDX.Direct3D11.Resource NativeResource;
24 private void Initialize()
26 if (GraphicsDevice != null)
27 NativeDevice = GraphicsDevice.NativeDevice;
34 protected internal SharpDX.Direct3D11.DeviceChild NativeDeviceChild
38 return _nativeDeviceChild;
42 if (_nativeDeviceChild != null)
throw new ArgumentException(
string.Format(FrameworkResources.GraphicsResourceAlreadySet,
"DeviceChild"),
"value");
43 _nativeDeviceChild = value;
45 if (_nativeDeviceChild is SharpDX.Direct3D11.Resource)
46 NativeResource = (SharpDX.Direct3D11.Resource)_nativeDeviceChild;
49 SetDebugName(GraphicsDevice, _nativeDeviceChild, Name);
53 protected virtual void DestroyImpl()
55 if (_nativeDeviceChild != null)
57 ((IUnknown)_nativeDeviceChild).Release();
58 _nativeDeviceChild = null;
59 NativeResource = null;
66 internal static void SetDebugName(GraphicsDevice graphicsDevice, SharpDX.Direct3D11.DeviceChild deviceChild,
string name)
68 if (graphicsDevice.IsDebugMode && deviceChild != null)
70 IntPtr namePtr = SharpDX.Utilities.StringToHGlobalAnsi(name);
71 deviceChild.SetPrivateData(CommonGuid.DebugObjectName, name.Length, namePtr);
79 internal static void SetDebugName(GraphicsDevice graphicsDevice, DXGIObject dxgiObject,
string name)
81 if (graphicsDevice.IsDebugMode)
83 IntPtr namePtr = SharpDX.Utilities.StringToHGlobalAnsi(name);
84 dxgiObject.SetPrivateData(CommonGuid.DebugObjectName, name.Length, namePtr);
91 protected internal virtual void OnDestroyed()
100 protected internal virtual bool OnRecreate()
102 NativeDevice = GraphicsDevice.NativeDevice;
106 protected SharpDX.Direct3D11.Device NativeDevice
117 internal static SharpDX.Direct3D11.CpuAccessFlags GetCpuAccessFlagsFromUsage(
GraphicsResourceUsage usage)
121 case GraphicsResourceUsage.Dynamic:
122 return SharpDX.Direct3D11.CpuAccessFlags.Write;
123 case GraphicsResourceUsage.Staging:
124 return SharpDX.Direct3D11.CpuAccessFlags.Read;
126 return SharpDX.Direct3D11.CpuAccessFlags.None;
GraphicsResourceUsage
Identifies expected resource use during rendering. The usage directly reflects whether a resource is ...