/////////////////////////////////////////////////////////////////////////////// // Copyright (C) 2002-2025, Open Design Alliance (the "Alliance"). // All rights reserved. // // This software and its documentation and related materials are owned by // the Alliance. The software may only be incorporated into application // programs owned by members of the Alliance, subject to a signed // Membership Agreement and Supplemental Software License Agreement with the // Alliance. The structure and organization of this software are the valuable // trade secrets of the Alliance and its suppliers. The software is also // protected by copyright law and international treaty provisions. Application // programs incorporating this software must include the following statement // with their copyright notices: // // This application incorporates Open Design Alliance software pursuant to a license // agreement with Open Design Alliance. // Open Design Alliance Copyright (C) 2002-2025 by Open Design Alliance. // All rights reserved. // // By use of this software, its documentation or related materials, you // acknowledge and accept the above terms. /////////////////////////////////////////////////////////////////////////////// // GLES2 device json server rendition #ifndef ODGLES2JSONRENDITION #define ODGLES2JSONRENDITION #include "TD_PackPush.h" #include "Tr/TrVisRenditionRecorder.h" #include "TrXmlIdRegistratorImpl.h" #include "JsonServer.h" #include "ThreejsJSONExportDef.h" #define OD_GLES2JSON_ENABLEPROGRAMDECISION class OdGLES2JsonRenditionRedir; class JsonObjectFormat; /** \details */ class THREEJSJSONEXPORT_DLL OdGLES2JsonRendition : public OdTrVisRenditionDef, protected OdTrXmlRegistratorImpl::Traverser { protected: // Settings ClientSettings m_clientSettings; // Id registrator mutable OdTrXmlRegistratorImpl m_idReg; // Output OdSmartPtr m_pJson; OdSmartPtr m_pJsonObj; // Current mode enum ProcMode { kIntermediate = 0, kGsUpdate } m_mode; // Redirection controller OdGLES2JsonRenditionRedir *m_pRedir; // Current output state OdGLES2JsonServer::OutputState m_outputState; // Current processing device OdTrVisRenderClient *m_pProcDevice; // Overall viewport state OdTrVisViewportDef m_overallViewport; // Lights list typedef std::map LightsMap; LightsMap m_lights; public: OdGLES2JsonRendition(); ~OdGLES2JsonRendition() override; // JsonRendition methods OdIntPtr getClientSettings() const; void setClientSettings(OdIntPtr pClSet); OdIntPtr getJsonServer() const; void setJsonServer(OdIntPtr pJsonServer); OdGLES2JsonServer *json(); const OdGLES2JsonServer *json() const; JsonObjectFormat *json_obj(); const JsonObjectFormat *json_obj() const; void setRedirectionController(OdGLES2JsonRenditionRedir *pRedir) { m_pRedir = pRedir; } void setIntermediateMode(); void setGsUpdateMode(); bool isIntermediateMode() const { return (m_mode == kIntermediate); } bool isGsUpdateMode() const { return (m_mode == kGsUpdate); } void DropMetadata(const OdTrVisFlatMetafileContainer *pMetafile, const OdUInt64 &metafile_reg_id, const OdUInt64 &layer_id); // High-level callbacks // Called on starting vectorizer update. void onDeviceUpdateBegin(OdTrVisRenderClient *pDevice) override; // Called on ending vectorizer update. void onDeviceUpdateEnd(OdTrVisRenderClient *pDevice, bool bRender = true) override; // Checks that vectorizer update started. bool isWithinDeviceUpdate() const override { return m_pProcDevice != NULL; } // Returns set of bit flags which indicate rendition capabilities/settings OdUInt32 queryRenditionCaps(OdUInt32 requestFor = 0xFFFFFFFF) const override; // Allocate new resource sharing provider compatible with rendition OdTrVisSharingProviderClientPtr createSharingProvider() override; // Multithread processing flags MtHandlerType mtDataTypeProcessing(DataType &type) const override; // Returns Id registrator, or NULL if no registration supported IdRegistrator *idRegistrator() const override; // GsFiler support bool saveRenditionState(OdGsFiler *pFiler) const override; bool loadRenditionState(OdGsFiler *pFiler, OdTrVisIdMap *pIdMap) override; // Mid-level callbacks // Client information void obtainClientSettings(ClientSettings &clientSets) override; // Surface void onSurfaceChanged(const OdTrVisSurfaceDef &pDef) override; // Overlays // Called when new overlay added into device. void onOverlayAdded(OdTrVisOverlayId overlayId, const OdTrVisOverlayDef &pDef) override; // Called when exist overlay removed from device. void onOverlayDeleted(OdTrVisOverlayId overlayId) override; // Called when overlay visibility changed. void onOverlayVisibilityChanged(OdTrVisOverlayId overlayId, bool bVisibility) override; // Called when overlay rendering order changed. void onOverlayRenderOrderChanged(OdTrVisOverlayId overlayId, OdInt16 nRenderOrder) override; // Viewports // Called when new viewport added into device. void onViewportAdded(OdTrVisViewportId viewportId, const OdTrVisViewportDef &pDef) override; // Called when viewport inserted in list with some index. void onViewportInserted(OdTrVisViewportId viewportId, int nIndex, const OdTrVisViewportDef &pDef) override; // Called when viewport removed from device. void onViewportDeleted(OdTrVisViewportId viewportId) override; // Primary viewports configuration // Called when viewport view parameters is modified. void onViewportViewParamsModified(OdTrVisViewportId viewportId, const OdTrVisViewParamsDef &pDef) override; // Called when viewport lineweight settings is modified. void onViewportLineweightsModified(OdTrVisViewportId viewportId, const OdTrVisViewportLineweightsDef &pDef) override; // Extended viewports configuration // Called when background stream in viewport is changed. void onViewportBackgroundChanged(OdTrVisViewportId viewportId, const OdTrVisBackgroundDef &pDef) override; // Viewport default lights configuration // Called when viewport ambient light setting modified. void onViewportAmbientLightChanged(OdTrVisViewportId viewportId, const OdTrVisMaterialColor &ambientLight) override; // Called when viewport default light setting modified. void onViewportDefaultLightsChanged(OdTrVisViewportId viewportId, bool bDefaultLightsOn, const OdTrVisLightDef *pLightsList = NULL, OdUInt32 nLightsListEntries = 0) override; // Viewport lights management // Called when light source added into viewport light sources list. void onViewportLightAttached(OdTrVisViewportId viewportId, OdTrVisLightId lightId, OdUInt32 nOverrides = 0, const OdTrVisLightDef &pOverrides = OdTrVisLightDef()) override; // Called when light source removed from viewport light sources list. void onViewportLightDetached(OdTrVisViewportId viewportId, OdTrVisLightId lightId) override; // Per-overlay viewport overrides // Called when viewport needs override view parameters for specific overlay. void onOverlayViewParamsOverride(OdTrVisViewportId viewportId, OdTrVisOverlayId overlayId, bool bOverride, const OdTrVisViewParamsDef &pDef = OdTrVisViewParamsDef()) override; // Called when viewport extents changed. void onOverlayExtentsOverride(OdTrVisViewportId viewportId, OdTrVisOverlayId overlayId, const OdTrVisExtentsDef &pDef) override; // Viewports ordering lists // Called when order of metafiles in viewport is changed (for obtain modified part of list by renderer). void onMetafileOrderChanged(OdTrVisViewportId viewportId, OdTrVisOverlayId overlayId, OdUInt32 nInvalidFrom, OdUInt32 nInvalidLen, const OdTrVisDisplayId *pValidFrom, OdUInt32 nValidLen) override; // Metafiles // Called when new metafile added (returns visualId, equal to metafileId by default). OdTrVisDisplayId onMetafileAdded(OdTrVisMetafileId metafileId, const OdTrVisMetafileDef &pDef) override; // Called when exist metafile deleted. void onMetafileDeleted(OdTrVisMetafileId metafileId) override; // Called when exist metafile changed. //virtual void onMetafileModified(OdTrVisMetafileId metafileId, const OdTrVisMetafileDef &pDef); // Called when exist metafile visibility changed. void onMetafileVisibilityChanged(OdTrVisMetafileId metafileId, bool bVisibility) override; // Called when exist metafile highlighting changed. void onMetafileHighlightingChanged(OdTrVisMetafileId metafileId, bool bHighlight) override; // Called when exist metafile fading changed. void onMetafileFadingChanged(OdTrVisMetafileId metafileId, bool bFade) override; // Lights // Called when new light source added. void onLightAdded(OdTrVisLightId lightId, const OdTrVisLightDef &pDef) override; // Called when exist light source modified. void onLightModified(OdTrVisLightId lightId, OdUInt32 nKindOfMod, const OdTrVisLightDef &pDef) override; // Called when exist light source deleted. void onLightDeleted(OdTrVisLightId lightId) override; // State branches (highlighting, hide) // Called when new state branch added. void onStateBranchAdded(OdTrVisStateBranchId hlBranchId, const OdTrVisStateBranchDef &pDef) override; // Called when exist state branch modified. void onStateBranchModified(OdTrVisStateBranchId hlBranchId, const OdTrVisStateBranchDef &pDef, bool bChildsModified, bool bMarkersModified) override; // Called when exist state branch deleted. void onStateBranchDeleted(OdTrVisStateBranchId hlBranchId) override; // Textures // Called when new texture added. void onTextureAdded(OdTrVisTextureId textureId, const OdTrVisTextureDef &pDef) override; // Called when exist texture deleted. void onTextureDeleted(OdTrVisTextureId textureId) override; // Materials // Called when new material added. void onMaterialAdded(OdTrVisMaterialId materialId, const OdTrVisMaterialDef &pDef) override; // Called when exist material deleted. void onMaterialDeleted(OdTrVisMaterialId materialId) override; // Visual Styles // Called when new visual style added. void onVisualStyleAdded(OdTrVisVisualStyleId visualStyleId, const OdTrVisVisualStyle &pDef) override; // Called when exist visual style modified. void onVisualStyleModified(OdTrVisVisualStyleId visualStyleId, const OdTrVisVisualStyle &pDef) override; // Called when exist visual style deleted. void onVisualStyleDeleted(OdTrVisVisualStyleId visualStyleId) override; // Layers // Called when new layer added. void onLayerAdded(OdTrVisLayerId layerId, const OdTrVisLayerDef &pDef) override; // Called when exist layer modified. //virtual void onLayerModified(OdTrVisLayerId layerId, const OdTrVisLayerDef &pDef); // Called when exist layer deleted. void onLayerDeleted(OdTrVisLayerId layerId) override; // Called when layer viewport-dependent properties changed. void onLayerVpDepPropsOverride(OdTrVisLayerId layerId, OdTrVisViewportId viewportId, bool bOverride, const OdTrVisLayerProps &pProps = OdTrVisLayerProps()) override; protected: void beginDeviceProcessing(OdTrVisRenderClient *pDevice); void endDeviceProcessing(OdTrVisRenderClient *pDevice); OdTrVisRenderClient *processingDevice() const; bool isSupportCompositeMetafiles() const; bool isSupportVisualStyles() const; bool isSupportOverlayBuffers() const; bool idRegTraverseCallback(OdTrVisRendition::DataType type, OdTrVisId id, OdTrVisUniqueID *pRegId) override; void finalizeJsonServerUsage(); struct DDL2ndPassInfo { bool m_bScan; OdUInt32 m_nTransFirst, m_nTransLast; DDL2ndPassInfo() : m_bScan(false), m_nTransFirst(0xFFFFFFFF), m_nTransLast(0xFFFFFFFF) { } }; bool DropDisplayList(const OdTrVisDisplayId *pDispList, OdUInt32 nListLen, const OdTrVisId &ViewPortId, DDL2ndPassInfo *p2ndPass = NULL); void DropDisplayList2ndPass(OdTrVisViewportId viewportId, OdTrVisOverlayId overlayId, OdUInt32 nInvalidFrom, const OdTrVisDisplayId *pDispList, OdUInt32 nListLen, DDL2ndPassInfo &p2ndPass); void onMetafileOrderChangedImpl(OdTrVisViewportId viewportId, OdTrVisOverlayId overlayId, OdUInt32 nInvalidFrom, OdUInt32 nInvalidLen, const OdTrVisDisplayId *pValidFrom, OdUInt32 nValidLen, bool bFirstPass = true); void DropStateBranch(const OdTrVisStateBranchDef &pHlBranch, bool bDropChilds, bool bDropMarkers); void DropVisualStyleData(const OdTrVisVisualStyle &pVStyle, bool bDropNonModified = true); void DropLayerData(const OdTrVisLayerDef &pLayer, bool bDropOwnerId = true); void DropLayerProps(const OdTrVisLayerProps &pLayerProps); void OutputState(OdGLES2JsonServer::OutputState newState, bool bForce = false); static void DropViewParams(JsonObjectFormat *pJson, const OdTrVisViewParamsDef &pDef, const OdTrVisId &view_id); public: static void ParseMetafileStream(OdGLES2JsonServer *pJson, const OdTrVisFlatMetafileContainer *pMetafile) { OdSmartPtr res = OdRxObjectImpl::createObject(); res->setJsonServer((OdIntPtr)pJson); //res->ParseMetafileStream(pMetafile); //res->DropMetadata(pMetafile); } }; /** \details */ class OdGLES2JsonRenditionRedir : public OdTrVisRenditionRedir, protected OdTrVisRenditionRedir::IdRegistratorRedir { protected: OdStaticRxObject m_jsonRendition; OdStaticRxObject m_recorder; public: OdGLES2JsonRenditionRedir() : OdTrVisRenditionRedir() , OdTrVisRenditionRedir::IdRegistratorRedir() { setRedirection(&m_recorder); setInformationalRedirection(&m_jsonRendition); setIdRegRedirection(m_recorder.idRegistrator()); m_jsonRendition.setRedirectionController(this); } void setForRecord() { setRedirection(&m_recorder); } bool isSetForRecord() const { return (getRedirection() == &m_recorder); } void setForPlay() { setRedirection(&m_jsonRendition); } bool isSetForPlay() const { return (getRedirection() == &m_jsonRendition); } void dropRecords() { m_recorder.playRecords(&m_jsonRendition, true); } OdGLES2JsonRendition &jsonRendition() { return m_jsonRendition; } const OdGLES2JsonRendition &jsonRendition() const { return m_jsonRendition; } // Returns Id registrator, or NULL if no registration supported OdTrVisRendition::IdRegistrator *idRegistrator() const override { if (isSetForRecord() && getInformationalRedirection()->idRegistrator()) return (OdTrVisRendition::IdRegistrator*)this; return getInformationalRedirection()->idRegistrator(); } protected: // IdRegistrator override OdTrVisUniqueID *get(DataType type, OdTrVisId id, bool bKill = false) const override { OdTrVisRenditionRedir::IdRegistratorRedir::get(type, id, bKill); return getInformationalRedirection()->idRegistrator()->get(type, id); } }; #include "TD_PackPop.h" #endif // ODGLES2JSONRENDITION