Вопрос В чем ошибка ? Почему нарушение доступа для чтение в D3D9_DEVICE

Пользователь
Пользователь
Статус
Оффлайн
Регистрация
22 Мар 2019
Сообщения
226
Реакции
36
C++:
Expand Collapse Copy
void render()
{
    D3D9_DEVICE->Clear(0, nullptr, D3DCLEAR_TARGET, D3DCOLOR_ARGB(0, 0, 0, 0), 1, 0);
    D3D9_DEVICE->BeginScene();

    POINT cursor;
    GetCursorPos(&cursor);
    Line(0, 0, cursor.x, cursor.y, 3, true, D3DCOLOR_ARGB(255, 255, 0, 255));

    D3D9_DEVICE->EndScene();
    D3D9_DEVICE->Present(nullptr, nullptr, nullptr, nullptr);
}
Сама ошибка:

Вызвано исключение: нарушение доступа для чтения.
**D3D9_DEVICE** было nullptr.

Вызвано необработанное исключение: нарушение доступа для чтения.
**D3D9_DEVICE** было nullptr.
 
потому что указатель пустой
 
Прежде чем использовать DirectX устройство его нужно создать, убедись что вызываешь функци инициализации, и что там верные параметры и устройство действительно создается.
 
Прежде чем использовать DirectX устройство его нужно создать, убедись что вызываешь функци инициализации, и что там верные параметры и устройство действительно создается.
C++:
Expand Collapse Copy
void initD3D(HWND hWnd)
{
    LPDIRECT3D9 d3d = Direct3DCreate9(D3D_SDK_VERSION);

    //if (NULL == (d3d = Direct3DCreate9(D3D_SDK_VERSION)))
    //{
    //    return exit(1);
    //}

    D3DPRESENT_PARAMETERS d3dpp;

    ZeroMemory(&d3dpp, sizeof(D3DPRESENT_PARAMETERS));
    d3dpp.Windowed = TRUE;
    d3dpp.hDeviceWindow = hWnd;
    d3dpp.BackBufferFormat = D3DFMT_A8R8G8B8;
    d3dpp.BackBufferWidth = SCREEN_WIDTH;
    d3dpp.BackBufferHeight = SCREEN_HEIGHT;
    d3dpp.EnableAutoDepthStencil = TRUE;
    d3dpp.AutoDepthStencilFormat = D3DFMT_D16;


    d3d->CreateDevice(D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, nullptr, D3DCREATE_HARDWARE_VERTEXPROCESSING, &d3dpp, &D3D9_DEVICE);
    D3DXCreateFont(D3D9_DEVICE, 16, 0, FW_NORMAL, 1, 0, DEFAULT_CHARSET, OUT_DEFAULT_PRECIS, DEFAULT_QUALITY, DEFAULT_PITCH | FF_DONTCARE, "Arial", &TEXT_FONT);
}
 
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
C++:
Expand Collapse Copy
void initD3D(HWND hWnd)
{
    LPDIRECT3D9 d3d = Direct3DCreate9(D3D_SDK_VERSION);

    //if (NULL == (d3d = Direct3DCreate9(D3D_SDK_VERSION)))
    //{
    //    return exit(1);
    //}

    D3DPRESENT_PARAMETERS d3dpp;

    ZeroMemory(&d3dpp, sizeof(D3DPRESENT_PARAMETERS));
    d3dpp.Windowed = TRUE;
    d3dpp.hDeviceWindow = hWnd;
    d3dpp.BackBufferFormat = D3DFMT_A8R8G8B8;
    d3dpp.BackBufferWidth = SCREEN_WIDTH;
    d3dpp.BackBufferHeight = SCREEN_HEIGHT;
    d3dpp.EnableAutoDepthStencil = TRUE;
    d3dpp.AutoDepthStencilFormat = D3DFMT_D16;


    d3d->CreateDevice(D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, nullptr, D3DCREATE_HARDWARE_VERTEXPROCESSING, &d3dpp, &D3D9_DEVICE);
    D3DXCreateFont(D3D9_DEVICE, 16, 0, FW_NORMAL, 1, 0, DEFAULT_CHARSET, OUT_DEFAULT_PRECIS, DEFAULT_QUALITY, DEFAULT_PITCH | FF_DONTCARE, "Arial", &TEXT_FONT);
}
Нужно еще хукнуть функцию, Present или EndScene
Там где будешь рисовать.
 
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Что пытаешься сделать?
Рисовать в своем приложении или в чужом?
 
Нужно еще хукнуть функцию, Present или EndScene
Если у него крашит в функции отрисовки логично что он уже это сделал.
Тем не менее в инициализации тс не проверят абсолютно ничего, создалось ли d3d9, создалось ли устройство, создался ли шрифт.
 
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Назад
Сверху Снизу