CreateAdditionalStreamInfo
Jump to navigation
Jump to search
This C++ Function is found inside of CAdditionalVertexStreamManager.
It creates additional stream info.
It can be found in Client/Client Core/Sources/CAdditionalVertexStreamManager.cpp in Visual Studio.
Required Arguments
- state: To be defined.
Returns
Returns --to be defined.
Code
SAdditionalStreamInfo* CAdditionalVertexStreamManager::CreateAdditionalStreamInfo ( const SCurrentStateInfo& state )
{
SAdditionalStreamInfo* pAdditionalInfo = MapFind ( m_AdditionalStreamInfoMap, state.stream1.pStreamData );
if ( !pAdditionalInfo )
{
// Create it
SAdditionalStreamInfo info;
// Create new decleration
D3DVERTEXELEMENT9 elements[MAXD3DDECLLENGTH];
assert ( state.decl.numElements > 3 && state.decl.numElements < 5 );
memcpy ( elements, state.decl.elements, state.decl.numElements * sizeof ( D3DVERTEXELEMENT9 ) );
D3DVERTEXELEMENT9* declNew = &elements[ state.decl.numElements - 1 ];
elements[ state.decl.numElements ] = *declNew;
declNew->Stream = 2;
declNew->Offset = 0;
declNew->Type = D3DDECLTYPE_FLOAT3;
declNew->Method = D3DDECLMETHOD_DEFAULT;
declNew->Usage = D3DDECLUSAGE_NORMAL;
declNew->UsageIndex = 0;
if ( FAILED( m_pDevice->CreateVertexDeclaration ( elements, &info.pVertexDeclaration ) ) )
return false;
// Create new stream
info.Stride = sizeof ( float ) * 3;
UINT Size2 = ConvertPTSize ( state.decl.VertexBufferDesc1.Size );
if ( FAILED( m_pDevice->CreateVertexBuffer( Size2, D3DUSAGE_WRITEONLY, 0, D3DPOOL_MANAGED, &info.pStreamData, NULL ) ) )
return false;
// Save info
MapSet ( m_AdditionalStreamInfoMap, state.stream1.pStreamData, info );
pAdditionalInfo = MapFind ( m_AdditionalStreamInfoMap, state.stream1.pStreamData );
}
return pAdditionalInfo;
}