OSDN Git Service

Merge branch 'feature/#36529_SlimDXからSharpDXへの移行' into develop
[dtxmania/dtxmania.git] / SlimDXc_Jun2010(VC++2008) / source / direct3d9 / FragmentLinker.cpp
diff --git a/SlimDXc_Jun2010(VC++2008)/source/direct3d9/FragmentLinker.cpp b/SlimDXc_Jun2010(VC++2008)/source/direct3d9/FragmentLinker.cpp
deleted file mode 100644 (file)
index a49fed5..0000000
+++ /dev/null
@@ -1,303 +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 "../VersionConfig.h"\r
-#if SLIMDX_D3DX_VERSION < 42\r
-\r
-#include <d3d9.h>\r
-#include <d3dx9.h>\r
-\r
-#include "../stack_array.h"\r
-#include "../DataStream.h"\r
-#include "../ComObject.h"\r
-\r
-#include "Direct3D9Exception.h"\r
-\r
-#include "Device.h"\r
-#include "VertexShader9.h"\r
-#include "PixelShader9.h"\r
-#include "FragmentLinker.h"\r
-\r
-using namespace System;\r
-using namespace System::Runtime::InteropServices;\r
-\r
-namespace SlimDX\r
-{\r
-namespace Direct3D9\r
-{\r
-       FragmentLinker::FragmentLinker( SlimDX::Direct3D9::Device^ device, int cacheSize )\r
-       {\r
-               IDirect3DDevice9* devicePointer = device->InternalPointer;\r
-               ID3DXFragmentLinker* linker;\r
-\r
-               HRESULT hr = D3DXCreateFragmentLinker( devicePointer, cacheSize, &linker );\r
-               RECORD_D3D9( hr );\r
-               if( FAILED( hr ) )\r
-                       throw gcnew Direct3D9Exception( Result::Last );\r
-\r
-               Construct(linker);\r
-       }\r
-       \r
-       DataStream^ FragmentLinker::Gather( array<Byte>^ sourceData, array<Macro>^ defines,\r
-               Include^ includeFile, ShaderFlags flags, [Out] String^% errors )\r
-       {\r
-               ID3DXBuffer* fragmentBuffer;\r
-               ID3DXBuffer* errorBuffer;\r
-               pin_ptr<const Byte> pinnedData = &sourceData[0];\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( defines, handles );\r
-               D3DXMACRO* macrosPtr = macros.size() > 0 ? &macros[0] : NULL;\r
-\r
-#pragma warning(push)\r
-#pragma warning(disable:4996)\r
-               HRESULT hr = D3DXGatherFragments( reinterpret_cast<LPCSTR>( pinnedData ), sourceData->Length, macrosPtr, includePtr,\r
-                       static_cast<DWORD>( flags ), &fragmentBuffer, &errorBuffer );\r
-#pragma warning(pop)\r
-\r
-               //clean up after marshaling macros\r
-               Macro::Unmarshal( handles );\r
-               //marshal errors if necessary\r
-               errors = Utilities::BufferToString( errorBuffer );\r
-               \r
-               if( RECORD_D3D9( hr ).IsFailure )\r
-                       return nullptr;\r
-\r
-               return gcnew DataStream( fragmentBuffer );\r
-       }\r
-\r
-// We know that Gather is obsolete, we declared it ourselves\r
-#pragma warning(disable:4947)\r
-       DataStream^ FragmentLinker::Gather( String^ sourceData, array<Macro>^ defines,\r
-               Include^ includeFile, ShaderFlags flags, [Out] String^% errors )\r
-       {\r
-               array<Byte>^ sourceBytes = System::Text::ASCIIEncoding::ASCII->GetBytes( sourceData );\r
-               return Gather( sourceBytes, defines, includeFile, flags, errors );\r
-       }\r
-#pragma warning(default:4947)\r
-\r
-       DataStream^ FragmentLinker::GatherFromFile( String^ fileName, array<Macro>^ defines,\r
-               Include^ includeFile, ShaderFlags flags, [Out] String^% errors )\r
-       {\r
-               ID3DXBuffer* fragmentBuffer;\r
-               ID3DXBuffer* errorBuffer;\r
-               pin_ptr<const wchar_t> pinnedFile = PtrToStringChars( fileName );\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( defines, handles );\r
-               D3DXMACRO* macrosPtr = macros.size() > 0 ? &macros[0] : NULL;\r
-\r
-#pragma warning(push)\r
-#pragma warning(disable:4996)\r
-               HRESULT hr = D3DXGatherFragmentsFromFile( reinterpret_cast<LPCTSTR>( pinnedFile ), macrosPtr, includePtr,\r
-                       static_cast<DWORD>( flags ), &fragmentBuffer, &errorBuffer );\r
-#pragma warning(pop)\r
-\r
-               //clean up after marshaling macros\r
-               Macro::Unmarshal( handles );\r
-               //marshal errors if necessary\r
-               errors = Utilities::BufferToString( errorBuffer );\r
-               \r
-               if( RECORD_D3D9( hr ).IsFailure )\r
-                       return nullptr;\r
-\r
-               return gcnew DataStream( fragmentBuffer );\r
-       }\r
-\r
-       Result FragmentLinker::AddFragments( array<int>^ fragments )\r
-       {\r
-               pin_ptr<int> pinnedFragments = &fragments[0];\r
-               HRESULT hr = InternalPointer->AddFragments( reinterpret_cast<const DWORD*>( pinnedFragments ) );\r
-               return RECORD_D3D9( hr );\r
-       }\r
-\r
-       Result FragmentLinker::AddFragments( DataStream^ fragments )\r
-       {\r
-               HRESULT hr = InternalPointer->AddFragments( reinterpret_cast<const DWORD*>( fragments->PositionPointer ) );\r
-               return RECORD_D3D9( hr );\r
-       }\r
-\r
-       DataStream^ FragmentLinker::GetFragment( EffectHandle^ name )\r
-       {\r
-               D3DXHANDLE handle = name != nullptr ? name->InternalHandle : NULL;\r
-               ID3DXBuffer* fragment;\r
-\r
-               HRESULT hr = InternalPointer->GetFragment( handle, &fragment );\r
-               GC::KeepAlive( name );\r
-               \r
-               if( RECORD_D3D9( hr ).IsFailure )\r
-                       return nullptr;\r
-\r
-               return gcnew DataStream( fragment );\r
-       }\r
-\r
-       DataStream^ FragmentLinker::Fragments::get()\r
-       {\r
-               ID3DXBuffer* fragments;\r
-\r
-               HRESULT hr = InternalPointer->GetAllFragments( &fragments );\r
-               \r
-               if( RECORD_D3D9( hr ).IsFailure )\r
-                       return nullptr;\r
-\r
-               return gcnew DataStream( fragments );\r
-       }\r
-\r
-       SlimDX::Direct3D9::Device^ FragmentLinker::Device::get()\r
-       {\r
-               IDirect3DDevice9* device;\r
-               //This method always returns the value S_OK.\r
-               InternalPointer->GetDevice( &device );\r
-\r
-               return SlimDX::Direct3D9::Device::FromPointer( device );\r
-       }\r
-\r
-       FragmentDescription FragmentLinker::GetFragmentDescription( EffectHandle^ name )\r
-       {\r
-               D3DXHANDLE handle = name != nullptr ? name->InternalHandle : NULL;\r
-               D3DXFRAGMENT_DESC description;\r
-\r
-               HRESULT hr = InternalPointer->GetFragmentDesc( handle, &description );\r
-               GC::KeepAlive( name );\r
-               if( RECORD_D3D9( hr ).IsFailure )\r
-                       return FragmentDescription();\r
-\r
-               FragmentDescription outDesc;\r
-               outDesc.Name = gcnew String( description.Name );\r
-               outDesc.Target = description.Target;\r
-\r
-               return outDesc;\r
-       }\r
-\r
-       EffectHandle^ FragmentLinker::GetFragmentHandle( int index )\r
-       {\r
-               D3DXHANDLE handle = InternalPointer->GetFragmentHandleByIndex( index );\r
-               if( handle == NULL )\r
-                       return nullptr;\r
-\r
-               return gcnew EffectHandle( handle );\r
-       }\r
-\r
-       EffectHandle^ FragmentLinker::GetFragmentHandle( String^ name )\r
-       {\r
-               array<Byte>^ nameBytes = System::Text::ASCIIEncoding::ASCII->GetBytes( name );\r
-               pin_ptr<const Byte> pinnedName = &nameBytes[0];\r
-\r
-               D3DXHANDLE handle = InternalPointer->GetFragmentHandleByName( reinterpret_cast<LPCSTR>( pinnedName ) );\r
-               if( handle == NULL )\r
-                       return nullptr;\r
-\r
-               return gcnew EffectHandle( handle );\r
-       }\r
-\r
-       void FragmentLinker::ClearCache()\r
-       {\r
-               //This method always returns the value S_OK.\r
-               InternalPointer->ClearCache();\r
-       }\r
-\r
-       ShaderBytecode^ FragmentLinker::LinkShader( String^ profile, ShaderFlags flags, array<EffectHandle^>^ fragmentHandles, [Out] String^% errors )\r
-       {\r
-               ID3DXBuffer* bytecode;\r
-               ID3DXBuffer* errorBuffer;\r
-               array<Byte>^ profileBytes = System::Text::ASCIIEncoding::ASCII->GetBytes( profile );\r
-               pin_ptr<const Byte> pinnedProfile = &profileBytes[0];\r
-\r
-               stack_array<D3DXHANDLE> handles = stackalloc( D3DXHANDLE, fragmentHandles->Length );\r
-               for( int i = 0; i < fragmentHandles->Length; ++i )\r
-                       handles[i] = fragmentHandles[i] != nullptr ? fragmentHandles[i]->InternalHandle : NULL;\r
-\r
-               HRESULT hr = InternalPointer->LinkShader( reinterpret_cast<LPCSTR>( pinnedProfile ), static_cast<DWORD>( flags ), &handles[0], fragmentHandles->Length, &bytecode, &errorBuffer );\r
-               GC::KeepAlive( fragmentHandles );\r
-               RECORD_D3D9( hr );\r
-               \r
-               //marshal errors if necessary\r
-               errors = Utilities::BufferToString( errorBuffer );\r
-               if( Result::Last.IsFailure )\r
-                       return nullptr;\r
-\r
-               return ShaderBytecode::FromPointer( bytecode );\r
-       }\r
-\r
-       VertexShader^ FragmentLinker::LinkVertexShader( String^ profile, ShaderFlags flags, array<EffectHandle^>^ fragmentHandles, [Out] String^% errors )\r
-       {\r
-               IDirect3DVertexShader9* shader;\r
-               ID3DXBuffer* errorBuffer;\r
-               array<Byte>^ profileBytes = System::Text::ASCIIEncoding::ASCII->GetBytes( profile );\r
-               pin_ptr<const Byte> pinnedProfile = &profileBytes[0];\r
-\r
-               stack_array<D3DXHANDLE> handles = stackalloc( D3DXHANDLE, fragmentHandles->Length );\r
-               for( int i = 0; i < fragmentHandles->Length; ++i )\r
-                       handles[i] = fragmentHandles[i] != nullptr ? fragmentHandles[i]->InternalHandle : NULL;\r
-\r
-               HRESULT hr = InternalPointer->LinkVertexShader( reinterpret_cast<LPCSTR>( pinnedProfile ), static_cast<DWORD>( flags ), &handles[0], fragmentHandles->Length, &shader, &errorBuffer );\r
-               GC::KeepAlive( fragmentHandles );\r
-               RECORD_D3D9( hr );\r
-               \r
-               //marshal errors if necessary\r
-               errors = Utilities::BufferToString( errorBuffer );\r
-               if( Result::Last.IsFailure )\r
-                       return nullptr;\r
-\r
-               return VertexShader::FromPointer( shader );\r
-       }\r
-\r
-       PixelShader^ FragmentLinker::LinkPixelShader( String^ profile, ShaderFlags flags, array<EffectHandle^>^ fragmentHandles, [Out] String^% errors )\r
-       {\r
-               IDirect3DPixelShader9* shader;\r
-               ID3DXBuffer* errorBuffer;\r
-               array<Byte>^ profileBytes = System::Text::ASCIIEncoding::ASCII->GetBytes( profile );\r
-               pin_ptr<const Byte> pinnedProfile = &profileBytes[0];\r
-\r
-               stack_array<D3DXHANDLE> handles = stackalloc( D3DXHANDLE, fragmentHandles->Length);\r
-               for( int i = 0; i < fragmentHandles->Length; ++i )\r
-                       handles[i] = fragmentHandles[i] != nullptr ? fragmentHandles[i]->InternalHandle : NULL;\r
-\r
-               HRESULT hr = InternalPointer->LinkPixelShader( reinterpret_cast<LPCSTR>( pinnedProfile ), static_cast<DWORD>( flags ), &handles[0], fragmentHandles->Length, &shader, &errorBuffer );\r
-               GC::KeepAlive( fragmentHandles );\r
-               RECORD_D3D9( hr );\r
-               \r
-               //marshal errors if necessary\r
-               errors = Utilities::BufferToString( errorBuffer );\r
-               if( Result::Last.IsFailure )\r
-                       return nullptr;\r
-\r
-               return PixelShader::FromPointer( shader );\r
-       }\r
-\r
-       int FragmentLinker::FragmentCount::get()\r
-       {\r
-               return InternalPointer->GetNumberOfFragments();\r
-       }\r
-}\r
-}\r
-#endif\r