亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? cdraw.cpp

?? 成熟的RPG引擎,Flysky發布. 斜視角引擎.
?? CPP
字號:
#include "../GameH.h"
//ddraw 封裝
//小飛俠 制作
//2004
LPDIRECTDRAW7 lpDD;
LPDIRECTDRAWSURFACE7 lpDDS[DDS_NUM];
//****************Lock 相關*********************
WORD *GraphBuffer = 0;		// 繪圖緩沖區
int GraphPitch = 0;			// 緩沖區跨度
int GraphWidth = 0;			//頁面寬度
int GraphHeight = 0;		//頁面高度
DDSURFACEDESC2 ddsd;

bool Is555=false; //是否為555格式

//--------------------------------------------------------------------------------------------------------------------//
//                             ddraw 封裝                                                                             //
//                   DDS_DDraw7               2005年2月16日              小飛俠制作、整理                             //
//--------------------------------------------------------------------------------------------------------------------//
BOOL InitDDraw(HWND Hwnd,int WindowS)
{
if ( DirectDrawCreateEx (NULL, (void **)&lpDD, IID_IDirectDraw7, NULL) != DD_OK ) return FALSE; //創建DirectDraw對象
	if ( lpDD->SetCooperativeLevel (Hwnd,DDSCL_FPUSETUP|DDSCL_NORMAL) != DD_OK ) return FALSE; //設置DirectDraw控制級
	//DDSCL_FPUSETUP|
	//if ( lpDD->SetCooperativeLevel (Hwnd,DDSCL_EXCLUSIVE|DDSCL_FULLSCREEN) != DD_OK ) return FALSE; //設置DirectDraw控制級
	//if ( lpDD->SetDisplayMode( ScreenWidth, ScreenHeight, 16, 0, 0) != DD_OK ) return FALSE; //設置顯示模式
	ZeroMemory(&ddsd, sizeof(DDSURFACEDESC2));//設置頁面內存大小
	ddsd.dwSize = sizeof( ddsd );
	ddsd.dwFlags = DDSD_CAPS; //沒有后臺緩存
	ddsd.ddsCaps.dwCaps = DDSCAPS_PRIMARYSURFACE;
	if ( lpDD->CreateSurface( &ddsd, &lpDDS[0], NULL ) != DD_OK ) 	return FALSE; //創建主頁面
	ddsd.dwSize = sizeof( ddsd );
	ddsd.dwFlags = DDSD_CAPS|DDSD_WIDTH|DDSD_HEIGHT; 
	ddsd.ddsCaps.dwCaps = DDSCAPS_OFFSCREENPLAIN|DDSCAPS_SYSTEMMEMORY; //這是離屏頁面
	ddsd.dwHeight=ScreenHeight; //高
	ddsd.dwWidth=ScreenWidth; //寬
	if ( DD_OK != lpDD->CreateSurface( &ddsd, &lpDDS[1], NULL ) ) return FALSE; //創建后臺緩存
	if ( DD_OK != lpDD->CreateSurface( &ddsd, &lpDDS[2], NULL ) ) return FALSE; //創建背景圖頁面
	if ( DD_OK != lpDD->CreateSurface( &ddsd, &lpDDS[4], NULL ) ) return FALSE; //創建地圖表面
	if ( DD_OK != lpDD->CreateSurface( &ddsd, &lpDDS[5], NULL ) ) return FALSE; //創建Alpha頁面
	if ( DD_OK != lpDD->CreateSurface( &ddsd, &lpDDS[6], NULL ) ) return FALSE; //創建臨時頁面
	if ( DD_OK != lpDD->CreateSurface( &ddsd, &lpDDS[7], NULL ) ) return FALSE; //創建臨時頁面1
	ddsd.dwHeight=CH; //高
	ddsd.dwWidth=CW; //寬
	if ( DD_OK != lpDD->CreateSurface( &ddsd, &lpDDS[3], NULL ) ) return FALSE; //創建鼠標頁面
	return TRUE; //返回TRUE
}

bool CreateSurface(LPDIRECTDRAWSURFACE7 &tmpS,char *FileName,int Width,int Height)
{
	//如果沒有制定圖片信息,就去找
	if (FileName!=NULL&&Width<=0&&Height<=0) 
	if (LoadPicInfo(FileName,Width,Height)==false) return false; //讀取失敗
	ZeroMemory(&ddsd, sizeof(DDSURFACEDESC2));//設置頁面內存大小
	ddsd.dwSize = sizeof(ddsd);
	ddsd.dwFlags = DDSD_CAPS|DDSD_WIDTH|DDSD_HEIGHT; 
	ddsd.ddsCaps.dwCaps = DDSCAPS_OFFSCREENPLAIN|DDSCAPS_SYSTEMMEMORY; //這是離屏頁面
	ddsd.dwHeight=Height; //高
	ddsd.dwWidth=Width; //寬
	if ( lpDD->CreateSurface( &ddsd, &tmpS, NULL ) == DD_OK) 
	{
		if (FileName!=NULL) LoadPic(false,tmpS,FileName);
		DDSetColorKey(tmpS,colorkey); //設定顏色鍵
		return true;
	}
	return false;
}

//釋放頁面 By Flysky
//2005
void FreeDDraw()
{
 if( lpDD != NULL ) //判斷DirectDraw對象是否有效
{
if( lpDDS[0] != NULL ) //判斷主頁面對象是否有效
{
lpDDS[0]->Release(); //釋放
lpDDS[0] = NULL;
}
//如果還有別的頁面也像lpDDSPrimary一樣釋放
lpDD->Release( ); //釋放
lpDD = NULL;
 }
}

//恢復頁面顯示 By Flysky
//2005
void RestoreSurface()   
{
lpDD->RestoreAllSurfaces();
//DDraw7 以下需要這樣
// for (int i=0;i<DDS_NUM;)
 //{
//	 lpDDS[i]->Restore( );
//	 i++;
 //}
}

//翻轉頁面(無后臺緩存) By Flysky 云風
//2005
void FlipSurface()
{
	if (CheckMMX()==false)
	{
		HRESULT ddrval=lpDDS[0]->BltFast(0,0,lpDDS[1],NULL,NoKey);
		if(ddrval==DDERR_SURFACELOST) RestoreSurface();
	}
	else
	{
		//MMX快速翻頁
		BeginDraw(lpDDS[1]);
		BYTE *pSrc=(BYTE *)GraphBuffer; //源頁面
		int srcPitch=GraphPitch <<1;
		int Width=GraphWidth;//寬度
		int Height=GraphHeight; //高度
		BeginDraw(lpDDS[0]);
		BYTE *pDest=(BYTE *)GraphBuffer;
		int DestPitch=GraphPitch <<1;
		if (Width>GraphWidth) Width=GraphWidth;//寬度
		if (Height>GraphHeight) Height=GraphHeight; //高度
		int iX=Width <<1; //計算一共的數據塊
		for (int y=0;y<Height;y++)
		{
			//Qmemcpy(pDest, pSrc,iX); //拷貝內存 
			Qmemcpy(pDest, pSrc,iX);//拷貝內存
			pSrc+=srcPitch; //移至下一行
			pDest+=DestPitch; //移至下一行
		}
		EndDraw(lpDDS[1]);
		EndDraw(lpDDS[0]);
	}
}

//設定顏色鍵 By Flysky 微軟
//2005
void SetColorKey(COLORREF rgb)
{
int i;
 for (i=0;i<DDS_NUM;i++)
 {
	DDSetColorKey(lpDDS[i],rgb);
 }
}

//***********************************************************
//功能:快速位圖拷貝
//參數:目標表面,目標x,目標y,原表面,拷貝范圍,是否帶透明色
//By SoftBoy Flysky
void BltFast(LPDIRECTDRAWSURFACE7 SS,int x,int y,
		 LPDIRECTDRAWSURFACE7 DS,LPRECT rcRect,DWORD Flag)
{
	if (rcRect!=NULL)
	{
		//邊界檢查
		if( x<0 ) 
		{  
			rcRect->left = rcRect->left - x; 
			x=0; 
		}	
		else if( x+ rcRect->right - rcRect->left > ScreenWidth ) 
		{ 
			rcRect->right = rcRect->left + ScreenWidth - x; 
		}
	
		if( y<0 ) 
		{  
			rcRect->top  = rcRect->top - y; 
			y=0; 
		}
		else if( y+ rcRect->bottom - rcRect->top > ScreenHeight ) 
		{
			rcRect->bottom = rcRect->top + ScreenHeight - y; 
		}
	}
	SS->BltFast( x, y, DS, rcRect, Flag);
}

//***********************************************************
//功能:位圖拷貝
//參數:目標表面,目標x,目標y,原表面,拷貝范圍,是否帶透明色
//By SoftBoy Flysky
void Blt(LPDIRECTDRAWSURFACE7 SS,int x,int y,
		 LPDIRECTDRAWSURFACE7 DS,RECT rcRect,DWORD Flag)
{
	HRESULT ddrval;
	//邊界檢查
	if( x<0 ) 
	{  
		rcRect.left = rcRect.left - x; 
		x=0; 
	}
	else 
		if( x+ rcRect.right - rcRect.left > ScreenWidth ) 
		{ 
			rcRect.right = rcRect.left + ScreenWidth - x; 
		}

	if( y<0 ) 
	{  
		rcRect.top  = rcRect.top - y; 
		y=0; 
	}
	else 
		if( y+ rcRect.bottom - rcRect.top > ScreenHeight ) 
		{ 
			rcRect.bottom = rcRect.top + ScreenHeight - y; 
		}
	
	while( 1 )
	{
		ddrval = SS->BltFast( x, y, DS, &rcRect, Flag);

		if(	ddrval == DD_OK )
		{
			return;
		}
		
		if( ddrval == DDERR_SURFACELOST )
		{
		    RestoreSurface();
			return;
		}
		
		if( ddrval != DDERR_WASSTILLDRAWING )
		{
		    return;
		}
    }
}

//=================================================================================================
//    更新1
//=================================================================================================

//***********************************************************
//功能:帶縮放的位圖拷貝
//參數:目標表面,目標矩陣,原表面,拷貝范圍,是否帶透明色
//By SoftBoy Flysky

BOOL SBlt(LPDIRECTDRAWSURFACE7 SS,RECT sr,
		 LPDIRECTDRAWSURFACE7 DS,RECT dr,BOOL Flag)
{
  DWORD Flags= (Flag==FALSE)?0:DDBLT_KEYSRC;
	HRESULT ddrval;
  //邊界檢查
  int SWidth=sr.right-sr.left, SHeight=sr.bottom-sr.top;

  int DWidth=dr.right-dr.left, DHeight=dr.bottom-dr.top;

  if( sr.left<0 )
  {
	  dr.left += (DWidth * (-sr.left)) / SWidth;
	  sr.left=0;
  }
  if( sr.top<0 ) 
  {
	  dr.top += (DHeight * (-sr.top)) / SHeight;
	  sr.top=0; 
  }
  if( sr.right > ScreenWidth ) 
  {
	  dr.right -= (DWidth * (sr.right-ScreenWidth)) / SWidth;	
	  sr.right=ScreenWidth; 
  }
  if( sr.bottom > ScreenHeight ) 
  {  
	  dr.bottom -= (DHeight *(sr.bottom-ScreenHeight)) / SHeight;
	  sr.bottom=ScreenHeight;
  }

 while( 1 )
 {
    ddrval = SS->Blt( &sr, DS, &dr, Flags, 0);

	if( ddrval == DD_OK )
	{
	   return TRUE;
	}
	if( ddrval == DDERR_SURFACELOST )
	{
		    RestoreSurface();
			return TRUE;
	}
	if( ddrval != DDERR_WASSTILLDRAWING )
	{
	    return FALSE;
	}
    }
    if(ddrval != DD_OK)
    {
	return FALSE;
    }
}

//取得象素格式
//LpDD為目標表面
//By Flysky
void PixFormat(LPDIRECTDRAWSURFACE7 LpDD)
{
	DDPIXELFORMAT DDPixelFormat;
	ZeroMemory(&DDPixelFormat,sizeof(DDPixelFormat));
	DDPixelFormat.dwSize=sizeof(DDPixelFormat);
	LpDD->GetPixelFormat(&DDPixelFormat);//得到象素格式(在16位色下分555和565)
	if((DDPixelFormat.dwGBitMask>>5)==0x1f)//00000011111
    {
	    s_dwAlphaMask=_ALPHA555RGBMASK;
		Is555=true;

    }
    else if((DDPixelFormat.dwGBitMask>>5)==0x3f)//00000111111
    {
		s_dwAlphaMask=_ALPHA565RGBMASK;
		Is555=false;
	} 
}
//********************************************
//功能:清屏
//參數:目標表面,顏色值
//By Flysky MSDN
void Clrscr(LPDIRECTDRAWSURFACE7 surf,WORD color )
{
	DDBLTFX ddbltfx;
	ddbltfx.dwSize=sizeof(ddbltfx);
	ddbltfx.dwFillColor=color;
	surf->Blt(NULL,NULL,NULL,DDBLT_COLORFILL,&ddbltfx);
}

//************************************
//開頁面緩沖區,然后直接在緩沖區中操作
//By Flysky SoftBoy
bool BeginDraw(LPDIRECTDRAWSURFACE7 lpSur)
{
	HRESULT ddrval;
    ddsd.dwSize = sizeof(ddsd);
    
	while( 1 )
	{ 
		ddrval = lpSur->Lock( NULL, &ddsd, DDLOCK_WAIT, NULL );	//鎖定
		if( ddrval == DD_OK )
		{
		break;
		}
		if( ddrval == DDERR_SURFACELOST )
		{
		RestoreSurface();
			 return( false );
		} 
	}
  	GraphBuffer = (WORD *)ddsd.lpSurface;		//內存指針
	GraphWidth = ddsd.dwWidth;					//寬度
	GraphHeight = ddsd.dwHeight;				//高度
	GraphPitch  = ddsd.lPitch >> 1;	//lPitch以Byte為單位計數的,
									//GraphPitch以WORD為單位。所以GraphPitch = lPitch / 2;
    return( true );
}

//******************
//關閉緩沖區
//By Flysky SoftBoy
bool EndDraw(LPDIRECTDRAWSURFACE7 lpSur)
{
		HRESULT ddrval;
   	ddrval = lpSur->Unlock( NULL );				//解鎖
	if( ddrval != DD_OK ) return( false );
	return true;
}

//=================================================================================================
//    更新2
//=================================================================================================

//16位RGB換算
//By Flysky
WORD RGB16(WORD r, WORD g, WORD b)
{
	//簡單
	if(Is555==true)
		//rrrrr|ggggg|bbbbb    0xf8 = 11111000b
        return RGBto555(r,g,b);	//使用#define函數
		//return ((r&0xf8)<<7) | ((g&0xf8)<<2) | ((b&0xf8)>>3);
	else
		//rrrrr|gggggg|bbbbb    0xfc = 11111100
		return RGBto565(r,g,b);		//使用#define函數	
		//return ((r&0xf8)<<8) | ((g&0xfc)<<3) | ((b&0xf8)>>3);
}

//24位轉16位
//By Flysky
WORD RGB16(DWORD color)
{
	WORD r,g,b;
	//也比較簡單
	r=(WORD)(color>>16);	
	g=(WORD)(color>>8);
	b=(WORD)color;

	if(Is555==true)
		return RGBto555(r,g,b);	//使用#define函數
		//return ((r&0xf8)<<7) | ((g&0xf8)<<2) | ((b&0xf8)>>3);
	else
		return RGBto565(r,g,b);	//使用#define函數
		//return ((r&0xf8)<<8) | ((g&0xfc)<<3) | ((b&0xf8)>>3);
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产成人福利片| 午夜不卡av在线| 在线视频国产一区| 裸体健美xxxx欧美裸体表演| 欧美高清在线精品一区| 欧美三级午夜理伦三级中视频| 国产在线精品免费| 一区二区三区**美女毛片| 2023国产精品| 欧美日韩亚洲综合| 不卡的电影网站| 看电影不卡的网站| 亚洲午夜久久久久久久久久久| 久久久久国产精品麻豆ai换脸| 日本黄色一区二区| 国产福利精品一区二区| 日韩高清电影一区| 亚洲情趣在线观看| 久久精品夜色噜噜亚洲a∨| 欧美丝袜丝交足nylons| 成人一区二区三区在线观看| 日本欧美在线看| 亚洲激情六月丁香| 国产精品久久久爽爽爽麻豆色哟哟 | 欧美色倩网站大全免费| 成人av免费网站| 六月丁香综合在线视频| 日韩精品欧美精品| 一区二区三区中文字幕在线观看| 久久精品欧美一区二区三区麻豆| 日韩一区二区在线免费观看| 国产成人啪免费观看软件 | 亚洲精品中文字幕乱码三区| 欧美va日韩va| 日韩一级免费观看| 欧美日韩二区三区| 欧美日韩一区二区三区在线| 色综合激情久久| 91在线一区二区三区| 99在线精品观看| 成人av电影在线观看| 成人午夜短视频| 成人av电影在线| 成人短视频下载| 成人动漫视频在线| 岛国av在线一区| 丰满白嫩尤物一区二区| 懂色av一区二区三区免费看| 国产福利91精品| 成人伦理片在线| 99热在这里有精品免费| 91在线视频在线| 在线观看精品一区| 欧美日韩精品免费| 欧美一级爆毛片| 欧美日高清视频| 日韩一卡二卡三卡四卡| 精品国产精品网麻豆系列| 久久综合资源网| 国产欧美精品区一区二区三区 | 久久综合狠狠综合久久激情| 久久综合狠狠综合| 国产精品久久久久久久久果冻传媒| 国产精品麻豆视频| 亚洲欧美福利一区二区| 亚洲一区二区黄色| 免费一级片91| 国产成人在线视频播放| 99视频有精品| 在线播放视频一区| 久久久久国产精品人| 亚洲日本va在线观看| 午夜伊人狠狠久久| 日韩 欧美一区二区三区| 精品一区二区三区的国产在线播放| 国产成人一区在线| 色婷婷av一区| 91精品国产福利| 中文字幕精品—区二区四季| 一区二区在线观看不卡| 日韩黄色片在线观看| 国产精品一区久久久久| av激情综合网| 欧美电影免费提供在线观看| 国产精品国产三级国产普通话蜜臀| 亚洲精品免费在线| 久久精品久久综合| bt欧美亚洲午夜电影天堂| 欧美日韩国产另类一区| 久久久不卡网国产精品二区| 亚洲最大成人综合| 韩日欧美一区二区三区| 色综合久久99| 精品国产91亚洲一区二区三区婷婷| 国产精品大尺度| 午夜一区二区三区视频| 国产精品99久久久久久宅男| 欧美日韩一区二区三区免费看| 久久综合狠狠综合久久激情| 亚洲国产精品自拍| 国产成人一区在线| 欧美sm美女调教| 亚洲综合一区在线| 成人性视频网站| 日韩欧美激情四射| 亚洲人妖av一区二区| 国产精品一区一区| 日韩一级片网址| 亚洲资源中文字幕| 波多野结衣一区二区三区| 欧美成人乱码一区二区三区| 一区二区三区产品免费精品久久75| 精品中文字幕一区二区| 欧美日韩国产精选| 亚洲人成亚洲人成在线观看图片| 国产福利一区二区| 日韩欧美综合在线| 亚洲成av人片观看| 一本色道久久综合亚洲精品按摩| 国产亚洲女人久久久久毛片| 奇米影视在线99精品| 在线免费观看日本欧美| 国产精品天干天干在观线| 天堂久久久久va久久久久| 色88888久久久久久影院按摩| 欧美国产日本韩| 蜜臀久久99精品久久久久久9| 在线亚洲一区观看| 国产精品国产三级国产普通话蜜臀 | 91精品国产欧美一区二区成人| 亚洲女爱视频在线| 91小视频免费看| 国产精品传媒视频| 91免费观看视频| 成人欧美一区二区三区白人| 国产成人在线色| 久久久精品欧美丰满| 狠狠色综合色综合网络| 欧美大胆一级视频| 天使萌一区二区三区免费观看| 欧美视频你懂的| 亚洲3atv精品一区二区三区| 欧美日韩一区不卡| 午夜精品123| 337p亚洲精品色噜噜狠狠| 图片区小说区区亚洲影院| 欧美日韩1区2区| 免费成人你懂的| 欧美变态tickle挠乳网站| 紧缚奴在线一区二区三区| 日韩欧美在线一区二区三区| 免费三级欧美电影| 精品国产1区2区3区| 国产黄色精品网站| 国产精品美女久久久久久| 97久久超碰国产精品| 夜夜操天天操亚洲| 欧美一区二区三区四区视频| 精品一区二区三区久久久| 国产女主播在线一区二区| 懂色一区二区三区免费观看| 国产精品久久国产精麻豆99网站| 99精品国产热久久91蜜凸| 亚洲综合一区二区精品导航| 欧美一级理论性理论a| 精品一区二区久久| 国产精品国产三级国产普通话99 | 经典三级一区二区| 国产精品美女久久久久av爽李琼| 91啪亚洲精品| 日韩成人午夜电影| 久久精品一区四区| 色综合久久中文综合久久97| 日韩精品久久理论片| 久久久亚洲欧洲日产国码αv| av亚洲精华国产精华精华| 亚洲成av人片| 久久蜜桃av一区精品变态类天堂| 99久久精品免费看国产| 日韩在线观看一区二区| 国产欧美综合色| 在线观看国产日韩| 国产精品一二三四区| 亚洲免费观看高清完整版在线 | 一区二区在线观看免费| 日韩欧美久久久| 91蜜桃在线观看| 另类的小说在线视频另类成人小视频在线 | 国产午夜精品一区二区三区嫩草| 91免费视频大全| 加勒比av一区二区| 亚洲综合一二区| 欧美国产日韩一二三区| 欧美乱熟臀69xxxxxx| 国产主播一区二区三区| 一区二区三区免费网站| 久久久久国产成人精品亚洲午夜 | 色噜噜狠狠成人中文综合| 久久国产精品99久久久久久老狼| 综合亚洲深深色噜噜狠狠网站|