Pārlūkot izejas kodu

implemented overrideInternal for Metal

The internal pointer is interpreted as being of type id<MTLTexture>.
Oliver Collyer 6 gadi atpakaļ
vecāks
revīzija
7b7dca065b
2 mainītis faili ar 13 papildinājumiem un 4 dzēšanām
  1. 11 1
      src/renderer_mtl.h
  2. 2 3
      src/renderer_mtl.mm

+ 11 - 1
src/renderer_mtl.h

@@ -968,7 +968,10 @@ namespace bgfx { namespace mtl
 
 		void destroy()
 		{
-			MTL_RELEASE(m_ptr);
+			if (0 == (m_flags & BGFX_SAMPLER_INTERNAL_SHARED))
+			{
+				MTL_RELEASE(m_ptr);
+			}
 			MTL_RELEASE(m_ptrStencil);
 			for (uint32_t ii = 0; ii < m_numMips; ++ii)
 			{
@@ -976,6 +979,13 @@ namespace bgfx { namespace mtl
 			}
 		}
 
+		void overrideInternal(uintptr_t _ptr)
+		{
+			destroy();
+			m_flags |= BGFX_SAMPLER_INTERNAL_SHARED;
+			m_ptr = id<MTLTexture>(_ptr);
+		}
+
 		void update(
 			  uint8_t _side
 			, uint8_t _mip

+ 2 - 3
src/renderer_mtl.mm

@@ -894,13 +894,12 @@ namespace bgfx { namespace mtl
 
 		void overrideInternal(TextureHandle _handle, uintptr_t _ptr) override
 		{
-			BX_UNUSED(_handle, _ptr);
+			m_textures[_handle.idx].overrideInternal(_ptr);
 		}
 
 		uintptr_t getInternal(TextureHandle _handle) override
 		{
-			BX_UNUSED(_handle);
-			return 0;
+			return uintptr_t(id<MTLTexture>(m_textures[_handle.idx].m_ptr));
 		}
 
 		void destroyTexture(TextureHandle _handle) override