サーフェスと X、Y 位置をレンダリングするメソッドを使用してサーフェスをレンダリングしようとしています。問題は、サーフェスが 1 つの小さなピクセルだけ画面の外にある場合、まったくレンダリングされないことです。
何故ですか?DirectX クリッピングを検索しようとしていますが、何も見つかりません。
void Draw(LPDIRECT3DSURFACE9 src, int x, int y)
{
D3DSURFACE_DESC desc;
src->GetDesc(&desc);
D3DVIEWPORT9 viewport;
Device->GetViewport(&viewport);
int vX = viewport.X;
int vY = viewport.Y;
int vWidth = viewport.X + viewport.Width;
int vHeight = viewport.Y + viewport.Height;
RECT source;
source.left = max(x, vX);
source.right = min(source.left + desc.Width, vWidth);
source.top = max(y, vY);
source.bottom = min(source.top + desc.Height, vHeight);
RECT destination;
destination.left = max(x, vX);
destination.right = min(destination.left + desc.Width + x, vWidth);
destination.top = max(y, vY);
destination.bottom = min(destination.top + desc.Height + y, vHeight);
Device->StretchRect(src, &source, BackBuffer, &destination, D3DTEXF_POINT);
};
...そして X = 100、Y = 100 は機能しませんが、-100 は機能しますが、正しく引き伸ばされません。
望ましい効果のイメージ例:
また、*pSourceRect と *pDestRect をサーフェスをクリップするものに設定しようとしましたが、うまくいきませんでした。
DirectX9を使用しています。