source: GTP/trunk/App/Demos/Geom/Shark3D/src/drv_d3d9_progincmgr.cpp @ 2236

Revision 2236, 3.4 KB checked in by gumbau, 17 years ago (diff)
Line 
1///////////////////////////////////////////////////////////////////////////////
2//
3//      ##  ######
4//       ######  ###
5//  ## ###############        Shark 3D Engine (www.shark3d.com)
6//   ########## # # #
7//    ########                Copyright (c) 1996-2006 Spinor GmbH.
8//   ######### # # #          All rights reserved.
9//  ##   ##########
10//      ##
11//
12///////////////////////////////////////////////////////////////////////////////
13
14//@cpp
15
16#include "drv_d3d9_progincmgr.h"
17#include "drv_d3d9_types.h"
18#include "util/os/util_filesystem.h"
19#include "sys/win32api/sys_win32api_unicode.h"
20
21///////////////////////////////////////////////////////////////////////////////
22
23s3d_CDrvD3d9ProgIncMgr::s3d_CDrvD3d9ProgIncMgr(
24        s3d_CUtilMsgHandler *MsgHandler, s3d_CUtilStr_cr Info,
25        s3d_CUtilMemPool *MemPool,
26        s3d_CCompResMgr *ResMgr, s3d_CUtilNotifGather *NotifGather,
27        s3d_CUtilMap<s3d_CUtilStr, s3d_CUtilStr> *StreamNameMap)
28{
29    m_MsgHandler = MsgHandler;
30    m_Info = Info;
31    m_MemPool = MemPool;
32    m_ResMgr = ResMgr;
33    m_NotifStore = NotifGather;
34    m_StreamNameMap = StreamNameMap;
35}
36
37s3d_CUtilStreamPtr s3d_CDrvD3d9ProgIncMgr::OpenInc(
38        BOOL IsSysInc, s3d_CUtilStr_cr Name)
39{
40    if(!m_MemPool)
41        return 0;
42    if(!m_ResMgr)
43        return 0;
44   
45    // Load resource:
46    s3d_CUtilStr ResInfo;
47    s3d_CUtilStreamPtr ResStream;
48    bool Final = false;
49    s3d_CUtilNotifEntryPtr NotifEntry
50            = S3D_SYS_NEW s3d_CUtilNotifEntry;
51    m_ResMgr->GetResource(
52            m_Info, Name, true, 0,
53            ResInfo, ResStream, Final, NotifEntry);
54    if(m_NotifStore)
55        m_NotifStore->AddNotifEntry(NotifEntry);
56    if(!ResStream)
57        return 0;
58
59    if(m_StreamNameMap && !ResInfo.IsEmpty())
60    {
61        s3d_CUtilStr PrevStreamName
62                = m_StreamNameMap->GetAtDefault(Name, "");
63        if(!PrevStreamName.IsEmpty() && PrevStreamName != ResInfo)
64        {
65            s3d_CDrvD3d9Error e;
66            e.m_Code = "drv/imp/directx/d3d9/drv_d3d9_progincmgr.same_include";
67            e.m_StdTempl = "The same D3D include name \"[1]\" "
68                    "loads both from stream \"[2]\" and \"[3]\". ";
69            e.AddInfo(m_Info);
70            e.AddInfo(Name);
71            e.AddInfo(PrevStreamName);
72            e.AddInfo(ResInfo);
73            s3d_UtilMsgReportError(m_MsgHandler, e);
74        }
75        m_StreamNameMap->SetAt(Name, ResInfo);
76    }
77    return ResStream;
78}
79
80HRESULT s3d_CDrvD3d9ProgIncMgr::Open(
81        D3DXINCLUDE_TYPE IncludeType, LPCSTR pName, LPCVOID pParentData,
82        LPCVOID *ppData, UINT *pBytes)
83{
84    BOOL IsSysInc = (IncludeType == D3DXINC_SYSTEM);
85
86    S3D_SYS_WIN32API_ALLOCA_SYSCHAR_OF_SELCHAR(
87            NameCnt, Name, pName);
88
89    s3d_CUtilStreamPtr Stream = OpenInc(IsSysInc, pName);
90    if(!Stream)
91        return E_FAIL;
92
93    s3d_CSysIntps StreamLen = s3d_CSysIntps(Stream->GetSize());
94    s3d_CSysIntm *StreamData = new(m_MemPool)s3d_CSysIntm[StreamLen + 1];
95    Stream->Read(StreamLen, StreamData);
96    StreamData[StreamLen] = 0;
97    *ppData = reinterpret_cast<LPCVOID>(StreamData);
98    *pBytes = s3d_SysIntOfIntps(StreamLen);
99
100    return S_OK;
101}
102
103HRESULT s3d_CDrvD3d9ProgIncMgr::Close(
104        LPCVOID pData)
105{
106    return S_OK;
107}
108
109///////////////////////////////////////////////////////////////////////////////
Note: See TracBrowser for help on using the repository browser.