размеры текстуры DirectX - PullRequest
       33

размеры текстуры DirectX

4 голосов
/ 20 января 2012

, поэтому я обнаружил, что моя видеокарта автоматически изменяет размеры текстур до степеней 2, что обычно не является проблемой, но мне нужно визуализировать только часть моей текстуры и при этом должны иметь размеры, которые были изменен до ...

например: Я загружаю изображение размером 370x300 пикселей в свою текстуру и пытаюсь нарисовать его с помощью исходного прямоугольника

RECT test;
    test.left = 0;
    test.top = 0;
    test.right = 370;
    test.bottom = 300;

    lpSpriteHandler->Draw(
        lpTexture,
        &test,          // srcRect
        NULL,           // center
        NULL,            // position
        D3DCOLOR_XRGB(255,255,255)
        );

но так как текстура была автоматически изменена (в данном случае) до 512x512, я вижу только часть моей исходной текстуры.

Вопрос в том, Есть ли функция или что-то, что я могу вызвать, чтобы найти размеры моей текстуры? (Я пробовал гуглить это, но всегда получаю какую-то странную чушь об объектах и ​​HSL или что-то в этом роде)

1 Ответ

3 голосов
/ 21 января 2012

Вы можете получить информацию о файле с помощью этого вызова:

D3DXIMAGE_INFO info;
D3DXGetImageInfoFromFile(file_name, &info);

Хотя, зная исходный размер текстуры, вы все равно получите ее размер при загрузке.Это, очевидно, повлияет на качество текстуры.Изменение размера текстуры не имеет большого значения, когда вы применяете его к сетке (оно будет изменено в любом случае), но для рисования спрайтов это может быть проблемой.Чтобы обойти это, я мог бы предложить создать поверхность, загрузить ее с помощью D3DXLoadSurfaceFromFile и затем скопировать ее в текстуру размера «pow2».

И оффтоп: вы определенно уверены в возможностях своих карт?Возможно, ваша карта do поддерживает произвольные размеры текстур, но вы используете D3DXCreateTextureFromFile(), которая по умолчанию принудительно устанавливает размеры pow2.Чтобы избежать этого, попробуйте использовать расширенную версию этой процедуры:

D3DTexture* texture;
D3DXCreateTextureFromFileEx(
    device, file_name, D3DX_DEFAULT_NONPOW2, D3DX_DEFAULT_NONPOW2, D3DX_DEFAULT, 0,
    D3DFMT_UNKNOWN, D3DPOOL_MANAGED, D3DX_DEFAULT, D3DX_DEFAULT, 0, NULL, NULL,
    &texture);

Если ваше оборудование поддерживает текстуры не-pow2, ваш файл будет загружен как есть.Если аппаратное обеспечение не может справиться с этим, метод потерпит неудачу.

...