Проблемы c Direct 3D

QqRuZa
Новичок
6/22/2006, 5:14:26 AM
Здравствуйте!
Я вот на вашем форуме недавно и решил поинтересоваться...
может кто сталкивлся с такой вот проблемой:
1) Имеется приложение написанное на VC++ .NET
2) Vsiual Studio 2002
3) используется DirectX 8.0
-----------------------------------
Проблема:
Все компилится, линкуется и даже раньше запускалось... но вот обновил DirectX до последней версии и при запуске получаю ошибку
No Compatable D3D device found!
Однако на другой машине где стоит тоже последний DirectX все работает.
????? где собака зарыта ?
Я и винду сносил заново ставил... че я только не делал и видюхи разные пробовал ...
Вот кусок кода отвечающего за всю эту батву.
CODE
BOOL CMyApplication::InitializeD3D(D3DDEVICE_CREATION_PARAMETERS dcp, BOOL bWindowed, int iWidth, int iHeight)
{
D3DDISPLAYMODE d3ddm;
m_bWindowed = bWindowed;
m_d3ddcp.hFocusWindow = dcp.hFocusWindow;
m_d3ddcp.AdapterOrdinal = dcp.AdapterOrdinal;
m_d3ddcp.DeviceType = dcp.DeviceType;
m_d3ddcp.BehaviorFlags = dcp.BehaviorFlags;
m_pD3D = Direct3DCreate8(D3D_SDK_VERSION);
if(m_pD3D == NULL)
return FALSE;
if(FAILED(m_pD3D->GetAdapterDisplayMode(D3DADAPTER_DEFAULT, &d3ddm)))
return FALSE;
m_d3dpp.BackBufferCount = 1;
m_d3dpp.SwapEffect = D3DSWAPEFFECT_DISCARD;
m_d3dpp.MultiSampleType = D3DMULTISAMPLE_NONE;
m_d3dpp.EnableAutoDepthStencil = TRUE;
m_d3dpp.AutoDepthStencilFormat = D3DFMT_D16;
if(m_bWindowed)
{
m_d3dpp.BackBufferWidth = iWidth;
m_d3dpp.BackBufferHeight = iHeight;
m_d3dpp.BackBufferFormat = d3ddm.Format;
m_d3dpp.Windowed = TRUE;
}
else
{
m_d3dpp.BackBufferWidth = d3ddm.Width;
m_d3dpp.BackBufferHeight = d3ddm.Height;
m_d3dpp.BackBufferFormat = d3ddm.Format;
m_d3dpp.Windowed = FALSE;
m_d3dpp.FullScreen_RefreshRateInHz = D3DPRESENT_RATE_DEFAULT;
m_d3dpp.FullScreen_PresentationInterval = D3DPRESENT_INTERVAL_ONE;
}
m_iWndWidth = m_d3dpp.BackBufferWidth;
m_iWndHeight = m_d3dpp.BackBufferHeight;
if(FAILED(m_pD3D->CreateDevice(dcp.AdapterOrdinal, dcp.DeviceType, dcp.hFocusWindow,
dcp.BehaviorFlags, &m_d3dpp, &m_pD3DDevice)))
return FALSE;
return TRUE;
}
А само приложение очень простое - это кубик с наклейнными на грани фотками... который может вращаться сжиматься и тд...
Если нужен весь код могу прислать...просто он очень длинный и сдесь его постить бессмысленно.
Спасибо, что дочитали доконца... ))))
Я вот на вашем форуме недавно и решил поинтересоваться...
может кто сталкивлся с такой вот проблемой:
1) Имеется приложение написанное на VC++ .NET
2) Vsiual Studio 2002
3) используется DirectX 8.0
-----------------------------------
Проблема:
Все компилится, линкуется и даже раньше запускалось... но вот обновил DirectX до последней версии и при запуске получаю ошибку
No Compatable D3D device found!
Однако на другой машине где стоит тоже последний DirectX все работает.
????? где собака зарыта ?
Я и винду сносил заново ставил... че я только не делал и видюхи разные пробовал ...
Вот кусок кода отвечающего за всю эту батву.
CODE
BOOL CMyApplication::InitializeD3D(D3DDEVICE_CREATION_PARAMETERS dcp, BOOL bWindowed, int iWidth, int iHeight)
{
D3DDISPLAYMODE d3ddm;
m_bWindowed = bWindowed;
m_d3ddcp.hFocusWindow = dcp.hFocusWindow;
m_d3ddcp.AdapterOrdinal = dcp.AdapterOrdinal;
m_d3ddcp.DeviceType = dcp.DeviceType;
m_d3ddcp.BehaviorFlags = dcp.BehaviorFlags;
m_pD3D = Direct3DCreate8(D3D_SDK_VERSION);
if(m_pD3D == NULL)
return FALSE;
if(FAILED(m_pD3D->GetAdapterDisplayMode(D3DADAPTER_DEFAULT, &d3ddm)))
return FALSE;
m_d3dpp.BackBufferCount = 1;
m_d3dpp.SwapEffect = D3DSWAPEFFECT_DISCARD;
m_d3dpp.MultiSampleType = D3DMULTISAMPLE_NONE;
m_d3dpp.EnableAutoDepthStencil = TRUE;
m_d3dpp.AutoDepthStencilFormat = D3DFMT_D16;
if(m_bWindowed)
{
m_d3dpp.BackBufferWidth = iWidth;
m_d3dpp.BackBufferHeight = iHeight;
m_d3dpp.BackBufferFormat = d3ddm.Format;
m_d3dpp.Windowed = TRUE;
}
else
{
m_d3dpp.BackBufferWidth = d3ddm.Width;
m_d3dpp.BackBufferHeight = d3ddm.Height;
m_d3dpp.BackBufferFormat = d3ddm.Format;
m_d3dpp.Windowed = FALSE;
m_d3dpp.FullScreen_RefreshRateInHz = D3DPRESENT_RATE_DEFAULT;
m_d3dpp.FullScreen_PresentationInterval = D3DPRESENT_INTERVAL_ONE;
}
m_iWndWidth = m_d3dpp.BackBufferWidth;
m_iWndHeight = m_d3dpp.BackBufferHeight;
if(FAILED(m_pD3D->CreateDevice(dcp.AdapterOrdinal, dcp.DeviceType, dcp.hFocusWindow,
dcp.BehaviorFlags, &m_d3dpp, &m_pD3DDevice)))
return FALSE;
return TRUE;
}
А само приложение очень простое - это кубик с наклейнными на грани фотками... который может вращаться сжиматься и тд...
Если нужен весь код могу прислать...просто он очень длинный и сдесь его постить бессмысленно.
Спасибо, что дочитали доконца... ))))

DELETED
Акула пера
6/22/2006, 7:09:04 PM
a)
Задекларируйте локальную переменную HRESULT hr = S_OK;
Измените все if(FAILED( на if(FAILED(hr=;
Измените тип возвращаемого значения с BOOL на HRESULT;
Возвращайте всегда hr;
б) А теперь запустите всю эту байду, запостите сюда параметры функции на входе, полученный код возврата и с какого этапа.
И вам тут же помогут. :))
Задекларируйте локальную переменную HRESULT hr = S_OK;
Измените все if(FAILED( на if(FAILED(hr=;
Измените тип возвращаемого значения с BOOL на HRESULT;
Возвращайте всегда hr;
б) А теперь запустите всю эту байду, запостите сюда параметры функции на входе, полученный код возврата и с какого этапа.
И вам тут же помогут. :))

Unknown_Identifier
Мастер
6/30/2006, 8:46:19 PM
(QqRuZa @ 22.06.2006 - время: 01:14) Я вот на вашем форуме недавно и решил поинтересоваться...
может кто сталкивлся с такой вот проблемой:
А с какими конкретно параметрами создаешь девайс?
На втором компе версия DX строго такая же?
Когда обновлял DX у себя, возможно переключил его в debug mode?
Кстати если не переключил - переключи и поставь режим вывода в лог варнингов и ошибок - узнаешь о программе много интересного :)
может кто сталкивлся с такой вот проблемой:
А с какими конкретно параметрами создаешь девайс?
На втором компе версия DX строго такая же?
Когда обновлял DX у себя, возможно переключил его в debug mode?
Кстати если не переключил - переключи и поставь режим вывода в лог варнингов и ошибок - узнаешь о программе много интересного :)