Exemplo n.º 1
0
/// <summary>
/// <c>wCreateVertexBuffer</c> 
/// </summary>
/// <remarks>
/// </remarks>
/// <param name="d3d7"></param>
/// <param name="lpVBDesc"></param>
/// <param name="lplpD3DVertexBuffer"></param>
/// <param name="dwFlags"></param>
/// <returns></returns>
HRESULT __stdcall wCreateVertexBuffer(
	LPDIRECT3D7 d3d7, LPD3DVERTEXBUFFERDESC lpVBDesc, 
	LPDIRECT3DVERTEXBUFFER7 *lplpD3DVertexBuffer, ULONG dwFlags)
{
	ULONG		dwNumVertices;
	PSTR		pszErrorMessage;
	HRESULT		hResult;

	InternalFunctionSpew("GameOS_Direct3D", "CreateVertexBuffer(%d Vertices)+", 
		lpVBDesc->dwNumVertices);

	hResult = d3d7->CreateVertexBuffer(lpVBDesc, lplpD3DVertexBuffer, dwFlags);

	InternalFunctionSpew("GameOS_Direct3D", " -0x%x", *lplpD3DVertexBuffer);
	if (FAILED(hResult))
	{
		dwNumVertices = lpVBDesc->dwNumVertices;
		pszErrorMessage = ErrorNumberToMessage(hResult);
		if ( InternalFunctionPause("FAILED (0x%x - %s) - CreateVertexBuffer(%d Vertices)", 
			hResult, pszErrorMessage, dwNumVertices) )
			ENTER_DEBUGGER;
	}

	return hResult;
}
Exemplo n.º 2
0
//////////////////////////////////////////////////////////////////////////////
//CLEANUP
//////////////////////////////////////////////////////////////////////////////
void Prog_Done()
{	
	//release IDirect3DDevice
	if(lpd3ddev)
	{
		lpd3ddev->Release();
		lpd3ddev=NULL;
	}

	//release IDirect3D 
	if(lpd3d)
	{
		lpd3d->Release();
		lpd3d=NULL;
	}
	
	//get rid of the texture.
	LPDDS_Release(&lpddsTex);

	//clean up primary surface(this will clean up the back buffer, also)
	LPDDS_Release(&lpddsPrime);

	//clean up the dd pointer
	LPDD_Release(&lpdd);
}
Exemplo n.º 3
0
/// <summary>
/// <c>wEnumDevices</c> 
/// </summary>
/// <remarks>
/// </remarks>
/// <param name="d3d7"></param>
/// <param name="lpEnumDevicesCallback"></param>
/// <param name="lpUserArg"></param>
/// <returns></returns>
HRESULT __stdcall wEnumDevices(
	LPDIRECT3D7 d3d7, LPD3DENUMDEVICESCALLBACK7 lpEnumDevicesCallback, PVOID lpUserArg)
{
	PSTR		pszErrorMessage;
	HRESULT		hResult;

	InternalFunctionSpew("GameOS_Direct3D", "EnumDevices()");

	hResult = d3d7->EnumDevices(lpEnumDevicesCallback, lpUserArg);
	if (FAILED(hResult))
	{
		pszErrorMessage = ErrorNumberToMessage(hResult);
		if ( InternalFunctionPause("FAILED (0x%x - %s) - EnumDevices()", hResult, pszErrorMessage) )
			ENTER_DEBUGGER;
	}

	return hResult;
}
Exemplo n.º 4
0
/// <summary>
/// <c>wEnumZBufferFormats</c> 
/// </summary>
/// <remarks>
/// </remarks>
/// <param name="d3d7"></param>
/// <param name="riidDevice"></param>
/// <param name="lpEnumCallback"></param>
/// <param name="lpContext"></param>
/// <returns></returns>
HRESULT __stdcall wEnumZBufferFormats(
	LPDIRECT3D7 d3d7, REFCLSID riidDevice, LPD3DENUMPIXELFORMATSCALLBACK lpEnumCallback, 
	PVOID lpContext)
{
	PSTR		pszDevice;
	PSTR		pszErrorMessage;
	HRESULT		hResult;

	pszDevice = Get3DDevice(riidDevice);
	InternalFunctionSpew("GameOS_Direct3D", "EnumZBufferFormats(%s)", pszDevice);

	hResult = d3d7->EnumZBufferFormats(riidDevice, lpEnumCallback, lpContext);
	if (FAILED(hResult))
	{
		pszDevice = Get3DDevice(riidDevice);
		pszErrorMessage = ErrorNumberToMessage(hResult);
		if ( InternalFunctionPause("FAILED (0x%x - %s) - EnumZBufferFormats(%s)", 
			hResult, pszErrorMessage, pszDevice) )
			ENTER_DEBUGGER;
	}

	return hResult;
}
Exemplo n.º 5
0
/// <summary>
/// <c>wCreateDevice</c> 
/// </summary>
/// <remarks>
/// </remarks>
/// <param name="d3d7"></param>
/// <param name="rclsid"></param>
/// <param name="lpDDS"></param>
/// <param name="lplpD3DDevice7"></param>
/// <returns></returns>
HRESULT __stdcall wCreateDevice(
	LPDIRECT3D7 d3d7, REFCLSID rclsid, LPDIRECTDRAWSURFACE7 lpDDS, LPDIRECT3DDEVICE7 *lplpD3DDevice7)
{
	PSTR		pszDevice;
	PSTR		pszErrorMessage;
	HRESULT		hResult;

	pszDevice = Get3DDevice(rclsid);
	InternalFunctionSpew("GameOS_Direct3D", "CreateDevice(%s from 0x%x)+", pszDevice, lpDDS);

	hResult = d3d7->CreateDevice(rclsid, lpDDS, lplpD3DDevice7);

	InternalFunctionSpew("GameOS_Direct3D", " -0x%x", *lplpD3DDevice7);
	if (FAILED(hResult))
	{
		pszDevice = Get3DDevice(rclsid);
		pszErrorMessage = ErrorNumberToMessage(hResult);
		if ( InternalFunctionPause("FAILED (0x%x - %s) - CreateDevice(%s from 0x%x)", hResult, pszErrorMessage, pszDevice, lpDDS) )
			ENTER_DEBUGGER;
	}

	return hResult;
}
Exemplo n.º 6
0
//////////////////////////////////////////////////////////////////////////////
//INITIALIZATION
//////////////////////////////////////////////////////////////////////////////
bool Prog_Init()
{
	lpdd=LPDD_Create(hWndMain,DDSCL_EXCLUSIVE | DDSCL_FULLSCREEN | DDSCL_ALLOWREBOOT);

	//set the display mode
	lpdd->SetDisplayMode(SCREENWIDTH,SCREENHEIGHT,SCREENBPP,0,0);

	//create primary surface
	DDSURFACEDESC2 ddsd;
	memset(&ddsd,0,sizeof(DDSURFACEDESC2));
	ddsd.dwSize=sizeof(DDSURFACEDESC2);
	ddsd.dwFlags=DDSD_CAPS | DDSD_BACKBUFFERCOUNT;
	ddsd.dwBackBufferCount=1;
	ddsd.ddsCaps.dwCaps=DDSCAPS_PRIMARYSURFACE | DDSCAPS_FLIP | DDSCAPS_COMPLEX | DDSCAPS_3DDEVICE;
	lpdd->CreateSurface(&ddsd,&lpddsPrime,NULL);

	//create back buffer
	DDSCAPS2 ddscaps;
	memset(&ddscaps,0,sizeof(DDSCAPS2));
	ddscaps.dwCaps=DDSCAPS_BACKBUFFER | DDSCAPS_3DDEVICE;
	lpddsPrime->GetAttachedSurface(&ddscaps,&lpddsBack);

	//create the texture surface
	memset(&ddsd,0,sizeof(DDSURFACEDESC2));
	ddsd.dwSize=sizeof(DDSURFACEDESC2);
	ddsd.dwFlags=DDSD_CAPS | DDSD_WIDTH | DDSD_HEIGHT;
	ddsd.dwWidth=64;
	ddsd.dwHeight=64;
	ddsd.ddsCaps.dwCaps=DDSCAPS_TEXTURE;
	lpdd->CreateSurface(&ddsd,&lpddsTex,NULL);
	//used ddfuncs to load a bitmap onto the texture
	LPDDS_ReloadFromFile(lpddsTex,"texture.bmp");

	//get the idirect3d pointer
	lpdd->QueryInterface(IID_IDirect3D7,(void**)&lpd3d);//ICKY COM STUFF!

	//create the idirect3ddevice(hack method)
	if(FAILED(lpd3d->CreateDevice(IID_IDirect3DTnLHalDevice,lpddsBack,&lpd3ddev)))//try tnl
		if(FAILED(lpd3d->CreateDevice(IID_IDirect3DHALDevice,lpddsBack,&lpd3ddev)))//no tnl, try hal
			if(FAILED(lpd3d->CreateDevice(IID_IDirect3DMMXDevice,lpddsBack,&lpd3ddev)))//no hal, try mmp
				if(FAILED(lpd3d->CreateDevice(IID_IDirect3DRGBDevice,lpddsBack,&lpd3ddev)))//no mmx, resort to rgb
					return(false);//problem, return false


	//set up viewport
	D3DVIEWPORT7 vp;
	vp.dwX=0;
	vp.dwY=0;
	vp.dwWidth=SCREENWIDTH;
	vp.dwHeight=SCREENHEIGHT;
	vp.dvMinZ=0.0;
	vp.dvMaxZ=1.0;

	//set viewport for device
	lpd3ddev->SetViewport(&vp);

	//initialize the vertices(partially, anyway)
	vert[0].color=D3DRGB(0.25,0.25,0.25);//set the color for this vertex
	vert[0].specular=0;//zero for specular
	vert[0].rhw=1.0;//rhw is 1.0
	vert[0].tu=0.0;//0.0 for both texture coordinates
	vert[0].tv=0.0;
	vert[0].sz=0.5;//static z value

	vert[1].color=D3DRGB(0.5,0.5,0.5);//set the color for this vertex
	vert[1].specular=0;//zero for specular
	vert[1].rhw=1.0;//rhw is 1.0
	vert[1].tu=1.0;//0.0 for both texture coordinates
	vert[1].tv=0.0;
	vert[1].sz=0.5;//static z value

	vert[2].color=D3DRGB(0.5,0.5,0.5);//set the color for this vertex
	vert[2].specular=0;//zero for specular
	vert[2].rhw=1.0;//rhw is 1.0
	vert[2].tu=0.0;//0.0 for both texture coordinates
	vert[2].tv=1.0;
	vert[2].sz=0.5;//static z value

	vert[3].color=D3DRGB(1.0,1.0,1.0);//set the color for this vertex
	vert[3].specular=0;//zero for specular
	vert[3].rhw=1.0;//rhw is 1.0
	vert[3].tu=1.0;//0.0 for both texture coordinates
	vert[3].tv=1.0;
	vert[3].sz=0.5;//static z value

	//set the texture
	lpd3ddev->SetTexture(0,lpddsTex);

	return(true);//return success
}