⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 d3dutil.cpp

📁 java实现的简单的分形树。简单易学!是学习分形知识的很好的例子。其java语法简单
💻 CPP
字号:
// --------------------------------------------------------------------------
// Dingus project - a collection of subsystems for game/graphics applications
// --------------------------------------------------------------------------
#include "stdafx.h"

#include "D3DUtil.h"
#include "DXUtil.h"



const TCHAR* dingus::convertD3DFormatToString( D3DFORMAT format )
{
	const TCHAR* pstr = NULL;
	switch( format ) {
	case D3DFMT_UNKNOWN:		 pstr = TEXT("UNKNOWN"); break;
	case D3DFMT_R8G8B8: 		 pstr = TEXT("R8G8B8"); break;
	case D3DFMT_A8R8G8B8:		 pstr = TEXT("A8R8G8B8"); break;
	case D3DFMT_X8R8G8B8:		 pstr = TEXT("X8R8G8B8"); break;
	case D3DFMT_R5G6B5: 		 pstr = TEXT("R5G6B5"); break;
	case D3DFMT_X1R5G5B5:		 pstr = TEXT("X1R5G5B5"); break;
	case D3DFMT_A1R5G5B5:		 pstr = TEXT("A1R5G5B5"); break;
	case D3DFMT_A4R4G4B4:		 pstr = TEXT("A4R4G4B4"); break;
	case D3DFMT_R3G3B2: 		 pstr = TEXT("R3G3B2"); break;
	case D3DFMT_A8: 			 pstr = TEXT("A8"); break;
	case D3DFMT_A8R3G3B2:		 pstr = TEXT("A8R3G3B2"); break;
	case D3DFMT_X4R4G4B4:		 pstr = TEXT("X4R4G4B4"); break;
	case D3DFMT_A2B10G10R10:	 pstr = TEXT("A2B10G10R10"); break;
	case D3DFMT_A8B8G8R8:		 pstr = TEXT("A8B8G8R8"); break;
	case D3DFMT_X8B8G8R8:		 pstr = TEXT("X8B8G8R8"); break;
	case D3DFMT_G16R16: 		 pstr = TEXT("G16R16"); break;
	case D3DFMT_A2R10G10B10:	 pstr = TEXT("A2R10G10B10"); break;
	case D3DFMT_A16B16G16R16:	 pstr = TEXT("A16B16G16R16"); break;
	case D3DFMT_A8P8:			 pstr = TEXT("A8P8"); break;
	case D3DFMT_P8: 			 pstr = TEXT("P8"); break;
	case D3DFMT_L8: 			 pstr = TEXT("L8"); break;
	case D3DFMT_A8L8:			 pstr = TEXT("A8L8"); break;
	case D3DFMT_A4L4:			 pstr = TEXT("A4L4"); break;
	case D3DFMT_V8U8:			 pstr = TEXT("V8U8"); break;
	case D3DFMT_L6V5U5: 		 pstr = TEXT("L6V5U5"); break;
	case D3DFMT_X8L8V8U8:		 pstr = TEXT("X8L8V8U8"); break;
	case D3DFMT_Q8W8V8U8:		 pstr = TEXT("Q8W8V8U8"); break;
	case D3DFMT_V16U16: 		 pstr = TEXT("V16U16"); break;
	case D3DFMT_A2W10V10U10:	 pstr = TEXT("A2W10V10U10"); break;
	case D3DFMT_UYVY:			 pstr = TEXT("UYVY"); break;
	case D3DFMT_YUY2:			 pstr = TEXT("YUY2"); break;
	case D3DFMT_DXT1:			 pstr = TEXT("DXT1"); break;
	case D3DFMT_DXT2:			 pstr = TEXT("DXT2"); break;
	case D3DFMT_DXT3:			 pstr = TEXT("DXT3"); break;
	case D3DFMT_DXT4:			 pstr = TEXT("DXT4"); break;
	case D3DFMT_DXT5:			 pstr = TEXT("DXT5"); break;
	case D3DFMT_D16_LOCKABLE:	 pstr = TEXT("D16_LOCKABLE"); break;
	case D3DFMT_D32:			 pstr = TEXT("D32"); break;
	case D3DFMT_D15S1:			 pstr = TEXT("D15S1"); break;
	case D3DFMT_D24S8:			 pstr = TEXT("D24S8"); break;
	case D3DFMT_D24X8:			 pstr = TEXT("D24X8"); break;
	case D3DFMT_D24X4S4:		 pstr = TEXT("D24X4S4"); break;
	case D3DFMT_D16:			 pstr = TEXT("D16"); break;
	case D3DFMT_L16:			 pstr = TEXT("L16"); break;
	case D3DFMT_VERTEXDATA: 	 pstr = TEXT("VERTEXDATA"); break;
	case D3DFMT_INDEX16:		 pstr = TEXT("INDEX16"); break;
	case D3DFMT_INDEX32:		 pstr = TEXT("INDEX32"); break;
	case D3DFMT_Q16W16V16U16:	 pstr = TEXT("Q16W16V16U16"); break;
	case D3DFMT_MULTI2_ARGB8:	 pstr = TEXT("MULTI2_ARGB8"); break;
	case D3DFMT_R16F:			 pstr = TEXT("R16F"); break;
	case D3DFMT_G16R16F:		 pstr = TEXT("G16R16F"); break;
	case D3DFMT_A16B16G16R16F:	 pstr = TEXT("A16B16G16R16F"); break;
	case D3DFMT_R32F:			 pstr = TEXT("R32F"); break;
	case D3DFMT_G32R32F:		 pstr = TEXT("G32R32F"); break;
	case D3DFMT_A32B32G32R32F:	 pstr = TEXT("A32B32G32R32F"); break;
	case D3DFMT_CxV8U8: 		 pstr = TEXT("CxV8U8"); break;
	default:					 pstr = TEXT("Unknown format"); break;
	}
	return pstr;
}


HRESULT dingus::setDeviceCursor( IDirect3DDevice9& device, HCURSOR hCursor )
{
	HRESULT 	hr = E_FAIL;
	ICONINFO	iconinfo;
	bool		bwCursor;
	IDirect3DSurface9* cursorSurface = NULL;
	HDC 		hdcColor = NULL;
	HDC 		hdcMask = NULL;
	HDC 		hdcScreen = NULL;
	BITMAP		bm;
	DWORD		dwWidth;
	DWORD		dwHeightSrc;
	DWORD		dwHeightDest;
	COLORREF	crColor;
	COLORREF	crMask;
	int 		x;
	int 		y;
	BITMAPINFO	bmi;
	COLORREF*	pcrArrayColor = NULL;
	COLORREF*	pcrArrayMask = NULL;
	DWORD*		pBitmap;
	HGDIOBJ 	hgdiobjOld;
	
	ZeroMemory( &iconinfo, sizeof(iconinfo) );
	if( !GetIconInfo( hCursor, &iconinfo ) )
		goto _end;
	
	if( 0 == GetObject((HGDIOBJ)iconinfo.hbmMask, sizeof(BITMAP), (LPVOID)&bm) )
		goto _end;
	dwWidth = bm.bmWidth;
	dwHeightSrc = bm.bmHeight;
	
	if( iconinfo.hbmColor == NULL ) {
		bwCursor = TRUE;
		dwHeightDest = dwHeightSrc / 2;
	} else {
		bwCursor = FALSE;
		dwHeightDest = dwHeightSrc;
	}
	
	// Create a surface for the fullscreen cursor
	if( FAILED( hr = device.CreateOffscreenPlainSurface( dwWidth, dwHeightDest, 
		D3DFMT_A8R8G8B8, D3DPOOL_SCRATCH, &cursorSurface, NULL ) ) )
	{
		goto _end;
	}
	
	pcrArrayMask = new DWORD[dwWidth * dwHeightSrc];
	
	ZeroMemory(&bmi, sizeof(bmi));
	bmi.bmiHeader.biSize = sizeof(bmi.bmiHeader);
	bmi.bmiHeader.biWidth = dwWidth;
	bmi.bmiHeader.biHeight = dwHeightSrc;
	bmi.bmiHeader.biPlanes = 1;
	bmi.bmiHeader.biBitCount = 32;
	bmi.bmiHeader.biCompression = BI_RGB;
	
	hdcScreen = GetDC( NULL );
	hdcMask = CreateCompatibleDC( hdcScreen );
	if( hdcMask == NULL )
	{
		hr = E_FAIL;
		goto _end;
	}
	hgdiobjOld = SelectObject(hdcMask, iconinfo.hbmMask);
	GetDIBits(hdcMask, iconinfo.hbmMask, 0, dwHeightSrc, 
		pcrArrayMask, &bmi, DIB_RGB_COLORS);
	SelectObject(hdcMask, hgdiobjOld);
	
	if (!bwCursor)
	{
		pcrArrayColor = new DWORD[dwWidth * dwHeightDest];
		hdcColor = CreateCompatibleDC( hdcScreen );
		if( hdcColor == NULL )
		{
			hr = E_FAIL;
			goto _end;
		}
		SelectObject(hdcColor, iconinfo.hbmColor);
		GetDIBits(hdcColor, iconinfo.hbmColor, 0, dwHeightDest, 
			pcrArrayColor, &bmi, DIB_RGB_COLORS);
	}
	
	// Transfer cursor image into the surface
	D3DLOCKED_RECT lr;
	cursorSurface->LockRect( &lr, NULL, 0 );
	pBitmap = (DWORD*)lr.pBits;
	for( y = 0; y < dwHeightDest; y++ )
	{
		for( x = 0; x < dwWidth; x++ )
		{
			if (bwCursor)
			{
				crColor = pcrArrayMask[dwWidth*(dwHeightDest-1-y) + x];
				crMask = pcrArrayMask[dwWidth*(dwHeightSrc-1-y) + x];
			}
			else
			{
				crColor = pcrArrayColor[dwWidth*(dwHeightDest-1-y) + x];
				crMask = pcrArrayMask[dwWidth*(dwHeightDest-1-y) + x];
			}
			if (crMask == 0)
				pBitmap[dwWidth*y + x] = 0xff000000 | crColor;
			else
				pBitmap[dwWidth*y + x] = 0x00000000;
		}
	}
	cursorSurface->UnlockRect();
	
	// Set the device cursor
	if( FAILED( hr = device.SetCursorProperties( iconinfo.xHotspot, 
		iconinfo.yHotspot, cursorSurface ) ) )
	{
		goto _end;
	}
	
	hr = S_OK;
	
_end:
	if( iconinfo.hbmMask != NULL )
		DeleteObject( iconinfo.hbmMask );
	if( iconinfo.hbmColor != NULL )
		DeleteObject( iconinfo.hbmColor );
	if( hdcScreen != NULL )
		ReleaseDC( NULL, hdcScreen );
	if( hdcColor != NULL )
		DeleteDC( hdcColor );
	if( hdcMask != NULL )
		DeleteDC( hdcMask );
	safeDeleteArray( pcrArrayColor );
	safeDeleteArray( pcrArrayMask );
	safeRelease( cursorSurface );
	return hr;
};

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -