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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? directdraw.cpp

?? diablo圖形引擎例子
?? CPP
字號(hào):
// 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,"協(xié)作層設(shè)置失敗!","協(xié)作層設(shè)置失敗!",MB_OK);
		return false;
	}
#else	
	if(m_lpDD->SetCooperativeLevel(m_hWnd,DDSCL_EXCLUSIVE | DDSCL_FULLSCREEN)!=DD_OK)
	{
		MessageBox(NULL,"協(xié)作層設(shè)置失敗 !","協(xié)作層設(shè)置失敗 !",MB_OK);
		return false;
	}

	if (m_lpDD->SetDisplayMode(DisplayMode_Width,DisplayMode_Height,DisplayMode_ColorDeep)!=DD_OK)
	{
		MessageBox(NULL,"顯示模式設(shè)置失敗!","顯示模式設(shè)置失敗!",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;   // 創(chuàng)建后緩沖
    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()","剪裁器窗口句柄設(shè)置失敗 !",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,"幀數(shù):%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();
	}

	//翻轉(zhuǎn)頁面
    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;
}


?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
色婷婷一区二区三区四区| 天使萌一区二区三区免费观看| 久久精品国内一区二区三区| 欧美一级搡bbbb搡bbbb| 青青草97国产精品免费观看| 日韩一区和二区| 国模套图日韩精品一区二区| 久久亚洲精品国产精品紫薇| 国产69精品久久777的优势| 国产免费成人在线视频| 93久久精品日日躁夜夜躁欧美| 亚洲最大成人综合| 在线成人小视频| 国产乱码精品1区2区3区| 国产精品国产三级国产普通话99| 91免费小视频| 日韩av网站在线观看| 久久你懂得1024| 91麻豆国产福利在线观看| 婷婷国产v国产偷v亚洲高清| 亚洲精品在线观看视频| 成人成人成人在线视频| 亚洲综合在线第一页| 精品国产3级a| 91免费精品国自产拍在线不卡| 午夜欧美视频在线观看| 国产亚洲美州欧州综合国| 在线亚洲一区二区| 裸体在线国模精品偷拍| 亚洲裸体xxx| 日韩精品一区二区三区在线播放| 成人福利视频在线看| 香蕉成人伊视频在线观看| 久久蜜桃av一区二区天堂| 欧洲精品一区二区三区在线观看| 久久丁香综合五月国产三级网站| 亚洲欧洲日产国码二区| 日韩一级视频免费观看在线| www.性欧美| 精品一区二区三区在线播放视频| 一区二区在线观看免费视频播放| 久久亚洲捆绑美女| 欧美日韩国产首页| 不卡大黄网站免费看| 日韩成人一区二区| 亚洲视频一区在线观看| www成人在线观看| 欧美三区在线视频| www.日韩av| 国产精品自产自拍| 日韩不卡一区二区三区| 亚洲乱码精品一二三四区日韩在线| 日韩精品一区二区三区在线观看 | 欧亚洲嫩模精品一区三区| 国产精品一区二区你懂的| 性欧美疯狂xxxxbbbb| 中文字幕一区二区5566日韩| 久久午夜国产精品| 亚洲天堂精品在线观看| 精品裸体舞一区二区三区| 欧美日韩一区精品| 色偷偷88欧美精品久久久| 成人性生交大片免费| 激情另类小说区图片区视频区| 亚洲大片免费看| 亚洲综合成人在线视频| 最新中文字幕一区二区三区| 久久九九影视网| 久久综合视频网| 欧美白人最猛性xxxxx69交| 欧美疯狂性受xxxxx喷水图片| 91黄色小视频| 91啪九色porn原创视频在线观看| 成人午夜免费视频| 国产99久久久精品| 国产成人午夜精品影院观看视频 | 色婷婷久久一区二区三区麻豆| 国产白丝网站精品污在线入口| 韩国成人在线视频| 麻豆91免费观看| 激情五月婷婷综合网| 国产精品一区二区在线看| 国产在线精品一区在线观看麻豆| 国产在线精品一区在线观看麻豆| 久久国产尿小便嘘嘘尿| 极品少妇一区二区三区精品视频 | 久久超碰97中文字幕| 美女视频免费一区| 另类中文字幕网| 久久 天天综合| 国产呦萝稀缺另类资源| 国产成人免费视频网站| 日韩欧美一二三四区| 日韩一卡二卡三卡| 欧美精品一区二区三区久久久| 精品少妇一区二区三区日产乱码 | 欧美一区二区三区视频在线| 欧美一区二视频| 久久综合九色欧美综合狠狠 | 亚洲国产欧美另类丝袜| 性做久久久久久免费观看| 天天av天天翘天天综合网色鬼国产 | 日韩av一级电影| 国产老肥熟一区二区三区| 成人午夜伦理影院| 欧美在线视频日韩| 日韩欧美在线网站| 欧美国产欧美亚州国产日韩mv天天看完整| 国产精品久久久久久久久晋中| 亚洲一区二区在线免费看| 麻豆视频观看网址久久| 大陆成人av片| 欧美日韩精品一区二区三区四区| 日韩午夜电影av| 国产精品乱人伦中文| 亚洲第一电影网| 国产精品一线二线三线| 91麻豆精东视频| 日韩色在线观看| 综合欧美亚洲日本| 丝袜美腿亚洲一区| 成人免费毛片a| 欧美精品日韩综合在线| 欧美国产乱子伦| 日韩av电影一区| 99久久777色| 日韩一区二区视频| 亚洲同性同志一二三专区| 日本美女一区二区三区| 99精品久久99久久久久| 日韩一级高清毛片| 亚洲久本草在线中文字幕| 精品一区二区在线视频| 97久久精品人人澡人人爽| 日韩欧美激情四射| 亚洲老司机在线| 国产成人午夜电影网| 欧美精品一级二级| 1区2区3区精品视频| 激情六月婷婷久久| 777午夜精品免费视频| 亚洲视频在线观看一区| 国产很黄免费观看久久| 日韩一区二区影院| 一区二区三区在线免费观看 | 国产清纯白嫩初高生在线观看91 | 日韩国产欧美在线播放| 99久久综合精品| 久久久久久免费网| 狂野欧美性猛交blacked| 欧美视频在线观看一区| 亚洲欧美色图小说| 成人国产免费视频| 久久久99久久| 国产一区欧美日韩| 精品国产制服丝袜高跟| 日韩中文字幕一区二区三区| 欧美性做爰猛烈叫床潮| 亚洲日本中文字幕区| 成人av免费在线观看| 欧美高清在线视频| 成人在线视频一区二区| 精品国内二区三区| 另类的小说在线视频另类成人小视频在线 | 欧美韩国日本不卡| 国产精品一区二区三区四区| www国产精品av| 国产一区二区伦理片| 久久网站热最新地址| 国产一区二区三区在线观看精品| 精品国产自在久精品国产| 精品一二三四区| 26uuu色噜噜精品一区二区| 狠狠色狠狠色综合系列| 精品久久久久久久久久久久久久久| 麻豆精品一区二区综合av| 欧美电影精品一区二区| 久久国产日韩欧美精品| 久久影音资源网| 国产99久久久国产精品潘金| 国产视频在线观看一区二区三区| 国产激情精品久久久第一区二区 | 国产黄色成人av| 中文字幕永久在线不卡| 91麻豆福利精品推荐| 亚洲成人777| 日韩欧美一区在线| 国产精品88888| 亚洲色图制服丝袜| 欧美日韩在线电影| 美日韩黄色大片| 国产视频911| 色婷婷综合激情| 日韩精品亚洲专区| 精品国产免费一区二区三区香蕉 | 欧洲另类一二三四区| 日韩国产一二三区| 日本一区二区视频在线观看| 91视频你懂的| 蜜臀久久99精品久久久久宅男 |