Skip to content

Commit e4dae96

Browse files
committed
Reference count Impl classes instead of strict ownership.
1 parent 79b6285 commit e4dae96

24 files changed

+89
-25
lines changed

Reinterop~/MethodsImplementedInCpp.cs

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,9 @@ public static void Generate(CppGenerationContext context, TypeToGenerate item, G
3333
#endif
3434
void* {{createName}}(void* handle) {
3535
const {{wrapperType.GetFullyQualifiedName()}} wrapper{{{objectHandleType.GetFullyQualifiedName()}}(handle)};
36-
return reinterpret_cast<void*>(new {{implType.GetFullyQualifiedName()}}(wrapper));
36+
auto pImpl = new {{implType.GetFullyQualifiedName()}}(wrapper);
37+
pImpl->addReference();
38+
return reinterpret_cast<void*>(pImpl);
3739
}
3840
""",
3941
TypeDefinitionsReferenced: new[]
@@ -68,7 +70,7 @@ private void CreateImplementation()
6870
#endif
6971
void {{destroyName}}(void* pImpl) {
7072
auto pImplTyped = reinterpret_cast<{{implType.GetFullyQualifiedName()}}*>(pImpl);
71-
delete pImplTyped;
73+
if (pImplTyped) pImplTyped->releaseReference();
7274
}
7375
""",
7476
TypeDefinitionsReferenced: new[]

native~/Editor/src/CesiumEditorWindowImpl.h

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
#pragma once
22

3+
#include <CesiumUtility/ReferenceCounted.h>
4+
35
#include <DotNet/CesiumForUnity/Cesium3DTileset.h>
46
#include <DotNet/System/String.h>
57
#include <DotNet/UnityEngine/GameObject.h>
@@ -13,7 +15,8 @@ class CesiumEditorWindow;
1315

1416
namespace CesiumForUnityNative {
1517

16-
class CesiumEditorWindowImpl {
18+
class CesiumEditorWindowImpl
19+
: public CesiumUtility::ReferenceCountedThreadSafe<CesiumEditorWindowImpl> {
1720

1821
public:
1922
CesiumEditorWindowImpl(

native~/Editor/src/CesiumIonSessionImpl.h

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
#include <CesiumIonClient/Defaults.h>
99
#include <CesiumIonClient/Profile.h>
1010
#include <CesiumIonClient/Token.h>
11+
#include <CesiumUtility/ReferenceCounted.h>
1112

1213
#include <DotNet/System/Collections/Generic/List1.h>
1314
#include <DotNet/System/String.h>
@@ -33,7 +34,8 @@ class Token;
3334
} // namespace CesiumIonClient
3435

3536
namespace CesiumForUnityNative {
36-
class CesiumIonSessionImpl {
37+
class CesiumIonSessionImpl
38+
: public CesiumUtility::ReferenceCountedThreadSafe<CesiumIonSessionImpl> {
3739
public:
3840
CesiumIonSessionImpl(const DotNet::CesiumForUnity::CesiumIonSession& session);
3941
~CesiumIonSessionImpl();

native~/Editor/src/IonAssetsTreeViewImpl.h

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
#pragma once
22

33
#include <CesiumIonClient/Assets.h>
4+
#include <CesiumUtility/ReferenceCounted.h>
45

56
#include <DotNet/CesiumForUnity/IonAssetsColumn.h>
67
#include <DotNet/System/String.h>
@@ -15,7 +16,8 @@ class IonAssetsTreeView;
1516

1617
namespace CesiumForUnityNative {
1718

18-
class IonAssetsTreeViewImpl {
19+
class IonAssetsTreeViewImpl
20+
: public CesiumUtility::ReferenceCountedThreadSafe<IonAssetsTreeViewImpl> {
1921
public:
2022
IonAssetsTreeViewImpl(
2123
const DotNet::CesiumForUnity::IonAssetsTreeView& treeView);

native~/Editor/src/SelectIonTokenWindowImpl.h

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
#include <CesiumAsync/AsyncSystem.h>
44
#include <CesiumIonClient/Token.h>
5+
#include <CesiumUtility/ReferenceCounted.h>
56

67
#include <DotNet/CesiumForUnity/IonTokenSource.h>
78
#include <DotNet/System/String.h>
@@ -17,7 +18,9 @@ class CesiumIonServer;
1718

1819
namespace CesiumForUnityNative {
1920

20-
class SelectIonTokenWindowImpl {
21+
class SelectIonTokenWindowImpl
22+
: public CesiumUtility::ReferenceCountedThreadSafe<
23+
SelectIonTokenWindowImpl> {
2124

2225
public:
2326
static CesiumAsync::SharedFuture<std::optional<CesiumIonClient::Token>>

native~/Runtime/src/Cesium3DTilesetImpl.h

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
#pragma once
22

33
#include <Cesium3DTilesSelection/ViewUpdateResult.h>
4+
#include <CesiumUtility/ReferenceCounted.h>
45

56
#include <DotNet/CesiumForUnity/CesiumCreditSystem.h>
67
#include <DotNet/CesiumForUnity/CesiumGeoreference.h>
@@ -25,7 +26,8 @@ class Tileset;
2526

2627
namespace CesiumForUnityNative {
2728

28-
class Cesium3DTilesetImpl {
29+
class Cesium3DTilesetImpl
30+
: public CesiumUtility::ReferenceCountedThreadSafe<Cesium3DTilesetImpl> {
2931
public:
3032
Cesium3DTilesetImpl(const DotNet::CesiumForUnity::Cesium3DTileset& tileset);
3133
~Cesium3DTilesetImpl();

native~/Runtime/src/CesiumBingMapsRasterOverlayImpl.h

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
#pragma once
22

33
#include <CesiumUtility/IntrusivePointer.h>
4+
#include <CesiumUtility/ReferenceCounted.h>
45

56
namespace DotNet::CesiumForUnity {
67
class Cesium3DTileset;
@@ -13,7 +14,9 @@ class BingMapsRasterOverlay;
1314

1415
namespace CesiumForUnityNative {
1516

16-
class CesiumBingMapsRasterOverlayImpl {
17+
class CesiumBingMapsRasterOverlayImpl
18+
: public CesiumUtility::ReferenceCountedThreadSafe<
19+
CesiumBingMapsRasterOverlayImpl> {
1720
public:
1821
CesiumBingMapsRasterOverlayImpl(
1922
const DotNet::CesiumForUnity::CesiumBingMapsRasterOverlay& overlay);

native~/Runtime/src/CesiumCreditSystemImpl.h

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
#pragma once
22

33
#include <CesiumUtility/CreditSystem.h>
4+
#include <CesiumUtility/ReferenceCounted.h>
45

56
#include <DotNet/CesiumForUnity/CesiumCredit.h>
67
#include <DotNet/System/Collections/Generic/List1.h>
@@ -21,7 +22,8 @@ struct Credit;
2122

2223
namespace CesiumForUnityNative {
2324

24-
class CesiumCreditSystemImpl {
25+
class CesiumCreditSystemImpl
26+
: public CesiumUtility::ReferenceCountedThreadSafe<CesiumCreditSystemImpl> {
2527
public:
2628
CesiumCreditSystemImpl(
2729
const DotNet::CesiumForUnity::CesiumCreditSystem& creditSystem);

native~/Runtime/src/CesiumDebugColorizeTilesRasterOverlayImpl.h

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
#pragma once
22

33
#include <CesiumUtility/IntrusivePointer.h>
4+
#include <CesiumUtility/ReferenceCounted.h>
45

56
namespace DotNet::CesiumForUnity {
67
class Cesium3DTileset;
@@ -13,7 +14,9 @@ class DebugColorizeTilesRasterOverlay;
1314

1415
namespace CesiumForUnityNative {
1516

16-
class CesiumDebugColorizeTilesRasterOverlayImpl {
17+
class CesiumDebugColorizeTilesRasterOverlayImpl
18+
: public CesiumUtility::ReferenceCountedThreadSafe<
19+
CesiumDebugColorizeTilesRasterOverlayImpl> {
1720
public:
1821
CesiumDebugColorizeTilesRasterOverlayImpl(
1922
const DotNet::CesiumForUnity::CesiumDebugColorizeTilesRasterOverlay&

native~/Runtime/src/CesiumEllipsoidImpl.h

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
#pragma once
22

33
#include <CesiumGeospatial/Ellipsoid.h>
4+
#include <CesiumUtility/ReferenceCounted.h>
45

56
#include <DotNet/Unity/Mathematics/double3.h>
67

@@ -12,7 +13,8 @@ class CesiumEllipsoid;
1213

1314
namespace CesiumForUnityNative {
1415

15-
class CesiumEllipsoidImpl {
16+
class CesiumEllipsoidImpl
17+
: public CesiumUtility::ReferenceCountedThreadSafe<CesiumEllipsoidImpl> {
1618
public:
1719
CesiumEllipsoidImpl(
1820
const DotNet::CesiumForUnity::CesiumEllipsoid& unityEllipsoid);

0 commit comments

Comments
 (0)