+++ /dev/null
-#include "stdafx.h"\r
-/*\r
-* Copyright (c) 2007-2010 SlimDX Group\r
-* \r
-* Permission is hereby granted, free of charge, to any person obtaining a copy\r
-* of this software and associated documentation files (the "Software"), to deal\r
-* in the Software without restriction, including without limitation the rights\r
-* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\r
-* copies of the Software, and to permit persons to whom the Software is\r
-* furnished to do so, subject to the following conditions:\r
-* \r
-* The above copyright notice and this permission notice shall be included in\r
-* all copies or substantial portions of the Software.\r
-* \r
-* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r
-* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\r
-* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\r
-* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\r
-* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\r
-* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\r
-* THE SOFTWARE.\r
-*/\r
-#include <d3d9.h>\r
-#include <d3dx9.h>\r
-\r
-#include "../stack_array.h"\r
-#include "../DataStream.h"\r
-#include "../CompilationException.h"\r
-\r
-#include "Direct3D9Exception.h"\r
-\r
-#include "Device.h"\r
-#include "Effect9.h"\r
-\r
-using namespace System;\r
-using namespace System::IO;\r
-using namespace System::Runtime::InteropServices;\r
-\r
-namespace SlimDX\r
-{\r
-namespace Direct3D9\r
-{\r
- Effect::Effect( ID3DXEffect* pointer, ComObject^ owner )\r
- {\r
- Construct( pointer, owner );\r
- }\r
-\r
- Effect::Effect( IntPtr pointer )\r
- {\r
- Construct( pointer, NativeInterface );\r
- }\r
- \r
- Effect^ Effect::FromPointer( ID3DXEffect* pointer, ComObject^ owner, ComObjectFlags flags )\r
- {\r
- return ComObject::ConstructFromPointer<Effect, ID3DXEffect>( pointer, owner, flags );\r
- }\r
- \r
- Effect^ Effect::FromPointer( IntPtr pointer )\r
- {\r
- return ComObject::ConstructFromUserPointer<Effect>( pointer );\r
- }\r
- \r
- Effect^ Effect::FromMemory_Internal( SlimDX::Direct3D9::Device^ device, const void* memory, UINT size,\r
- array<Macro>^ preprocessorDefines, Include ^includeFile, String^ skipConstants, ShaderFlags flags,\r
- EffectPool^ pool, String^* compilationErrors, Exception^* exception )\r
- {\r
- ID3DXEffect* effect;\r
- ID3DXBuffer* errorBuffer;\r
-\r
- LPCSTR skipString = NULL;\r
- pin_ptr<Byte> pinnedSkip;\r
- if( skipConstants != nullptr )\r
- {\r
- array<Byte>^ skipBytes = System::Text::ASCIIEncoding::ASCII->GetBytes( skipConstants );\r
- pinnedSkip = &skipBytes[0];\r
- skipString = reinterpret_cast<LPCSTR>( pinnedSkip );\r
- }\r
-\r
- IncludeShim includeShim = IncludeShim( includeFile );\r
- ID3DXInclude* includePtr = NULL;\r
- if( includeFile != nullptr )\r
- includePtr = &includeShim;\r
-\r
- ID3DXEffectPool* effectPool = pool != nullptr ? pool->InternalPointer : NULL;\r
- array<GCHandle>^ handles;\r
- stack_array<D3DXMACRO> macros = Macro::Marshal( preprocessorDefines, handles );\r
- D3DXMACRO* macrosPtr = macros.size() > 0 ? ¯os[0] : NULL;\r
-\r
- HRESULT hr = D3DXCreateEffectEx( device->InternalPointer, memory, size, macrosPtr, includePtr,\r
- skipString, static_cast<DWORD>( flags ), effectPool, &effect, &errorBuffer );\r
- \r
- Macro::Unmarshal( handles );\r
-\r
- String^ compilationErrorsLocal = Utilities::BufferToString( errorBuffer );\r
- if( compilationErrors != NULL )\r
- *compilationErrors = compilationErrorsLocal;\r
-\r
- Exception^ e = CompilationException::Check<Direct3D9Exception^>( hr, compilationErrorsLocal );\r
- if( e != nullptr )\r
- {\r
- if( compilationErrors == NULL || exception == NULL )\r
- throw e;\r
-\r
- *exception = e;\r
- return nullptr;\r
- }\r
-\r
- return gcnew Effect( effect, nullptr );\r
- }\r
-\r
- Effect^ Effect::FromMemory( SlimDX::Direct3D9::Device^ device, array<Byte>^ memory, array<Macro>^ preprocessorDefines,\r
- Include ^includeFile, String^ skipConstants, ShaderFlags flags, EffectPool^ pool,\r
- [Out] String^% compilationErrors )\r
- {\r
- pin_ptr<unsigned char> pinnedData = &memory[0];\r
- String^ compileErrorsLocal;\r
- Exception^ e = nullptr;\r
-\r
- Effect^ effect = FromMemory_Internal( device, pinnedData, static_cast<UINT>( memory->Length ), preprocessorDefines,\r
- includeFile, skipConstants, flags, pool, &compileErrorsLocal, &e );\r
- compilationErrors = compileErrorsLocal;\r
-\r
- if( e != nullptr )\r
- throw e;\r
-\r
- return effect;\r
- }\r
-\r
- Effect^ Effect::FromMemory( SlimDX::Direct3D9::Device^ device, array<Byte>^ memory, array<Macro>^ preprocessorDefines,\r
- Include ^includeFile, String^ skipConstants, ShaderFlags flags, EffectPool^ pool )\r
- {\r
- pin_ptr<unsigned char> pinnedData = &memory[0];\r
-\r
- return FromMemory_Internal( device, pinnedData, static_cast<UINT>( memory->Length ), preprocessorDefines,\r
- includeFile, skipConstants, flags, pool, NULL, NULL );\r
- }\r
-\r
- Effect^ Effect::FromMemory( SlimDX::Direct3D9::Device^ device, array<Byte>^ memory, array<Macro>^ preprocessorDefines,\r
- Include ^includeFile, String^ skipConstants, ShaderFlags flags )\r
- {\r
- pin_ptr<unsigned char> pinnedData = &memory[0];\r
-\r
- return FromMemory_Internal( device, pinnedData, static_cast<UINT>( memory->Length ), preprocessorDefines,\r
- includeFile, skipConstants, flags, nullptr, NULL, NULL );\r
- }\r
-\r
- Effect^ Effect::FromMemory( SlimDX::Direct3D9::Device^ device, array<Byte>^ memory, ShaderFlags flags )\r
- {\r
- pin_ptr<unsigned char> pinnedData = &memory[0];\r
-\r
- return FromMemory_Internal( device, pinnedData, static_cast<UINT>( memory->Length ), nullptr,\r
- nullptr, nullptr, flags, nullptr, NULL, NULL );\r
- }\r
-\r
- Effect^ Effect::FromStream( SlimDX::Direct3D9::Device^ device, Stream^ stream, array<Macro>^ preprocessorDefines, Include^ includeFile,\r
- String^ skipConstants, ShaderFlags flags, EffectPool^ pool, [Out] String^ %compilationErrors )\r
- {\r
- DataStream^ ds = nullptr;\r
- array<Byte>^ data = Utilities::ReadStream( stream, &ds );\r
- Exception^ e = nullptr;\r
-\r
- if( data == nullptr )\r
- {\r
- String^ compilationErrorsLocal;\r
- UINT size = static_cast<UINT>( ds->RemainingLength );\r
-\r
- Effect^ effect = FromMemory_Internal( device, ds->SeekToEnd(), size, preprocessorDefines, includeFile,\r
- skipConstants, flags, pool, &compilationErrorsLocal, &e );\r
-\r
- compilationErrors = compilationErrorsLocal;\r
- if( e != nullptr )\r
- throw e;\r
-\r
- return effect;\r
- }\r
-\r
- return FromMemory( device, data, preprocessorDefines, includeFile,\r
- skipConstants, flags, pool, compilationErrors );\r
- }\r
-\r
- Effect^ Effect::FromStream( SlimDX::Direct3D9::Device^ device, Stream^ stream, array<Macro>^ preprocessorDefines, Include^ includeFile,\r
- String^ skipConstants, ShaderFlags flags, EffectPool^ pool )\r
- {\r
- DataStream^ ds = nullptr;\r
- array<Byte>^ data = Utilities::ReadStream( stream, &ds );\r
- if( data == nullptr )\r
- {\r
- UINT size = static_cast<UINT>( ds->RemainingLength );\r
- return FromMemory_Internal( device, ds->SeekToEnd(), size, preprocessorDefines, includeFile,\r
- skipConstants, flags, pool, NULL, NULL );\r
- }\r
-\r
- return FromMemory( device, data, preprocessorDefines, includeFile,\r
- skipConstants, flags, pool );\r
- }\r
-\r
- Effect^ Effect::FromStream( SlimDX::Direct3D9::Device^ device, Stream^ stream, array<Macro>^ preprocessorDefines, Include^ includeFile,\r
- String^ skipConstants, ShaderFlags flags )\r
- {\r
- DataStream^ ds = nullptr;\r
- array<Byte>^ data = Utilities::ReadStream( stream, &ds );\r
- if( data == nullptr )\r
- {\r
- UINT size = static_cast<UINT>( ds->RemainingLength );\r
- return FromMemory_Internal( device, ds->SeekToEnd(), size, preprocessorDefines, includeFile,\r
- skipConstants, flags, nullptr, NULL, NULL );\r
- }\r
-\r
- return Effect::FromMemory( device, data, preprocessorDefines, includeFile,\r
- skipConstants, flags );\r
- }\r
-\r
- Effect^ Effect::FromStream( SlimDX::Direct3D9::Device^ device, Stream^ stream, ShaderFlags flags )\r
- {\r
- DataStream^ ds = nullptr;\r
- array<Byte>^ data = Utilities::ReadStream( stream, &ds );\r
- if( data == nullptr )\r
- {\r
- UINT size = static_cast<UINT>( ds->RemainingLength );\r
- return FromMemory_Internal( device, ds->SeekToEnd(), size, nullptr, nullptr,\r
- nullptr, flags, nullptr, NULL, NULL );\r
- }\r
-\r
- return FromMemory( device, data, flags );\r
- }\r
-\r
- Effect^ Effect::FromString( SlimDX::Direct3D9::Device^ device, String^ sourceData, array<Macro>^ preprocessorDefines, Include^ includeFile,\r
- String^ skipConstants, ShaderFlags flags, EffectPool^ pool, [Out] String^ %compilationErrors )\r
- {\r
- array<Byte>^ data = System::Text::ASCIIEncoding::ASCII->GetBytes( sourceData );\r
-\r
- return FromMemory( device, data, preprocessorDefines, includeFile,\r
- skipConstants, flags, pool, compilationErrors );\r
- }\r
-\r
- Effect^ Effect::FromString( SlimDX::Direct3D9::Device^ device, String^ sourceData, array<Macro>^ preprocessorDefines, Include^ includeFile,\r
- String^ skipConstants, ShaderFlags flags, EffectPool^ pool )\r
- {\r
- array<Byte>^ data = System::Text::ASCIIEncoding::ASCII->GetBytes( sourceData );\r
-\r
- return FromMemory( device, data, preprocessorDefines, includeFile,\r
- skipConstants, flags, pool );\r
- }\r
-\r
- Effect^ Effect::FromString( SlimDX::Direct3D9::Device^ device, String^ sourceData, array<Macro>^ preprocessorDefines, Include^ includeFile,\r
- String^ skipConstants, ShaderFlags flags )\r
- {\r
- array<Byte>^ data = System::Text::ASCIIEncoding::ASCII->GetBytes( sourceData );\r
-\r
- return FromMemory( device, data, preprocessorDefines, includeFile,\r
- skipConstants, flags );\r
- }\r
-\r
- Effect^ Effect::FromString( SlimDX::Direct3D9::Device^ device, String^ sourceData, ShaderFlags flags )\r
- {\r
- array<Byte>^ data = System::Text::ASCIIEncoding::ASCII->GetBytes( sourceData );\r
-\r
- return FromMemory( device, data, flags );\r
- }\r
-\r
- Effect^ Effect::FromFile( SlimDX::Direct3D9::Device^ device, String^ fileName, array<Macro>^ preprocessorDefines, Include^ includeFile,\r
- String^ skipConstants, ShaderFlags flags, EffectPool^ pool, [Out] String^ %compilationErrors )\r
- {\r
- ID3DXEffect* effect;\r
- ID3DXBuffer* errorBuffer;\r
- pin_ptr<const wchar_t> pinnedName = PtrToStringChars( fileName );\r
-\r
- LPCSTR skipString = NULL;\r
- pin_ptr<Byte> pinnedSkip;\r
- if( skipConstants != nullptr )\r
- {\r
- array<Byte>^ skipBytes = System::Text::ASCIIEncoding::ASCII->GetBytes( skipConstants );\r
- pinnedSkip = &skipBytes[0];\r
- skipString = reinterpret_cast<LPCSTR>( pinnedSkip );\r
- }\r
-\r
- IncludeShim includeShim = IncludeShim( includeFile );\r
- ID3DXInclude* includePtr = NULL;\r
- if( includeFile != nullptr )\r
- includePtr = &includeShim;\r
-\r
- ID3DXEffectPool* effectPool = pool != nullptr ? pool->InternalPointer : NULL;\r
- array<GCHandle>^ handles;\r
- stack_array<D3DXMACRO> macros = Macro::Marshal( preprocessorDefines, handles );\r
- D3DXMACRO* macrosPtr = macros.size() > 0 ? ¯os[0] : NULL;\r
-\r
- HRESULT hr = D3DXCreateEffectFromFileEx( device->InternalPointer, pinnedName, macrosPtr, includePtr,\r
- skipString, static_cast<DWORD>( flags ), effectPool, &effect, &errorBuffer );\r
- \r
- Macro::Unmarshal( handles );\r
- compilationErrors = Utilities::BufferToString( errorBuffer );\r
-\r
- Exception^ e = CompilationException::Check<Direct3D9Exception^>( hr, compilationErrors );\r
- if( e != nullptr )\r
- throw e;\r
-\r
- return gcnew Effect( effect, nullptr );\r
- }\r
-\r
- Effect^ Effect::FromFile( SlimDX::Direct3D9::Device^ device, String^ fileName, array<Macro>^ preprocessorDefines, Include^ includeFile,\r
- String^ skipConstants, ShaderFlags flags, EffectPool^ pool )\r
- {\r
- ID3DXEffect* effect;\r
- ID3DXBuffer* errorBuffer;\r
- pin_ptr<const wchar_t> pinnedName = PtrToStringChars( fileName );\r
-\r
- LPCSTR skipString = NULL;\r
- pin_ptr<Byte> pinnedSkip;\r
- if( skipConstants != nullptr )\r
- {\r
- array<Byte>^ skipBytes = System::Text::ASCIIEncoding::ASCII->GetBytes( skipConstants );\r
- pinnedSkip = &skipBytes[0];\r
- skipString = reinterpret_cast<LPCSTR>( pinnedSkip );\r
- }\r
-\r
- IncludeShim includeShim = IncludeShim( includeFile );\r
- ID3DXInclude* includePtr = NULL;\r
- if( includeFile != nullptr )\r
- includePtr = &includeShim;\r
-\r
- ID3DXEffectPool* effectPool = pool != nullptr ? pool->InternalPointer : NULL;\r
- array<GCHandle>^ handles;\r
- stack_array<D3DXMACRO> macros = Macro::Marshal( preprocessorDefines, handles );\r
- D3DXMACRO* macrosPtr = macros.size() > 0 ? ¯os[0] : NULL;\r
-\r
- HRESULT hr = D3DXCreateEffectFromFileEx( device->InternalPointer, pinnedName, macrosPtr, includePtr,\r
- skipString, static_cast<DWORD>( flags ), effectPool, &effect, &errorBuffer );\r
- \r
- Macro::Unmarshal( handles );\r
- String^ compilationErrors = Utilities::BufferToString( errorBuffer );\r
-\r
- Exception^ e = CompilationException::Check<Direct3D9Exception^>( hr, compilationErrors );\r
- if( e != nullptr )\r
- throw e;\r
-\r
- return gcnew Effect( effect, nullptr );\r
- }\r
-\r
- Effect^ Effect::FromFile( SlimDX::Direct3D9::Device^ device, String^ fileName, array<Macro>^ preprocessorDefines, Include^ includeFile,\r
- String^ skipConstants, ShaderFlags flags )\r
- {\r
- ID3DXEffect* effect;\r
- ID3DXBuffer* errorBuffer;\r
- pin_ptr<const wchar_t> pinnedName = PtrToStringChars( fileName );\r
-\r
- LPCSTR skipString = NULL;\r
- pin_ptr<Byte> pinnedSkip;\r
- if( skipConstants != nullptr )\r
- {\r
- array<Byte>^ skipBytes = System::Text::ASCIIEncoding::ASCII->GetBytes( skipConstants );\r
- pinnedSkip = &skipBytes[0];\r
- skipString = reinterpret_cast<LPCSTR>( pinnedSkip );\r
- }\r
-\r
- IncludeShim includeShim = IncludeShim( includeFile );\r
- ID3DXInclude* includePtr = NULL;\r
- if( includeFile != nullptr )\r
- includePtr = &includeShim;\r
-\r
- array<GCHandle>^ handles;\r
- stack_array<D3DXMACRO> macros = Macro::Marshal( preprocessorDefines, handles );\r
- D3DXMACRO* macrosPtr = macros.size() > 0 ? ¯os[0] : NULL;\r
-\r
- HRESULT hr = D3DXCreateEffectFromFileEx( device->InternalPointer, pinnedName, macrosPtr, includePtr,\r
- skipString, static_cast<DWORD>( flags ), NULL, &effect, &errorBuffer );\r
- \r
- Macro::Unmarshal( handles );\r
- String^ compilationErrors = Utilities::BufferToString( errorBuffer );\r
-\r
- Exception^ e = CompilationException::Check<Direct3D9Exception^>( hr, compilationErrors );\r
- if( e != nullptr )\r
- throw e;\r
-\r
- return gcnew Effect( effect, nullptr );\r
- }\r
-\r
- Effect^ Effect::FromFile( SlimDX::Direct3D9::Device^ device, String^ fileName, ShaderFlags flags )\r
- {\r
- ID3DXEffect* effect;\r
- ID3DXBuffer* errorBuffer;\r
- pin_ptr<const wchar_t> pinnedName = PtrToStringChars( fileName );\r
-\r
- HRESULT hr = D3DXCreateEffectFromFileEx( device->InternalPointer, pinnedName, NULL, NULL,\r
- NULL, static_cast<DWORD>( flags ), NULL, &effect, &errorBuffer );\r
- \r
- String^ compilationErrors = Utilities::BufferToString( errorBuffer );\r
-\r
- Exception^ e = CompilationException::Check<Direct3D9Exception^>( hr, compilationErrors );\r
- if( e != nullptr )\r
- throw e;\r
-\r
- return gcnew Effect( effect, nullptr );\r
- }\r
-\r
- Effect^ Effect::Clone( SlimDX::Direct3D9::Device^ device )\r
- {\r
- ID3DXEffect *result;\r
-\r
- HRESULT hr = InternalPointer->CloneEffect( device->InternalPointer, &result );\r
- if( RECORD_D3D9( hr ).IsFailure )\r
- return nullptr;\r
-\r
- return gcnew Effect( result, nullptr );\r
- }\r
-\r
- int Effect::Begin( FX flags )\r
- {\r
- unsigned int passCount;\r
-\r
- HRESULT hr = InternalPointer->Begin( &passCount, static_cast<DWORD>( flags ) );\r
- RECORD_D3D9( hr );\r
-\r
- return passCount;\r
- }\r
-\r
- int Effect::Begin()\r
- {\r
- unsigned int passCount;\r
-\r
- HRESULT hr = InternalPointer->Begin( &passCount, 0 );\r
- RECORD_D3D9( hr );\r
-\r
- return passCount;\r
- }\r
-\r
- Result Effect::End()\r
- {\r
- HRESULT hr = InternalPointer->End();\r
- return RECORD_D3D9( hr );\r
- }\r
-\r
- Result Effect::BeginPass( int pass )\r
- {\r
- HRESULT hr = InternalPointer->BeginPass( pass );\r
- return RECORD_D3D9( hr );\r
- }\r
-\r
- Result Effect::EndPass()\r
- {\r
- HRESULT hr = InternalPointer->EndPass();\r
- return RECORD_D3D9( hr );\r
- }\r
-\r
- Result Effect::BeginParameterBlock()\r
- {\r
- HRESULT hr = InternalPointer->BeginParameterBlock();\r
- return RECORD_D3D9( hr );\r
- }\r
-\r
- EffectHandle^ Effect::EndParameterBlock()\r
- {\r
- D3DXHANDLE handle = InternalPointer->EndParameterBlock();\r
- if( handle == NULL )\r
- return nullptr;\r
- return gcnew EffectHandle( handle );\r
- }\r
-\r
- Result Effect::ApplyParameterBlock( EffectHandle^ parameterBlock )\r
- {\r
- D3DXHANDLE handle = parameterBlock != nullptr ? parameterBlock->InternalHandle : NULL;\r
- HRESULT hr = InternalPointer->ApplyParameterBlock( handle );\r
- GC::KeepAlive( parameterBlock );\r
- return RECORD_D3D9( hr );\r
- }\r
-\r
- Result Effect::DeleteParameterBlock( EffectHandle^ parameterBlock )\r
- {\r
- D3DXHANDLE handle = parameterBlock != nullptr ? parameterBlock->InternalHandle : NULL;\r
- HRESULT hr = InternalPointer->DeleteParameterBlock( handle );\r
- GC::KeepAlive( parameterBlock );\r
- return RECORD_D3D9( hr );\r
- }\r
-\r
- bool Effect::IsParameterUsed( EffectHandle^ parameter, EffectHandle^ technique )\r
- {\r
- D3DXHANDLE paramHandle = parameter != nullptr ? parameter->InternalHandle : NULL;\r
- D3DXHANDLE techHandle = technique != nullptr ? technique->InternalHandle : NULL;\r
- BOOL used = InternalPointer->IsParameterUsed( paramHandle, techHandle );\r
- GC::KeepAlive( parameter );\r
- return used > 0;\r
- }\r
-\r
- Result Effect::CommitChanges()\r
- {\r
- HRESULT hr = InternalPointer->CommitChanges();\r
- return RECORD_D3D9( hr );\r
- }\r
-\r
- EffectHandle^ Effect::FindNextValidTechnique( EffectHandle^ technique )\r
- {\r
- D3DXHANDLE handle;\r
- D3DXHANDLE parentHandle = technique != nullptr ? technique->InternalHandle : NULL;\r
-\r
- HRESULT hr = InternalPointer->FindNextValidTechnique( parentHandle, &handle );\r
- GC::KeepAlive( technique );\r
- if( RECORD_D3D9( hr ).IsFailure || handle == NULL )\r
- return nullptr;\r
-\r
- return gcnew EffectHandle( handle );\r
- }\r
-\r
- bool Effect::ValidateTechnique( EffectHandle^ technique )\r
- {\r
- D3DXHANDLE handle = technique != nullptr ? technique->InternalHandle : NULL;\r
- bool result = SUCCEEDED( InternalPointer->ValidateTechnique( handle ) );\r
- GC::KeepAlive( technique );\r
- return result;\r
- }\r
-\r
- EffectHandle^ Effect::Technique::get()\r
- {\r
- D3DXHANDLE handle = InternalPointer->GetCurrentTechnique();\r
- if( handle == NULL )\r
- return nullptr;\r
- return gcnew EffectHandle( handle );\r
- }\r
-\r
- void Effect::Technique::set( EffectHandle^ value )\r
- {\r
- D3DXHANDLE handle = value != nullptr ? value->InternalHandle : NULL;\r
- HRESULT hr = InternalPointer->SetTechnique( handle );\r
- GC::KeepAlive( value );\r
- RECORD_D3D9( hr );\r
- }\r
-\r
- Result Effect::OnLostDevice()\r
- {\r
- HRESULT hr = InternalPointer->OnLostDevice();\r
- return RECORD_D3D9( hr );\r
- }\r
-\r
- Result Effect::OnResetDevice()\r
- {\r
- HRESULT hr = InternalPointer->OnResetDevice();\r
- return RECORD_D3D9( hr );\r
- }\r
-\r
- Result Effect::SetRawValue( EffectHandle^ handle, DataStream^ data )\r
- {\r
- return SetRawValue( handle, data, 0, static_cast<int>( data->Length ) );\r
- }\r
-\r
- Result Effect::SetRawValue( EffectHandle^ handle, DataStream^ data, int offset, int count )\r
- {\r
- D3DXHANDLE value = handle != nullptr ? handle->InternalHandle : NULL;\r
- HRESULT hr = InternalPointer->SetRawValue( value, data->PositionPointer, offset, count );\r
- GC::KeepAlive( handle );\r
- return RECORD_D3D9( hr );\r
- }\r
-\r
- Result Effect::SetRawValue( EffectHandle^ handle, array<float>^ data )\r
- {\r
- return SetRawValue( handle, data, 0, data->Length );\r
- }\r
-\r
- // only float[] and not T[] due to SDK docs:\r
- // "All values are expected to be either matrix4x4s or float4s and all matrices are expected to be \r
- // in column-major order. Int or float values are cast into a float4; therefore, it is highly recommended \r
- // that you use SetRawValue with only float4 or matrix4x4 data."\r
- Result Effect::SetRawValue( EffectHandle^ handle, array<float>^ data, int startIndex, int count )\r
- {\r
- D3DXHANDLE value = handle != nullptr ? handle->InternalHandle : NULL;\r
- pin_ptr<float> pinnedData = &data[startIndex];\r
- HRESULT hr = InternalPointer->SetRawValue( value, pinnedData, 0, count * sizeof(float) );\r
- GC::KeepAlive( handle );\r
- return RECORD_D3D9( hr );\r
- }\r
-\r
- DataStream^ Effect::Disassemble( bool enableColorCode )\r
- {\r
- ID3DXBuffer *result = NULL;\r
-\r
- HRESULT hr = D3DXDisassembleEffect( InternalPointer, enableColorCode, &result );\r
-\r
- if( RECORD_D3D9( hr ).IsFailure )\r
- return nullptr;\r
-\r
- return gcnew DataStream( result );\r
- }\r
-\r
- void Effect::StateManager::set( IEffectStateManager^ manager )\r
- {\r
- if( shim != NULL )\r
- delete shim;\r
-\r
- // Manual Allocation: Handled properly\r
- // the class needs to keep this pointer around\r
- shim = new IEffectStateManagerShim( manager, this );\r
-\r
- HRESULT hr = InternalPointer->SetStateManager( shim );\r
- RECORD_D3D9( hr );\r
- }\r
-\r
- IEffectStateManager^ Effect::StateManager::get()\r
- {\r
- if( shim != NULL )\r
- return shim->GetManager();\r
- else\r
- return nullptr;\r
- }\r
-\r
- SlimDX::Direct3D9::Device^ Effect::Device::get()\r
- {\r
- IDirect3DDevice9* device;\r
-\r
- HRESULT hr = InternalPointer->GetDevice( &device );\r
- \r
- if( RECORD_D3D9( hr ).IsFailure )\r
- return nullptr;\r
-\r
- return SlimDX::Direct3D9::Device::FromPointer( device );\r
- }\r
-\r
- EffectPool^ Effect::Pool::get()\r
- {\r
- ID3DXEffectPool *pool;\r
-\r
- HRESULT hr = InternalPointer->GetPool( &pool );\r
-\r
- if( RECORD_D3D9( hr ).IsFailure )\r
- return nullptr;\r
-\r
- return EffectPool::FromPointer( pool );\r
- }\r
-}\r
-}\r