/* IDirect3DTexture9 IUnknown parts follow: */ static HRESULT WINAPI IDirect3DTexture9Impl_QueryInterface(LPDIRECT3DTEXTURE9 iface, REFIID riid, LPVOID* ppobj) { IDirect3DTexture9Impl *This = (IDirect3DTexture9Impl *)iface; if (IsEqualGUID(riid, &IID_IUnknown) || IsEqualGUID(riid, &IID_IDirect3DResource9) || IsEqualGUID(riid, &IID_IDirect3DBaseTexture9) || IsEqualGUID(riid, &IID_IDirect3DTexture9)) { IDirect3DTexture9_AddRef(iface); *ppobj = This; return S_OK; } WARN("(%p)->(%s,%p) not found\n", This, debugstr_guid(riid), ppobj); *ppobj = NULL; return E_NOINTERFACE; }
static HRESULT WINAPI d3d9_texture_2d_QueryInterface(IDirect3DTexture9 *iface, REFIID riid, void **out) { TRACE("iface %p, riid %s, out %p.\n", iface, debugstr_guid(riid), out); if (IsEqualGUID(riid, &IID_IDirect3DTexture9) || IsEqualGUID(riid, &IID_IDirect3DBaseTexture9) || IsEqualGUID(riid, &IID_IDirect3DResource9) || IsEqualGUID(riid, &IID_IUnknown)) { IDirect3DTexture9_AddRef(iface); *out = iface; return S_OK; } WARN("%s not implemented, returning E_NOINTERFACE.\n", debugstr_guid(riid)); *out = NULL; return E_NOINTERFACE; }
static HRESULT WINAPI ID3DXSpriteImpl_Draw(ID3DXSprite *iface, IDirect3DTexture9 *texture, const RECT *rect, const D3DXVECTOR3 *center, const D3DXVECTOR3 *position, D3DCOLOR color) { ID3DXSpriteImpl *This = impl_from_ID3DXSprite(iface); D3DSURFACE_DESC texdesc; TRACE("iface %p, texture %p, rect %s, center %p, position %p, color 0x%08x.\n", iface, texture, wine_dbgstr_rect(rect), center, position, color); if(texture==NULL) return D3DERR_INVALIDCALL; if(!This->ready) return D3DERR_INVALIDCALL; if(This->allocated_sprites==0) { This->sprites=HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, 32*sizeof(SPRITE)); This->allocated_sprites=32; } else if(This->allocated_sprites<=This->sprite_count) { This->allocated_sprites=This->allocated_sprites*3/2; This->sprites=HeapReAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, This->sprites, This->allocated_sprites*sizeof(SPRITE)); } This->sprites[This->sprite_count].texture=texture; if(!(This->flags & D3DXSPRITE_DO_NOT_ADDREF_TEXTURE)) IDirect3DTexture9_AddRef(texture); /* Reuse the texture desc if possible */ if(This->sprite_count) { if(This->sprites[This->sprite_count-1].texture!=texture) { IDirect3DTexture9_GetLevelDesc(texture, 0, &texdesc); } else { texdesc.Width=This->sprites[This->sprite_count-1].texw; texdesc.Height=This->sprites[This->sprite_count-1].texh; } } else IDirect3DTexture9_GetLevelDesc(texture, 0, &texdesc); This->sprites[This->sprite_count].texw=texdesc.Width; This->sprites[This->sprite_count].texh=texdesc.Height; if(rect==NULL) { This->sprites[This->sprite_count].rect.left=0; This->sprites[This->sprite_count].rect.top=0; This->sprites[This->sprite_count].rect.right=texdesc.Width; This->sprites[This->sprite_count].rect.bottom=texdesc.Height; } else This->sprites[This->sprite_count].rect=*rect; if(center==NULL) { This->sprites[This->sprite_count].center.x=0.0f; This->sprites[This->sprite_count].center.y=0.0f; This->sprites[This->sprite_count].center.z=0.0f; } else This->sprites[This->sprite_count].center=*center; if(position==NULL) { This->sprites[This->sprite_count].pos.x=0.0f; This->sprites[This->sprite_count].pos.y=0.0f; This->sprites[This->sprite_count].pos.z=0.0f; } else This->sprites[This->sprite_count].pos=*position; This->sprites[This->sprite_count].color=color; This->sprites[This->sprite_count].transform=This->transform; This->sprite_count++; return D3D_OK; }