本文整理汇总了C++中DXTRACE_ERR函数的典型用法代码示例。如果您正苦于以下问题:C++ DXTRACE_ERR函数的具体用法?C++ DXTRACE_ERR怎么用?C++ DXTRACE_ERR使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了DXTRACE_ERR函数的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: OnOpenSoundFile
//.........这里部分代码省略.........
{
// Too many channels in wave. Sound must be mono when using DSBCAPS_CTRL3D
SetDlgItemText( hDlg, IDC_STATUS, TEXT("Wave file must be mono for 3D control.") );
SetDlgItemText( hDlg, IDC_FILENAME, TEXT("") );
return;
}
if( pwfx->wFormatTag != WAVE_FORMAT_PCM )
{
// Sound must be PCM when using DSBCAPS_CTRL3D
SetDlgItemText( hDlg, IDC_STATUS, TEXT("Wave file must be PCM for 3D control.") );
SetDlgItemText( hDlg, IDC_FILENAME, TEXT("") );
return;
}
// Get the software DirectSound3D emulation algorithm to use
// Ask the user for this sample, so display the algorithm dialog box.
nResult = (int)DialogBox( NULL, MAKEINTRESOURCE(IDD_3D_ALGORITHM),
NULL, AlgorithmDlgProc );
switch( nResult )
{
case -1: // User canceled dialog box
SetDlgItemText( hDlg, IDC_STATUS, TEXT("Load aborted.") );
SetDlgItemText( hDlg, IDC_FILENAME, TEXT("") );
return;
case 0: // User selected DS3DALG_NO_VIRTUALIZATION
guid3DAlgorithm = DS3DALG_NO_VIRTUALIZATION;
break;
case 1: // User selected DS3DALG_HRTF_FULL
guid3DAlgorithm = DS3DALG_HRTF_FULL;
break;
case 2: // User selected DS3DALG_HRTF_LIGHT
guid3DAlgorithm = DS3DALG_HRTF_LIGHT;
break;
}
// Load the wave file into a DirectSound buffer
hr = g_pSoundManager->Create( &g_pSound, strFileName, DSBCAPS_CTRL3D, guid3DAlgorithm );
if( FAILED( hr ) || hr == DS_NO_VIRTUALIZATION )
{
DXTRACE_ERR_NOMSGBOX( TEXT("Create"), hr );
if( DS_NO_VIRTUALIZATION == hr )
{
MessageBox( hDlg, "The 3D virtualization algorithm requested is not supported under this "
"operating system. It is available only on Windows 2000, Windows ME, and Windows 98 with WDM "
"drivers and beyond. Creating buffer with no virtualization.",
"DirectSound Sample", MB_OK );
}
// Unknown error, but not a critical failure, so just update the status
SetDlgItemText( hDlg, IDC_FILENAME, TEXT("Could not create sound buffer.") );
return;
}
// Get the 3D buffer from the secondary buffer
if( FAILED( hr = g_pSound->Get3DBufferInterface( 0, &g_pDS3DBuffer ) ) )
{
DXTRACE_ERR( TEXT("Get3DBufferInterface"), hr );
SetDlgItemText( hDlg, IDC_STATUS, TEXT("Could not get 3D buffer.") );
SetDlgItemText( hDlg, IDC_FILENAME, TEXT("") );
return;
}
// Get the 3D buffer parameters
g_dsBufferParams.dwSize = sizeof(DS3DBUFFER);
g_pDS3DBuffer->GetAllParameters( &g_dsBufferParams );
// Set new 3D buffer parameters
g_dsBufferParams.dwMode = DS3DMODE_HEADRELATIVE;
g_pDS3DBuffer->SetAllParameters( &g_dsBufferParams, DS3D_IMMEDIATE );
DSBCAPS dsbcaps;
ZeroMemory( &dsbcaps, sizeof(DSBCAPS) );
dsbcaps.dwSize = sizeof(DSBCAPS);
LPDIRECTSOUNDBUFFER pDSB = g_pSound->GetBuffer( 0 );
pDSB->GetCaps( &dsbcaps );
if( ( dsbcaps.dwFlags & DSBCAPS_LOCHARDWARE ) != 0 )
SetDlgItemText( hDlg, IDC_STATUS, TEXT("File loaded using hardware mixing.") );
else
SetDlgItemText( hDlg, IDC_STATUS, TEXT("File loaded using software mixing.") );
// Update the UI controls to show the sound as the file is loaded
SetDlgItemText( hDlg, IDC_FILENAME, strFileName );
EnablePlayUI( hDlg, TRUE );
g_bAllowMovementTimer = TRUE;
// Remember the path for next time
strcpy( strPath, strFileName );
char* strLastSlash = strrchr( strPath, '\\' );
strLastSlash[0] = '\0';
// Set the slider positions
SetSlidersPos( hDlg, 0.0f, 0.0f, ORBIT_MAX_RADIUS, ORBIT_MAX_RADIUS*2.0f );
OnSliderChanged( hDlg );
}
示例2: OnPlaySound
//-----------------------------------------------------------------------------
// Name: OnPlaySound()
// Desc: User hit the "Play" button
//-----------------------------------------------------------------------------
HRESULT OnPlaySound( HWND hDlg )
{
HRESULT hr;
DWORD dwCreationFlags;
DWORD dwResults;
LPDIRECTSOUNDBUFFER pDSB = NULL;
LPDIRECTSOUNDBUFFER8 pDSB8 = NULL;
BOOL bLooped = ( IsDlgButtonChecked( hDlg, IDC_LOOP_CHECK ) == BST_CHECKED );
// We would only use CTRLFX control on dsound buffer
dwCreationFlags = DSBCAPS_CTRLFX;
// Free any previous sound and FXs
SAFE_RELEASE( g_pIGargle );
SAFE_DELETE( g_pSound );
// Since the user can change the focus before the sound is played,
// we need to create the sound buffer every time the play button is pressed
// Load the wave file into a DirectSound buffer
if( FAILED( hr = g_pSoundManager->Create( &g_pSound, g_strWaveFileName, dwCreationFlags, GUID_NULL ) ) )
{
// Not a critical failure, so just update the status
DXTRACE_ERR_NOMSGBOX( TEXT("Create"), hr );
if( hr == DSERR_BUFFERTOOSMALL )
{
// DSERR_BUFFERTOOSMALL will be returned if the buffer is
// less than DSBSIZE_FX_MIN (100ms) and the buffer is created
// with DSBCAPS_CTRLFX.
SetDlgItemText( hDlg, IDC_STATUS, TEXT("Wave file is too short (less than 100ms) for effect processing.") );
}
else
{
SetDlgItemText( hDlg, IDC_STATUS, TEXT("Could not create sound buffer.") );
}
return S_FALSE;
}
// Query IDirectSoundBuffer8 interface
pDSB = g_pSound->GetBuffer( 0 );
if( FAILED( hr = pDSB->QueryInterface( IID_IDirectSoundBuffer8, (LPVOID*) &pDSB8 ) ) )
return DXTRACE_ERR( TEXT("QueryInterface"), hr );
// Set gargle effect on the IDirectSoundBuffer8
DSEFFECTDESC dsed;
ZeroMemory( &dsed, sizeof(DSEFFECTDESC) );
dsed.dwSize = sizeof(DSEFFECTDESC);
dsed.dwFlags = 0;
dsed.guidDSFXClass = GUID_DSFX_STANDARD_GARGLE;
if( FAILED( hr = pDSB8->SetFX( 1, &dsed, &dwResults ) ) )
{
// Not a critical failure, so just update the status
DXTRACE_ERR( TEXT("SetFX"), hr );
SetDlgItemText( hDlg, IDC_STATUS, TEXT("Could not set gargle effect.") );
return S_FALSE;
}
// Get gargle effect friendly interface
if( FAILED( hr = pDSB8->GetObjectInPath( GUID_DSFX_STANDARD_GARGLE, 0,
IID_IDirectSoundFXGargle,
(LPVOID*) &g_pIGargle ) ) )
return DXTRACE_ERR( TEXT("GetObjectInPath"), hr );
// Cleanup
SAFE_RELEASE( pDSB8 );
// Set the buffer options to what the sliders are set to
OnEffectChanged( hDlg );
// Play the sound
DWORD dwLooped = bLooped ? DSBPLAY_LOOPING : 0L;
if( FAILED( hr = g_pSound->Play( 0, dwLooped ) ) )
return DXTRACE_ERR( TEXT("Play"), hr );
// Update the UI controls to show the sound as playing
EnablePlayUI( hDlg, FALSE );
SetDlgItemText( hDlg, IDC_STATUS, TEXT("Sound playing.") );
return S_OK;
}
示例3: SAFE_DELETE_ARRAY
//-----------------------------------------------------------------------------
// Name: CWaveFile::Open()
// Desc: Opens a wave file for reading
//-----------------------------------------------------------------------------
HRESULT CWaveFile::Open( LPTSTR strFileName, WAVEFORMATEX* pwfx, DWORD dwFlags )
{
HRESULT hr;
m_dwFlags = dwFlags;
m_bIsReadingFromMemory = FALSE;
if( m_dwFlags == WAVEFILE_READ )
{
if( strFileName == NULL )
return E_INVALIDARG;
SAFE_DELETE_ARRAY( m_pwfx );
m_hmmio = mmioOpen( strFileName, NULL, MMIO_ALLOCBUF | MMIO_READ );
if( NULL == m_hmmio )
{
HRSRC hResInfo;
HGLOBAL hResData;
DWORD dwSize;
VOID* pvRes;
// Loading it as a file failed, so try it as a resource
if( NULL == ( hResInfo = FindResource( NULL, strFileName, TEXT("WAVE") ) ) )
{
if( NULL == ( hResInfo = FindResource( NULL, strFileName, TEXT("WAV") ) ) )
return DXTRACE_ERR( TEXT("FindResource"), E_FAIL );
}
if( NULL == ( hResData = LoadResource( NULL, hResInfo ) ) )
return DXTRACE_ERR( TEXT("LoadResource"), E_FAIL );
if( 0 == ( dwSize = SizeofResource( NULL, hResInfo ) ) )
return DXTRACE_ERR( TEXT("SizeofResource"), E_FAIL );
if( NULL == ( pvRes = LockResource( hResData ) ) )
return DXTRACE_ERR( TEXT("LockResource"), E_FAIL );
m_pResourceBuffer = new CHAR[ dwSize ];
memcpy( m_pResourceBuffer, pvRes, dwSize );
MMIOINFO mmioInfo;
ZeroMemory( &mmioInfo, sizeof(mmioInfo) );
mmioInfo.fccIOProc = FOURCC_MEM;
mmioInfo.cchBuffer = dwSize;
mmioInfo.pchBuffer = (CHAR*) m_pResourceBuffer;
m_hmmio = mmioOpen( NULL, &mmioInfo, MMIO_ALLOCBUF | MMIO_READ );
}
if( FAILED( hr = ReadMMIO() ) )
{
// ReadMMIO will fail if its an not a wave file
mmioClose( m_hmmio, 0 );
return DXTRACE_ERR( TEXT("ReadMMIO"), hr );
}
if( FAILED( hr = ResetFile() ) )
return DXTRACE_ERR( TEXT("ResetFile"), hr );
// After the reset, the size of the wav file is m_ck.cksize so store it now
m_dwSize = m_ck.cksize;
}
else
{
m_hmmio = mmioOpen( strFileName, NULL, MMIO_ALLOCBUF |
MMIO_READWRITE |
MMIO_CREATE );
if( NULL == m_hmmio )
return DXTRACE_ERR( TEXT("mmioOpen"), E_FAIL );
if( FAILED( hr = WriteMMIO( pwfx ) ) )
{
mmioClose( m_hmmio, 0 );
return DXTRACE_ERR( TEXT("WriteMMIO"), hr );
}
if( FAILED( hr = ResetFile() ) )
return DXTRACE_ERR( TEXT("ResetFile"), hr );
}
return hr;
}
示例4: CopyMemory
//-----------------------------------------------------------------------------
// Name: CWaveFile::Read()
// Desc: Reads section of data from a wave file into pBuffer and returns
// how much read in pdwSizeRead, reading not more than dwSizeToRead.
// This uses m_ck to determine where to start reading from. So
// subsequent calls will be continue where the last left off unless
// Reset() is called.
//-----------------------------------------------------------------------------
HRESULT CWaveFile::Read( BYTE* pBuffer, DWORD dwSizeToRead, DWORD* pdwSizeRead )
{
if( m_bIsReadingFromMemory )
{
if( m_pbDataCur == NULL )
return CO_E_NOTINITIALIZED;
if( pdwSizeRead != NULL )
*pdwSizeRead = 0;
if( (BYTE*)(m_pbDataCur + dwSizeToRead) >
(BYTE*)(m_pbData + m_ulDataSize) )
{
dwSizeToRead = m_ulDataSize - (DWORD)(m_pbDataCur - m_pbData);
}
CopyMemory( pBuffer, m_pbDataCur, dwSizeToRead );
if( pdwSizeRead != NULL )
*pdwSizeRead = dwSizeToRead;
return S_OK;
}
else
{
MMIOINFO mmioinfoIn; // current status of m_hmmio
if( m_hmmio == NULL )
return CO_E_NOTINITIALIZED;
if( pBuffer == NULL || pdwSizeRead == NULL )
return E_INVALIDARG;
if( pdwSizeRead != NULL )
*pdwSizeRead = 0;
if( 0 != mmioGetInfo( m_hmmio, &mmioinfoIn, 0 ) )
return DXTRACE_ERR( TEXT("mmioGetInfo"), E_FAIL );
UINT cbDataIn = dwSizeToRead;
if( cbDataIn > m_ck.cksize )
cbDataIn = m_ck.cksize;
m_ck.cksize -= cbDataIn;
for( DWORD cT = 0; cT < cbDataIn; cT++ )
{
// Copy the bytes from the io to the buffer.
if( mmioinfoIn.pchNext == mmioinfoIn.pchEndRead )
{
if( 0 != mmioAdvance( m_hmmio, &mmioinfoIn, MMIO_READ ) )
return DXTRACE_ERR( TEXT("mmioAdvance"), E_FAIL );
if( mmioinfoIn.pchNext == mmioinfoIn.pchEndRead )
return DXTRACE_ERR( TEXT("mmioinfoIn.pchNext"), E_FAIL );
}
// Actual copy.
*((BYTE*)pBuffer+cT) = *((BYTE*)mmioinfoIn.pchNext);
mmioinfoIn.pchNext++;
}
if( 0 != mmioSetInfo( m_hmmio, &mmioinfoIn, 0 ) )
return DXTRACE_ERR( TEXT("mmioSetInfo"), E_FAIL );
if( pdwSizeRead != NULL )
*pdwSizeRead = cbDataIn;
return S_OK;
}
}
示例5: warning
//-----------------------------------------------------------------------------
// Name: CWaveFile::Read()
// Desc: Reads section of data from a wave file into pBuffer and returns
// how much read in pdwSizeRead, reading not more than dwSizeToRead.
// This uses m_ck to determine where to start reading from. So
// subsequent calls will be continue where the last left off unless
// Reset() is called.
//-----------------------------------------------------------------------------
HRESULT CWaveFile::Read( BYTE* pBuffer, DWORD dwSizeToRead, DWORD* pdwSizeRead )
{
if( m_bIsReadingFromMemory )
{
if( m_pbDataCur == NULL )
return CO_E_NOTINITIALIZED;
if( pdwSizeRead != NULL )
*pdwSizeRead = 0;
if( (BYTE*)(m_pbDataCur + dwSizeToRead) >
(BYTE*)(m_pbData + m_ulDataSize) )
{
dwSizeToRead = m_ulDataSize - (DWORD)(m_pbDataCur - m_pbData);
}
#pragma warning( disable: 4616 ) // disable warning about warning number '22104' being out of range
#pragma warning( disable: 22104 ) // disable PREfast warning during static code analysis
CopyMemory( pBuffer, m_pbDataCur, dwSizeToRead );
#pragma warning( default: 22104 )
#pragma warning( default: 4616 )
if( pdwSizeRead != NULL )
*pdwSizeRead = dwSizeToRead;
return S_OK;
}
else
{
MMIOINFO mmioinfoIn; // current status of m_hmmio
if( m_hmmio == NULL )
return CO_E_NOTINITIALIZED;
if( pBuffer == NULL || pdwSizeRead == NULL )
return E_INVALIDARG;
*pdwSizeRead = 0;
if( 0 != mmioGetInfo( m_hmmio, &mmioinfoIn, 0 ) )
return DXTRACE_ERR( "mmioGetInfo", E_FAIL );
UINT cbDataIn = dwSizeToRead;
if( cbDataIn > m_ck.cksize )
cbDataIn = m_ck.cksize;
m_ck.cksize -= cbDataIn;
for( DWORD cT = 0; cT < cbDataIn; cT++ )
{
// Copy the bytes from the io to the buffer.
if( mmioinfoIn.pchNext == mmioinfoIn.pchEndRead )
{
if( 0 != mmioAdvance( m_hmmio, &mmioinfoIn, MMIO_READ ) )
return DXTRACE_ERR( "mmioAdvance", E_FAIL );
if( mmioinfoIn.pchNext == mmioinfoIn.pchEndRead )
return DXTRACE_ERR( "mmioinfoIn.pchNext", E_FAIL );
}
// Actual copy.
*((BYTE*)pBuffer+cT) = *((BYTE*)mmioinfoIn.pchNext);
mmioinfoIn.pchNext++;
}
if( 0 != mmioSetInfo( m_hmmio, &mmioinfoIn, 0 ) )
return DXTRACE_ERR( "mmioSetInfo", E_FAIL );
*pdwSizeRead = cbDataIn;
return S_OK;
}
}
示例6: CWaveFile
//-----------------------------------------------------------------------------
// Name: CSoundManager::Create()
// Desc:
//-----------------------------------------------------------------------------
HRESULT CSoundManager::Create( CSound** ppSound,
LPTSTR strWaveFileName,
DWORD dwCreationFlags,
GUID guid3DAlgorithm,
DWORD dwNumBuffers )
{
HRESULT hr;
HRESULT hrRet = S_OK;
DWORD i;
LPDIRECTSOUNDBUFFER* apDSBuffer = NULL;
DWORD dwDSBufferSize = NULL;
CWaveFile* pWaveFile = NULL;
if( m_pDS == NULL )
return CO_E_NOTINITIALIZED;
if( strWaveFileName == NULL || ppSound == NULL || dwNumBuffers < 1 )
return E_INVALIDARG;
apDSBuffer = new LPDIRECTSOUNDBUFFER[dwNumBuffers];
if( apDSBuffer == NULL )
{
hr = E_OUTOFMEMORY;
goto LFail;
}
pWaveFile = new CWaveFile();
if( pWaveFile == NULL )
{
hr = E_OUTOFMEMORY;
goto LFail;
}
pWaveFile->Open( strWaveFileName, NULL, WAVEFILE_READ );
if( pWaveFile->GetSize() == 0 )
{
// Wave is blank, so don't create it.
hr = E_FAIL;
goto LFail;
}
// Make the DirectSound buffer the same size as the wav file
dwDSBufferSize = pWaveFile->GetSize();
// Create the direct sound buffer, and only request the flags needed
// since each requires some overhead and limits if the buffer can
// be hardware accelerated
DSBUFFERDESC dsbd;
ZeroMemory( &dsbd, sizeof(DSBUFFERDESC) );
dsbd.dwSize = sizeof(DSBUFFERDESC);
dsbd.dwFlags = dwCreationFlags;
dsbd.dwBufferBytes = dwDSBufferSize;
dsbd.guid3DAlgorithm = guid3DAlgorithm;
dsbd.lpwfxFormat = pWaveFile->m_pwfx;
// DirectSound is only guarenteed to play PCM data. Other
// formats may or may not work depending the sound card driver.
hr = m_pDS->CreateSoundBuffer( &dsbd, &apDSBuffer[0], NULL );
// Be sure to return this error code if it occurs so the
// callers knows this happened.
if( hr == DS_NO_VIRTUALIZATION )
hrRet = DS_NO_VIRTUALIZATION;
if( FAILED(hr) )
{
// DSERR_BUFFERTOOSMALL will be returned if the buffer is
// less than DSBSIZE_FX_MIN and the buffer is created
// with DSBCAPS_CTRLFX.
// It might also fail if hardware buffer mixing was requested
// on a device that doesn't support it.
DXTRACE_ERR( TEXT("CreateSoundBuffer"), hr );
goto LFail;
}
// Default to use DuplicateSoundBuffer() when created extra buffers since always
// create a buffer that uses the same memory however DuplicateSoundBuffer() will fail if
// DSBCAPS_CTRLFX is used, so use CreateSoundBuffer() instead in this case.
if( (dwCreationFlags & DSBCAPS_CTRLFX) == 0 )
{
for( i=1; i<dwNumBuffers; i++ )
{
if( FAILED( hr = m_pDS->DuplicateSoundBuffer( apDSBuffer[0], &apDSBuffer[i] ) ) )
{
DXTRACE_ERR( TEXT("DuplicateSoundBuffer"), hr );
goto LFail;
}
}
}
else
{
for( i=1; i<dwNumBuffers; i++ )
{
hr = m_pDS->CreateSoundBuffer( &dsbd, &apDSBuffer[i], NULL );
//.........这里部分代码省略.........
示例7: Render
/*--------------------------------------------
画面の描画処理
--------------------------------------------*/
HRESULT Render(void)
{
HRESULT hr;
// 描画ターゲットのクリア
g_pImmediateContext->ClearRenderTargetView(
g_pRenderTargetView, // クリアする描画ターゲット
g_ClearColor); // クリアする値
// 深度/ステンシルのクリア
g_pImmediateContext->ClearDepthStencilView(
g_pDepthStencilView, // クリアする深度/ステンシル・ビュー
D3D11_CLEAR_DEPTH, // 深度値だけをクリアする
1.0f, // 深度バッファをクリアする値
0); // ステンシル・バッファをクリアする値(この場合、無関係)
// ***************************************
// 立方体の描画
// 定数バッファ�Aを更新
// ビュー変換行列
XMVECTORF32 eyePosition = { 0.0f, 5.0f, -5.0f, 1.0f }; // 視点(カメラの位置)
XMVECTORF32 focusPosition = { 0.0f, 0.0f, 0.0f, 1.0f }; // 注視点
XMVECTORF32 upDirection = { 0.0f, 1.0f, 0.0f, 1.0f }; // カメラの上方向
XMMATRIX mat = XMMatrixLookAtLH(eyePosition, focusPosition, upDirection);
XMStoreFloat4x4(&g_cbCBuffer.View, XMMatrixTranspose(mat));
// 点光源座標
XMVECTOR vec = XMVector3TransformCoord(XMLoadFloat3(&g_vLightPos), mat);
XMStoreFloat3(&g_cbCBuffer.Light, vec);
// ワールド変換行列
XMMATRIX matY, matX;
FLOAT rotate = (FLOAT)(XM_PI * (timeGetTime() % 3000)) / 1500.0f;
matY = XMMatrixRotationY(rotate);
rotate = (FLOAT)(XM_PI * (timeGetTime() % 1500)) / 750.0f;
matX = XMMatrixRotationX(rotate);
XMStoreFloat4x4(&g_cbCBuffer.World, XMMatrixTranspose(matY * matX));
// 定数バッファのマップ取得
D3D11_MAPPED_SUBRESOURCE MappedResource;
hr = g_pImmediateContext->Map(
g_pCBuffer, // マップするリソース
0, // サブリソースのインデックス番号
D3D11_MAP_WRITE_DISCARD, // 書き込みアクセス
0, //
&MappedResource); // データの書き込み先ポインタ
if (FAILED(hr))
return DXTRACE_ERR(L"InitBackBuffer g_pImmediateContext->Map", hr); // 失敗
// データ書き込み
CopyMemory(MappedResource.pData, &g_cbCBuffer, sizeof(cbCBuffer));
// マップ解除
g_pImmediateContext->Unmap(g_pCBuffer, 0);
// ***************************************
// IAに頂点バッファを設定
// IAに入力レイアウト・オブジェクトを設定(頂点バッファなし)
g_pImmediateContext->IASetInputLayout(NULL);
// IAにプリミティブの種類を設定
g_pImmediateContext->IASetPrimitiveTopology(D3D_PRIMITIVE_TOPOLOGY_TRIANGLELIST);
// VSに頂点シェーダを設定
g_pImmediateContext->VSSetShader(g_pVertexShader, NULL, 0);
// VSに定数バッファを設定
g_pImmediateContext->VSSetConstantBuffers(0, 1, &g_pCBuffer);
// GSにジオメトリ・シェーダを設定
g_pImmediateContext->GSSetShader(g_pGeometryShader, NULL, 0);
// GSに定数バッファを設定
g_pImmediateContext->GSSetConstantBuffers(0, 1, &g_pCBuffer);
// RSにビューポートを設定
g_pImmediateContext->RSSetViewports(1, g_ViewPort);
// RSにラスタライザ・ステート・オブジェクトを設定
g_pImmediateContext->RSSetState(g_pRasterizerState);
// PSにピクセル・シェーダを設定
g_pImmediateContext->PSSetShader(g_pPixelShader, NULL, 0);
// PSに定数バッファを設定
g_pImmediateContext->PSSetConstantBuffers(0, 1, &g_pCBuffer);
// PSにシェーダ・リソース・ビューを設定
g_pImmediateContext->PSSetShaderResources(
0, // 設定する最初のスロット番号
1, // 設定するシェーダ・リソース・ビューの数
&g_pTextureSRV); // 設定するシェーダ・リソース・ビューの配列
// PSにサンプラーを設定
g_pImmediateContext->PSSetSamplers(0, 1, &g_pTextureSampler);
// OMに描画ターゲット ビューと深度/ステンシル・ビューを設定
g_pImmediateContext->OMSetRenderTargets(1, &g_pRenderTargetView, g_bDepthMode ? g_pDepthStencilView : NULL);
// OMにブレンド・ステート・オブジェクトを設定
FLOAT BlendFactor[4] = {0.0f, 0.0f, 0.0f, 0.0f};
g_pImmediateContext->OMSetBlendState(g_pBlendState, BlendFactor, 0xffffffff);
// OMに深度/ステンシル・ステート・オブジェクトを設定
g_pImmediateContext->OMSetDepthStencilState(g_pDepthStencilState, 0);
// ***************************************
// 頂点バッファとインデックス・バッファを使わずに描画する
g_pImmediateContext->Draw(
36, // 描画する頂点数
//.........这里部分代码省略.........
示例8: InitDirect3D
/*-------------------------------------------
Direct3D初期化
--------------------------------------------*/
HRESULT InitDirect3D(void)
{
// ウインドウのクライアント エリア
RECT rc;
GetClientRect(g_hWindow, &rc);
UINT width = rc.right - rc.left;
UINT height = rc.bottom - rc.top;
// デバイスとスワップ チェインの作成
DXGI_SWAP_CHAIN_DESC sd;
ZeroMemory(&sd, sizeof(sd)); // 構造体の値を初期化
sd.BufferCount = 3; // バック バッファ数
sd.BufferDesc.Width = width; // バック バッファの幅
sd.BufferDesc.Height = height; // バック バッファの高さ
sd.BufferDesc.Format = DXGI_FORMAT_R8G8B8A8_UNORM; // フォーマット
sd.BufferDesc.RefreshRate.Numerator = 60; // リフレッシュ レート(分子)
sd.BufferDesc.RefreshRate.Denominator = 1; // リフレッシュ レート(分母)
sd.BufferDesc.ScanlineOrdering = DXGI_MODE_SCANLINE_ORDER_PROGRESSIVE; // スキャンライン
sd.BufferDesc.Scaling = DXGI_MODE_SCALING_CENTERED; // スケーリング
sd.BufferUsage = DXGI_USAGE_RENDER_TARGET_OUTPUT; // バック バッファの使用法
sd.OutputWindow = g_hWindow; // 関連付けるウインドウ
sd.SampleDesc.Count = 1; // マルチ サンプルの数
sd.SampleDesc.Quality = 0; // マルチ サンプルのクオリティ
sd.Windowed = TRUE; // ウインドウ モード
sd.Flags = DXGI_SWAP_CHAIN_FLAG_ALLOW_MODE_SWITCH; // モード自動切り替え
#if defined(DEBUG) || defined(_DEBUG)
UINT createDeviceFlags = D3D11_CREATE_DEVICE_DEBUG;
#else
UINT createDeviceFlags = 0;
#endif
// ハードウェア・デバイスを作成
HRESULT hr = D3D11CreateDeviceAndSwapChain(
NULL, D3D_DRIVER_TYPE_HARDWARE, NULL, createDeviceFlags,
g_pFeatureLevels, g_FeatureLevels, D3D11_SDK_VERSION, &sd,
&g_pSwapChain, &g_pD3DDevice, &g_FeatureLevelsSupported,
&g_pImmediateContext);
if(FAILED(hr)) {
// WARPデバイスを作成
hr = D3D11CreateDeviceAndSwapChain(
NULL, D3D_DRIVER_TYPE_WARP, NULL, createDeviceFlags,
g_pFeatureLevels, g_FeatureLevels, D3D11_SDK_VERSION, &sd,
&g_pSwapChain, &g_pD3DDevice, &g_FeatureLevelsSupported,
&g_pImmediateContext);
if(FAILED(hr)) {
// リファレンス・デバイスを作成
hr = D3D11CreateDeviceAndSwapChain(
NULL, D3D_DRIVER_TYPE_REFERENCE, NULL, createDeviceFlags,
g_pFeatureLevels, g_FeatureLevels, D3D11_SDK_VERSION, &sd,
&g_pSwapChain, &g_pD3DDevice, &g_FeatureLevelsSupported,
&g_pImmediateContext);
if(FAILED(hr)) {
return DXTRACE_ERR(L"InitDirect3D D3D11CreateDeviceAndSwapChain", hr);
}
}
}
// **********************************************************
// シェーダのコンパイル
hr = CreateShaderObj();
if (FAILED(hr))
return DXTRACE_ERR(L"InitDirect3D CreateShaderObj", hr);
hr = CreateShaderShadowVolume();
if (FAILED(hr))
return DXTRACE_ERR(L"InitDirect3D CreateShaderShadowVolume", hr);
hr = CreateShaderShadow();
if (FAILED(hr))
return DXTRACE_ERR(L"InitDirect3D CreateShaderShadow", hr);
// **********************************************************
// 定数バッファの定義
D3D11_BUFFER_DESC cBufferDesc;
cBufferDesc.Usage = D3D11_USAGE_DYNAMIC; // 動的(ダイナミック)使用法
cBufferDesc.BindFlags = D3D11_BIND_CONSTANT_BUFFER; // 定数バッファ
cBufferDesc.CPUAccessFlags = D3D11_CPU_ACCESS_WRITE; // CPUから書き込む
cBufferDesc.MiscFlags = 0;
cBufferDesc.StructureByteStride = 0;
// 定数バッファの作成
cBufferDesc.ByteWidth = sizeof(cbCBuffer); // バッファ・サイズ
hr = g_pD3DDevice->CreateBuffer(&cBufferDesc, NULL, &g_pCBuffer);
if (FAILED(hr))
return DXTRACE_ERR(L"InitDirect3D g_pD3DDevice->CreateBuffer", hr);
// **********************************************************
// Waveform OBJファイルの読み込み
char mtlFileName[80];
if (g_wfObjKuma.Load(g_pD3DDevice, g_pImmediateContext, "..\\misc\\kuma.obj",mtlFileName, sizeof(mtlFileName)) == false)
return DXTRACE_ERR(L"InitDirect3D g_wfObjKuma.Load", E_FAIL);
// MTLファイルの読み込み
if (g_wfMtl.Load(g_pD3DDevice, mtlFileName, "..\\misc\\default.bmp") == false)
return DXTRACE_ERR(L"InitDirect3D g_wfMtl.Load", E_FAIL);
// **********************************************************
// サンプラーの作成
//.........这里部分代码省略.........
示例9: InitDirect3D
/*-------------------------------------------
Direct3D初期化
--------------------------------------------*/
HRESULT InitDirect3D(void)
{
// ウインドウのクライアント エリア
RECT rc;
GetClientRect(g_hWindow, &rc);
UINT width = rc.right - rc.left;
UINT height = rc.bottom - rc.top;
// デバイスとスワップ チェインの作成
DXGI_SWAP_CHAIN_DESC sd;
ZeroMemory(&sd, sizeof(sd)); // 構造体の値を初期化
sd.BufferCount = 3; // バック バッファ数
sd.BufferDesc.Width = width; // バック バッファの幅
sd.BufferDesc.Height = height; // バック バッファの高さ
sd.BufferDesc.Format = DXGI_FORMAT_R8G8B8A8_UNORM; // フォーマット
sd.BufferDesc.RefreshRate.Numerator = 60; // リフレッシュ レート(分子)
sd.BufferDesc.RefreshRate.Denominator = 1; // リフレッシュ レート(分母)
sd.BufferDesc.ScanlineOrdering = DXGI_MODE_SCANLINE_ORDER_PROGRESSIVE; // スキャンライン
sd.BufferDesc.Scaling = DXGI_MODE_SCALING_CENTERED; // スケーリング
sd.BufferUsage = DXGI_USAGE_RENDER_TARGET_OUTPUT; // バック バッファの使用法
sd.OutputWindow = g_hWindow; // 関連付けるウインドウ
sd.SampleDesc.Count = 1; // マルチ サンプルの数
sd.SampleDesc.Quality = 0; // マルチ サンプルのクオリティ
sd.Windowed = TRUE; // ウインドウ モード
sd.Flags = DXGI_SWAP_CHAIN_FLAG_ALLOW_MODE_SWITCH; // モード自動切り替え
#if defined(DEBUG) || defined(_DEBUG)
UINT createDeviceFlags = D3D11_CREATE_DEVICE_DEBUG;
#else
UINT createDeviceFlags = 0;
#endif
// ハードウェア・デバイスを作成
HRESULT hr = D3D11CreateDeviceAndSwapChain(
NULL, D3D_DRIVER_TYPE_HARDWARE, NULL, createDeviceFlags,
g_pFeatureLevels, g_FeatureLevels, D3D11_SDK_VERSION, &sd,
&g_pSwapChain, &g_pD3DDevice, &g_FeatureLevelsSupported,
&g_pImmediateContext);
if(FAILED(hr)) {
// WARPデバイスを作成
hr = D3D11CreateDeviceAndSwapChain(
NULL, D3D_DRIVER_TYPE_WARP, NULL, createDeviceFlags,
g_pFeatureLevels, g_FeatureLevels, D3D11_SDK_VERSION, &sd,
&g_pSwapChain, &g_pD3DDevice, &g_FeatureLevelsSupported,
&g_pImmediateContext);
if(FAILED(hr)) {
// リファレンス・デバイスを作成
hr = D3D11CreateDeviceAndSwapChain(
NULL, D3D_DRIVER_TYPE_REFERENCE, NULL, createDeviceFlags,
g_pFeatureLevels, g_FeatureLevels, D3D11_SDK_VERSION, &sd,
&g_pSwapChain, &g_pD3DDevice, &g_FeatureLevelsSupported,
&g_pImmediateContext);
if(FAILED(hr)) {
return DXTRACE_ERR(L"InitDirect3D D3D11CreateDeviceAndSwapChain", hr);
}
}
}
// **********************************************************
// 頂点シェーダのコードをコンパイル
ID3DBlob* pBlobVS = NULL;
hr = D3DX11CompileFromFile(
L"..\\misc\\D3D11Sample06.sh", // ファイル名
NULL, // マクロ定義(なし)
NULL, // インクルード・ファイル定義(なし)
"VS", // 「VS関数」がシェーダから実行される
"vs_4_0", // 頂点シェーダ
g_flagCompile, // コンパイル・オプション
0, // エフェクトのコンパイル・オプション(なし)
NULL, // 直ぐにコンパイルしてから関数を抜ける。
&pBlobVS, // コンパイルされたバイト・コード
NULL, // エラーメッセージは不要
NULL); // 戻り値
if (FAILED(hr))
return DXTRACE_ERR(L"InitDirect3D D3DX11CompileShaderFromFile", hr);
// 頂点シェーダの作成
hr = g_pD3DDevice->CreateVertexShader(
pBlobVS->GetBufferPointer(), // バイト・コードへのポインタ
pBlobVS->GetBufferSize(), // バイト・コードの長さ
NULL,
&g_pVertexShader); // 頂点シェーダを受け取る変数
SAFE_RELEASE(pBlobVS); // バイト・コードを解放
if (FAILED(hr))
return DXTRACE_ERR(L"InitDirect3D g_pD3DDevice->CreateVertexShader", hr);
// **********************************************************
// ジオメトリ・シェーダのコードをコンパイル
ID3DBlob* pBlobGS = NULL;
hr = D3DX11CompileFromFile(
L"..\\misc\\D3D11Sample06.sh", // ファイル名
NULL, // マクロ定義(なし)
NULL, // インクルード・ファイル定義(なし)
"GS", // 「GS関数」がシェーダから実行される
"gs_4_0", // ジオメトリ・シェーダ
g_flagCompile, // コンパイル・オプション
0, // エフェクトのコンパイル・オプション(なし)
//.........这里部分代码省略.........
示例10: InitDirect3D
/*-------------------------------------------
Direct3D初期化
--------------------------------------------*/
HRESULT InitDirect3D(void)
{
// ウインドウのクライアント エリア
RECT rc;
GetClientRect(g_hWindow, &rc);
UINT width = rc.right - rc.left;
UINT height = rc.bottom - rc.top;
// デバイスとスワップ チェインの作成
DXGI_SWAP_CHAIN_DESC sd;
ZeroMemory(&sd, sizeof(sd)); // 構造体の値を初期化
sd.BufferCount = 3; // バック バッファ数
sd.BufferDesc.Width = width; // バック バッファの幅
sd.BufferDesc.Height = height; // バック バッファの高さ
sd.BufferDesc.Format = DXGI_FORMAT_R8G8B8A8_UNORM; // フォーマット
sd.BufferDesc.RefreshRate.Numerator = 60; // リフレッシュ レート(分子)
sd.BufferDesc.RefreshRate.Denominator = 1; // リフレッシュ レート(分母)
sd.BufferDesc.ScanlineOrdering = DXGI_MODE_SCANLINE_ORDER_PROGRESSIVE; // スキャンライン
sd.BufferDesc.Scaling = DXGI_MODE_SCALING_CENTERED; // スケーリング
sd.BufferUsage = DXGI_USAGE_RENDER_TARGET_OUTPUT; // バック バッファの使用法
sd.OutputWindow = g_hWindow; // 関連付けるウインドウ
sd.SampleDesc.Count = 1; // マルチ サンプルの数
sd.SampleDesc.Quality = 0; // マルチ サンプルのクオリティ
sd.Windowed = TRUE; // ウインドウ モード
sd.Flags = DXGI_SWAP_CHAIN_FLAG_ALLOW_MODE_SWITCH; // モード自動切り替え
#if defined(DEBUG) || defined(_DEBUG)
UINT createDeviceFlags = D3D11_CREATE_DEVICE_DEBUG;
#else
UINT createDeviceFlags = 0;
#endif
// ハードウェア・デバイスを作成
HRESULT hr = D3D11CreateDeviceAndSwapChain(
NULL, D3D_DRIVER_TYPE_HARDWARE, NULL, createDeviceFlags,
g_pFeatureLevels, g_FeatureLevels, D3D11_SDK_VERSION, &sd,
&g_pSwapChain, &g_pD3DDevice, &g_FeatureLevelsSupported,
&g_pImmediateContext);
if(FAILED(hr)) {
// WARPデバイスを作成
hr = D3D11CreateDeviceAndSwapChain(
NULL, D3D_DRIVER_TYPE_WARP, NULL, createDeviceFlags,
g_pFeatureLevels, g_FeatureLevels, D3D11_SDK_VERSION, &sd,
&g_pSwapChain, &g_pD3DDevice, &g_FeatureLevelsSupported,
&g_pImmediateContext);
if(FAILED(hr)) {
// リファレンス・デバイスを作成
hr = D3D11CreateDeviceAndSwapChain(
NULL, D3D_DRIVER_TYPE_REFERENCE, NULL, createDeviceFlags,
g_pFeatureLevels, g_FeatureLevels, D3D11_SDK_VERSION, &sd,
&g_pSwapChain, &g_pD3DDevice, &g_FeatureLevelsSupported,
&g_pImmediateContext);
if(FAILED(hr)) {
return DXTRACE_ERR(L"InitDirect3D D3D11CreateDeviceAndSwapChain", hr);
}
}
}
// **********************************************************
// 頂点シェーダのコードをコンパイル
ID3DBlob* pBlobVS = NULL;
hr = D3DX11CompileFromFile(
L"..\\misc\\D3D11Sample07.sh", // ファイル名
NULL, // マクロ定義(なし)
NULL, // インクルード・ファイル定義(なし)
"VS", // 「VS関数」がシェーダから実行される
"vs_4_0", // 頂点シェーダ
g_flagCompile, // コンパイル・オプション
0, // エフェクトのコンパイル・オプション(なし)
NULL, // 直ぐにコンパイルしてから関数を抜ける。
&pBlobVS, // コンパイルされたバイト・コード
NULL, // エラーメッセージは不要
NULL); // 戻り値
if (FAILED(hr))
return DXTRACE_ERR(L"InitDirect3D D3DX11CompileShaderFromFile", hr);
// 頂点シェーダの作成
hr = g_pD3DDevice->CreateVertexShader(
pBlobVS->GetBufferPointer(), // バイト・コードへのポインタ
pBlobVS->GetBufferSize(), // バイト・コードの長さ
NULL,
&g_pVertexShader); // 頂点シェーダを受け取る変数
SAFE_RELEASE(pBlobVS); // バイト・コードを解放
if (FAILED(hr))
return DXTRACE_ERR(L"InitDirect3D g_pD3DDevice->CreateVertexShader", hr);
// **********************************************************
// ジオメトリ・シェーダのコードをコンパイル
ID3DBlob* pBlobGS = NULL;
hr = D3DX11CompileFromFile(
L"..\\misc\\D3D11Sample07.sh", // ファイル名
NULL, // マクロ定義(なし)
NULL, // インクルード・ファイル定義(なし)
"GS", // 「GS関数」がシェーダから実行される
"gs_4_0", // ジオメトリ・シェーダ
g_flagCompile, // コンパイル・オプション
0, // エフェクトのコンパイル・オプション(なし)
//.........这里部分代码省略.........
示例11: DXTRACE_ERR
HRESULT CStreamingSound::FillBufferWithSound(BOOL restored)
{
HRESULT hr;
VOID* pDSLockedBuffer = NULL; // Pointer to locked buffer memory
DWORD dwDSLockedBufferSize = 0; // Size of the locked DirectSound buffer
VOID* pDSLockedBuffer2 = NULL;
DWORD dwDSLockedBufferSize2 = 0;
//UINT dwDataWrote;
DWORD dwPlayPos;
DWORD dwWritePos;
LONG lLockSize;
DWORD dwReadSize;
DWORD dwReadSizeAll=0;
BYTE* aServalFrame = NULL;
BYTE aFrame[BLOCK_SIZE];
//BYTE aFrame2[BLOCK_SIZE];
short asFrame[FRAME_SIZE];
if( m_pDSB == NULL )
return CO_E_NOTINITIALIZED;
if( FAILED( hr = m_pDSB->GetCurrentPosition( &dwPlayPos, &dwWritePos ) ) )
return DXTRACE_ERR( TEXT("GetCurrentPosition"), hr );
lLockSize = dwPlayPos - m_dwNextWriteOffset;
if( lLockSize < 0 )
lLockSize += m_dwWriteBufferSize;
// Block align lock size so that we are always write on a boundary
lLockSize -= (lLockSize % m_dwNotifySize);
if (lLockSize==0)
return S_OK;
if (restored)
{
Reset();
while (m_dwNextWriteOffset<m_dwWriteBufferSize)
{
m_dwNextWriteOffset %= m_dwWriteBufferSize; // Circular buffer
// Lock the buffer down
if( FAILED( hr = m_pDSB->Lock( m_dwNextWriteOffset, m_dwNotifySize,
&pDSLockedBuffer, &dwDSLockedBufferSize,
NULL, NULL, 0L ) ) )
return DXTRACE_ERR( TEXT("Lock"), hr );
dwReadSize = m_pDataBuffer->ReadBlock((BYTE*)pDSLockedBuffer,m_dwNotifySize);
if( dwReadSize < m_dwNotifySize )
{
// Wav is blank, so just fill with silence
FillMemory( (BYTE*) pDSLockedBuffer,
dwDSLockedBufferSize,
(BYTE)0 );
}
// Unlock the buffer, we don't need it anymore.
m_pDSB->Unlock( pDSLockedBuffer, dwDSLockedBufferSize, NULL, 0 );
m_dwNextWriteOffset += dwDSLockedBufferSize;
}
m_dwNextWriteOffset %= m_dwWriteBufferSize; // Circular buffer
}
else
{
// Lock the buffer down
if( FAILED( hr = m_pDSB->Lock( m_dwNextWriteOffset, lLockSize,
&pDSLockedBuffer, &dwDSLockedBufferSize,
&pDSLockedBuffer2, &dwDSLockedBufferSize2, 0L ) ) )
return DXTRACE_ERR( TEXT("Lock"), hr );
aServalFrame = new BYTE[lLockSize];
while (dwReadSizeAll<lLockSize && (dwReadSize = m_pDataBuffer->ReadBlock((BYTE*)(aServalFrame+dwReadSizeAll),m_dwNotifySize)))
dwReadSizeAll += dwReadSize;
if (dwReadSizeAll<lLockSize)
{
LOGWARNING("CStreamingSound::FillBufferWithSound:Fill with silence "<<lLockSize-dwReadSizeAll<<"/"<<lLockSize<<" bytes.");
// Wav is blank, so just fill with silence
FillMemory( (BYTE*) (aServalFrame+dwReadSizeAll),
lLockSize-dwReadSizeAll,
(BYTE)0 );
}
CopyMemory(pDSLockedBuffer,aServalFrame,dwDSLockedBufferSize);
if (pDSLockedBuffer2)
CopyMemory(pDSLockedBuffer2,aServalFrame+dwDSLockedBufferSize,dwDSLockedBufferSize2);
// Unlock the buffer, we don't need it anymore.
m_pDSB->Unlock( pDSLockedBuffer, dwDSLockedBufferSize, NULL, 0 );
if (pDSLockedBuffer2)
m_pDSB->Unlock( pDSLockedBuffer2, dwDSLockedBufferSize2, NULL, 0 );
m_dwNextWriteOffset += lLockSize;
m_dwNextWriteOffset %= m_dwWriteBufferSize; // Circular buffer
//.........这里部分代码省略.........
示例12: ZeroMemory
//-----------------------------------------------------------------------------
// Name: CSoundManager::CreateStreaming()
// Desc:
//-----------------------------------------------------------------------------
HRESULT CSoundManager::CreateStreaming( CStreamingSound** ppStreamingSound,
DWORD dwCreationFlags,
GUID guid3DAlgorithm,
DWORD dwNotifyCount,
DWORD m_dwNotifySize,
HANDLE hNotifyEvent,
FileLog* filelog)
{
HRESULT hr;
if( m_pDS == NULL )
return CO_E_NOTINITIALIZED;
if( ppStreamingSound == NULL || hNotifyEvent == NULL )
return E_INVALIDARG;
LPDIRECTSOUNDBUFFER pDSBuffer = NULL;
DWORD dwDSBufferSize = NULL;
DSBPOSITIONNOTIFY* aPosNotify = NULL;
LPDIRECTSOUNDNOTIFY m_pDSNotify = NULL;
// Figure out how big the DSound buffer should be
dwDSBufferSize = m_dwNotifySize * dwNotifyCount;
// Set up the direct sound buffer. Request the NOTIFY flag, so
// that we are notified as the sound buffer plays. Note, that using this flag
// may limit the amount of hardware acceleration that can occur.
DSBUFFERDESC dsbd;
ZeroMemory( &dsbd, sizeof(DSBUFFERDESC) );
dsbd.dwSize = sizeof(DSBUFFERDESC);
dsbd.dwFlags = dwCreationFlags |
DSBCAPS_CTRLPOSITIONNOTIFY |
DSBCAPS_GETCURRENTPOSITION2|
DSBCAPS_GLOBALFOCUS |
DSBCAPS_LOCSOFTWARE;
dsbd.dwBufferBytes = dwDSBufferSize;
dsbd.guid3DAlgorithm = guid3DAlgorithm;
//LPWAVEFORMATEX wfx = new WAVEFORMATEX;
WAVEFORMATEX wfx;
ZeroMemory( &wfx, sizeof(WAVEFORMATEX) );
wfx.wFormatTag = WAVE_FORMAT_PCM;
wfx.nChannels = (WORD) m_dwPrimaryChannels;
wfx.nSamplesPerSec = m_dwPrimaryFreq;
wfx.wBitsPerSample = (WORD) m_dwPrimaryBitRate;
wfx.nBlockAlign = (WORD) (wfx.wBitsPerSample / 8 * wfx.nChannels);
wfx.nAvgBytesPerSec = wfx.nSamplesPerSec * wfx.nBlockAlign;
dsbd.lpwfxFormat = &wfx;
if( FAILED( hr = m_pDS->CreateSoundBuffer( &dsbd, &pDSBuffer, NULL ) ) )
{
// If wave format isn't then it will return
// either DSERR_BADFORMAT or E_INVALIDARG
if( hr == DSERR_BADFORMAT || hr == E_INVALIDARG )
return DXTRACE_ERR_NOMSGBOX( TEXT("CreateSoundBuffer"), hr );
return DXTRACE_ERR( TEXT("CreateSoundBuffer"), hr );
}
// Create the notification events, so that we know when to fill
// the buffer as the sound plays.
if( FAILED( hr = pDSBuffer->QueryInterface( IID_IDirectSoundNotify,
(VOID**)&m_pDSNotify ) ) )
{
SAFE_DELETE( aPosNotify );
return DXTRACE_ERR( TEXT("QueryInterface"), hr );
}
aPosNotify = new DSBPOSITIONNOTIFY[ dwNotifyCount ];
if( aPosNotify == NULL )
return E_OUTOFMEMORY;
for( DWORD i = 0; i < dwNotifyCount; i++ )
{
aPosNotify[i].dwOffset = (m_dwNotifySize * i) + m_dwNotifySize - 1;
aPosNotify[i].hEventNotify = hNotifyEvent;
}
// Tell DirectSound when to notify us. The notification will come in the from
// of signaled events that are handled in WinMain()
if( FAILED( hr = m_pDSNotify->SetNotificationPositions( dwNotifyCount,
aPosNotify ) ) )
{
SAFE_RELEASE( m_pDSNotify );
SAFE_DELETE( aPosNotify );
return DXTRACE_ERR( TEXT("SetNotificationPositions"), hr );
}
SAFE_RELEASE( m_pDSNotify );
SAFE_DELETE( aPosNotify );
// Create the sound
*ppStreamingSound = new CStreamingSound( pDSBuffer, dwDSBufferSize, m_dwNotifySize,hNotifyEvent,filelog);
return S_OK;
}
示例13: MainDlgProc
//-----------------------------------------------------------------------------
// Name: MainDlgProc()
// Desc: Handles dialog messages
//-----------------------------------------------------------------------------
INT_PTR CALLBACK MainDlgProc( HWND hDlg, UINT msg, WPARAM wParam, LPARAM lParam )
{
HRESULT hr;
switch( msg )
{
case WM_INITDIALOG:
OnInitDialog( hDlg );
break;
case WM_COMMAND:
switch( LOWORD(wParam) )
{
case IDC_SOUNDFILE:
OnOpenSoundFile( hDlg );
break;
case IDCANCEL:
EndDialog( hDlg, IDCANCEL );
break;
case IDC_PLAY:
if( FAILED( hr = OnPlaySound( hDlg ) ) )
{
DXTRACE_ERR( TEXT("OnPlaySound"), hr );
MessageBox( hDlg, "Error playing DirectSound buffer."
"Sample will now exit.", "DirectSound Sample",
MB_OK | MB_ICONERROR );
EndDialog( hDlg, IDABORT );
}
break;
case IDC_STOP:
if( g_pSound )
{
g_pSound->Stop();
g_pSound->Reset();
}
// Update the UI controls to show the sound as stopped
EnablePlayUI( hDlg, TRUE );
SetDlgItemText( hDlg, IDC_STATUS, TEXT("Sound stopped.") );
break;
case IDC_DEFER:
g_bDeferSettings = !g_bDeferSettings;
OnSliderChanged( hDlg );
break;
case IDC_APPLY:
// Call the IDirectSound3DListener::CommitDeferredSettings
// method to execute all of the deferred commands at once.
// This is many times more efficent than recomputing everything
// for every call.
if( g_pDSListener )
g_pDSListener->CommitDeferredSettings();
break;
default:
return FALSE; // Didn't handle message
}
break;
case WM_TIMER:
if( wParam == IDT_MOVEMENT_TIMER )
OnMovementTimer( hDlg );
break;
case WM_NOTIFY:
OnSliderChanged( hDlg );
break;
case WM_DESTROY:
// Cleanup everything
KillTimer( hDlg, 1 );
SAFE_RELEASE( g_pDSListener );
SAFE_RELEASE( g_pDS3DBuffer );
SAFE_DELETE( g_pSound );
SAFE_DELETE( g_pSoundManager );
break;
default:
return FALSE; // Didn't handle message
}
return TRUE; // Handled message
}
示例14: CWaveFile
//-----------------------------------------------------------------------------
// Name: CSoundManager::CreateStreaming()
// Desc:
//-----------------------------------------------------------------------------
HRESULT CSoundManager::CreateStreaming( CStreamingSound** ppStreamingSound,
LPTSTR strWaveFileName,
DWORD dwCreationFlags,
GUID guid3DAlgorithm,
DWORD dwNotifyCount,
DWORD dwNotifySize,
HANDLE hNotifyEvent )
{
HRESULT hr;
if( m_pDS == NULL )
return CO_E_NOTINITIALIZED;
if( strWaveFileName == NULL || ppStreamingSound == NULL || hNotifyEvent == NULL )
return E_INVALIDARG;
IDirectSoundBuffer* pDSBuffer = NULL;
DWORD dwDSBufferSize = NULL;
CWaveFile* pWaveFile = NULL;
DSBPOSITIONNOTIFY* aPosNotify = NULL;
IDirectSoundNotify* pDSNotify = NULL;
pWaveFile = new CWaveFile();
if( pWaveFile == NULL )
return E_OUTOFMEMORY;
pWaveFile->Open( strWaveFileName, NULL, WAVEFILE_READ );
// Figure out how big the DirectSound buffer should be
dwDSBufferSize = dwNotifySize * dwNotifyCount;
// Set up the direct sound buffer. Request the NOTIFY flag, so
// that we are notified as the sound buffer plays. Note, that using this flag
// may limit the amount of hardware acceleration that can occur.
DSBUFFERDESC dsbd;
ZeroMemory( &dsbd, sizeof(DSBUFFERDESC) );
dsbd.dwSize = sizeof(DSBUFFERDESC);
dsbd.dwFlags = dwCreationFlags |
DSBCAPS_CTRLPOSITIONNOTIFY |
DSBCAPS_GETCURRENTPOSITION2;
dsbd.dwBufferBytes = dwDSBufferSize;
dsbd.guid3DAlgorithm = guid3DAlgorithm;
dsbd.lpwfxFormat = pWaveFile->m_pwfx;
if( FAILED( hr = m_pDS->CreateSoundBuffer( &dsbd, &pDSBuffer, NULL ) ) )
{
// If wave format isn't then it will return
// either DSERR_BADFORMAT or E_INVALIDARG
if( hr == DSERR_BADFORMAT || hr == E_INVALIDARG )
return DXTRACE_ERR( TEXT("CreateSoundBuffer"), hr );
return DXTRACE_ERR( TEXT("CreateSoundBuffer"), hr );
}
// Create the notification events, so that we know when to fill
// the buffer as the sound plays.
if( FAILED( hr = pDSBuffer->QueryInterface( IID_IDirectSoundNotify,
(VOID**)&pDSNotify ) ) )
{
SAFE_DELETE_ARRAY( aPosNotify );
return DXTRACE_ERR( TEXT("QueryInterface"), hr );
}
aPosNotify = new DSBPOSITIONNOTIFY[ dwNotifyCount ];
if( aPosNotify == NULL )
return E_OUTOFMEMORY;
for( DWORD i = 0; i < dwNotifyCount; i++ )
{
aPosNotify[i].dwOffset = (dwNotifySize * i) + dwNotifySize - 1;
aPosNotify[i].hEventNotify = hNotifyEvent;
}
// Tell DirectSound when to notify us. The notification will come in the from
// of signaled events that are handled in WinMain()
if( FAILED( hr = pDSNotify->SetNotificationPositions( dwNotifyCount,
aPosNotify ) ) )
{
SAFE_RELEASE( pDSNotify );
SAFE_DELETE_ARRAY( aPosNotify );
return DXTRACE_ERR( TEXT("SetNotificationPositions"), hr );
}
SAFE_RELEASE( pDSNotify );
SAFE_DELETE_ARRAY( aPosNotify );
// Create the sound
*ppStreamingSound = new CStreamingSound( pDSBuffer, dwDSBufferSize, pWaveFile, dwNotifySize );
return S_OK;
}
示例15: CreateShaderObj
/*-------------------------------------------
シェーダのコンパイル(3Dオブジェクト描画用)
--------------------------------------------*/
HRESULT CreateShaderObj(void)
{
HRESULT hr;
// **********************************************************
// 頂点シェーダのコードをコンパイル
ID3DBlob* pBlobVS = NULL;
hr = D3DX11CompileFromFile(
L"..\\misc\\D3D11Sample17.sh", // ファイル名
NULL, // マクロ定義(なし)
NULL, // インクルード・ファイル定義(なし)
"VS", // 「VS関数」がシェーダから実行される
"vs_4_0", // 頂点シェーダ
g_flagCompile, // コンパイル・オプション
0, // エフェクトのコンパイル・オプション(なし)
NULL, // 直ぐにコンパイルしてから関数を抜ける。
&pBlobVS, // コンパイルされたバイト・コード
NULL, // エラーメッセージは不要
NULL); // 戻り値
if (FAILED(hr))
return DXTRACE_ERR(L"CreateShaderObj D3DX11CompileShaderFromFile", hr);
// 頂点シェーダの作成
hr = g_pD3DDevice->CreateVertexShader(
pBlobVS->GetBufferPointer(), // バイト・コードへのポインタ
pBlobVS->GetBufferSize(), // バイト・コードの長さ
NULL,
&g_pVertexShader); // 頂点シェーダを受け取る変数
// SAFE_RELEASE(pBlobVS); // バイト・コードを解放
if (FAILED(hr)) {
SAFE_RELEASE(pBlobVS);
return DXTRACE_ERR(L"CreateShaderObj g_pD3DDevice->CreateVertexShader", hr);
}
// **********************************************************
// 入力要素
D3D11_INPUT_ELEMENT_DESC layout[] = {
{"POSITION", 0, DXGI_FORMAT_R32G32B32_FLOAT, 0, 0, D3D11_INPUT_PER_VERTEX_DATA, 0},
{"NORMAL", 0, DXGI_FORMAT_R32G32B32_FLOAT, 0, sizeof(XMFLOAT3), D3D11_INPUT_PER_VERTEX_DATA, 0},
{"TEXTURE", 0, DXGI_FORMAT_R32G32_FLOAT, 0, sizeof(XMFLOAT3) * 2, D3D11_INPUT_PER_VERTEX_DATA, 0}
};
// 入力レイアウト・オブジェクトの作成
hr = g_pD3DDevice->CreateInputLayout(
layout, // 定義の配列
_countof(layout), // 定義の要素数
pBlobVS->GetBufferPointer(), // バイト・コードへのポインタ
pBlobVS->GetBufferSize(), // バイト・コードのサイズ
&g_pInputLayout); // 受け取る変数のポインタ
SAFE_RELEASE(pBlobVS);
if (FAILED(hr))
return DXTRACE_ERR(L"CreateShaderObj g_pD3DDevice->CreateInputLayout", hr);
// **********************************************************
// ピクセル・シェーダのコードをコンパイル
ID3DBlob* pBlobPS = NULL;
hr = D3DX11CompileFromFile(
L"..\\misc\\D3D11Sample17.sh", // ファイル名
NULL, // マクロ定義(なし)
NULL, // インクルード・ファイル定義(なし)
"PS", // 「PS関数」がシェーダから実行される
"ps_4_0", // ピクセル・シェーダ
g_flagCompile, // コンパイル・オプション
0, // エフェクトのコンパイル・オプション(なし)
NULL, // 直ぐにコンパイルしてから関数を抜ける。
&pBlobPS, // コンパイルされたバイト・コード
NULL, // エラーメッセージは不要
NULL); // 戻り値
if (FAILED(hr))
return DXTRACE_ERR(L"CreateShaderObj D3DX11CompileShaderFromFile", hr);
// ピクセル・シェーダの作成
hr = g_pD3DDevice->CreatePixelShader(
pBlobPS->GetBufferPointer(), // バイト・コードへのポインタ
pBlobPS->GetBufferSize(), // バイト・コードの長さ
NULL,
&g_pPixelShader); // ピクセル・シェーダを受け取る変数
SAFE_RELEASE(pBlobPS); // バイト・コードを解放
if (FAILED(hr))
return DXTRACE_ERR(L"CreateShaderObj g_pD3DDevice->CreatePixelShader", hr);
// **********************************************************
// ブレンド・ステート・オブジェクトの作成
D3D11_BLEND_DESC BlendState;
ZeroMemory(&BlendState, sizeof(D3D11_BLEND_DESC));
BlendState.AlphaToCoverageEnable = FALSE;
BlendState.IndependentBlendEnable = FALSE;
BlendState.RenderTarget[0].BlendEnable = FALSE;
BlendState.RenderTarget[0].RenderTargetWriteMask = D3D11_COLOR_WRITE_ENABLE_ALL;
hr = g_pD3DDevice->CreateBlendState(&BlendState, &g_pBlendState);
if (FAILED(hr))
return DXTRACE_ERR(L"CreateShaderObj g_pD3DDevice->CreateBlendState", hr);
// **********************************************************
// ラスタライザ・ステート・オブジェクトの作成
D3D11_RASTERIZER_DESC RSDesc;
RSDesc.FillMode = D3D11_FILL_SOLID; // 普通に描画する
//.........这里部分代码省略.........