OSDN Git Service

Merge branch 'feature/#36529_SlimDXからSharpDXへの移行' into develop
[dtxmania/dtxmania.git] / SlimDXc_Jun2010(VC++2008) / source / direct3d9 / Effect9.cpp
diff --git a/SlimDXc_Jun2010(VC++2008)/source/direct3d9/Effect9.cpp b/SlimDXc_Jun2010(VC++2008)/source/direct3d9/Effect9.cpp
deleted file mode 100644 (file)
index 7b29f7d..0000000
+++ /dev/null
@@ -1,626 +0,0 @@
-#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 ? &macros[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 ? &macros[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 ? &macros[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 ? &macros[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