Leaked source code of windows server 2003
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
/*==========================================================================;
* * Copyright (C) 1995 Microsoft Corporation. All Rights Reserved. * * File: texiunk.c * Content: Direct3DTexture IUnknown *@@BEGIN_MSINTERNAL * * $Id$ * * History: * Date By Reason * ==== == ====== * 07/12/95 stevela Merged Colin's changes. * 10/12/95 stevela Removed AGGREGATE_D3D *@@END_MSINTERNAL * ***************************************************************************/
#include "pch.cpp"
#pragma hdrstop
/*
* If we are built with aggregation enabled then we actually need two * different Direct3D QueryInterface, AddRef and Releases. One which * does the right thing on the Direct3DTexture object and one which * simply punts to the owning interface. */
/*
* D3DTextIUnknown_QueryInterface */ #undef DPF_MODNAME
#define DPF_MODNAME "Direct3DTexture::QueryInterface"
HRESULT D3DAPI CDirect3DTextureUnk::QueryInterface(REFIID riid, LPVOID* ppvObj) { CLockD3D lockObject(DPF_MODNAME, REMIND("")); // Takes D3D lock.
// Release in the destructor
/*
* validate parms */ TRY { if (!VALID_DWORD_PTR(this)) { D3D_ERR( "Invalid Direct3DTexture pointer" ); return DDERR_INVALIDOBJECT; } if( !VALID_OUTPTR( ppvObj ) ) { D3D_ERR( "Invalid obj ptr" ); return DDERR_INVALIDPARAMS; } *ppvObj = NULL; } EXCEPT( EXCEPTION_EXECUTE_HANDLER ) { D3D_ERR( "Exception encountered validating parameters" ); return DDERR_INVALIDPARAMS; } *ppvObj = NULL; if(IsEqualIID(riid, IID_IUnknown)) { /*
* Asking for IUnknown and we are IUnknown. * NOTE: Must AddRef through the interface being returned. */ pTexI->AddRef(); *ppvObj = static_cast<LPVOID>(static_cast<LPUNKNOWN>(this)); } else if (IsEqualIID(riid, IID_IDirect3DTexture)) { /*
* Asking for the actual IDirect3DTexture interface * NOTE: Must AddRef throught the interface being returned. */ pTexI->AddRef(); *ppvObj = static_cast<LPVOID>(static_cast<LPDIRECT3DTEXTURE>(pTexI)); } else if (IsEqualIID(riid, IID_IDirect3DTexture2)) { /*
* Asking for the actual IDirect3DTexture2 interface * NOTE: Must AddRef throught the interface being returned. */ pTexI->AddRef(); *ppvObj = static_cast<LPVOID>(static_cast<LPDIRECT3DTEXTURE2>(pTexI)); } else { return (E_NOINTERFACE); } return (D3D_OK); } /* D3DTextIUnknown_QueryInterface */
/*
* D3DTextIUnknown_AddRef */ #undef DPF_MODNAME
#define DPF_MODNAME "Direct3DTexture::AddRef"
ULONG D3DAPI CDirect3DTextureUnk::AddRef() { DWORD rcnt; CLockD3D lockObject(DPF_MODNAME, REMIND("")); // Takes D3D lock.
// Release in the destructor
/*
* validate parms */ TRY { if (!VALID_DWORD_PTR(this)) { D3D_ERR( "Invalid Direct3DTexture pointer" ); return 0; } } EXCEPT( EXCEPTION_EXECUTE_HANDLER ) { D3D_ERR( "Exception encountered validating parameters" ); return 0; }
this->refCnt++; rcnt = this->refCnt; D3D_INFO(3, "Direct3DTexture IUnknown AddRef: Reference count = %d", rcnt); return (rcnt); } /* D3DTextIUnknown_AddRef */
/*
* D3DTextIUnknown_Release */ #undef DPF_MODNAME
#define DPF_MODNAME "Direct3DTexture::Release"
ULONG D3DAPI CDirect3DTextureUnk::Release() { DWORD lastrefcnt; CLockD3D lockObject(DPF_MODNAME, REMIND("")); // Takes D3D lock.
// Release in the destructor
/*
* validate parms */ TRY { if (!VALID_DWORD_PTR(this)) { D3D_ERR( "Invalid Direct3DTexture pointer" ); return 0; } } EXCEPT( EXCEPTION_EXECUTE_HANDLER ) { D3D_ERR( "Exception encountered validating parameters" ); return 0; } /*
* decrement the ref count. if we hit 0, free the object */ this->refCnt--; lastrefcnt = this->refCnt; D3D_INFO(3, "Direct3DTexture IUnknown Release: Reference count = %d", lastrefcnt); if (lastrefcnt == 0) { delete pTexI; // Delete Parent object
return 0; } return lastrefcnt; } /* D3DTextIUnknown_Release */
DIRECT3DTEXTUREI::~DIRECT3DTEXTUREI() { /*
* just in case someone comes back in with this pointer, set * an invalid vtbl. Once we do that, it is safe to leave * the protected area... */ while (LIST_FIRST(&this->blocks)) { LPD3DI_TEXTUREBLOCK tBlock = LIST_FIRST(&this->blocks); D3DI_RemoveTextureHandle(tBlock); // Remove from device
LIST_DELETE(tBlock, devList); // Remove from texture
LIST_DELETE(tBlock, list); D3DFree(tBlock); }
if (lpTMBucket) { //need to release the private lpDDS if any
lpDDS1Tex->Release(); lpDDS->Release(); lpTMBucket->lpD3DTexI=NULL; }
}
/*
* D3DText_QueryInterface */ #undef DPF_MODNAME
#define DPF_MODNAME "Direct3DTexture::QueryInterface"
HRESULT D3DAPI DIRECT3DTEXTUREI::QueryInterface(REFIID riid, LPVOID* ppvObj) { HRESULT ret; CLockD3D lockObject(DPF_MODNAME, REMIND("")); // Takes D3D lock.
// Release in the destructor
/*
* validate parms */ TRY { if (!VALID_DIRECT3DTEXTURE_PTR(this)) { D3D_ERR( "Invalid IDirect3DTexture pointer" ); return DDERR_INVALIDOBJECT; } if( !VALID_OUTPTR( ppvObj ) ) { D3D_ERR( "Invalid obj ptr" ); return DDERR_INVALIDPARAMS; } } EXCEPT( EXCEPTION_EXECUTE_HANDLER ) { D3D_ERR( "Exception encountered validating parameters" ); return DDERR_INVALIDPARAMS; } /*
* Punt to the owning interface. */ ret = this->lpOwningIUnknown->QueryInterface(riid, ppvObj); return ret; }
/*
* D3DText_AddRef */ #undef DPF_MODNAME
#define DPF_MODNAME "Direct3DTexture::AddRef"
ULONG D3DAPI DIRECT3DTEXTUREI::AddRef() { ULONG ret; CLockD3D lockObject(DPF_MODNAME, REMIND("")); // Takes D3D lock.
// Release in the destructor
/*
* validate parms */ TRY { if (!VALID_DIRECT3DTEXTURE_PTR(this)) { D3D_ERR( "Invalid Direct3DTexture pointer" ); return 0; } } EXCEPT( EXCEPTION_EXECUTE_HANDLER ) { D3D_ERR( "Exception encountered validating parameters" ); return 0; } /*
* Punt to owning interface. */ ret = this->lpOwningIUnknown->AddRef(); return ret; } /* D3DText_AddRef */
/*
* D3DText_Release */ #undef DPF_MODNAME
#define DPF_MODNAME "Direct3DTexture::Release"
ULONG D3DAPI DIRECT3DTEXTUREI::Release() { ULONG ret; CLockD3D lockObject(DPF_MODNAME, REMIND("")); // Takes D3D lock.
// Release in the destructor
/*
* validate parms */ TRY { if (!VALID_DIRECT3DTEXTURE2_PTR(this)) { D3D_ERR( "Invalid Direct3DTexture pointer" ); return 0; } } EXCEPT( EXCEPTION_EXECUTE_HANDLER ) { D3D_ERR( "Exception encountered validating parameters" ); return 0; } /*
* Punt to owning interface. */ ret = this->lpOwningIUnknown->Release(); return ret; } /* D3DText_Release */
|