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

📄 main.c

📁 一个类似windows
💻 C
字号:

/* $Id: main.c 21434 2006-04-01 19:12:56Z greatlrd $
 *
 * COPYRIGHT:            See COPYING in the top level directory
 * PROJECT:              ReactOS kernel
 * FILE:                 lib/ddraw/ddraw.c
 * PURPOSE:              DirectDraw Library 
 * PROGRAMMER:           Magnus Olsen (greatlrd)
 *
 */

#include <windows.h>
#include "rosdraw.h"
#include "d3dhal.h"



/*
 * IMPLEMENT
 * Status this api is finish and is 100% correct 
 */

HRESULT 
WINAPI 
Create_DirectDraw (LPGUID pGUID, 
				   LPDIRECTDRAW* pIface, 
				   REFIID id, 
				   BOOL ex)
{   
    IDirectDrawImpl* This = (IDirectDrawImpl*)HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(IDirectDrawImpl));

	if (This == NULL) 
		return E_OUTOFMEMORY;

	ZeroMemory(This,sizeof(IDirectDrawImpl));

	This->lpVtbl = &DirectDraw7_Vtable;
	This->lpVtbl_v1 = &DDRAW_IDirectDraw_VTable;
	This->lpVtbl_v2 = &DDRAW_IDirectDraw2_VTable;
	This->lpVtbl_v4 = &DDRAW_IDirectDraw4_VTable;
	
	*pIface = (LPDIRECTDRAW)This;

	if(This->lpVtbl->QueryInterface ((LPDIRECTDRAW7)This, id, (void**)&pIface) != S_OK)
		return DDERR_INVALIDPARAMS;

	return This->lpVtbl->Initialize ((LPDIRECTDRAW7)This, pGUID);
}

/*
 * IMPLEMENT
 * Status this api is finish and is 100% correct 
 */

HRESULT 
WINAPI 
DirectDrawCreate (LPGUID lpGUID, 
				  LPDIRECTDRAW* lplpDD, 
				  LPUNKNOWN pUnkOuter) 
{   
	/* check see if pUnkOuter is null or not */
	if (pUnkOuter)
	{
		/* we do not use same error code as MS, ms use 0x8004110 */
		return DDERR_INVALIDPARAMS; 
	}
	
	return Create_DirectDraw (lpGUID, lplpDD, &IID_IDirectDraw, FALSE);
}

/*
 * IMPLEMENT
 * Status this api is finish and is 100% correct 
 */

HRESULT 
WINAPI 
DirectDrawCreateEx(LPGUID lpGUID, 
				   LPVOID* lplpDD, 
				   REFIID id, 
				   LPUNKNOWN pUnkOuter)
{    	
	/* check see if pUnkOuter is null or not */
	if (pUnkOuter)
	{
		/* we do not use same error code as MS, ms use 0x8004110 */
		return DDERR_INVALIDPARAMS; 
	}
	
	/* Is it a DirectDraw 7 Request or not */
	if (!IsEqualGUID(id, &IID_IDirectDraw7)) 
	{
	  return DDERR_INVALIDPARAMS;
	}

    return Create_DirectDraw (lpGUID, (LPDIRECTDRAW*)lplpDD, id, TRUE);
}

/*
 * UNIMPLEMENT 
 */

HRESULT 
WINAPI 
DirectDrawEnumerateA(
                     LPDDENUMCALLBACKA lpCallback, 
                     LPVOID lpContext)
{
    DX_STUB;
}


/*
 * UNIMPLEMENT 
 */

HRESULT WINAPI DirectDrawEnumerateW(LPDDENUMCALLBACKW lpCallback, 
                                    LPVOID lpContext)
{
    DX_STUB;
}

/*
 * UNIMPLEMENT 
 */

HRESULT 
WINAPI 
DirectDrawEnumerateExA(LPDDENUMCALLBACKEXA lpCallback, 
                       LPVOID lpContext, 
                       DWORD dwFlags)
{
    DX_STUB;
}

/*
 * UNIMPLEMENT 
 */

HRESULT 
WINAPI 
DirectDrawEnumerateExW(LPDDENUMCALLBACKEXW lpCallback, 
                       LPVOID lpContext, 
                       DWORD dwFlags)
{
     DX_STUB;
}

/*
   See http://msdn.microsoft.com/library/default.asp?url=/library/en-us/
       Display_d/hh/Display_d/d3d_21ac30ea-9803-401e-b541-6b08af79653d.xml.asp

   for more info about this command 

 */

/*
 * UNIMPLEMENT 
 * Status FIXME need be implement and this code is realy need be tested
 */

HRESULT 
WINAPI 
D3DParseUnknownCommand( LPVOID lpvCommands, 
                        LPVOID *lplpvReturnedCommand)
{
    LPD3DHAL_DP2COMMAND cmd = lpvCommands;

    DWORD retCode = D3DERR_COMMAND_UNPARSED; 

    *lplpvReturnedCommand = lpvCommands;
     
    if (cmd->bCommand > D3DDP2OP_TRIANGLESTRIP)
    {
        retCode = DD_FALSE;

        if (cmd->bCommand == D3DDP2OP_VIEWPORTINFO)
        {
            /* FIXME */
            retCode = DD_OK; 
        }

        if (cmd->bCommand == D3DDP2OP_WINFO)
        {
            /* FIXME */
            retCode = DD_OK; 
        }     
    }
    else if (cmd->bCommand == D3DDP2OP_TRIANGLESTRIP)  
    {
        /* FIXME */
        retCode = DD_OK; 
    }
  
    if ((cmd->bCommand <= D3DDP2OP_INDEXEDTRIANGLELIST) || (cmd->bCommand == D3DDP2OP_RENDERSTATE))
    {
        retCode = DD_FALSE;
    }

    return retCode;
}

 

⌨️ 快捷键说明

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