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

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

?? directdraw.cpp

?? 45度rpg引擎
?? CPP
字號:
// DirectDraw.cpp: implementation of the DirectDraw class.
//
//////////////////////////////////////////////////////////////////////


#include <string.h>
#include <stdio.h>
#include <assert.h>
#include <windowsx.h>
#include "DirectDraw.h"

//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////

DirectDraw::DirectDraw()
{
	m_lpDD=NULL;
	m_lpDDSPrimary=NULL;
	m_lpDDSBackbuffer=NULL;
	memset(&m_ddsd,0,sizeof(DDSURFACEDESC));
	m_ddsd.dwSize = sizeof (DDSURFACEDESC);
}

DirectDraw::~DirectDraw()
{
	if (m_lpDD!=NULL)                   
	{
	   if( m_lpDDSPrimary!=NULL)
        {
            m_lpDDSPrimary->Release();
            m_lpDDSPrimary= NULL;
        }
		m_lpDD->Release();
		m_lpDD=NULL;
	}
}

bool DirectDraw::Create(HWND hWnd)
{
	m_hWnd=hWnd;

	if (DirectDrawCreate(NULL, &m_lpDD, NULL)!=DD_OK)
		return false; 
	
#ifdef _DEBUG	
	if (m_lpDD->SetCooperativeLevel(m_hWnd,DDSCL_NORMAL | DDSCL_NOWINDOWCHANGES) != DD_OK)
	{
		MessageBox(NULL,"協作層設置失敗!","協作層設置失敗!",MB_OK);
		return false;
	}
#else	
	if(m_lpDD->SetCooperativeLevel(m_hWnd,DDSCL_EXCLUSIVE | DDSCL_FULLSCREEN)!=DD_OK)
	{
		MessageBox(NULL,"協作層設置失敗 !","協作層設置失敗 !",MB_OK);
		return false;
	}

	if (m_lpDD->SetDisplayMode(DisplayMode_Width,DisplayMode_Height,DisplayMode_ColorDeep)!=DD_OK)
	{
		MessageBox(NULL,"顯示模式設置失敗!","顯示模式設置失敗!",MB_OK);
		return false;
	}
#endif
	

	DDSURFACEDESC ddsd;
    HRESULT ddrval;

    // Create the primary surface with 1 back buffer
    memset( &ddsd, 0, sizeof(ddsd) );
    ddsd.dwSize = sizeof( ddsd );

#ifdef _DEBUG
    ddsd.dwFlags = DDSD_CAPS ;
    ddsd.ddsCaps.dwCaps = DDSCAPS_PRIMARYSURFACE ;
    ddrval = m_lpDD->CreateSurface( &ddsd, &m_lpDDSPrimary, NULL );
    if( ddrval != DD_OK )	return FALSE;
	ddsd.dwFlags = DDSD_WIDTH | DDSD_HEIGHT | DDSD_CAPS;
	ddsd.dwWidth = DisplayMode_Width;
	ddsd.dwHeight = DisplayMode_Height;
    ddsd.ddsCaps.dwCaps = DDSCAPS_OFFSCREENPLAIN | DDSCAPS_VIDEOMEMORY;   // 創建后緩沖
    ddrval=m_lpDD->CreateSurface( &ddsd, &m_lpDDSBackbuffer, NULL );
#else 
    DDSCAPS ddscaps;
	ddsd.dwFlags = DDSD_CAPS | DDSD_BACKBUFFERCOUNT ;
	ddsd.ddsCaps.dwCaps = DDSCAPS_PRIMARYSURFACE  | DDSCAPS_FLIP | DDSCAPS_COMPLEX;
	ddsd.dwBackBufferCount = 1;
    ddrval = m_lpDD->CreateSurface( &ddsd, &m_lpDDSPrimary, NULL );
    if( ddrval != DD_OK )	return FALSE;
    ddscaps.dwCaps = DDSCAPS_BACKBUFFER  ;
	ddrval = m_lpDDSPrimary->GetAttachedSurface(&ddscaps, &m_lpDDSBackbuffer);
#endif

	if( ddrval != DD_OK )    
	{
		MessageBox(NULL,"顯示表面初始化失敗 ! ","顯示表面初始化失敗 !",MB_OK);
		return false;
	}

	
#ifdef _DEBUG
	
	LPDIRECTDRAWCLIPPER  lpDDClipper;
	if (m_lpDD->CreateClipper( 0, &lpDDClipper, NULL ) != DD_OK )  
	{
		MessageBox(NULL,"Function: CreateClipper()...","剪裁器建立失敗 !",MB_OK);
		return false;
	}
	if ( lpDDClipper->SetHWnd( 0, m_hWnd ) != DD_OK )   
	{
		MessageBox(NULL,"Function: Clipper->SetHWnd()","剪裁器窗口句柄設置失敗 !",MB_OK);
		return false;
	}
    if ( m_lpDDSPrimary->SetClipper( lpDDClipper ) != DD_OK ) 
	{
		MessageBox(NULL,"Function: SetClipper()...","剪裁器連接到主表面失敗 !",MB_OK);
		return false;
	}
    lpDDClipper->Release();

#endif
	
	DDPIXELFORMAT ddpf;  
	ddpf.dwSize=sizeof(DDPIXELFORMAT);
	if (m_lpDDSPrimary->GetPixelFormat( &ddpf )!=DD_OK)
	{
		MessageBox(NULL,"Function: GetPixelFormat()...","失敗 !",MB_OK);
		return false;
	}    
	if (ddpf.dwGBitMask==0x3e0) 
		m_bColorMode=true;		//  000001111100000 555
	else
		m_bColorMode=false;	    // 0000011111100000 565

	return true;
}

bool DirectDraw::Lock(WORD * & lpBackbufferPtr, long & lPitch)
{
	m_lpDDSBackbuffer->Lock(NULL, &m_ddsd, DDLOCK_WAIT, NULL);
	//{
	///	return false;
	//} 
	//else
	//{
		lPitch  = m_ddsd.lPitch >> 1;	
		lpBackbufferPtr=(WORD *)m_ddsd.lpSurface;
		return true;
	//} 
}

bool DirectDraw::UnLock()
{
	if (m_lpDDSBackbuffer->Unlock(&m_ddsd)!=DD_OK)
		return false;
	else 
		return true;
}

void DirectDraw::Dump(char *lpBuffer)
{
	assert(lpBuffer);
	static DWORD time=GetTickCount();
	static int fps=0, frame=0, nt, ot=0;

	if ((GetTickCount()-time)>10)
	{
		time=GetTickCount();
		frame++;
		nt=GetTickCount(); 
		if (nt > ot+1000)
		{
			ot=nt;
			fps=frame;
			frame=0;
		} 
	}
	sprintf(lpBuffer,"幀數:%3.3d ",fps);
	if (m_bColorMode) strcat(lpBuffer,"555顏色模式");
	else strcat(lpBuffer,"565顏色模式");
}

void DirectDraw::Flip()
{
	HRESULT hResult;
#ifdef _DEBUG
	RECT src_rect, dst_rect;  
	POINT pt;  
	/*** src_rect is relative to offscreen buffer   */
	GetClientRect(m_hWnd,&src_rect);
	//GetClientRect( AfxGetMainWnd()->m_hWnd, &src_rect );   
	/*** dst_rect is relative to screen space so needs translation   */
	pt.x = pt.y = 0;   
	ClientToScreen( m_hWnd, &pt );   
	dst_rect = src_rect;
	dst_rect.left += pt.x;
	dst_rect.right += pt.x;
	dst_rect.top += pt.y;
    dst_rect.bottom += pt.y;   
	/*** perform the blit from backbuffer to primary, using ** src_rect and dst_rect */
	hResult=m_lpDDSPrimary->Blt(&dst_rect,m_lpDDSBackbuffer, &src_rect, DDBLT_WAIT,0);
	if (  hResult!= DD_OK )   
	{      
		// something bad happened
	}
#else 
	while( 1 )
	{
		hResult = m_lpDDSPrimary->Flip( NULL, DDFLIP_WAIT);
		if( hResult== DD_OK )
        {
			break;
		}
        if( hResult== DDERR_SURFACELOST )
        {
            hResult= Restore();
            if( hResult!= DD_OK )
            {
				break;
			}
        }
        if( hResult!= DDERR_WASSTILLDRAWING )
        {
            break;
        }
    }
#endif
}

void DirectDraw::DebugInfo()
{
	CleanDDSBackbuffer(RGB(0,0,0));

	HDC dc;char * temp=new char[256];

	m_lpDDSBackbuffer->GetDC(&dc);
	Dump(temp);
	TextOut(dc, 0, 0, temp, strlen(temp));
	m_lpDDSBackbuffer->ReleaseDC(dc);
	delete temp;

	//鎖定表面測試
	WORD *lpBackbuffer=NULL;
	long lPitch;
	if (Lock(lpBackbuffer,lPitch))
	{
		for(int i=0;i<100;i++)
			*(lpBackbuffer+0+i*lPitch+i)=0x7fff;

		UnLock();
	}

	//翻轉頁面
    Flip();	
}

void DirectDraw::CleanDDSBackbuffer(DWORD Color)
{
	HRESULT hResult;
	DDBLTFX ddfx;
	ddfx.dwSize=sizeof(ddfx);
	ddfx.dwFillColor=Color;
	while(1)
	{
		hResult=m_lpDDSBackbuffer->Blt(NULL,NULL,NULL,DDBLT_COLORFILL,&ddfx);
		if( hResult == DD_OK )
        {
			break;
		}
		if( hResult== DDERR_SURFACELOST )
        {
            hResult= Restore();
            if( hResult!= DD_OK )
            {
				break;
			}
        }
        if( hResult!= DDERR_WASSTILLDRAWING )
        {
            break;
        }
	}
}

bool DirectDraw::Restore()
{
	if (m_lpDDSPrimary!=NULL) m_lpDDSPrimary->Restore();
	return true;
}


bool DirectDraw::Capture(char *lpszFilename)
{
   BITMAPFILEHEADER bmfh;
   BITMAPINFOHEADER bmih;
   FILE *fp=NULL;
 
   bmfh.bfType=0x4d42;
   bmfh.bfSize=0;
   bmfh.bfReserved1=0;
   bmfh.bfReserved2=0;
   bmfh.bfOffBits=sizeof(BITMAPFILEHEADER)+sizeof(BITMAPINFOHEADER);

   bmih.biSize=sizeof(BITMAPINFOHEADER);
   bmih.biWidth=DisplayMode_Width;
   bmih.biHeight=DisplayMode_Height;
   bmih.biPlanes=1; 
   bmih.biBitCount=24;
   bmih.biCompression=BI_RGB; 
   bmih.biSizeImage=0;
   bmih.biXPelsPerMeter=0;
   bmih.biYPelsPerMeter=0; 
   bmih.biClrUsed=0;
   bmih.biClrImportant=0; 

   if ((fp=fopen(lpszFilename,"wb"))==NULL) return FALSE;

   fwrite(&bmfh,sizeof(bmfh),1,fp);
   fwrite(&bmih,sizeof(bmih),1,fp);
   
   //fseek(fp,bmfh.bfOffBits,SEEK_SET);

   //conver every pixel form 256 to 15bit
   	HDC hDC;
	
	m_lpDDSBackbuffer->GetDC(&hDC);

	for (int j=bmih.biHeight-1;j>=0;j--)
		for (int i=0;i<bmih.biWidth;i++)
		{	
			COLORREF c=GetPixel(hDC,i,j);
			BYTE r,g,b;
			r=GetRValue(c);
			g=GetGValue(c);
			b=GetBValue(c);
			fwrite(&b,1,1,fp);
			fwrite(&g,1,1,fp);
			fwrite(&r,1,1,fp);
		}
	m_lpDDSBackbuffer->ReleaseDC(hDC);

	fclose(fp);
	return TRUE;
}


?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
秋霞午夜鲁丝一区二区老狼| 亚洲一区二区三区四区的| 欧美亚洲综合色| 99re这里只有精品6| 粉嫩欧美一区二区三区高清影视| 美女一区二区久久| 久久av中文字幕片| 国产一区视频在线看| 国产精品亚洲人在线观看| 国产丶欧美丶日本不卡视频| 国产成人亚洲综合色影视| 国产精品一区久久久久| 成人丝袜18视频在线观看| 国产成人高清视频| 成人av在线网站| 91视频免费播放| 欧亚一区二区三区| 日韩丝袜情趣美女图片| 国产亚洲成年网址在线观看| 国产精品伦理在线| 一区二区国产盗摄色噜噜| 日韩中文字幕麻豆| 国产精品一二三四五| www.亚洲在线| 7777精品伊人久久久大香线蕉最新版| 日韩欧美中文字幕制服| 国产精品久久久久四虎| 午夜精品久久久久久不卡8050| 久久国产乱子精品免费女| 成人免费高清视频在线观看| 欧美专区日韩专区| 日韩免费电影一区| 亚洲毛片av在线| 久久激情五月激情| 在线一区二区三区| 久久久久久免费网| 亚洲一区二区三区免费视频| 国产一区二区剧情av在线| 91麻豆蜜桃一区二区三区| 日韩一区二区三区免费看| 成人免费在线观看入口| 麻豆精品在线观看| 欧洲一区二区av| 国产精品免费人成网站| 麻豆91在线看| 在线观看日韩一区| 国产精品欧美一区喷水| 久99久精品视频免费观看| 一本大道久久精品懂色aⅴ| 精品国产91乱码一区二区三区 | 91.麻豆视频| 国产精品久久免费看| 麻豆国产一区二区| 欧美日韩国产成人在线91| 国产精品国产三级国产普通话99| 蜜桃久久久久久| 欧美日韩久久久久久| 亚洲图片你懂的| 成人午夜激情视频| 国产夜色精品一区二区av| 美腿丝袜一区二区三区| 欧美日韩国产小视频在线观看| 国产精品久久久久一区二区三区| 国产精品羞羞答答xxdd| 精品久久国产老人久久综合| 日产精品久久久久久久性色| 欧美伊人久久久久久久久影院| 最新不卡av在线| 91原创在线视频| 国产精品久99| 99vv1com这只有精品| 国产精品午夜在线观看| 粉嫩久久99精品久久久久久夜 | 在线亚洲欧美专区二区| 国产精品久久久久久久久图文区 | 欧美精品成人一区二区三区四区| 亚洲精品视频在线观看网站| 97久久超碰国产精品| 国产精品久久久久婷婷二区次| 国产成人aaa| 国产精品国产三级国产aⅴ入口| 国产精品一区免费视频| 欧美激情艳妇裸体舞| 成人黄色在线看| 亚洲男人的天堂一区二区 | 一区二区三区四区高清精品免费观看 | 亚洲欧美激情小说另类| 欧洲一区二区av| 石原莉奈一区二区三区在线观看| 欧美一区二区三区婷婷月色| 久久精品99久久久| 欧美激情一区二区三区不卡 | 精品国产伦一区二区三区免费| 久久精品国产一区二区| 久久综合色8888| 99久久er热在这里只有精品15 | 国产制服丝袜一区| 欧美激情在线免费观看| 色呦呦国产精品| 蜜臀va亚洲va欧美va天堂| 久久亚洲精品小早川怜子| a亚洲天堂av| 午夜婷婷国产麻豆精品| 精品久久人人做人人爰| 99vv1com这只有精品| 日韩精品电影在线| 国产丝袜欧美中文另类| 欧美亚洲自拍偷拍| 美女在线观看视频一区二区| 一区在线观看免费| 555www色欧美视频| 成人av小说网| 久久97超碰色| 一区二区三区中文免费| 精品国免费一区二区三区| 色婷婷av久久久久久久| 狠狠色狠狠色综合日日91app| 亚洲色图视频免费播放| 精品国产青草久久久久福利| 91国产成人在线| 国产精品99久久久| 图片区小说区区亚洲影院| 亚洲国产高清在线| 日韩欧美高清在线| 欧美曰成人黄网| 不卡的av网站| 国产高清精品在线| 另类小说一区二区三区| 一区二区三区蜜桃网| 国产精品五月天| 欧美精品一区二区蜜臀亚洲| 欧美日韩免费一区二区三区视频| 成人黄色片在线观看| 麻豆成人91精品二区三区| 香蕉久久一区二区不卡无毒影院| 国产精品国产精品国产专区不蜜| 2欧美一区二区三区在线观看视频| 欧美午夜一区二区| 99久久99久久精品国产片果冻| 国内精品国产成人| 狠狠色综合播放一区二区| 男男视频亚洲欧美| 日韩经典中文字幕一区| 亚洲一二三四在线观看| 亚洲精品久久久蜜桃| 国产精品成人免费| 国产精品美女久久久久高潮| 久久一夜天堂av一区二区三区| 欧美一二三区在线| 久久综合久久综合亚洲| 日韩欧美在线影院| 精品国产免费视频| 日韩午夜av一区| 欧美电视剧免费观看| 欧美tk丨vk视频| 欧美精品一区二区三区蜜桃视频 | 亚洲欧美激情小说另类| 国产精品二区一区二区aⅴ污介绍| 国产欧美综合色| 国产欧美精品日韩区二区麻豆天美| 久久综合九色综合久久久精品综合| 日韩美女在线视频| 久久久久久久性| 亚洲国产精品v| 亚洲视频图片小说| 亚洲成精国产精品女| 日本人妖一区二区| 国产一区二区调教| 成人一区二区三区视频在线观看 | 欧美电影精品一区二区| 久久婷婷一区二区三区| 国产精品乱码一区二三区小蝌蚪| 综合久久久久久| 亚洲成a人v欧美综合天堂| 免费美女久久99| 国产精品一二三四五| 91影视在线播放| 欧美一区二区三区免费在线看| 久久这里只有精品6| 国产精品久久久久久亚洲毛片| 一区二区成人在线视频 | 色婷婷久久久久swag精品 | 日韩免费高清电影| 国产精品毛片高清在线完整版 | 日韩综合一区二区| 国产高清无密码一区二区三区| 91欧美一区二区| 日韩欧美中文字幕一区| 国产精品久久久久影院亚瑟| 日韩和欧美一区二区| 成人av电影在线网| 欧美日韩不卡视频| 国产色产综合产在线视频 | 欧美久久久久久久久中文字幕| 久久综合九色综合97婷婷| 悠悠色在线精品| 国产一区二区三区久久久| 欧美亚洲一区二区三区四区| 26uuu色噜噜精品一区| 亚洲一区二区三区四区的|