1
0
mirror of https://github.com/DxWnd/DxWnd.reloaded synced 2024-12-30 09:25:35 +01:00
DxWnd.reloaded/dll/hd3d9.cpp
gho tik 70a45d06e0 v2_03_05_src
Former-commit-id: a3ef0275db792a52ce0e35ecd64a4af50eebff73
2017-03-06 11:40:09 -05:00

69 lines
2.1 KiB
C++

#include <D3D9.h>
#include "dxwnd.h"
#include "dxwcore.hpp"
#include "dxhook.h"
#include "dxhelper.h"
#include "syslibs.h"
#include "stdio.h"
extern void TextureHandling(LPDIRECTDRAWSURFACE);
typedef HRESULT (WINAPI *LockRect_Type)(void *, UINT, D3DLOCKED_RECT *, CONST RECT *, DWORD);
typedef HRESULT (WINAPI *UnlockRect_Type)(void *, UINT);
extern LockRect_Type pLockRect;
extern UnlockRect_Type pUnlockRect;
extern void D3DTextureDump(D3DSURFACE_DESC, D3DLOCKED_RECT);
extern void D3DTextureHighlight(D3DSURFACE_DESC, D3DLOCKED_RECT);
extern void D3DTextureHack(D3DSURFACE_DESC, D3DLOCKED_RECT);
extern void D3DTextureTransp(D3DSURFACE_DESC, D3DLOCKED_RECT);
extern char *ExplainD3DSurfaceFormat(DWORD);
void D3D9TextureHandling(void *arg, int Level)
{
HRESULT res;
LPDIRECT3DTEXTURE9 lpd3dtex = (LPDIRECT3DTEXTURE9)arg;
IDirect3DSurface9 *pSurfaceLevel;
D3DSURFACE_DESC Desc;
D3DLOCKED_RECT LockedRect;
if(res=lpd3dtex->GetSurfaceLevel(Level, &pSurfaceLevel)){
OutTraceE("Texture::GetSurfaceLevel ERROR: res=%d(%s)\n", res, ExplainDDError(res));
return;
}
if(res=lpd3dtex->GetLevelDesc(Level, &Desc)){
OutTraceE("Texture::GetLevelDesc ERROR: res=%d(%s)\n", res, ExplainDDError(res));
return;
}
pSurfaceLevel->Release();
switch(Desc.Type){
case D3DRTYPE_SURFACE:
case D3DRTYPE_TEXTURE:
break;
default:
return;
break;
}
if(Desc.Usage == D3DUSAGE_RENDERTARGET)return;
//pSurfaceLevel->GetRenderTargetData(&pRenderTarget, &pDestSurface);
res=(*pLockRect)(lpd3dtex, Level, &LockedRect, NULL, D3DLOCK_READONLY);
OutTrace("D3D9TextureHandling: lpd3dtex=%x level=%d format=0x%x(%s) size=(%dx%d) bits=%x pitch=%d\n",
lpd3dtex, Level, Desc.Format, ExplainD3DSurfaceFormat(Desc.Format),
Desc.Width, Desc.Height, LockedRect.pBits, LockedRect.Pitch);
switch(dxw.dwFlags5 & TEXTUREMASK){
case TEXTUREHIGHLIGHT:
D3DTextureHighlight(Desc, LockedRect);
break;
case TEXTUREDUMP:
D3DTextureDump(Desc, LockedRect);
break;
case TEXTUREHACK:
D3DTextureHack(Desc, LockedRect);
break;
case TEXTURETRANSP:
D3DTextureTransp(Desc, LockedRect);
break;
}
res=(*pUnlockRect)(lpd3dtex, Level);
}