@vlsnake

Как вывести png фоновую картинку в DirectX 9 (10, 11, 12)?

Собсно нужно в уже имеющийся проект добавить фон в виде картинки (размеры берутся из png).
  • Вопрос задан
  • 306 просмотров
Решения вопроса 1
@vlsnake Автор вопроса
Проблема в итоговом коде
загрузить изображение из формата в битовую матрицу, подготовить описание текстуры, создать контекст текстуры используя битовую матрицу и описание

- в целом, разобрался сам, но высокоуровнево:

1. Шаг сама текстура - тут очень неприятный нюанс вышел с D3DXCreateTextureFromFile - нужно брать D3DXCreateTextureFromFileEx:
extern "C" bool LoadTextureFromFile(const char* filename, void** out_texture, int* out_width, int* out_height)
{
    // Load texture from disk
    PDIRECT3DTEXTURE9 texture;
    D3DCOLOR color = 0xFFFFFFFF;

    HRESULT hr = D3DXCreateTextureFromFileExA(
    g_pd3dDevice, filename, D3DX_DEFAULT_NONPOW2, D3DX_DEFAULT_NONPOW2, D3DX_DEFAULT, 0,
    D3DFMT_UNKNOWN, D3DPOOL_MANAGED, D3DX_DEFAULT, D3DX_DEFAULT, color, NULL, NULL,
    &texture);

    //HRESULT hr = D3DXCreateTextureFromFileA( &texture);
    if (hr != S_OK)
        return false;

    // Retrieve description of the texture surface so we can access its size
    D3DSURFACE_DESC my_image_desc;
    texture->GetLevelDesc(0, &my_image_desc);
    *out_texture = (void *)texture;
    *out_width = (int)my_image_desc.Width;
    *out_height = (int)my_image_desc.Height;
    return true;
}


2. Вывод взял кусками из imgui_impl_dx9.cpp

Т.о. как загрузить данные - stbi_load() - не проблема - а вот как это все запихнуть в DIRECT3DTEXTURE9 не высокоуровнево, чтобы модифицировать можно было - тут еще предстоит подумать.

С 11 версией DirectX тоже разобрался, а вот 12й малех проблемы
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы