int ZXML::GetAttributeText( IXMLDOMNode* pNode, LPSTR strAttrName, LPSTR strRet ) { wchar_t wstrAttr[128]; IXMLDOMNode* pAttrNode = NULL; IXMLDOMNamedNodeMap* pMap = NULL; VARIANT varValue; try { int n = mbstowcs( wstrAttr, strAttrName, 128 ); pNode->get_attributes( &pMap ); pMap->getNamedItem( wstrAttr, &pAttrNode ); pAttrNode->get_nodeValue( &varValue ); strcpy( strRet,(const char*)_bstr_t(varValue.bstrVal,FALSE) ); // wcstombs( strRet, varValue.bstrVal , 128 ); S_REL( pAttrNode ); S_REL( pMap ); return TRUE; } catch(...) { S_REL( pAttrNode ); S_REL( pMap ); return FALSE; } }
/**----------------------------------------------------------------------------- * 초기화 객체들 소거 *------------------------------------------------------------------------------ */ VOID Cleanup() { S_REL( g_pPS ); S_REL( g_pIB ); S_REL( g_pVB ); S_REL( g_pd3dDevice ); S_REL( g_pD3D ); }
/**----------------------------------------------------------------------------- * 초기화 객체들 소거 *------------------------------------------------------------------------------ */ VOID Cleanup() { for ( int i = 0; i < 4; i++ ) { S_REL( g_pTexBillboard[i] ); } S_REL( g_pd3dDevice ); S_REL( g_pD3D ); }
ZPSMgr::~ZPSMgr() { list<ZPSTable*>::iterator it; for( it = m_PSTable.begin() ; it != m_PSTable.end() ; it++ ) { S_REL( (*it)->pDecl ); S_REL( (*it)->pShader ); } stl_wipe( m_PSTable ); }
int ZPSMgr::Add( char *fname, DWORD fvf ) { D3DVERTEXELEMENT9 decl[MAX_FVF_DECL_SIZE]; if( Get( fname ) ) return 1; ZPSTable* p = new ZPSTable; p->name = fname; // FVF를 사용해서 정점선언값을 자동으로 채워넣는다 D3DXDeclaratorFromFVF( fvf, decl ); // 정점선언값으로 m_pShaderDecl을 생성한다. m_pDev->CreateVertexDeclaration( decl, &p->pDecl ); LPD3DXBUFFER pCode; // 정점쉐이더 파일을 읽어와서 정점쉐이더 인터페이스를 생성한다. if( FAILED( D3DXAssembleShaderFromFile( fname, NULL, NULL, 0, &pCode, NULL ) ) ) return 0; m_pDev->CreatePixelShader( (DWORD*)pCode->GetBufferPointer(), &p->pShader ); S_REL( pCode ); m_PSTable.push_back( p ); return 1; }
HRESULT InitPS() { LPD3DXBUFFER pCode; // simple.vs 파일을 읽어와서 정점쉐이더 인터페이스를 생성한다. if( FAILED( D3DXAssembleShaderFromFile( "simple.ps", NULL, NULL, 0, &pCode, NULL ) ) ) return E_FAIL; g_pd3dDevice->CreatePixelShader( (DWORD*)pCode->GetBufferPointer(), &g_pPS); S_REL( pCode ); return S_OK; }
/**----------------------------------------------------------------------------- * 초기화 객체들 소거 *------------------------------------------------------------------------------ */ VOID Cleanup() { S_REL( g_pDecl ); S_REL( g_pEffect ); S_REL( g_pIB ); S_REL( g_pVB ); S_REL( g_pd3dDevice ); S_REL( g_pD3D ); }
bool CD3D9Shader::createFromMemory(void* pBuf, int nSize,LPD3DXINCLUDE pInclude) { IDirect3DDevice9* pD3D9Device = GetD3D9RenderSystem().GetD3D9Device(); if (ms_pEffectPool==NULL) { D3DXCreateEffectPool( & ms_pEffectPool); } DWORD dwShaderFlags = D3DXFX_NOT_CLONEABLE; ID3DXBuffer* errorBuffer = 0; D3DXCreateEffect(pD3D9Device,pBuf,nSize, NULL, pInclude, dwShaderFlags, ms_pEffectPool, &m_pEffect, &errorBuffer); // output any error messages if(errorBuffer) { ::MessageBoxA(0, (char*)errorBuffer->GetBufferPointer(), 0, 0); S_REL(errorBuffer); } return m_pEffect!=NULL; }
HRESULT InitVS() { D3DVERTEXELEMENT9 decl[MAX_FVF_DECL_SIZE]; // FVF를 사용해서 정점선언값을 자동으로 채워넣는다 D3DXDeclaratorFromFVF( MYVERTEX::FVF, decl ); // 정점선언값으로 g_pDecl을 생성한다. g_pd3dDevice->CreateVertexDeclaration( decl, &g_pDecl ); LPD3DXBUFFER pCode; // simple.vs 파일을 읽어와서 정점쉐이더 인터페이스를 생성한다. if( FAILED( D3DXAssembleShaderFromFile( "simple.vs", NULL, NULL, 0, &pCode, NULL ) ) ) return E_FAIL; g_pd3dDevice->CreateVertexShader( (DWORD*)pCode->GetBufferPointer(), &g_pVS); S_REL( pCode ); return S_OK; }
ZWater::~ZWater() { S_REL( m_pTexWater[0] ); S_REL( m_pTexWater[1] ); S_REL( m_pVB ); }
CD3D9Shader::~CD3D9Shader() { S_REL(m_pEffect); }