+++ /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
-#include <vcclr.h>\r
-\r
-#include "../DataStream.h"\r
-#include "../ComObject.h"\r
-#include "../Utilities.h"\r
-\r
-#include "../math/Vector2.h"\r
-\r
-#include "Device.h"\r
-#include "D3DX.h"\r
-#include "CubeTexture.h"\r
-\r
-#include "Direct3D9Exception.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
- void WINAPI NativeD3DXFill2D(D3DXVECTOR4 *out, CONST D3DXVECTOR2 *pTexCoord, CONST D3DXVECTOR2 *pTexelSize, LPVOID data);\r
- void WINAPI NativeD3DXFill3D(D3DXVECTOR4 *out, CONST D3DXVECTOR3 *pTexCoord, CONST D3DXVECTOR3 *pTexelSize, LPVOID data);\r
-\r
- CubeTexture::CubeTexture( SlimDX::Direct3D9::Device^ device, int edgeLength, int numLevels, Usage usage, Format format, Pool pool )\r
- {\r
- IDirect3DCubeTexture9* texture = NULL;\r
- HRESULT hr = device->InternalPointer->CreateCubeTexture( edgeLength, numLevels, static_cast<DWORD>( usage ),\r
- static_cast<D3DFORMAT>( format ), static_cast<D3DPOOL>( pool ), &texture, NULL );\r
- \r
- if( RECORD_D3D9(hr).IsFailure )\r
- throw gcnew Direct3D9Exception( Result::Last );\r
-\r
- Construct(texture);\r
- if( pool == Pool::Default )\r
- this->IsDefaultPool = true;\r
- }\r
-\r
- CubeTexture::CubeTexture( SlimDX::Direct3D9::Device^ device, int edgeLength, int numLevels, Usage usage, Format format, Pool pool, [Out] IntPtr% sharedHandle )\r
- {\r
- IDirect3DCubeTexture9* texture = NULL;\r
- HANDLE sharedHandleNative = NULL;\r
- HRESULT hr = device->InternalPointer->CreateCubeTexture( edgeLength, numLevels, static_cast<DWORD>( usage ),\r
- static_cast<D3DFORMAT>( format ), static_cast<D3DPOOL>( pool ), &texture, &sharedHandleNative );\r
- \r
- if( RECORD_D3D9(hr).IsFailure )\r
- throw gcnew Direct3D9Exception( Result::Last );\r
-\r
- Construct(texture);\r
- sharedHandle = IntPtr(sharedHandleNative);\r
- if( pool == Pool::Default )\r
- this->IsDefaultPool = true;\r
- }\r
-\r
- CubeTextureRequirements CubeTexture::CheckRequirements(SlimDX::Direct3D9::Device^ device, int size,\r
- int numMipLevels, Usage usage, Format format, Pool pool)\r
- {\r
- CubeTextureRequirements result; // Result.\r
- D3DFORMAT d3dFormat = static_cast<D3DFORMAT>( format ); // Format.\r
- HRESULT hr; // Error code.\r
-\r
- // Get texture requirements.\r
- hr = D3DXCheckCubeTextureRequirements(device->InternalPointer, reinterpret_cast<UINT*>( &size ), \r
- reinterpret_cast<UINT*>( &numMipLevels ), static_cast<DWORD>( usage ),\r
- reinterpret_cast<D3DFORMAT*>( &d3dFormat ), static_cast<D3DPOOL>( pool ) );\r
- \r
- if( RECORD_D3D9(hr).IsFailure )\r
- return CubeTextureRequirements();\r
-\r
- // Return proposed values.\r
- result.Size = size;\r
- result.Format = format;\r
- result.MipLevelCount = numMipLevels;\r
-\r
- return result;\r
- }\r
-\r
- CubeTexture^ CubeTexture::FromMemory_Internal( SlimDX::Direct3D9::Device^ device, const void* memory, UINT sizeBytes,\r
- int size, int numLevels, Usage usage, Format format, Pool pool, Filter filter, Filter mipFilter, int colorKey,\r
- ImageInformation* imageInformation, PaletteEntry* palette )\r
- {\r
- IDirect3DCubeTexture9* texture = NULL;\r
-\r
- HRESULT hr = D3DXCreateCubeTextureFromFileInMemoryEx( device->InternalPointer, memory, sizeBytes, size, numLevels,\r
- static_cast<DWORD>( usage ), static_cast<D3DFORMAT>( format ), static_cast<D3DPOOL>( pool ), static_cast<DWORD>( filter ), static_cast<DWORD>( mipFilter ),\r
- static_cast<D3DCOLOR>( colorKey ), reinterpret_cast<D3DXIMAGE_INFO*>( imageInformation ), \r
- reinterpret_cast<PALETTEENTRY*>( palette ), &texture );\r
- \r
- if( RECORD_D3D9(hr).IsFailure )\r
- {\r
- palette = nullptr;\r
- return nullptr;\r
- }\r
-\r
- CubeTexture^ result = gcnew CubeTexture( texture, nullptr );\r
- if( pool == Pool::Default )\r
- result->IsDefaultPool = true;\r
- return result;\r
- }\r
-\r
- CubeTexture^ CubeTexture::FromMemory( SlimDX::Direct3D9::Device^ device, array<Byte>^ memory, int size, int numLevels,\r
- Usage usage, Format format, Pool pool, Filter filter, Filter mipFilter, int colorKey,\r
- [Out] ImageInformation% imageInformation, [Out] array<PaletteEntry>^% palette )\r
- {\r
- pin_ptr<unsigned char> pinnedMemory = &memory[0];\r
- imageInformation = ImageInformation();\r
- pin_ptr<ImageInformation> pinnedImageInfo = &imageInformation;\r
- palette = gcnew array<PaletteEntry>( 256 );\r
- pin_ptr<PaletteEntry> pinnedPalette = &palette[0];\r
-\r
- return FromMemory_Internal( device, pinnedMemory, static_cast<UINT>( memory->Length ), size, numLevels,\r
- usage, format, pool, filter, mipFilter, colorKey, pinnedImageInfo, pinnedPalette );\r
- }\r
-\r
- CubeTexture^ CubeTexture::FromMemory( SlimDX::Direct3D9::Device^ device, array<Byte>^ memory, int size, int numLevels,\r
- Usage usage, Format format, Pool pool, Filter filter, Filter mipFilter, int colorKey,\r
- [Out] ImageInformation% imageInformation )\r
- {\r
- pin_ptr<unsigned char> pinnedMemory = &memory[0];\r
- pin_ptr<ImageInformation> pinnedImageInfo = &imageInformation;\r
-\r
- return FromMemory_Internal( device, pinnedMemory, static_cast<UINT>( memory->Length ), size, numLevels,\r
- usage, format, pool, filter, mipFilter, colorKey, pinnedImageInfo, NULL );\r
- }\r
-\r
- CubeTexture^ CubeTexture::FromMemory( SlimDX::Direct3D9::Device^ device, array<Byte>^ memory, int size, int numLevels,\r
- Usage usage, Format format, Pool pool, Filter filter, Filter mipFilter, int colorKey )\r
- {\r
- pin_ptr<unsigned char> pinnedMemory = &memory[0];\r
-\r
- return FromMemory_Internal( device, pinnedMemory, static_cast<UINT>( memory->Length ), size, numLevels,\r
- usage, format, pool, filter, mipFilter, colorKey, NULL, NULL );\r
- }\r
-\r
- CubeTexture^ CubeTexture::FromMemory( SlimDX::Direct3D9::Device^ device, array<Byte>^ memory, Usage usage, Pool pool )\r
- {\r
- return CubeTexture::FromMemory( device, memory, D3DX::Default, D3DX::Default,\r
- usage, Format::Unknown, pool, Filter::Default, Filter::Default, 0 );\r
- }\r
-\r
- CubeTexture^ CubeTexture::FromMemory( SlimDX::Direct3D9::Device^ device, array<Byte>^ memory )\r
- {\r
- return CubeTexture::FromMemory( device, memory, Usage::None, Pool::Managed );\r
- }\r
-\r
- CubeTexture^ CubeTexture::FromStream( SlimDX::Direct3D9::Device^ device, Stream^ stream, int sizeBytes, int size, int numLevels,\r
- Usage usage, Format format, Pool pool, Filter filter, Filter mipFilter, int colorKey,\r
- [Out] ImageInformation% imageInformation, [Out] array<PaletteEntry>^% palette )\r
- {\r
- DataStream^ ds;\r
- array<Byte>^ data = Utilities::ReadStream( stream, sizeBytes, &ds );\r
- \r
- if( data == nullptr )\r
- {\r
- palette = gcnew array<PaletteEntry>( 256 );\r
- pin_ptr<PaletteEntry> pinnedPalette = &palette[0];\r
- imageInformation = ImageInformation();\r
- pin_ptr<ImageInformation> pinnedImageInfo = &imageInformation;\r
-\r
- CubeTexture^ texture = FromMemory_Internal( device, ds->PositionPointer, sizeBytes, size, numLevels,\r
- usage, format, pool, filter, mipFilter, colorKey, pinnedImageInfo, pinnedPalette );\r
-\r
- ds->Seek( sizeBytes, SeekOrigin::Current );\r
- return texture;\r
- }\r
-\r
- return CubeTexture::FromMemory( device, data, size, numLevels, usage, format, pool, filter, mipFilter, \r
- colorKey, imageInformation, palette );\r
- }\r
-\r
- CubeTexture^ CubeTexture::FromStream( SlimDX::Direct3D9::Device^ device, Stream^ stream, int sizeBytes, int size, int numLevels,\r
- Usage usage, Format format, Pool pool, Filter filter, Filter mipFilter, int colorKey,\r
- [Out] ImageInformation% imageInformation )\r
- {\r
- DataStream^ ds;\r
- array<Byte>^ data = Utilities::ReadStream( stream, sizeBytes, &ds );\r
- \r
- if( data == nullptr )\r
- {\r
- imageInformation = ImageInformation();\r
- pin_ptr<ImageInformation> pinnedImageInfo = &imageInformation;\r
-\r
- CubeTexture^ texture = FromMemory_Internal( device, ds->PositionPointer, sizeBytes, size, numLevels,\r
- usage, format, pool, filter, mipFilter, colorKey, pinnedImageInfo, NULL );\r
-\r
- ds->Seek( sizeBytes, SeekOrigin::Current );\r
- return texture;\r
- }\r
-\r
- return CubeTexture::FromMemory( device, data, size, numLevels, usage, format, pool, filter, mipFilter, \r
- colorKey, imageInformation );\r
- }\r
-\r
- CubeTexture^ CubeTexture::FromStream( SlimDX::Direct3D9::Device^ device, Stream^ stream, int sizeBytes, int size, int numLevels,\r
- Usage usage, Format format, Pool pool, Filter filter, Filter mipFilter, int colorKey )\r
- {\r
- DataStream^ ds;\r
- array<Byte>^ data = Utilities::ReadStream( stream, sizeBytes, &ds );\r
- \r
- if( data == nullptr )\r
- {\r
- CubeTexture^ texture = FromMemory_Internal( device, ds->PositionPointer, sizeBytes, size, numLevels,\r
- usage, format, pool, filter, mipFilter, colorKey, NULL, NULL );\r
-\r
- ds->Seek( sizeBytes, SeekOrigin::Current );\r
- return texture;\r
- }\r
-\r
- return CubeTexture::FromMemory( device, data, size, numLevels, usage, format, pool, filter, mipFilter, colorKey );\r
- }\r
-\r
- CubeTexture^ CubeTexture::FromStream( SlimDX::Direct3D9::Device^ device, Stream^ stream, int size, int numLevels,\r
- Usage usage, Format format, Pool pool, Filter filter, Filter mipFilter, int colorKey )\r
- {\r
- return CubeTexture::FromStream( device, stream, 0, size, numLevels, usage, format, pool, filter, mipFilter, colorKey );\r
- }\r
-\r
- CubeTexture^ CubeTexture::FromStream( SlimDX::Direct3D9::Device^ device, Stream^ stream, Usage usage, Pool pool )\r
- {\r
- return CubeTexture::FromStream( device, stream, D3DX::Default, D3DX::Default,\r
- usage, Format::Unknown, pool, Filter::Default, Filter::Default, 0 );\r
- }\r
-\r
- CubeTexture^ CubeTexture::FromStream( SlimDX::Direct3D9::Device^ device, Stream^ stream )\r
- {\r
- return CubeTexture::FromStream( device, stream, Usage::None, Pool::Managed );\r
- }\r
-\r
- CubeTexture^ CubeTexture::FromFile( SlimDX::Direct3D9::Device^ device, String^ fileName, int size, int numLevels,\r
- Usage usage, Format format, Pool pool, Filter filter, Filter mipFilter, int colorKey,\r
- [Out] ImageInformation% imageInformation, [Out] array<PaletteEntry>^% palette )\r
- {\r
- IDirect3DCubeTexture9* texture = NULL;\r
- pin_ptr<const wchar_t> pinnedName = PtrToStringChars( fileName );\r
- imageInformation = ImageInformation();\r
- pin_ptr<ImageInformation> pinnedImageInfo = &imageInformation;\r
- palette = gcnew array<PaletteEntry>( 256 );\r
- pin_ptr<PaletteEntry> pinnedPalette = &palette[0];\r
-\r
- HRESULT hr = D3DXCreateCubeTextureFromFileEx( device->InternalPointer, pinnedName, size, \r
- numLevels, static_cast<DWORD>( usage ), static_cast<D3DFORMAT>( format ), static_cast<D3DPOOL>( pool ), static_cast<DWORD>( filter ), static_cast<DWORD>( mipFilter ), \r
- colorKey, reinterpret_cast<D3DXIMAGE_INFO*>( pinnedImageInfo ), reinterpret_cast<PALETTEENTRY*>( pinnedPalette ), &texture );\r
- \r
- if( RECORD_D3D9(hr).IsFailure )\r
- {\r
- palette = nullptr;\r
- return nullptr;\r
- }\r
-\r
- CubeTexture^ result = gcnew CubeTexture( texture, nullptr );;\r
- if( pool == Pool::Default )\r
- result->IsDefaultPool = true;\r
- return result;\r
- }\r
-\r
- CubeTexture^ CubeTexture::FromFile( SlimDX::Direct3D9::Device^ device, String^ fileName, int size, int numLevels,\r
- Usage usage, Format format, Pool pool, Filter filter, Filter mipFilter, int colorKey,\r
- [Out] ImageInformation% imageInformation )\r
- {\r
- IDirect3DCubeTexture9* texture = NULL;\r
- pin_ptr<const wchar_t> pinnedName = PtrToStringChars( fileName );\r
- pin_ptr<ImageInformation> pinnedImageInfo = &imageInformation;\r
-\r
- HRESULT hr = D3DXCreateCubeTextureFromFileEx( device->InternalPointer, pinnedName, size, \r
- numLevels, static_cast<DWORD>( usage ), static_cast<D3DFORMAT>( format ), static_cast<D3DPOOL>( pool ), static_cast<DWORD>( filter ), static_cast<DWORD>( mipFilter ), \r
- colorKey, reinterpret_cast<D3DXIMAGE_INFO*>( pinnedImageInfo ), NULL, &texture );\r
- \r
- if( RECORD_D3D9(hr).IsFailure )\r
- return nullptr;\r
-\r
- CubeTexture^ result = gcnew CubeTexture( texture, nullptr );;\r
- if( pool == Pool::Default )\r
- result->IsDefaultPool = true;\r
- return result;\r
- }\r
-\r
- CubeTexture^ CubeTexture::FromFile( SlimDX::Direct3D9::Device^ device, String^ fileName, int size, int numLevels,\r
- Usage usage, Format format, Pool pool, Filter filter, Filter mipFilter, int colorKey )\r
- {\r
- IDirect3DCubeTexture9* texture = NULL;\r
- pin_ptr<const wchar_t> pinnedName = PtrToStringChars( fileName );\r
-\r
- HRESULT hr = D3DXCreateCubeTextureFromFileEx( device->InternalPointer, pinnedName, size, \r
- numLevels, static_cast<DWORD>( usage ), static_cast<D3DFORMAT>( format ), static_cast<D3DPOOL>( pool ), static_cast<DWORD>( filter ), static_cast<DWORD>( mipFilter ), \r
- colorKey, NULL, NULL, &texture );\r
- \r
- if( RECORD_D3D9(hr).IsFailure )\r
- return nullptr;\r
-\r
- CubeTexture^ result = gcnew CubeTexture( texture, nullptr );;\r
- if( pool == Pool::Default )\r
- result->IsDefaultPool = true;\r
- return result;\r
- }\r
-\r
- CubeTexture^ CubeTexture::FromFile( SlimDX::Direct3D9::Device^ device, String^ fileName, Usage usage, Pool pool )\r
- {\r
- return CubeTexture::FromFile( device, fileName, D3DX::Default, D3DX::Default,\r
- usage, Format::Unknown, pool, Filter::Default, Filter::Default, 0 );\r
- }\r
-\r
- CubeTexture^ CubeTexture::FromFile( SlimDX::Direct3D9::Device^ device, String^ fileName )\r
- {\r
- return CubeTexture::FromFile( device, fileName, Usage::None, Pool::Managed );\r
- }\r
-\r
- DataRectangle^ CubeTexture::LockRectangle( CubeMapFace face, int level, System::Drawing::Rectangle rect, LockFlags flags )\r
- {\r
- D3DLOCKED_RECT lockedRect;\r
- RECT nativeRect = { rect.Left, rect.Top, rect.Right, rect.Bottom };\r
- HRESULT hr = InternalPointer->LockRect( static_cast<D3DCUBEMAP_FACES>( face ), level, &lockedRect, &nativeRect, static_cast<DWORD>( flags ) );\r
- \r
- if( RECORD_D3D9(hr).IsFailure )\r
- return nullptr;\r
- \r
- int lockedSize = lockedRect.Pitch * GetLevelDescription( level ).Height;\r
- \r
- bool readOnly = (flags & LockFlags::ReadOnly) == LockFlags::ReadOnly;\r
- DataRectangle^ outRect = gcnew DataRectangle( lockedRect.Pitch, gcnew DataStream( lockedRect.pBits, lockedSize, true, !readOnly, false ) );\r
- return outRect;\r
- }\r
-\r
- DataRectangle^ CubeTexture::LockRectangle( CubeMapFace face, int level, LockFlags flags )\r
- {\r
- D3DLOCKED_RECT lockedRect;\r
- HRESULT hr = InternalPointer->LockRect( static_cast<D3DCUBEMAP_FACES>( face ), level, &lockedRect, NULL, static_cast<DWORD>( flags ) );\r
- \r
- if( RECORD_D3D9(hr).IsFailure )\r
- return nullptr;\r
- \r
- int lockedSize = lockedRect.Pitch * GetLevelDescription( level ).Height;\r
-\r
- bool readOnly = (flags & LockFlags::ReadOnly) == LockFlags::ReadOnly;\r
- DataRectangle^ outRect = gcnew DataRectangle( lockedRect.Pitch, gcnew DataStream( lockedRect.pBits, lockedSize, true, !readOnly, false ) );\r
- return outRect;\r
- }\r
-\r
- Result CubeTexture::UnlockRectangle( CubeMapFace face, int level )\r
- {\r
- HRESULT hr = InternalPointer->UnlockRect( static_cast<D3DCUBEMAP_FACES>( face ), level );\r
- return RECORD_D3D9( hr );\r
- }\r
-\r
- Result CubeTexture::AddDirtyRectangle( CubeMapFace face )\r
- {\r
- HRESULT hr = InternalPointer->AddDirtyRect( static_cast<D3DCUBEMAP_FACES>( face ), NULL );\r
- return RECORD_D3D9( hr );\r
- }\r
-\r
- Result CubeTexture::AddDirtyRectangle( CubeMapFace face, System::Drawing::Rectangle rect )\r
- {\r
- RECT nativeRect = { rect.Left, rect.Top, rect.Right, rect.Bottom };\r
- HRESULT hr = InternalPointer->AddDirtyRect( static_cast<D3DCUBEMAP_FACES>( face ), &nativeRect );\r
- return RECORD_D3D9( hr );\r
- }\r
-\r
- SurfaceDescription CubeTexture::GetLevelDescription( int level )\r
- {\r
- SurfaceDescription description;\r
- HRESULT hr = InternalPointer->GetLevelDesc( level, reinterpret_cast<D3DSURFACE_DESC*>( &description ) );\r
- RECORD_D3D9( hr );\r
- return description;\r
- }\r
-\r
- Surface^ CubeTexture::GetCubeMapSurface( CubeMapFace face, int level )\r
- {\r
- IDirect3DSurface9* surface;\r
- HRESULT hr = InternalPointer->GetCubeMapSurface( static_cast<D3DCUBEMAP_FACES>( face ), level, &surface );\r
- \r
- if( RECORD_D3D9(hr).IsFailure )\r
- return nullptr;\r
- return Surface::FromPointer( surface );\r
- }\r
-\r
- Result CubeTexture::Fill(Fill3DCallback^ callback)\r
- {\r
- HRESULT hr; // Error code.\r
-\r
- // Call the function.\r
- hr = D3DXFillCubeTexture(InternalPointer, NativeD3DXFill3D, Marshal::GetFunctionPointerForDelegate(callback).ToPointer());\r
-\r
- return RECORD_D3D9(hr);\r
- }\r
-\r
- Result CubeTexture::Fill( TextureShader^ shader )\r
- {\r
- HRESULT hr = D3DXFillCubeTextureTX( InternalPointer, shader->InternalPointer );\r
- return RECORD_D3D9( hr );\r
- }\r
-}\r
-}
\ No newline at end of file