По просьбе, да и многим пригодится для практики и повышения кругозора......
Использовать будем функцию D3DXCreateTextureFromFileInMemoryEx, которая загружает текстуру из файла, который уже загружен в память(представлен в виде массива байт)...
Эта же система использовалась при построении "меню со спрайтами"....
В итоге мы отрисуем вот такую текстуру:
Байт код этой текстурки я предаставлю в конце под тегом CODE или прикреплю txt....
Работать будем в Reset[16] и EndScene[42]
Reset:
КОД: ВЫДЕЛИТЬ ВСЕ
typedef HRESULT (WINAPI* oReset) (LPDIRECT3DDEVICE9 pDevice, D3DPRESENT_PARAMETERS* pPresentationParameters);
oReset pReset;
HRESULT WINAPI myReset ( LPDIRECT3DDEVICE9 pDevice, D3DPRESENT_PARAMETERS* pPresentationParameters)
{
HRESULT hReset = pReset(pDevice, pPresentationParameters);
return hReset;
}
Хук
КОД: ВЫДЕЛИТЬ ВСЕ
pReset=(oReset)DetourCreate((PBYTE)vtbl[16],(PBYTE)myReset,5);
EndScene думаю есть у всех...
Теперь пишем код(точнее копируем):
Определяем:
КОД: ВЫДЕЛИТЬ ВСЕ
D3DXVECTOR3 pFile;
LPD3DXSPRITE File_tex;
LPDIRECT3DTEXTURE9 txFile;
Для удобности определяем переменные жля размеров и положения:
КОД: ВЫДЕЛИТЬ ВСЕ
int WidthH = 200;//ширина
int HeightH =370;//высота
int pX =50;
int pY=10 ;
WidthH и HeightH - это реальное разрешение нашей текстуры(у меня 200х370)
Переходим в EndScene:
Задаем положение
КОД: ВЫДЕЛИТЬ ВСЕ
pFile.x=pX;
pFile.y=pY;
Указываем
КОД: ВЫДЕЛИТЬ ВСЕ
if(File_tex == NULL)D3DXCreateSprite(pDevice, &File_tex);
Загружаем текстуру
КОД: ВЫДЕЛИТЬ ВСЕ
if(txFile == NULL)D3DXCreateTextureFromFileInMemoryEx(pDevice
,&byte_File,sizeof(byte_File),WidthH,HeightH,D3DX_DEFAULT,0,D3DFMT_UNKNOWN
,D3DPOOL_MANAGED,D3DX_DEFAULT,D3DX_DEFAULT,0,NULL,NULL,&txFile);
Отрисовываем
КОД: ВЫДЕЛИТЬ ВСЕ
File_tex->Begin(D3DXSPRITE_ALPHABLEND);
File_tex->Draw(txFile,0,0,&pFile,0xFFFFFFFF);
File_tex->End();
Переходим в myReset:
Пишем(копируем)
КОД: ВЫДЕЛИТЬ ВСЕ
File_tex->OnLostDevice();
File_tex->OnResetDevice();
таким вот образом:
КОД: ВЫДЕЛИТЬ ВСЕ
HRESULT WINAPI myReset ( LPDIRECT3DDEVICE9 pDevice, D3DPRESENT_PARAMETERS* pPresentationParameters)
{
File_tex->OnLostDevice();
HRESULT hReset = pReset(pDevice, pPresentationParameters);
File_tex->OnResetDevice();
return hReset;
}
Осталось определить массив байтов нашего изображение:
КОД: ВЫДЕЛИТЬ ВСЕ
BYTE byte_File[] ={ 0x89, 0x50,....................... 0x4E, 0x82};
На этом все...
как и говорил предаставляю массив моего изображения в виде txt, так как массив размером в 40686 байт сложно скопировать из под тега CODE...