Я хочу создать систему графического интерфейса, использующую Direct3D (не Direct2D) для моего игрового движка C ++. Я создал D3DXSprite, назначил D3DXTexture, нарисовав его другим цветом, чем фон ... но он не отображается. Что я тут не так делаю?
#include <d3dx9.h>
_Obst_PanelDx9::_Obst_PanelDx9( _Obst_Gui* owner, _Obst_Vector2& size ) : _Obst_Panel(owner)
{
m_position = _Obst_Vector2( 0, 0 );
m_size = size;
m_color = _Obst_Vector4( 1, 1, 1, 1 );
D3DXCreateSprite( ((_Obst_Gui*) owner)->getDisplayContext()->getD3Ddevice(), &m_sprite );
D3DXCreateTexture( ((_Obst_Gui*) owner)->getDisplayContext()->getD3Ddevice(), m_size.x, m_size.y, 0, D3DUSAGE_DYNAMIC, D3DFMT_A8R8G8B8, D3DPOOL_MANAGED, &m_texture );
}
_Obst_PanelDx9::~_Obst_PanelDx9()
{
if ( m_sprite ) m_sprite->Release();
if ( m_texture ) m_texture->Release();
}
void _Obst_PanelDx9::render()
{
m_sprite->Begin( D3DXSPRITE_ALPHABLEND );
//m_sprite->Draw( m_texture, 0, 0, &D3DXVECTOR3(m_position.x, m_position.y, 0), D3DCOLOR_ARGB((int) (m_color.w * 255), (int) (m_color.x * 255), (int) (m_color.y * 255), (int) (m_color.z * 255)));
// In order: ID3DXTexture* t, RECT* srcRect, D3DXVECTOR3* center, D3DXVECTOR3* position, D3DCOLOR color
m_sprite->Draw( m_texture, 0, 0, &D3DXVECTOR3(0, 0, 0), 0xFFFFFFFF);
m_sprite->End();
}
На следующем изображении , если я не ошибаюсь, в левом верхнем углу окна должен быть белый квадрат.
Я пытался настроить альфа-значение, цвета, настроить D3DUSAGE, D3DPOOL и D3DFORMAT, установить матрицу преобразования спрайта, установить центральную точку и параметр srcRect ...
РЕДАКТИРОВАТЬ: забыл упомянуть, моя цель не состоит в том, чтобы отображать изображение, спрайт похож на виджет панели (цветной прямоугольник). Просто ID3DXTexture содержит значения размера.