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

? 歡迎來(lái)到蟲(chóng)蟲(chóng)下載站! | ?? 資源下載 ?? 資源專(zhuān)輯 ?? 關(guān)于我們
? 蟲(chóng)蟲(chóng)下載站

?? t3dlib3.cpp

?? 一本外國(guó)人寫(xiě)的關(guān)于3D游戲編程的書(shū)的源碼
?? CPP
?? 第 1 頁(yè) / 共 2 頁(yè)
字號(hào):
} // end DSound_Set_Freq

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

int DSound_Set_Pan(int id,int pan)
{
// this function sets the pan, -10,000 to 10,0000

if (sound_fx[id].dsbuffer->SetPan(pan)!=DS_OK)
	return(0);

// return success
return(1);

} // end DSound_Set_Pan

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

int DSound_Stop_Sound(int id)
{
// this function stops a sound from playing
if (sound_fx[id].dsbuffer)
   {
   sound_fx[id].dsbuffer->Stop();
   sound_fx[id].dsbuffer->SetCurrentPosition(0);
   } // end if

// return success
return(1);

} // end DSound_Stop_Sound

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

int DSound_Delete_All_Sounds(void)
{
// this function deletes all the sounds

for (int index=0; index < MAX_SOUNDS; index++)
    DSound_Delete_Sound(index);

// return success always
return(1);

} // end DSound_Delete_All_Sounds

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

int DSound_Delete_Sound(int id)
{
// this function deletes a single sound and puts it back onto the available list

// first stop it
if (!DSound_Stop_Sound(id))
   return(0);

// now delete it
if (sound_fx[id].dsbuffer)
   {
   // release the com object
   sound_fx[id].dsbuffer->Release();
   sound_fx[id].dsbuffer = NULL;
   
   // return success
   return(1);
   } // end if

// return success
return(1);

} // end DSound_Delete_Sound

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

int DSound_Stop_All_Sounds(void)
{
// this function stops all sounds

for (int index=0; index<MAX_SOUNDS; index++)
	DSound_Stop_Sound(index);	

// return success
return(1);

} // end DSound_Stop_All_Sounds

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

int DSound_Status_Sound(int id)
{
// this function returns the status of a sound
if (sound_fx[id].dsbuffer)
	{
	ULONG status; 

	// get the status
	sound_fx[id].dsbuffer->GetStatus(&status);

	// return the status
	return(status);

	} // end if
else // total failure
	return(-1);

} // end DSound_Status_Sound

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

int DMusic_Load_MIDI(char *filename)
{
// this function loads a midi segment

DMUS_OBJECTDESC ObjDesc; 
HRESULT hr;
IDirectMusicSegment* pSegment = NULL;

int index; // loop var
 
// look for open slot for midi segment
int id = -1;

for (index = 0; index < DM_NUM_SEGMENTS; index++)
    {
    // is this one open
    if (dm_midi[index].state == MIDI_NULL)
       {
       // validate id, but don't validate object until loaded
       id = index;
       break;
       } // end if

    } // end for index

// found good id?
if (id==-1)
   return(-1);

// get current working directory
char szDir[_MAX_PATH];
WCHAR wszDir[_MAX_PATH]; 

if(_getcwd( szDir, _MAX_PATH ) == NULL)
  {
  return(-1);;
  } // end if

MULTI_TO_WIDE(wszDir, szDir);

// tell the loader were to look for files
hr = dm_loader->SetSearchDirectory(GUID_DirectMusicAllTypes,wszDir, FALSE);

if (FAILED(hr)) 
   {
   return (-1);
   } // end if

// convert filename to wide string
WCHAR wfilename[_MAX_PATH]; 
MULTI_TO_WIDE(wfilename, filename);
 
// setup object description
DD_INIT_STRUCT(ObjDesc);
ObjDesc.guidClass = CLSID_DirectMusicSegment;
wcscpy(ObjDesc.wszFileName, wfilename );
ObjDesc.dwValidData = DMUS_OBJ_CLASS | DMUS_OBJ_FILENAME;
 
// load the object and query it for the IDirectMusicSegment interface
// This is done in a single call to IDirectMusicLoader::GetObject
// note that loading the object also initializes the tracks and does 
// everything else necessary to get the MIDI data ready for playback.

hr = dm_loader->GetObject(&ObjDesc,IID_IDirectMusicSegment, (void**) &pSegment);

if (FAILED(hr))
   return(-1);
 
// ensure that the segment plays as a standard MIDI file
// you now need to set a parameter on the band track
// Use the IDirectMusicSegment::SetParam method and let 
// DirectMusic find the trackby passing -1 (or 0xFFFFFFFF) in the dwGroupBits method parameter.

hr = pSegment->SetParam(GUID_StandardMIDIFile,-1, 0, 0, (void*)dm_perf);

if (FAILED(hr))
   return(-1);
  
// This step is necessary because DirectMusic handles program changes and 
// bank selects differently for standard MIDI files than it does for MIDI 
// content authored specifically for DirectMusic. 
// The GUID_StandardMIDIFile parameter must be set before the instruments are downloaded. 

// The next step is to download the instruments. 
// This is necessary even for playing a simple MIDI file 
// because the default software synthesizer needs the DLS data 
// for the General MIDI instrument set
// If you skip this step, the MIDI file will play silently.
// Again, you call SetParam on the segment, this time specifying the GUID_Download parameter:

hr = pSegment->SetParam(GUID_Download, -1, 0, 0, (void*)dm_perf);

if (FAILED(hr))
   return(-1);

// at this point we have MIDI loaded and a valid object

dm_midi[id].dm_segment  = pSegment;
dm_midi[id].dm_segstate = NULL;
dm_midi[id].state       = MIDI_LOADED;
 
// return id
return(id);
 
} // end DMusic_Load_MIDI

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

int DMusic_Play(int id)
{
// play sound based on id

if (dm_midi[id].dm_segment && dm_midi[id].state!=MIDI_NULL)
   {
   // if there is an active midi then stop it
   if (dm_active_id!=-1)
       DMusic_Stop(dm_active_id);

   // play segment and force tracking of state variable
   dm_perf->PlaySegment(dm_midi[id].dm_segment, 0, 0, &dm_midi[id].dm_segstate);
   dm_midi[id].state = MIDI_PLAYING;

   // set the active midi segment
   dm_active_id = id;
   return(1);
   }  // end if
else
    return(0);

} // end DMusic_Play

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

int DMusic_Stop(int id)
{
// stop a midi segment
if (dm_midi[id].dm_segment && dm_midi[id].state!=MIDI_NULL)
   {
   // play segment and force tracking of state variable
   dm_perf->Stop(dm_midi[id].dm_segment, NULL, 0, 0);
   dm_midi[id].state = MIDI_STOPPED;

   // reset active id
   dm_active_id = -1;

   return(1);
   }  // end if
else
    return(0);

} // end DMusic_Stop

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

int DMusic_Delete_MIDI(int id)
{
// this function deletes one MIDI segment

// Unload instruments this will cause silence.
// CloseDown unloads all instruments, so this call is also not 
// strictly necessary.
if (dm_midi[id].dm_segment)
   {
   dm_midi[id].dm_segment->SetParam(GUID_Unload, -1, 0, 0, (void*)dm_perf); 

   // Release the segment and set to null
   dm_midi[id].dm_segment->Release(); 
   dm_midi[id].dm_segment  = NULL;
   dm_midi[id].dm_segstate = NULL;
   dm_midi[id].state       = MIDI_NULL;
   } // end if

return(1);

} // end DMusic_Delete_MIDI

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

int DMusic_Delete_All_MIDI(void)
{
// delete all the MIDI 
int index; // loop var

// free up all the segments
for (index = 0; index < DM_NUM_SEGMENTS; index++)
    {
    // Unload instruments this will cause silence.
    // CloseDown unloads all instruments, so this call is also not 
    // strictly necessary.
    if (dm_midi[index].dm_segment)
       {
       dm_midi[index].dm_segment->SetParam(GUID_Unload, -1, 0, 0, (void*)dm_perf); 

       // Release the segment and set to null
       dm_midi[index].dm_segment->Release(); 
       dm_midi[index].dm_segment  = NULL;
       dm_midi[index].dm_segstate = NULL;
       dm_midi[index].state       = MIDI_NULL;
       } // end if

    } // end for index

return(1);

} // end DMusic_Delete_All_MIDI

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

int DMusic_Status_MIDI(int id)
{
// this checks the status of a midi segment

if (dm_midi[id].dm_segment && dm_midi[id].state !=MIDI_NULL )
   {
   // get the status and translate to our defines
   if (dm_perf->IsPlaying(dm_midi[id].dm_segment,NULL) == S_OK) 
      dm_midi[id].state = MIDI_PLAYING;
   else
      dm_midi[id].state = MIDI_STOPPED;

   return(dm_midi[id].state);
   } // end if
else
   return(0);

} // end DMusic_Status_MIDI

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

int DMusic_Init(void)
{
// this function initializes directmusic, it also checks if directsound has
// been initialized, if so it connect the wave output to directsound, otherwise
// it creates it's own directsound object, hence you must start directsound up
// first if you want to use both directsound and directmusic

int index; // looping var

// set up directmusic
// initialize COM
if (FAILED(CoInitialize(NULL)))
   {    
   // Terminate the application.
   return(0);
   }   // end if

// create the performance
if (FAILED(CoCreateInstance(CLSID_DirectMusicPerformance,
                            NULL,
                            CLSCTX_INPROC,
                            IID_IDirectMusicPerformance,
                            (void**)&dm_perf)))    
   {
   // return null        
   return(0);
   } // end if

// initialize the performance, check if directsound is on-line if so, use the
// directsound object, otherwise create a new one
if (FAILED(dm_perf->Init(NULL, lpds, main_window_handle)))
   {
   return(0);// Failure -- performance not initialized
   } // end if 

// add the port to the performance
if (FAILED(dm_perf->AddPort(NULL)))
   {    
   return(0);// Failure -- port not initialized
   } // end if

// create the loader to load object(s) such as midi file
if (FAILED(CoCreateInstance(
          CLSID_DirectMusicLoader,
          NULL,
          CLSCTX_INPROC, 
          IID_IDirectMusicLoader,
          (void**)&dm_loader)))
   {
   // error
   return(0);
   } // end if

// reset all the midi segment objects
for (index = 0; index < DM_NUM_SEGMENTS; index++)
    {
    // reset the object
    dm_midi[index].dm_segment  = NULL;  
    dm_midi[index].dm_segstate = NULL;  
    dm_midi[index].state       = MIDI_NULL;
    dm_midi[index].id          = index;
    } // end for index

// reset the active id
dm_active_id = -1;

// all good baby
return(1);

} // end DMusic_Init

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

int DMusic_Shutdown(void)
{
int index;

// If there is any music playing, stop it. This is 
// not really necessary, because the music will stop when
// the instruments are unloaded or the performance is    
// closed down.
if (dm_perf)
   dm_perf->Stop(NULL, NULL, 0, 0 ); 

// delete all the midis if they already haven't been
DMusic_Delete_All_MIDI();

// CloseDown and Release the performance object.    
if (dm_perf)
   {
   dm_perf->CloseDown();
   dm_perf->Release();     
   } // end if

// Release the loader object.
if (dm_loader)
   dm_loader->Release();     

// Release COM
CoUninitialize(); 

// return success
return(1);

} // end DMusic_Shutdown

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲成av人在线观看| 在线日韩av片| 国内一区二区视频| 日本美女视频一区二区| 午夜精品123| 视频一区二区三区入口| 亚洲成人www| 三级不卡在线观看| 日本女优在线视频一区二区| 日韩成人免费看| 免费亚洲电影在线| 国产一区二区三区高清播放| 国产高清不卡二三区| 国产精品主播直播| 成人黄页毛片网站| 91网上在线视频| 欧美综合在线视频| 欧美一区二区三区在线视频| 精品日韩一区二区三区| 国产欧美一区二区精品性色超碰| 亚洲国产精品传媒在线观看| 中文字幕视频一区二区三区久| 亚洲视频一二三区| 亚洲成人在线免费| 精品一区二区在线观看| 国产成人av电影在线| 91丨九色porny丨蝌蚪| 欧美性生交片4| 欧美大片在线观看| 国产精品每日更新| 亚洲一二三四在线| 久久成人精品无人区| 豆国产96在线|亚洲| 色菇凉天天综合网| 91麻豆精品国产91久久久久久| 日韩欧美精品在线视频| 欧美国产禁国产网站cc| 一区二区三区在线不卡| 奇米色777欧美一区二区| 国产福利视频一区二区三区| 一本大道av伊人久久综合| 欧美一区二区三区的| 国产午夜亚洲精品羞羞网站| 亚洲精品第一国产综合野| 美女高潮久久久| 波多野结衣一区二区三区 | 日本韩国欧美三级| 日韩一级二级三级精品视频| 国产人成一区二区三区影院| 一区二区三区精品视频| 极品销魂美女一区二区三区| 色综合久久中文综合久久97| 6080亚洲精品一区二区| 国产欧美日韩亚州综合| 水蜜桃久久夜色精品一区的特点| 国产成人丝袜美腿| 欧美人妇做爰xxxⅹ性高电影| 国产三级精品三级在线专区| 亚洲成人精品影院| 成人看片黄a免费看在线| 91精品欧美一区二区三区综合在| 欧美极品xxx| 日本不卡在线视频| 色悠久久久久综合欧美99| 欧美成人综合网站| 亚洲国产一区视频| 成人激情午夜影院| 久久亚洲一级片| 日韩av中文字幕一区二区三区| 成人免费高清在线观看| 精品少妇一区二区三区在线视频| 亚洲六月丁香色婷婷综合久久 | 精品一区二区三区欧美| 一本一本久久a久久精品综合麻豆| 精品国产乱码久久久久久牛牛| 夜夜嗨av一区二区三区| 成人毛片在线观看| 亚洲精品一区在线观看| 日韩激情中文字幕| 91久久久免费一区二区| 国产精品日韩成人| 国产麻豆精品视频| 日韩美女天天操| 免费在线观看精品| 91精品福利在线一区二区三区 | 国产麻豆欧美日韩一区| 日韩欧美成人一区二区| 日日摸夜夜添夜夜添国产精品| 日本精品一区二区三区高清 | 麻豆精品视频在线观看| 欧美久久一二三四区| 伊人婷婷欧美激情| 一本色道亚洲精品aⅴ| 亚洲婷婷在线视频| a在线欧美一区| 中文字幕av在线一区二区三区| 韩国女主播一区| 精品国产成人在线影院| 麻豆精品久久久| 日韩一区和二区| 日本色综合中文字幕| 欧美久久久久久久久| 日欧美一区二区| 日韩视频国产视频| 捆绑调教美女网站视频一区| 日韩一级大片在线观看| 美女在线视频一区| 日韩三级.com| 久久国产人妖系列| 久久综合999| 国产传媒欧美日韩成人| 国产午夜三级一区二区三| 国产91色综合久久免费分享| 欧美国产日韩一二三区| 成人sese在线| 夜夜嗨av一区二区三区四季av| 欧美日韩不卡一区| 久久97超碰国产精品超碰| 久久午夜色播影院免费高清| 国产成人精品在线看| 国产精品欧美久久久久无广告| 9色porny自拍视频一区二区| 综合欧美亚洲日本| 欧美午夜精品电影| 青青草成人在线观看| 26uuu另类欧美亚洲曰本| 国产成人在线免费观看| 亚洲欧洲日韩综合一区二区| 色88888久久久久久影院野外| 五月天激情综合网| 精品国产一区二区国模嫣然| 丁香一区二区三区| 亚洲精品高清在线观看| 欧美一级片免费看| 国产盗摄视频一区二区三区| 亚洲美女淫视频| 欧美男女性生活在线直播观看| 精品亚洲国内自在自线福利| 国产午夜精品久久| 色欧美片视频在线观看| 日日骚欧美日韩| 国产欧美日本一区视频| 日本道免费精品一区二区三区| 蜜桃av一区二区三区| 国产精品欧美一级免费| 欧美日韩国产系列| 国产成人综合自拍| 亚洲国产va精品久久久不卡综合| 日韩午夜小视频| 99热在这里有精品免费| 男女性色大片免费观看一区二区| 中文字幕av一区二区三区免费看| 欧美亚洲动漫制服丝袜| 国产一区二区影院| 亚洲在线观看免费| 久久久噜噜噜久久中文字幕色伊伊 | 中文字幕一区二区在线播放| 欧美日韩一区二区三区高清| 国产精品资源在线| 天堂久久一区二区三区| 国产精品女人毛片| 日韩精品一区在线观看| 色综合一个色综合亚洲| 国产一区二区三区最好精华液| 亚洲欧美偷拍三级| 亚洲精品在线观| 欧美伦理电影网| 91看片淫黄大片一级| 国产一区二区在线视频| 日本成人在线网站| 一区二区三区欧美亚洲| 国产精品污www在线观看| 日韩欧美你懂的| 欧美日韩国产首页| 日本久久电影网| 成人美女视频在线看| 激情综合网av| 日韩专区一卡二卡| 亚洲精品第一国产综合野| 国产精品天干天干在线综合| 日韩一区二区视频| 欧美三级韩国三级日本一级| 99re成人精品视频| 国产999精品久久| 国产一区日韩二区欧美三区| 青青草视频一区| 日日嗨av一区二区三区四区| 亚洲综合久久久| 亚洲欧洲日韩在线| 国产精品国产自产拍在线| 久久久久综合网| 精品成人一区二区三区| 日韩三级免费观看| 日韩欧美一级片| 91精品福利在线一区二区三区 | 粉嫩av一区二区三区| 国产黄色精品网站| 国产精品综合久久| 国产乱子伦视频一区二区三区| 国内国产精品久久|