Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

MFC и DirectX

249
09 августа 2005 года
DissDoc
639 / / 01.10.2004
Проблема! Функция инициализации Direct3D устройства выглядет так (Она запихана прямо в событие WM_CREATE)
Код:
int CMapMakerView::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
  /*if (CScrollView::OnCreate(lpCreateStruct) == -1)
    return -1;*/
  CWnd cwnd;

    if( NULL == ( pDirect3D = Direct3DCreate9( D3D_SDK_VERSION ) ) )
        return E_FAIL;

    D3DDISPLAYMODE Display;
    if( FAILED( pDirect3D->GetAdapterDisplayMode( D3DADAPTER_DEFAULT, &Display ) ) )
        return E_FAIL;

    D3DPRESENT_PARAMETERS Direct3DParametr;
    ZeroMemory( &Direct3DParametr, sizeof(Direct3DParametr) );
    Direct3DParametr.Windowed = TRUE;
    Direct3DParametr.SwapEffect = D3DSWAPEFFECT_DISCARD;
    Direct3DParametr.BackBufferFormat = Display.Format;

    if( FAILED( pDirect3D -> CreateDevice( D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, cwnd, // OШИБКА
                                      D3DCREATE_HARDWARE_VERTEXPROCESSING,
                                      &Direct3DParametr, &pDirect3DDevice ) ) )
    {
        return E_FAIL;
    }

    return S_OK;

//  return 0;
}

Переменная cwnd - естественнно неправильная! Как сделать правильно? Я работаю с MFC
12K
10 августа 2005 года
Automat
7 / / 10.08.2005
Используй:
HWND hwnd=AfxGetMainWnd()->m_hWnd;
и вся проблема решена!
249
10 августа 2005 года
DissDoc
639 / / 01.10.2004
Цитата:
Originally posted by Automat
Используй:
HWND hwnd=AfxGetMainWnd()->m_hWnd;
и вся проблема решена!



Неа =((( Не работает... Выдает вот что
Unhandled exception at 0x00414d78 in MapMaker.exe: 0xC0000005: Access violation reading location 0x00000020.

Я пробовал даже this->m_hWnd; - тоже такой же эффект (токо он еще ругается на object.cpp по-моему)

12K
11 августа 2005 года
Automat
7 / / 10.08.2005
Не знаю ищи ошибки в других местах.
Я специально сам написал, то чем ты занимаешься и у меня всё работает.

int CChildView::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if( NULL == ( pDirect3D = Direct3DCreate9( D3D_SDK_VERSION ) ) )
return E_FAIL;

D3DDISPLAYMODE Display;
if( FAILED( pDirect3D->GetAdapterDisplayMode( D3DADAPTER_DEFAULT, &Display ) ) )
return E_FAIL;

D3DPRESENT_PARAMETERS Direct3DParametr;
ZeroMemory( &Direct3DParametr, sizeof(Direct3DParametr) );
Direct3DParametr.Windowed = TRUE;
Direct3DParametr.SwapEffect = D3DSWAPEFFECT_DISCARD;
Direct3DParametr.BackBufferFormat = Display.Format;
Direct3DParametr.AutoDepthStencilFormat=D3DFMT_D16; // Лично у меня отсутствие строк
Direct3DParametr.EnableAutoDepthStencil=TRUE;// Настройки буфера трафарета не вызывает ошибку

HWND hwnd;
hwnd=AfxGetMainWnd()->m_hWnd;
if( FAILED( pDirect3D -> CreateDevice( D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL,hwnd,
D3DCREATE_SOFTWARE_VERTEXPROCESSING,// Видеокарта встроеная не держит DirectX9
&Direct3DParametr, &pDirect3DDevice ) ) )
{
return E_FAIL;
}
return S_OK;
}
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог