/////////////////////////////////////////////////////////////////////////////// // // ## ###### // ###### ### // ## ############### Shark 3D Engine (www.shark3d.com) // ########## # # # // ######## Copyright (c) 1996-2006 Spinor GmbH. // ######### # # # All rights reserved. // ## ########## // ## // /////////////////////////////////////////////////////////////////////////////// //@cpp #include "drv_d3d9_progincmgr.h" #include "drv_d3d9_types.h" #include "util/os/util_filesystem.h" #include "sys/win32api/sys_win32api_unicode.h" /////////////////////////////////////////////////////////////////////////////// s3d_CDrvD3d9ProgIncMgr::s3d_CDrvD3d9ProgIncMgr( s3d_CUtilMsgHandler *MsgHandler, s3d_CUtilStr_cr Info, s3d_CUtilMemPool *MemPool, s3d_CCompResMgr *ResMgr, s3d_CUtilNotifGather *NotifGather, s3d_CUtilMap *StreamNameMap) { m_MsgHandler = MsgHandler; m_Info = Info; m_MemPool = MemPool; m_ResMgr = ResMgr; m_NotifStore = NotifGather; m_StreamNameMap = StreamNameMap; } s3d_CUtilStreamPtr s3d_CDrvD3d9ProgIncMgr::OpenInc( BOOL IsSysInc, s3d_CUtilStr_cr Name) { if(!m_MemPool) return 0; if(!m_ResMgr) return 0; // Load resource: s3d_CUtilStr ResInfo; s3d_CUtilStreamPtr ResStream; bool Final = false; s3d_CUtilNotifEntryPtr NotifEntry = S3D_SYS_NEW s3d_CUtilNotifEntry; m_ResMgr->GetResource( m_Info, Name, true, 0, ResInfo, ResStream, Final, NotifEntry); if(m_NotifStore) m_NotifStore->AddNotifEntry(NotifEntry); if(!ResStream) return 0; if(m_StreamNameMap && !ResInfo.IsEmpty()) { s3d_CUtilStr PrevStreamName = m_StreamNameMap->GetAtDefault(Name, ""); if(!PrevStreamName.IsEmpty() && PrevStreamName != ResInfo) { s3d_CDrvD3d9Error e; e.m_Code = "drv/imp/directx/d3d9/drv_d3d9_progincmgr.same_include"; e.m_StdTempl = "The same D3D include name \"[1]\" " "loads both from stream \"[2]\" and \"[3]\". "; e.AddInfo(m_Info); e.AddInfo(Name); e.AddInfo(PrevStreamName); e.AddInfo(ResInfo); s3d_UtilMsgReportError(m_MsgHandler, e); } m_StreamNameMap->SetAt(Name, ResInfo); } return ResStream; } HRESULT s3d_CDrvD3d9ProgIncMgr::Open( D3DXINCLUDE_TYPE IncludeType, LPCSTR pName, LPCVOID pParentData, LPCVOID *ppData, UINT *pBytes) { BOOL IsSysInc = (IncludeType == D3DXINC_SYSTEM); S3D_SYS_WIN32API_ALLOCA_SYSCHAR_OF_SELCHAR( NameCnt, Name, pName); s3d_CUtilStreamPtr Stream = OpenInc(IsSysInc, pName); if(!Stream) return E_FAIL; s3d_CSysIntps StreamLen = s3d_CSysIntps(Stream->GetSize()); s3d_CSysIntm *StreamData = new(m_MemPool)s3d_CSysIntm[StreamLen + 1]; Stream->Read(StreamLen, StreamData); StreamData[StreamLen] = 0; *ppData = reinterpret_cast(StreamData); *pBytes = s3d_SysIntOfIntps(StreamLen); return S_OK; } HRESULT s3d_CDrvD3d9ProgIncMgr::Close( LPCVOID pData) { return S_OK; } ///////////////////////////////////////////////////////////////////////////////