3 * Copyright (c) 2007-2010 SlimDX Group
\r
5 * Permission is hereby granted, free of charge, to any person obtaining a copy
\r
6 * of this software and associated documentation files (the "Software"), to deal
\r
7 * in the Software without restriction, including without limitation the rights
\r
8 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
\r
9 * copies of the Software, and to permit persons to whom the Software is
\r
10 * furnished to do so, subject to the following conditions:
\r
12 * The above copyright notice and this permission notice shall be included in
\r
13 * all copies or substantial portions of the Software.
\r
15 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
\r
16 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
\r
17 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
\r
18 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
\r
19 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
\r
20 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
\r
27 #include "../DataStream.h"
\r
29 #include "Direct3D11Exception.h"
\r
31 #include "Device11.h"
\r
32 #include "Resource11.h"
\r
33 #include "ShaderResourceView11.h"
\r
34 #include "ShaderResourceViewDescription11.h"
\r
36 using namespace System;
\r
37 using namespace System::IO;
\r
41 namespace Direct3D11
\r
43 ShaderResourceView::ShaderResourceView( SlimDX::Direct3D11::Device^ device, SlimDX::Direct3D11::Resource^ resource )
\r
45 if( device == nullptr )
\r
46 throw gcnew ArgumentNullException( "device" );
\r
47 if( resource == nullptr )
\r
48 throw gcnew ArgumentNullException( "resource" );
\r
50 ID3D11ShaderResourceView *view = 0;
\r
51 if( RECORD_D3D11( device->InternalPointer->CreateShaderResourceView( resource->InternalPointer, 0, &view ) ).IsFailure )
\r
52 throw gcnew Direct3D11Exception( Result::Last );
\r
57 ShaderResourceView::ShaderResourceView( SlimDX::Direct3D11::Device^ device, SlimDX::Direct3D11::Resource^ resource, ShaderResourceViewDescription description )
\r
59 if( device == nullptr )
\r
60 throw gcnew ArgumentNullException( "device" );
\r
61 if( resource == nullptr )
\r
62 throw gcnew ArgumentNullException( "resource" );
\r
64 ID3D11ShaderResourceView *view = 0;
\r
65 D3D11_SHADER_RESOURCE_VIEW_DESC nativeDescription = description.CreateNativeVersion();
\r
66 if( RECORD_D3D11( device->InternalPointer->CreateShaderResourceView( resource->InternalPointer, &nativeDescription, &view ) ).IsFailure )
\r
67 throw gcnew Direct3D11Exception( Result::Last );
\r
72 ShaderResourceViewDescription ShaderResourceView::Description::get()
\r
74 D3D11_SHADER_RESOURCE_VIEW_DESC nativeDescription;
\r
75 InternalPointer->GetDesc( &nativeDescription );
\r
76 return ShaderResourceViewDescription( nativeDescription );
\r
79 ShaderResourceView^ ShaderResourceView::FromFile(SlimDX::Direct3D11::Device^ device, System::String^ fileName)
\r
81 ID3D11ShaderResourceView* resource = ConstructFromFile( device, fileName, 0 );
\r
85 return ShaderResourceView::FromPointer( static_cast<ID3D11ShaderResourceView*>( resource ) );
\r
88 ShaderResourceView^ ShaderResourceView::FromFile(SlimDX::Direct3D11::Device^ device, System::String^ fileName, ImageLoadInformation loadInformation)
\r
90 D3DX11_IMAGE_LOAD_INFO info = loadInformation.CreateNativeVersion();
\r
91 ID3D11ShaderResourceView* resource = ConstructFromFile( device, fileName, &info );
\r
95 return ShaderResourceView::FromPointer( static_cast<ID3D11ShaderResourceView*>( resource ) );
\r
98 ShaderResourceView^ ShaderResourceView::FromMemory( SlimDX::Direct3D11::Device^ device, array<System::Byte>^ memory )
\r
100 ID3D11ShaderResourceView* resource = ConstructFromMemory( device, memory, NULL );
\r
101 if( resource == 0 )
\r
104 return ShaderResourceView::FromPointer( static_cast<ID3D11ShaderResourceView*>( resource ) );
\r
107 ShaderResourceView^ ShaderResourceView::FromMemory( SlimDX::Direct3D11::Device^ device, array<System::Byte>^ memory, ImageLoadInformation loadInfo )
\r
109 D3DX11_IMAGE_LOAD_INFO info = loadInfo.CreateNativeVersion();
\r
110 ID3D11ShaderResourceView* resource = ConstructFromMemory( device, memory, &info );
\r
111 if( resource == 0 )
\r
114 return ShaderResourceView::FromPointer( static_cast<ID3D11ShaderResourceView*>( resource ) );
\r
117 ShaderResourceView^ ShaderResourceView::FromStream( SlimDX::Direct3D11::Device^ device, System::IO::Stream^ stream, int sizeInBytes )
\r
119 ID3D11ShaderResourceView* resource = ConstructFromStream( device, stream, sizeInBytes, NULL );
\r
120 if( resource == 0 )
\r
123 return ShaderResourceView::FromPointer( static_cast<ID3D11ShaderResourceView*>( resource ) );
\r
126 ShaderResourceView^ ShaderResourceView::FromStream( SlimDX::Direct3D11::Device^ device, System::IO::Stream^ stream, int sizeInBytes, ImageLoadInformation loadInfo )
\r
128 D3DX11_IMAGE_LOAD_INFO info = loadInfo.CreateNativeVersion();
\r
129 ID3D11ShaderResourceView* resource = ConstructFromStream( device, stream, sizeInBytes, &info );
\r
130 if( resource == 0 )
\r
133 return ShaderResourceView::FromPointer( static_cast<ID3D11ShaderResourceView*>( resource ) );
\r
136 ID3D11ShaderResourceView* ShaderResourceView::ConstructFromFile(SlimDX::Direct3D11::Device^ device, System::String^ fileName, D3DX11_IMAGE_LOAD_INFO* loadInformation)
\r
138 ID3D11ShaderResourceView* resource = 0;
\r
139 pin_ptr<const wchar_t> pinnedName = PtrToStringChars( fileName );
\r
140 HRESULT hr = D3DX11CreateShaderResourceViewFromFile( device->InternalPointer, pinnedName, loadInformation, 0, &resource, 0 );
\r
141 RECORD_D3D11( hr );
\r
146 ID3D11ShaderResourceView* ShaderResourceView::ConstructFromMemory(SlimDX::Direct3D11::Device^ device, array<Byte>^ memory, D3DX11_IMAGE_LOAD_INFO* loadInformation)
\r
148 ID3D11ShaderResourceView* resource = 0;
\r
149 pin_ptr<unsigned char> pinnedMemory = &memory[0];
\r
151 HRESULT hr = D3DX11CreateShaderResourceViewFromMemory( device->InternalPointer, pinnedMemory, memory->Length, loadInformation, 0, &resource, 0 );
\r
152 RECORD_D3D11( hr );
\r
157 ID3D11ShaderResourceView* ShaderResourceView::ConstructFromStream( SlimDX::Direct3D11::Device^ device, Stream^ stream, int sizeInBytes, D3DX11_IMAGE_LOAD_INFO* info )
\r
159 DataStream^ ds = nullptr;
\r
160 array<Byte>^ memory = SlimDX::Utilities::ReadStream( stream, sizeInBytes, &ds );
\r
162 if( memory == nullptr )
\r
164 ID3D11ShaderResourceView* resource = NULL;
\r
165 SIZE_T size = static_cast<SIZE_T>( ds->RemainingLength );
\r
167 HRESULT hr = D3DX11CreateShaderResourceViewFromMemory( device->InternalPointer, ds->SeekToEnd(), size, info, NULL, &resource, NULL );
\r
168 RECORD_D3D11( hr );
\r
173 return ConstructFromMemory( device, memory, info );
\r