CFx SDK Documentation 2026 SP0
Loading...
Searching...
No Matches
TrVecResourceSharingProvider.h
Go to the documentation of this file.
1
2// Copyright (C) 2002-2024, Open Design Alliance (the "Alliance").
3// All rights reserved.
4//
5// This software and its documentation and related materials are owned by
6// the Alliance. The software may only be incorporated into application
7// programs owned by members of the Alliance, subject to a signed
8// Membership Agreement and Supplemental Software License Agreement with the
9// Alliance. The structure and organization of this software are the valuable
10// trade secrets of the Alliance and its suppliers. The software is also
11// protected by copyright law and international treaty provisions. Application
12// programs incorporating this software must include the following statement
13// with their copyright notices:
14//
15// This application incorporates Open Design Alliance software pursuant to a license
16// agreement with Open Design Alliance.
17// Open Design Alliance Copyright (C) 2002-2024 by Open Design Alliance.
18// All rights reserved.
19//
20// By use of this software, its documentation or related materials, you
21// acknowledge and accept the above terms.
23// GLES2 device resource sharing provider
24
25#ifndef ODTRVECRESOURCESHARINGPROVIDER
26#define ODTRVECRESOURCESHARINGPROVIDER
27
28#include "TD_PackPush.h"
29
30#include "TrVecDefs.h"
31#include "../TrVisRendition.h"
32#include "ExDrawOrderBase.h"
33
34#include "StaticRxObject.h"
35
36class OdTrVecDevice;
38class OdTrVecVisualStyleContainer;
39class OdTrVecLayerContainer;
40class OdTrVecRefPlanesContainer;
41class OdTrVisMetafilesPool;
42class OdTrVisMtContext;
43
48 , public OdDrawOrderBaseDeviceMCCallback
49{
50 public:
51 // Processing device bit sets
53 {
54 // Max bit for current OS
55 static const OdUInt32 g_nMaxBit;
56 static const OdUInt32 g_nBitSys;
57 // Check does resource attached to device
58 static bool isAttached(const OdDrawOrderMetafileBase &bitSet, const OdTrVecDevice *pDevice);
59 // Attach resource to device
60 static void attach(OdDrawOrderMetafileBase &bitSet, const OdTrVecDevice *pDevice);
61 // Detach resource from device
62 static void detach(OdDrawOrderMetafileBase &bitSet, const OdTrVecDevice *pDevice);
63 // Eliminate device from bit set, compress bit set
64 static void eliminate(OdDrawOrderMetafileBase &bitSet, const OdTrVecDevice *pDevice);
65 static void compress(OdDrawOrderMetafileBase &bitSet, OdUInt32 nBit);
66 // Free bit set
67 static void clear(OdDrawOrderMetafileBase &bitSet);
68 };
69
70 typedef void (*broadcastProc)(OdDrawOrderBaseDevice *pDevice, void *pData);
71 protected:
73 {
74 enum Flags
75 {
76 kConnected = (1 << 0), // Device connected to sharing provider
77 kDeleted = (1 << 1) // Device physically deleted and haven't ability to reconnect
78 };
79
80 OdTrVecDevice *m_pDevice;
82
83 DeviceEntry() : m_pDevice(NULL), m_flags(0) { }
84 DeviceEntry(OdTrVecDevice *pDevice) : m_pDevice(pDevice), m_flags(0) { }
85 };
86 protected:
91 OdTrVecVisualStyleContainer *m_pVSCache;
92 OdTrVecLayerContainer *m_pLayerCache;
93 OdTrVecRefPlanesContainer *m_pRefPlanes;
94 OdTrVisMetafilesPool *m_pMetafilesPool;
95 OdTrVisMtContext *m_pMfPoolMtCtx;
97 public:
99
102
104
105 // Opens resource sharing for device
106 virtual void openResourceSharing(OdTrVecDevice *pDevice);
107 // Close resource sharing for device
108 virtual void closeResourceSharing(OdTrVecDevice *pDevice, bool bTemporaryDisconnect = false);
109 // Check does resource sharing is opened for device
110 bool isResourceSharingOpened(OdTrVecDevice *pDevice) const;
111
112 // Returns true in case if multiple devices (sharing) enabled
113 bool hasSharedResources() const { return m_nSharedDevices > 1; }
114
115 // OdDrawOrderBaseDeviceMCCallback override
116 virtual void onDeleteRequest(onDeleteRequestProc pReqProc, void *pData, void *pArg = nullptr);
117
118 // Broadcast function for all registered devices
119 void broadcastFunction(const OdDrawOrderMetafileBase &bitSet, broadcastProc pProc, void *pArg) const;
120
121 // Broadcast function for all devices
122 void broadcastFunctionForAll(broadcastProc pProc, void *pArg, const OdTrVecDevice *pExclusion = NULL) const;
123
124 // Ttf fonts cache support
125 OdTrVecTtfFontsCache *ttfFontsCache(OdTrVecDevice *pDevice);
126
127 // Visual Styles cache support
128 OdTrVecVisualStyleContainer *visualStylesCache(OdTrVecDevice *pDevice);
129
130 // Layers cache support
131 OdTrVecLayerContainer *layersCache(OdTrVecDevice *pDevice);
132
133 // Layers cache support
134 OdTrVecRefPlanesContainer *refPlanesCache(OdTrVecDevice *pDevice);
135
136 // Metafiles pool support
137 OdTrVisMetafilesPool *metafilesPool(OdTrVecDevice *pDevice);
138 void mtLockMetafilesPool(OdTrVecDevice *pDevice);
139 void mtUnlockMetafilesPool(OdTrVecDevice *pDevice);
140
141 // Server metafiles pool
142 OdRxObject *serverMetafilesPool(OdTrVecDevice *pDevice);
143 void setServerMetafilesPool(OdTrVecDevice *pDevice, OdRxObject *pMfPool);
144
145 // Find first usage device
146 OdTrVecDevice *findUsage(const OdDrawOrderMetafileBase &bitSet, OdTrVecDevice *pStartFrom = NULL) const;
147
148 // Share metafile with secondary device (base call, will be redirected to secondary override)
149 virtual bool shareMetafile(OdTrVecDevice *pRequestedFor, OdDrawOrderMetafileBase &bitSet,
150 OdTrVisMetafileId metafileId, void *pInternalDataPtr, void *pOriginatorPtr);
151
152 // Share metafiles group with secondary device (base call, will be redirected to secondary override)
153 virtual bool shareGroup(OdTrVecDevice *pRequestedFor, OdDrawOrderMetafileBase &bitSet,
154 OdTrVisGroupId groupId, void *pInternalDataPtr, void *pOriginatorPtr);
155
156 // Share texture with secondary device (base call, will be redirected to secondary override)
157 virtual bool shareTexture(OdTrVecDevice *pRequestedFor, OdDrawOrderMetafileBase &bitSet,
158 OdTrVisTextureId textureId, void *pInternalDataPtr, void *pOriginatorPtr);
159
160 // Share material with secondary device (base call, will be redirected to secondary override)
161 virtual bool shareMaterial(OdTrVecDevice *pRequestedFor, OdDrawOrderMetafileBase &bitSet,
162 OdTrVisMaterialId materialId, void *pInternalDataPtr, void *pOriginatorPtr);
163 protected:
164 // Share metafile with secondary device (should be overrided by client, do nothing by default)
165 virtual bool shareMetafile(OdTrVecDevice *pRequestedFor, OdTrVecDevice *pRequestedFrom,
166 OdTrVisMetafileId metafileId, void *pInternalDataPtr, void *pOriginatorPtr);
167 // Share metafiles group with secondary device (should be overrided by client, do nothing by default)
168 virtual bool shareGroup(OdTrVecDevice *pRequestedFor, OdTrVecDevice *pRequestedFrom,
169 OdTrVisGroupId groupId, void *pInternalDataPtr, void *pOriginatorPtr);
170 // Share texture with secondary device (should be overrided by client, do nothing by default)
171 virtual bool shareTexture(OdTrVecDevice *pRequestedFor, OdTrVecDevice *pRequestedFrom,
172 OdTrVisTextureId textureId, void *pInternalDataPtr, void *pOriginatorPtr);
173 // Share material with secondary device (should be overrided by client, do nothing by default)
174 virtual bool shareMaterial(OdTrVecDevice *pRequestedFor, OdTrVecDevice *pRequestedFrom,
175 OdTrVisMaterialId materialId, void *pInternalDataPtr, void *pOriginatorPtr);
176
177 // Low-level accessors
178
179 // Create compatible texture for device from another exist device
180 bool internalTextureProc(OdTrVecDevice *pRequestedFor, OdTrVecDevice *pRequestedFrom,
181 OdTrVisTextureId textureId, void *pInternalDataPtr, void *pOriginatorPtr,
182 OdTrVisTextureDef &resTexture, bool &bCreated);
183
184 // Initiate conversion of textures from material for device from another exist device
185 bool materialTexturesProc(OdTrVecDevice *pRequestedFor, OdTrVecDevice *pRequestedFrom,
186 OdTrVisMaterialId materialId, void *pInternalDataPtr, void *pOriginatorPtr);
187
188 // Share Id registration between devices
189 void shareIdRegistration(OdTrVecDevice *pRequestedFor, OdTrVecDevice *pRequestedFrom,
191 protected: // Helpers
192 OdTrVisRendition *rendition(OdTrVecDevice *pRequestFor) const;
193 const OdTrVisRendition::ClientSettings &clientSettings(const OdTrVecDevice *pRequestFor) const;
194 OdTrVisRenderClient *renderClient(OdTrVecDevice *pRequestFor) const;
195 OdGsDevice *gsDevice(OdTrVecDevice *pRequestFor) const;
196 public:
198 {
199 public:
209
210 virtual TypeOfResource resourceType() const = 0;
211
212 virtual OdTrVisId resourceId() const = 0;
213
214 virtual OdDrawOrderMetafileBase &resourceBitSet() = 0;
215
216 static OdRxClass *desc();
217 private:
218 typedef OdTrVisDescStub ResDepDesc;
219 static OdStaticRxObject<ResDepDesc> g_ResDepDesc;
220 };
221};
222
224
225#define OdTrVecResourceDependency_queryX(TypeOf, BaseClass) \
226 OdRxObject *queryX(const OdRxClass* pClass) const \
227 { \
228 if (pClass == OdTrVecResourceSharingProvider::ResourceDependency::desc()) \
229 return reinterpret_cast<OdRxObject*>((OdTrVecResourceSharingProvider::ResourceDependency*)this); \
230 return BaseClass::queryX(pClass); \
231 } \
232 TypeOfResource resourceType() const { return TypeOf; }
233
234#include "TD_PackPop.h"
235
236#endif // ODTRVECRESOURCESHARINGPROVIDER
int OdRefCounter
Definition OdMutex.h:478
unsigned int OdUInt32
int OdInt32
unsigned char OdUInt8
OdSmartPtr< OdTrVecResourceSharingProvider > OdTrVecResourceSharingProviderPtr
OdTrVisId OdTrVisGroupId
Definition TrVisDefs.h:126
OdTrVisId OdTrVisMaterialId
Definition TrVisDefs.h:109
OdTrVisId OdTrVisTextureId
Definition TrVisDefs.h:108
OdTrVisId OdTrVisMetafileId
Definition TrVisDefs.h:105
OdUInt64 OdTrVisId
Definition TrVisDefs.h:101
virtual OdDrawOrderMetafileBase & resourceBitSet()=0
virtual TypeOfResource resourceType() const =0
OdGsDevice * gsDevice(OdTrVecDevice *pRequestFor) const
OdTrVisRenderClient * renderClient(OdTrVecDevice *pRequestFor) const
virtual void closeResourceSharing(OdTrVecDevice *pDevice, bool bTemporaryDisconnect=false)
void mtLockMetafilesPool(OdTrVecDevice *pDevice)
virtual void onDeleteRequest(onDeleteRequestProc pReqProc, void *pData, void *pArg=nullptr)
OdRxObject * serverMetafilesPool(OdTrVecDevice *pDevice)
OdTrVecLayerContainer * layersCache(OdTrVecDevice *pDevice)
void broadcastFunction(const OdDrawOrderMetafileBase &bitSet, broadcastProc pProc, void *pArg) const
OdTrVecVisualStyleContainer * m_pVSCache
OdTrVecDevice * findUsage(const OdDrawOrderMetafileBase &bitSet, OdTrVecDevice *pStartFrom=NULL) const
ODRX_USING_HEAP_OPERATORS(OdTrVisSharingProviderClient)
virtual bool shareMetafile(OdTrVecDevice *pRequestedFor, OdTrVecDevice *pRequestedFrom, OdTrVisMetafileId metafileId, void *pInternalDataPtr, void *pOriginatorPtr)
virtual bool shareTexture(OdTrVecDevice *pRequestedFor, OdDrawOrderMetafileBase &bitSet, OdTrVisTextureId textureId, void *pInternalDataPtr, void *pOriginatorPtr)
void shareIdRegistration(OdTrVecDevice *pRequestedFor, OdTrVecDevice *pRequestedFrom, OdTrVisId id, OdInt32 type)
virtual void openResourceSharing(OdTrVecDevice *pDevice)
virtual bool shareMaterial(OdTrVecDevice *pRequestedFor, OdDrawOrderMetafileBase &bitSet, OdTrVisMaterialId materialId, void *pInternalDataPtr, void *pOriginatorPtr)
void broadcastFunctionForAll(broadcastProc pProc, void *pArg, const OdTrVecDevice *pExclusion=NULL) const
virtual bool shareMetafile(OdTrVecDevice *pRequestedFor, OdDrawOrderMetafileBase &bitSet, OdTrVisMetafileId metafileId, void *pInternalDataPtr, void *pOriginatorPtr)
virtual bool shareMaterial(OdTrVecDevice *pRequestedFor, OdTrVecDevice *pRequestedFrom, OdTrVisMaterialId materialId, void *pInternalDataPtr, void *pOriginatorPtr)
virtual bool shareTexture(OdTrVecDevice *pRequestedFor, OdTrVecDevice *pRequestedFrom, OdTrVisTextureId textureId, void *pInternalDataPtr, void *pOriginatorPtr)
OdTrVisRendition * rendition(OdTrVecDevice *pRequestFor) const
OdTrVecTtfFontsCache * ttfFontsCache(OdTrVecDevice *pDevice)
virtual bool shareGroup(OdTrVecDevice *pRequestedFor, OdDrawOrderMetafileBase &bitSet, OdTrVisGroupId groupId, void *pInternalDataPtr, void *pOriginatorPtr)
OdTrVecVisualStyleContainer * visualStylesCache(OdTrVecDevice *pDevice)
virtual bool shareGroup(OdTrVecDevice *pRequestedFor, OdTrVecDevice *pRequestedFrom, OdTrVisGroupId groupId, void *pInternalDataPtr, void *pOriginatorPtr)
bool materialTexturesProc(OdTrVecDevice *pRequestedFor, OdTrVecDevice *pRequestedFrom, OdTrVisMaterialId materialId, void *pInternalDataPtr, void *pOriginatorPtr)
OdTrVecRefPlanesContainer * refPlanesCache(OdTrVecDevice *pDevice)
bool internalTextureProc(OdTrVecDevice *pRequestedFor, OdTrVecDevice *pRequestedFrom, OdTrVisTextureId textureId, void *pInternalDataPtr, void *pOriginatorPtr, OdTrVisTextureDef &resTexture, bool &bCreated)
void mtUnlockMetafilesPool(OdTrVecDevice *pDevice)
void(* broadcastProc)(OdDrawOrderBaseDevice *pDevice, void *pData)
const OdTrVisRendition::ClientSettings & clientSettings(const OdTrVecDevice *pRequestFor) const
OdTrVisMetafilesPool * metafilesPool(OdTrVecDevice *pDevice)
bool isResourceSharingOpened(OdTrVecDevice *pDevice) const
static OdSmartPtr< OdTrVecResourceSharingProvider > createObject()
void setServerMetafilesPool(OdTrVecDevice *pDevice, OdRxObject *pMfPool)
typedef void(APIENTRYP PFNGLACTIVETEXTUREPROC)(GLenum texture)
GLuint GLsizei GLsizei GLint GLenum * type
Definition gles2_ext.h:274
static void attach(OdDrawOrderMetafileBase &bitSet, const OdTrVecDevice *pDevice)
static void clear(OdDrawOrderMetafileBase &bitSet)
static void compress(OdDrawOrderMetafileBase &bitSet, OdUInt32 nBit)
static bool isAttached(const OdDrawOrderMetafileBase &bitSet, const OdTrVecDevice *pDevice)
static void detach(OdDrawOrderMetafileBase &bitSet, const OdTrVecDevice *pDevice)
static void eliminate(OdDrawOrderMetafileBase &bitSet, const OdTrVecDevice *pDevice)
OdUInt8 m_flags
DeviceEntry()
DeviceEntry(OdTrVecDevice *pDevice)
OdTrVecDevice * m_pDevice
Flags
@ kDeleted
@ kConnected