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

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

?? demo7_9.cpp

?? 一本外國人寫的關(guān)于3D游戲編程的書的源碼
?? CPP
?? 第 1 頁 / 共 2 頁
字號:
// DEMO7_9.CPP 8-bit clipping demo

// INCLUDES ///////////////////////////////////////////////

#define WIN32_LEAN_AND_MEAN  // just say no to MFC

#define INITGUID

#include <windows.h>   // include important windows stuff
#include <windowsx.h> 
#include <mmsystem.h>
#include <iostream.h> // include important C/C++ stuff
#include <conio.h>
#include <stdlib.h>
#include <malloc.h>
#include <memory.h>
#include <string.h>
#include <stdarg.h>
#include <stdio.h> 
#include <math.h>
#include <io.h>
#include <fcntl.h>

#include <ddraw.h> // include directdraw

// DEFINES ////////////////////////////////////////////////

// defines for windows 
#define WINDOW_CLASS_NAME "WINCLASS1"

// default screen size
#define SCREEN_WIDTH    640  // size of screen
#define SCREEN_HEIGHT   480
#define SCREEN_BPP      8    // bits per pixel

#define MAX_COLORS_PALETTE 256 // maximum colors in 256 color palette

// TYPES //////////////////////////////////////////////////////

// basic unsigned types
typedef unsigned short USHORT;
typedef unsigned short WORD;
typedef unsigned char  UCHAR;
typedef unsigned char  BYTE;

// MACROS //////////////////////////////////////////////////////

#define KEYDOWN(vk_code) ((GetAsyncKeyState(vk_code) & 0x8000) ? 1 : 0)
#define KEYUP(vk_code)   ((GetAsyncKeyState(vk_code) & 0x8000) ? 0 : 1)

// this builds a 16 bit color value in 5.5.5 format (1-bit alpha mode)
#define _RGB16BIT555(r,g,b) ((b & 31) + ((g & 31) << 5) + ((r & 31) << 10))

// this builds a 16 bit color value in 5.6.5 format (green dominate mode)
#define _RGB16BIT565(r,g,b) ((b & 31) + ((g & 63) << 5) + ((r & 31) << 11))

// this builds a 32 bit color value in A.8.8.8 format (8-bit alpha mode)
#define _RGB32BIT(a,r,g,b) ((b) + ((g) << 8) + ((r) << 16) + ((a) << 24))

// initializes a direct draw struct
#define DDRAW_INIT_STRUCT(ddstruct) { memset(&ddstruct,0,sizeof(ddstruct)); ddstruct.dwSize=sizeof(ddstruct); }

// PROTOTYPES /////////////////////////////////////////////////

LPDIRECTDRAWCLIPPER DDraw_Attach_Clipper(LPDIRECTDRAWSURFACE7 lpdds,
                                         int num_rects,
                                         LPRECT clip_list);

// GLOBALS ////////////////////////////////////////////////////

HWND      main_window_handle = NULL; // globally track main window
int       window_closed      = 0;    // tracks if window is closed
HINSTANCE hinstance_app      = NULL; // globally track hinstance

// directdraw stuff
LPDIRECTDRAW7         lpdd         = NULL;   // dd4 object
LPDIRECTDRAWSURFACE7  lpddsprimary = NULL;   // dd primary surface
LPDIRECTDRAWSURFACE7  lpddsback    = NULL;   // dd back surface
LPDIRECTDRAWPALETTE   lpddpal      = NULL;   // a pointer to the created dd palette
LPDIRECTDRAWCLIPPER   lpddclipper  = NULL;   // dd clipper
PALETTEENTRY          palette[256];          // color palette
PALETTEENTRY          save_palette[256];     // used to save palettes
DDSURFACEDESC2        ddsd;                  // a direct draw surface description struct
DDBLTFX               ddbltfx;               // used to fill
DDSCAPS2              ddscaps;               // a direct draw surface capabilities struct
HRESULT               ddrval;                // result back from dd calls
DWORD                 start_clock_count = 0; // used for timing

char buffer[80];                             // general printing buffer

// FUNCTIONS //////////////////////////////////////////////

LRESULT CALLBACK WindowProc(HWND hwnd, 
						    UINT msg, 
                            WPARAM wparam, 
                            LPARAM lparam)
{
// this is the main message handler of the system
PAINTSTRUCT		ps;		// used in WM_PAINT
HDC				hdc;	// handle to a device context
char buffer[80];        // used to print strings

// what is the message 
switch(msg)
	{	
	case WM_CREATE: 
        {
		// do initialization stuff here
        // return success
		return(0);
		} break;
   
	case WM_PAINT: 
		{
		// simply validate the window 
   	    hdc = BeginPaint(hwnd,&ps);	 
        
        // end painting
        EndPaint(hwnd,&ps);

        // return success
		return(0);
   		} break;

	case WM_DESTROY: 
		{

		// kill the application, this sends a WM_QUIT message 
		PostQuitMessage(0);

        // return success
		return(0);
		} break;

	default:break;

    } // end switch

// process any messages that we didn't take care of 
return (DefWindowProc(hwnd, msg, wparam, lparam));

} // end WinProc

///////////////////////////////////////////////////////////

int Game_Main(void *parms = NULL, int num_parms = 0)
{
// this is the main loop of the game, do all your processing
// here

RECT source_rect, // used to hold the destination RECT
     dest_rect;  // used to hold the destination RECT

// make sure this isn't executed again
if (window_closed)
   return(0);

// for now test if user is hitting ESC and send WM_CLOSE
if (KEYDOWN(VK_ESCAPE))
   {
   PostMessage(main_window_handle,WM_CLOSE,0,0);
   window_closed = 1;
   } // end if

// get a random rectangle for source
int x1 = rand()%SCREEN_WIDTH;
int y1 = rand()%SCREEN_HEIGHT;
int x2 = rand()%SCREEN_WIDTH;
int y2 = rand()%SCREEN_HEIGHT;

// get a random rectangle for destination
int x3 = rand()%SCREEN_WIDTH;
int y3 = rand()%SCREEN_HEIGHT;
int x4 = rand()%SCREEN_WIDTH;
int y4 = rand()%SCREEN_HEIGHT;

// now set up the RECT structure to fill the region from
// (x1,y1) to (x2,y2) on the source surface
source_rect.left   = x1;
source_rect.top    = y1;
source_rect.right  = x2;
source_rect.bottom = y2;

// now set up the RECT structure to fill the region from
// (x3,y3) to (x4,y4) on the destination surface
dest_rect.left   = x3;
dest_rect.top    = y3;
dest_rect.right  = x4;
dest_rect.bottom = y4;

// make the blitter call
if (FAILED(lpddsprimary->Blt(&dest_rect,  // pointer to dest RECT
                             lpddsback,   // pointer to source surface
                             &source_rect,// pointer to source RECT
                             DDBLT_WAIT,  // control flags
                             NULL)))      // pointer to DDBLTFX holding info
   return(0);

// return success or failure or your own return code here
return(1);

} // end Game_Main

////////////////////////////////////////////////////////////

int Game_Init(void *parms = NULL, int num_parms = 0)
{
// this is called once after the initial window is created and
// before the main event loop is entered, do all your initialization
// here

// create IDirectDraw interface 7.0 object and test for error
if (FAILED(DirectDrawCreateEx(NULL, (void **)&lpdd, IID_IDirectDraw7, NULL)))
   return(0);

// set cooperation to full screen
if (FAILED(lpdd->SetCooperativeLevel(main_window_handle, 
                                      DDSCL_FULLSCREEN | DDSCL_ALLOWMODEX | 
                                      DDSCL_EXCLUSIVE | DDSCL_ALLOWREBOOT)))
   return(0);

// set display mode 
if (FAILED(lpdd->SetDisplayMode(SCREEN_WIDTH, SCREEN_HEIGHT, SCREEN_BPP,0,0)))
   return(0);

// clear ddsd and set size
DDRAW_INIT_STRUCT(ddsd); 

// enable valid fields
ddsd.dwFlags = DDSD_CAPS | DDSD_BACKBUFFERCOUNT;

// set the backbuffer count field to 1, use 2 for triple buffering
ddsd.dwBackBufferCount = 1;

// request a complex, flippable
ddsd.ddsCaps.dwCaps = DDSCAPS_PRIMARYSURFACE | DDSCAPS_COMPLEX | DDSCAPS_FLIP;

// create the primary surface
if (FAILED(lpdd->CreateSurface(&ddsd, &lpddsprimary, NULL)))
   return(0);

// now query for attached surface from the primary surface

// this line is needed by the call
ddsd.ddsCaps.dwCaps = DDSCAPS_BACKBUFFER;

// get the attached back buffer surface
if (FAILED(lpddsprimary->GetAttachedSurface(&ddsd.ddsCaps, &lpddsback)))
  return(0);

// clear all entries defensive programming
memset(palette,0,MAX_COLORS_PALETTE*sizeof(PALETTEENTRY));

// create a R,G,B,GR gradient palette
for (int index=0; index < MAX_COLORS_PALETTE; index++)
    {
    // set each entry
    if (index < 64)  // shades of red
        palette[index].peRed = index*4; 
    else            // shades of green
    if (index >= 64 && index < 128) 
        palette[index].peGreen = (index-64)*4;
    else            // shades of blue
    if (index >= 128 && index < 192) 
       palette[index].peBlue = (index-128)*4;
    else            // shades of grey
    if (index >= 192 && index < 256) 
        palette[index].peRed = palette[index].peGreen = 
        palette[index].peBlue = (index-192)*4;
    
    // set flag to force directdraw to leave alone
    palette[index].peFlags = PC_NOCOLLAPSE;
    } // end for index


// draw a color gradient in back buffer
DDRAW_INIT_STRUCT(ddsd);

// lock the back buffer
if (FAILED(lpddsback->Lock(NULL,&ddsd, DDLOCK_SURFACEMEMORYPTR | DDLOCK_WAIT,NULL)))
   return(0);

// get alias to start of surface memory for fast addressing
UCHAR *video_buffer = (UCHAR *)ddsd.lpSurface;

// draw the gradient
for (int index_y=0; index_y < SCREEN_HEIGHT; index_y++)
     {
     // fill next line with color
     memset((void *)video_buffer,index_y % 256,SCREEN_WIDTH);

     // advance pointer
     video_buffer+=ddsd.lPitch;
   
     } // end for index_y

// unlock the back buffer
if (FAILED(lpddsback->Unlock(NULL)))
   return(0);

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
美女视频黄免费的久久| 欧美日韩日日夜夜| 欧美在线|欧美| 国产日韩欧美在线一区| 蜜臀av一区二区三区| 色综合视频在线观看| 久久久久久久久久久久久久久99| 一区二区不卡在线播放| av亚洲精华国产精华精| 精品精品国产高清a毛片牛牛| 亚洲色图欧美偷拍| 成人综合婷婷国产精品久久蜜臀| 欧美久久久久久蜜桃| 一区二区三区不卡视频在线观看 | 久久先锋资源网| 日韩专区欧美专区| 欧美日韩一级视频| 亚洲精品第1页| 色悠悠久久综合| 亚洲欧洲色图综合| 成人av在线电影| 中文字幕一区二区不卡| 99久久精品一区二区| 欧美激情一区二区| 国产伦精一区二区三区| 精品国产伦一区二区三区免费 | 国产亚洲欧美激情| 日韩成人一区二区| 欧美一级欧美三级在线观看| 亚洲高清视频在线| 91麻豆精品国产无毒不卡在线观看 | 亚洲国产另类精品专区| 欧美在线观看18| 天天色 色综合| 91精品国产综合久久精品app| 亚洲成人高清在线| 欧美日韩色一区| 免费观看在线色综合| 精品少妇一区二区三区| 国产成人超碰人人澡人人澡| 国产精品传媒入口麻豆| 色综合久久中文综合久久牛| 亚洲无线码一区二区三区| 欧美一区二区福利在线| 国产一区二区三区在线看麻豆| 久久精品亚洲精品国产欧美| 成人午夜激情片| 亚洲免费电影在线| 91精品国产综合久久小美女| 国产中文字幕一区| 亚洲视频狠狠干| 4438成人网| 国产91在线观看丝袜| 亚洲欧美另类综合偷拍| 91精品国产综合久久香蕉麻豆| 狠狠色狠狠色综合日日91app| 国产亚洲欧美在线| 欧美三级中文字| 久久成人18免费观看| 国产精品亲子乱子伦xxxx裸| 欧美亚洲动漫精品| 国产一区不卡视频| 一区二区三区在线免费观看| 日韩欧美国产电影| 一本一道久久a久久精品 | 丝瓜av网站精品一区二区| 精品国产乱码久久久久久影片| 99久久久久久| 麻豆精品新av中文字幕| 亚洲人成人一区二区在线观看| 7777精品久久久大香线蕉| 国产精品亚洲第一区在线暖暖韩国| 亚洲另类中文字| 一片黄亚洲嫩模| 精品一区二区综合| jlzzjlzz国产精品久久| 日韩国产欧美视频| 国产精品久久久一本精品| 欧美一级在线观看| 色哟哟一区二区三区| 韩国av一区二区三区四区| 成人免费视频在线观看| 久久新电视剧免费观看| 欧美日韩美女一区二区| www.亚洲色图.com| 极品瑜伽女神91| 午夜成人免费视频| 亚洲欧美国产三级| 欧美激情一区二区三区在线| 日韩一级黄色大片| 制服丝袜成人动漫| 色综合久久九月婷婷色综合| 国产成人一级电影| 日本视频一区二区| 亚洲国产中文字幕| 亚洲精品videosex极品| 国产精品网站导航| 久久亚洲一区二区三区明星换脸| 欧美日韩一区二区三区四区五区| gogogo免费视频观看亚洲一| 国内精品久久久久影院色| 日本亚洲电影天堂| 青椒成人免费视频| 蜜臀av一级做a爰片久久| 亚洲国产一区二区三区| 亚洲精品第一国产综合野| 国产精品麻豆一区二区| 国产精品女主播av| 国产精品免费视频观看| 国产精品久久久久久久久搜平片| 国产蜜臀97一区二区三区| 久久精品亚洲麻豆av一区二区| 欧美xxxxx裸体时装秀| 日韩美女一区二区三区| 精品久久一区二区| 久久综合视频网| 久久久国产精品不卡| 久久蜜桃av一区二区天堂| 国产拍欧美日韩视频二区| 国产欧美视频一区二区三区| 国产精品天美传媒| 亚洲欧洲成人精品av97| 亚洲人精品午夜| 亚洲一区欧美一区| 视频一区视频二区中文| 久久99蜜桃精品| 国产成人精品亚洲日本在线桃色 | 成人黄色电影在线| 99riav久久精品riav| 91激情在线视频| 91精品在线观看入口| www成人在线观看| 国产精品国产三级国产普通话99 | 日韩国产欧美一区二区三区| 麻豆精品蜜桃视频网站| 岛国一区二区在线观看| 99久久精品免费看| 欧美日韩中字一区| 欧美大片一区二区| 国产精品国产三级国产aⅴ原创 | 亚洲日本在线天堂| 午夜精品123| 国产成人鲁色资源国产91色综| 99久久久久免费精品国产| 欧美日韩亚洲不卡| 久久久久国产免费免费 | 欧美性生活久久| 久久午夜国产精品| 亚洲伊人色欲综合网| 国产美女精品在线| 欧美亚洲国产一区在线观看网站| 欧美大片一区二区| 亚洲欧美成aⅴ人在线观看| 日韩精品亚洲专区| caoporn国产一区二区| 91精品国产91热久久久做人人| 国产精品欧美一区二区三区| 亚洲高清不卡在线观看| 国产成人av电影在线观看| 欧美日本韩国一区| 国产精品二区一区二区aⅴ污介绍| 日韩电影在线一区| 99精品视频在线观看免费| 日韩视频123| 亚洲国产精品天堂| 成人av在线播放网站| 欧美成人免费网站| 婷婷成人激情在线网| 91视频www| 国产欧美日韩一区二区三区在线观看| 午夜电影一区二区三区| 色天天综合色天天久久| 国产精品无码永久免费888| 国产在线精品免费| 日韩视频免费观看高清在线视频| 一区二区欧美视频| 色呦呦一区二区三区| 国产精品剧情在线亚洲| 国产成人自拍网| 久久午夜电影网| 国产一区二区视频在线| 日韩三级伦理片妻子的秘密按摩| 亚洲综合色网站| 欧美偷拍一区二区| 一区二区三区四区在线免费观看| 国产成人无遮挡在线视频| 久久久不卡影院| 国产精品系列在线观看| 久久日一线二线三线suv| 精品制服美女久久| 久久只精品国产| 国产麻豆成人精品| 国产日韩欧美不卡在线| 国产suv精品一区二区三区| 久久人人爽人人爽| 国产成人a级片| 亚洲欧洲韩国日本视频| 91福利国产精品| 天堂资源在线中文精品| 欧美丰满美乳xxx高潮www|