Вы можете получить информацию о файле с помощью этого вызова:
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, ваш файл будет загружен как есть.Если аппаратное обеспечение не может справиться с этим, метод потерпит неудачу.