af062818b47340eef15700d2f0211576ba3506eevboxsync/*
af062818b47340eef15700d2f0211576ba3506eevboxsync * IDirect3DCubeTexture8 implementation
af062818b47340eef15700d2f0211576ba3506eevboxsync *
af062818b47340eef15700d2f0211576ba3506eevboxsync * Copyright 2005 Oliver Stieber
af062818b47340eef15700d2f0211576ba3506eevboxsync *
af062818b47340eef15700d2f0211576ba3506eevboxsync * This library is free software; you can redistribute it and/or
af062818b47340eef15700d2f0211576ba3506eevboxsync * modify it under the terms of the GNU Lesser General Public
af062818b47340eef15700d2f0211576ba3506eevboxsync * License as published by the Free Software Foundation; either
af062818b47340eef15700d2f0211576ba3506eevboxsync * version 2.1 of the License, or (at your option) any later version.
af062818b47340eef15700d2f0211576ba3506eevboxsync *
af062818b47340eef15700d2f0211576ba3506eevboxsync * This library is distributed in the hope that it will be useful,
af062818b47340eef15700d2f0211576ba3506eevboxsync * but WITHOUT ANY WARRANTY; without even the implied warranty of
af062818b47340eef15700d2f0211576ba3506eevboxsync * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
af062818b47340eef15700d2f0211576ba3506eevboxsync * Lesser General Public License for more details.
af062818b47340eef15700d2f0211576ba3506eevboxsync *
af062818b47340eef15700d2f0211576ba3506eevboxsync * You should have received a copy of the GNU Lesser General Public
af062818b47340eef15700d2f0211576ba3506eevboxsync * License along with this library; if not, write to the Free Software
af062818b47340eef15700d2f0211576ba3506eevboxsync * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
af062818b47340eef15700d2f0211576ba3506eevboxsync */
af062818b47340eef15700d2f0211576ba3506eevboxsync
b955672b950093ff7416d1269dd4d3b69983bd8fvboxsync/*
4b9d6701570cb98fd36e209314239d104ec584d3vboxsync * Oracle LGPL Disclaimer: For the avoidance of doubt, except that if any license choice
4b9d6701570cb98fd36e209314239d104ec584d3vboxsync * other than GPL or LGPL is available it will apply instead, Oracle elects to use only
b955672b950093ff7416d1269dd4d3b69983bd8fvboxsync * the Lesser General Public License version 2.1 (LGPLv2) at this time for any software where
b955672b950093ff7416d1269dd4d3b69983bd8fvboxsync * a choice of LGPL license versions is made available with the language indicating
b955672b950093ff7416d1269dd4d3b69983bd8fvboxsync * that LGPLv2 or any later version may be used, or where a choice of which version
b955672b950093ff7416d1269dd4d3b69983bd8fvboxsync * of the LGPL is applied is otherwise unspecified.
b955672b950093ff7416d1269dd4d3b69983bd8fvboxsync */
b955672b950093ff7416d1269dd4d3b69983bd8fvboxsync
af062818b47340eef15700d2f0211576ba3506eevboxsync#include "config.h"
af062818b47340eef15700d2f0211576ba3506eevboxsync#include "d3d8_private.h"
af062818b47340eef15700d2f0211576ba3506eevboxsync
af062818b47340eef15700d2f0211576ba3506eevboxsyncWINE_DEFAULT_DEBUG_CHANNEL(d3d8);
af062818b47340eef15700d2f0211576ba3506eevboxsync
af062818b47340eef15700d2f0211576ba3506eevboxsync/* IDirect3DCubeTexture8 IUnknown parts follow: */
af062818b47340eef15700d2f0211576ba3506eevboxsyncstatic HRESULT WINAPI IDirect3DCubeTexture8Impl_QueryInterface(LPDIRECT3DCUBETEXTURE8 iface, REFIID riid, LPVOID *ppobj) {
af062818b47340eef15700d2f0211576ba3506eevboxsync IDirect3DCubeTexture8Impl *This = (IDirect3DCubeTexture8Impl *)iface;
5112e32d7072e280613921c982a6672f2c859cf3vboxsync
5112e32d7072e280613921c982a6672f2c859cf3vboxsync TRACE("iface %p, riid %s, object %p.\n", iface, debugstr_guid(riid), ppobj);
5112e32d7072e280613921c982a6672f2c859cf3vboxsync
af062818b47340eef15700d2f0211576ba3506eevboxsync if (IsEqualGUID(riid, &IID_IUnknown)
af062818b47340eef15700d2f0211576ba3506eevboxsync || IsEqualGUID(riid, &IID_IDirect3DResource8)
af062818b47340eef15700d2f0211576ba3506eevboxsync || IsEqualGUID(riid, &IID_IDirect3DBaseTexture8)
af062818b47340eef15700d2f0211576ba3506eevboxsync || IsEqualGUID(riid, &IID_IDirect3DCubeTexture8)) {
af062818b47340eef15700d2f0211576ba3506eevboxsync IUnknown_AddRef(iface);
af062818b47340eef15700d2f0211576ba3506eevboxsync *ppobj = This;
af062818b47340eef15700d2f0211576ba3506eevboxsync return S_OK;
af062818b47340eef15700d2f0211576ba3506eevboxsync }
af062818b47340eef15700d2f0211576ba3506eevboxsync
af062818b47340eef15700d2f0211576ba3506eevboxsync WARN("(%p)->(%s,%p),not found\n", This, debugstr_guid(riid), ppobj);
af062818b47340eef15700d2f0211576ba3506eevboxsync *ppobj = NULL;
af062818b47340eef15700d2f0211576ba3506eevboxsync return E_NOINTERFACE;
af062818b47340eef15700d2f0211576ba3506eevboxsync}
af062818b47340eef15700d2f0211576ba3506eevboxsync
af062818b47340eef15700d2f0211576ba3506eevboxsyncstatic ULONG WINAPI IDirect3DCubeTexture8Impl_AddRef(LPDIRECT3DCUBETEXTURE8 iface) {
af062818b47340eef15700d2f0211576ba3506eevboxsync IDirect3DCubeTexture8Impl *This = (IDirect3DCubeTexture8Impl *)iface;
af062818b47340eef15700d2f0211576ba3506eevboxsync ULONG ref = InterlockedIncrement(&This->ref);
af062818b47340eef15700d2f0211576ba3506eevboxsync
5112e32d7072e280613921c982a6672f2c859cf3vboxsync TRACE("%p increasing refcount to %u.\n", iface, ref);
af062818b47340eef15700d2f0211576ba3506eevboxsync
a3133ef29cdf3656735d569fd64e54c9286effc0vboxsync if (ref == 1)
a3133ef29cdf3656735d569fd64e54c9286effc0vboxsync {
a3133ef29cdf3656735d569fd64e54c9286effc0vboxsync IUnknown_AddRef(This->parentDevice);
a3133ef29cdf3656735d569fd64e54c9286effc0vboxsync wined3d_mutex_lock();
a3133ef29cdf3656735d569fd64e54c9286effc0vboxsync IWineD3DCubeTexture_AddRef(This->wineD3DCubeTexture);
a3133ef29cdf3656735d569fd64e54c9286effc0vboxsync wined3d_mutex_unlock();
a3133ef29cdf3656735d569fd64e54c9286effc0vboxsync }
a3133ef29cdf3656735d569fd64e54c9286effc0vboxsync
af062818b47340eef15700d2f0211576ba3506eevboxsync return ref;
af062818b47340eef15700d2f0211576ba3506eevboxsync}
af062818b47340eef15700d2f0211576ba3506eevboxsync
af062818b47340eef15700d2f0211576ba3506eevboxsyncstatic ULONG WINAPI IDirect3DCubeTexture8Impl_Release(LPDIRECT3DCUBETEXTURE8 iface) {
af062818b47340eef15700d2f0211576ba3506eevboxsync IDirect3DCubeTexture8Impl *This = (IDirect3DCubeTexture8Impl *)iface;
af062818b47340eef15700d2f0211576ba3506eevboxsync ULONG ref = InterlockedDecrement(&This->ref);
af062818b47340eef15700d2f0211576ba3506eevboxsync
5112e32d7072e280613921c982a6672f2c859cf3vboxsync TRACE("%p decreasing refcount to %u.\n", iface, ref);
af062818b47340eef15700d2f0211576ba3506eevboxsync
af062818b47340eef15700d2f0211576ba3506eevboxsync if (ref == 0) {
5112e32d7072e280613921c982a6672f2c859cf3vboxsync IDirect3DDevice8 *parentDevice = This->parentDevice;
5112e32d7072e280613921c982a6672f2c859cf3vboxsync
af062818b47340eef15700d2f0211576ba3506eevboxsync TRACE("Releasing child %p\n", This->wineD3DCubeTexture);
a3133ef29cdf3656735d569fd64e54c9286effc0vboxsync
a3133ef29cdf3656735d569fd64e54c9286effc0vboxsync wined3d_mutex_lock();
a3133ef29cdf3656735d569fd64e54c9286effc0vboxsync IWineD3DCubeTexture_Release(This->wineD3DCubeTexture);
a3133ef29cdf3656735d569fd64e54c9286effc0vboxsync wined3d_mutex_unlock();
5112e32d7072e280613921c982a6672f2c859cf3vboxsync
5112e32d7072e280613921c982a6672f2c859cf3vboxsync /* Release the device last, as it may cause the device to be destroyed. */
5112e32d7072e280613921c982a6672f2c859cf3vboxsync IDirect3DDevice8_Release(parentDevice);
af062818b47340eef15700d2f0211576ba3506eevboxsync }
af062818b47340eef15700d2f0211576ba3506eevboxsync return ref;
af062818b47340eef15700d2f0211576ba3506eevboxsync}
af062818b47340eef15700d2f0211576ba3506eevboxsync
af062818b47340eef15700d2f0211576ba3506eevboxsync/* IDirect3DCubeTexture8 IDirect3DResource8 Interface follow: */
5112e32d7072e280613921c982a6672f2c859cf3vboxsyncstatic HRESULT WINAPI IDirect3DCubeTexture8Impl_GetDevice(IDirect3DCubeTexture8 *iface, IDirect3DDevice8 **device)
5112e32d7072e280613921c982a6672f2c859cf3vboxsync{
af062818b47340eef15700d2f0211576ba3506eevboxsync IDirect3DCubeTexture8Impl *This = (IDirect3DCubeTexture8Impl *)iface;
af062818b47340eef15700d2f0211576ba3506eevboxsync
5112e32d7072e280613921c982a6672f2c859cf3vboxsync TRACE("iface %p, device %p.\n", iface, device);
a3133ef29cdf3656735d569fd64e54c9286effc0vboxsync
5112e32d7072e280613921c982a6672f2c859cf3vboxsync *device = (IDirect3DDevice8 *)This->parentDevice;
5112e32d7072e280613921c982a6672f2c859cf3vboxsync IDirect3DDevice8_AddRef(*device);
5112e32d7072e280613921c982a6672f2c859cf3vboxsync
5112e32d7072e280613921c982a6672f2c859cf3vboxsync TRACE("Returning device %p.\n", *device);
5112e32d7072e280613921c982a6672f2c859cf3vboxsync
5112e32d7072e280613921c982a6672f2c859cf3vboxsync return D3D_OK;
af062818b47340eef15700d2f0211576ba3506eevboxsync}
af062818b47340eef15700d2f0211576ba3506eevboxsync
af062818b47340eef15700d2f0211576ba3506eevboxsyncstatic HRESULT WINAPI IDirect3DCubeTexture8Impl_SetPrivateData(LPDIRECT3DCUBETEXTURE8 iface, REFGUID refguid, CONST void* pData, DWORD SizeOfData, DWORD Flags) {
af062818b47340eef15700d2f0211576ba3506eevboxsync IDirect3DCubeTexture8Impl *This = (IDirect3DCubeTexture8Impl *)iface;
af062818b47340eef15700d2f0211576ba3506eevboxsync HRESULT hr;
5112e32d7072e280613921c982a6672f2c859cf3vboxsync
5112e32d7072e280613921c982a6672f2c859cf3vboxsync TRACE("iface %p, guid %s, data %p, data_size %u, flags %#x.\n",
5112e32d7072e280613921c982a6672f2c859cf3vboxsync iface, debugstr_guid(refguid), pData, SizeOfData, Flags);
af062818b47340eef15700d2f0211576ba3506eevboxsync
a3133ef29cdf3656735d569fd64e54c9286effc0vboxsync wined3d_mutex_lock();
af062818b47340eef15700d2f0211576ba3506eevboxsync hr = IWineD3DCubeTexture_SetPrivateData(This->wineD3DCubeTexture,refguid,pData,SizeOfData,Flags);
a3133ef29cdf3656735d569fd64e54c9286effc0vboxsync wined3d_mutex_unlock();
a3133ef29cdf3656735d569fd64e54c9286effc0vboxsync
af062818b47340eef15700d2f0211576ba3506eevboxsync return hr;
af062818b47340eef15700d2f0211576ba3506eevboxsync}
af062818b47340eef15700d2f0211576ba3506eevboxsync
af062818b47340eef15700d2f0211576ba3506eevboxsyncstatic HRESULT WINAPI IDirect3DCubeTexture8Impl_GetPrivateData(LPDIRECT3DCUBETEXTURE8 iface, REFGUID refguid, void *pData, DWORD *pSizeOfData) {
af062818b47340eef15700d2f0211576ba3506eevboxsync IDirect3DCubeTexture8Impl *This = (IDirect3DCubeTexture8Impl *)iface;
af062818b47340eef15700d2f0211576ba3506eevboxsync HRESULT hr;
5112e32d7072e280613921c982a6672f2c859cf3vboxsync
5112e32d7072e280613921c982a6672f2c859cf3vboxsync TRACE("iface %p, guid %s, data %p, data_size %p.\n",
5112e32d7072e280613921c982a6672f2c859cf3vboxsync iface, debugstr_guid(refguid), pData, pSizeOfData);
af062818b47340eef15700d2f0211576ba3506eevboxsync
a3133ef29cdf3656735d569fd64e54c9286effc0vboxsync wined3d_mutex_lock();
af062818b47340eef15700d2f0211576ba3506eevboxsync hr = IWineD3DCubeTexture_GetPrivateData(This->wineD3DCubeTexture,refguid,pData,pSizeOfData);
a3133ef29cdf3656735d569fd64e54c9286effc0vboxsync wined3d_mutex_unlock();
a3133ef29cdf3656735d569fd64e54c9286effc0vboxsync
af062818b47340eef15700d2f0211576ba3506eevboxsync return hr;
af062818b47340eef15700d2f0211576ba3506eevboxsync}
af062818b47340eef15700d2f0211576ba3506eevboxsync
af062818b47340eef15700d2f0211576ba3506eevboxsyncstatic HRESULT WINAPI IDirect3DCubeTexture8Impl_FreePrivateData(LPDIRECT3DCUBETEXTURE8 iface, REFGUID refguid) {
af062818b47340eef15700d2f0211576ba3506eevboxsync IDirect3DCubeTexture8Impl *This = (IDirect3DCubeTexture8Impl *)iface;
af062818b47340eef15700d2f0211576ba3506eevboxsync HRESULT hr;
5112e32d7072e280613921c982a6672f2c859cf3vboxsync
5112e32d7072e280613921c982a6672f2c859cf3vboxsync TRACE("iface %p, guid %s.\n", iface, debugstr_guid(refguid));
af062818b47340eef15700d2f0211576ba3506eevboxsync
a3133ef29cdf3656735d569fd64e54c9286effc0vboxsync wined3d_mutex_lock();
af062818b47340eef15700d2f0211576ba3506eevboxsync hr = IWineD3DCubeTexture_FreePrivateData(This->wineD3DCubeTexture,refguid);
a3133ef29cdf3656735d569fd64e54c9286effc0vboxsync wined3d_mutex_unlock();
a3133ef29cdf3656735d569fd64e54c9286effc0vboxsync
af062818b47340eef15700d2f0211576ba3506eevboxsync return hr;
af062818b47340eef15700d2f0211576ba3506eevboxsync}
af062818b47340eef15700d2f0211576ba3506eevboxsync
af062818b47340eef15700d2f0211576ba3506eevboxsyncstatic DWORD WINAPI IDirect3DCubeTexture8Impl_SetPriority(LPDIRECT3DCUBETEXTURE8 iface, DWORD PriorityNew) {
af062818b47340eef15700d2f0211576ba3506eevboxsync IDirect3DCubeTexture8Impl *This = (IDirect3DCubeTexture8Impl *)iface;
af062818b47340eef15700d2f0211576ba3506eevboxsync DWORD ret;
5112e32d7072e280613921c982a6672f2c859cf3vboxsync
5112e32d7072e280613921c982a6672f2c859cf3vboxsync TRACE("iface %p, priority %u.\n", iface, PriorityNew);
af062818b47340eef15700d2f0211576ba3506eevboxsync
a3133ef29cdf3656735d569fd64e54c9286effc0vboxsync wined3d_mutex_lock();
af062818b47340eef15700d2f0211576ba3506eevboxsync ret = IWineD3DCubeTexture_SetPriority(This->wineD3DCubeTexture, PriorityNew);
a3133ef29cdf3656735d569fd64e54c9286effc0vboxsync wined3d_mutex_unlock();
a3133ef29cdf3656735d569fd64e54c9286effc0vboxsync
af062818b47340eef15700d2f0211576ba3506eevboxsync return ret;
af062818b47340eef15700d2f0211576ba3506eevboxsync}
af062818b47340eef15700d2f0211576ba3506eevboxsync
af062818b47340eef15700d2f0211576ba3506eevboxsyncstatic DWORD WINAPI IDirect3DCubeTexture8Impl_GetPriority(LPDIRECT3DCUBETEXTURE8 iface) {
af062818b47340eef15700d2f0211576ba3506eevboxsync IDirect3DCubeTexture8Impl *This = (IDirect3DCubeTexture8Impl *)iface;
af062818b47340eef15700d2f0211576ba3506eevboxsync DWORD ret;
5112e32d7072e280613921c982a6672f2c859cf3vboxsync
5112e32d7072e280613921c982a6672f2c859cf3vboxsync TRACE("iface %p.\n", iface);
af062818b47340eef15700d2f0211576ba3506eevboxsync
a3133ef29cdf3656735d569fd64e54c9286effc0vboxsync wined3d_mutex_lock();
af062818b47340eef15700d2f0211576ba3506eevboxsync ret = IWineD3DCubeTexture_GetPriority(This->wineD3DCubeTexture);
a3133ef29cdf3656735d569fd64e54c9286effc0vboxsync wined3d_mutex_unlock();
a3133ef29cdf3656735d569fd64e54c9286effc0vboxsync
af062818b47340eef15700d2f0211576ba3506eevboxsync return ret;
af062818b47340eef15700d2f0211576ba3506eevboxsync}
af062818b47340eef15700d2f0211576ba3506eevboxsync
af062818b47340eef15700d2f0211576ba3506eevboxsyncstatic void WINAPI IDirect3DCubeTexture8Impl_PreLoad(LPDIRECT3DCUBETEXTURE8 iface) {
af062818b47340eef15700d2f0211576ba3506eevboxsync IDirect3DCubeTexture8Impl *This = (IDirect3DCubeTexture8Impl *)iface;
5112e32d7072e280613921c982a6672f2c859cf3vboxsync
5112e32d7072e280613921c982a6672f2c859cf3vboxsync TRACE("iface %p.\n", iface);
af062818b47340eef15700d2f0211576ba3506eevboxsync
a3133ef29cdf3656735d569fd64e54c9286effc0vboxsync wined3d_mutex_lock();
af062818b47340eef15700d2f0211576ba3506eevboxsync IWineD3DCubeTexture_PreLoad(This->wineD3DCubeTexture);
a3133ef29cdf3656735d569fd64e54c9286effc0vboxsync wined3d_mutex_unlock();
af062818b47340eef15700d2f0211576ba3506eevboxsync}
af062818b47340eef15700d2f0211576ba3506eevboxsync
af062818b47340eef15700d2f0211576ba3506eevboxsyncstatic D3DRESOURCETYPE WINAPI IDirect3DCubeTexture8Impl_GetType(LPDIRECT3DCUBETEXTURE8 iface) {
af062818b47340eef15700d2f0211576ba3506eevboxsync IDirect3DCubeTexture8Impl *This = (IDirect3DCubeTexture8Impl *)iface;
af062818b47340eef15700d2f0211576ba3506eevboxsync D3DRESOURCETYPE type;
5112e32d7072e280613921c982a6672f2c859cf3vboxsync
5112e32d7072e280613921c982a6672f2c859cf3vboxsync TRACE("iface %p.\n", iface);
af062818b47340eef15700d2f0211576ba3506eevboxsync
a3133ef29cdf3656735d569fd64e54c9286effc0vboxsync wined3d_mutex_lock();
af062818b47340eef15700d2f0211576ba3506eevboxsync type = IWineD3DCubeTexture_GetType(This->wineD3DCubeTexture);
a3133ef29cdf3656735d569fd64e54c9286effc0vboxsync wined3d_mutex_unlock();
a3133ef29cdf3656735d569fd64e54c9286effc0vboxsync
af062818b47340eef15700d2f0211576ba3506eevboxsync return type;
af062818b47340eef15700d2f0211576ba3506eevboxsync}
af062818b47340eef15700d2f0211576ba3506eevboxsync
af062818b47340eef15700d2f0211576ba3506eevboxsync/* IDirect3DCubeTexture8 IDirect3DBaseTexture8 Interface follow: */
af062818b47340eef15700d2f0211576ba3506eevboxsyncstatic DWORD WINAPI IDirect3DCubeTexture8Impl_SetLOD(LPDIRECT3DCUBETEXTURE8 iface, DWORD LODNew) {
af062818b47340eef15700d2f0211576ba3506eevboxsync IDirect3DCubeTexture8Impl *This = (IDirect3DCubeTexture8Impl *)iface;
af062818b47340eef15700d2f0211576ba3506eevboxsync DWORD lod;
5112e32d7072e280613921c982a6672f2c859cf3vboxsync
5112e32d7072e280613921c982a6672f2c859cf3vboxsync TRACE("iface %p, lod %u.\n", iface, LODNew);
af062818b47340eef15700d2f0211576ba3506eevboxsync
a3133ef29cdf3656735d569fd64e54c9286effc0vboxsync wined3d_mutex_lock();
af062818b47340eef15700d2f0211576ba3506eevboxsync lod = IWineD3DCubeTexture_SetLOD(This->wineD3DCubeTexture, LODNew);
a3133ef29cdf3656735d569fd64e54c9286effc0vboxsync wined3d_mutex_unlock();
a3133ef29cdf3656735d569fd64e54c9286effc0vboxsync
af062818b47340eef15700d2f0211576ba3506eevboxsync return lod;
af062818b47340eef15700d2f0211576ba3506eevboxsync}
af062818b47340eef15700d2f0211576ba3506eevboxsync
af062818b47340eef15700d2f0211576ba3506eevboxsyncstatic DWORD WINAPI IDirect3DCubeTexture8Impl_GetLOD(LPDIRECT3DCUBETEXTURE8 iface) {
af062818b47340eef15700d2f0211576ba3506eevboxsync IDirect3DCubeTexture8Impl *This = (IDirect3DCubeTexture8Impl *)iface;
af062818b47340eef15700d2f0211576ba3506eevboxsync DWORD lod;
5112e32d7072e280613921c982a6672f2c859cf3vboxsync
5112e32d7072e280613921c982a6672f2c859cf3vboxsync TRACE("iface %p.\n", iface);
af062818b47340eef15700d2f0211576ba3506eevboxsync
a3133ef29cdf3656735d569fd64e54c9286effc0vboxsync wined3d_mutex_lock();
af062818b47340eef15700d2f0211576ba3506eevboxsync lod = IWineD3DCubeTexture_GetLOD((LPDIRECT3DBASETEXTURE8) This);
a3133ef29cdf3656735d569fd64e54c9286effc0vboxsync wined3d_mutex_unlock();
a3133ef29cdf3656735d569fd64e54c9286effc0vboxsync
af062818b47340eef15700d2f0211576ba3506eevboxsync return lod;
af062818b47340eef15700d2f0211576ba3506eevboxsync}
af062818b47340eef15700d2f0211576ba3506eevboxsync
af062818b47340eef15700d2f0211576ba3506eevboxsyncstatic DWORD WINAPI IDirect3DCubeTexture8Impl_GetLevelCount(LPDIRECT3DCUBETEXTURE8 iface) {
af062818b47340eef15700d2f0211576ba3506eevboxsync IDirect3DCubeTexture8Impl *This = (IDirect3DCubeTexture8Impl *)iface;
af062818b47340eef15700d2f0211576ba3506eevboxsync DWORD cnt;
5112e32d7072e280613921c982a6672f2c859cf3vboxsync
5112e32d7072e280613921c982a6672f2c859cf3vboxsync TRACE("iface %p.\n", iface);
af062818b47340eef15700d2f0211576ba3506eevboxsync
a3133ef29cdf3656735d569fd64e54c9286effc0vboxsync wined3d_mutex_lock();
af062818b47340eef15700d2f0211576ba3506eevboxsync cnt = IWineD3DCubeTexture_GetLevelCount(This->wineD3DCubeTexture);
a3133ef29cdf3656735d569fd64e54c9286effc0vboxsync wined3d_mutex_unlock();
a3133ef29cdf3656735d569fd64e54c9286effc0vboxsync
af062818b47340eef15700d2f0211576ba3506eevboxsync return cnt;
af062818b47340eef15700d2f0211576ba3506eevboxsync}
af062818b47340eef15700d2f0211576ba3506eevboxsync
af062818b47340eef15700d2f0211576ba3506eevboxsync/* IDirect3DCubeTexture8 Interface follow: */
af062818b47340eef15700d2f0211576ba3506eevboxsyncstatic HRESULT WINAPI IDirect3DCubeTexture8Impl_GetLevelDesc(LPDIRECT3DCUBETEXTURE8 iface, UINT Level, D3DSURFACE_DESC *pDesc) {
af062818b47340eef15700d2f0211576ba3506eevboxsync IDirect3DCubeTexture8Impl *This = (IDirect3DCubeTexture8Impl *)iface;
af062818b47340eef15700d2f0211576ba3506eevboxsync HRESULT hr;
af062818b47340eef15700d2f0211576ba3506eevboxsync WINED3DSURFACE_DESC wined3ddesc;
af062818b47340eef15700d2f0211576ba3506eevboxsync
5112e32d7072e280613921c982a6672f2c859cf3vboxsync TRACE("iface %p, level %u, desc %p.\n", iface, Level, pDesc);
af062818b47340eef15700d2f0211576ba3506eevboxsync
a3133ef29cdf3656735d569fd64e54c9286effc0vboxsync wined3d_mutex_lock();
af062818b47340eef15700d2f0211576ba3506eevboxsync hr = IWineD3DCubeTexture_GetLevelDesc(This->wineD3DCubeTexture, Level, &wined3ddesc);
a3133ef29cdf3656735d569fd64e54c9286effc0vboxsync wined3d_mutex_unlock();
589fd26cedb2b4ebbed14f2964cad03cc8ebbca2vboxsync
040b4a09341f574825386333398110f4db3e1e51vboxsync if (SUCCEEDED(hr))
040b4a09341f574825386333398110f4db3e1e51vboxsync {
040b4a09341f574825386333398110f4db3e1e51vboxsync pDesc->Format = d3dformat_from_wined3dformat(wined3ddesc.format);
040b4a09341f574825386333398110f4db3e1e51vboxsync pDesc->Type = wined3ddesc.resource_type;
040b4a09341f574825386333398110f4db3e1e51vboxsync pDesc->Usage = wined3ddesc.usage;
040b4a09341f574825386333398110f4db3e1e51vboxsync pDesc->Pool = wined3ddesc.pool;
040b4a09341f574825386333398110f4db3e1e51vboxsync pDesc->Size = wined3ddesc.size;
040b4a09341f574825386333398110f4db3e1e51vboxsync pDesc->MultiSampleType = wined3ddesc.multisample_type;
040b4a09341f574825386333398110f4db3e1e51vboxsync pDesc->Width = wined3ddesc.width;
040b4a09341f574825386333398110f4db3e1e51vboxsync pDesc->Height = wined3ddesc.height;
040b4a09341f574825386333398110f4db3e1e51vboxsync }
589fd26cedb2b4ebbed14f2964cad03cc8ebbca2vboxsync
af062818b47340eef15700d2f0211576ba3506eevboxsync return hr;
af062818b47340eef15700d2f0211576ba3506eevboxsync}
af062818b47340eef15700d2f0211576ba3506eevboxsync
af062818b47340eef15700d2f0211576ba3506eevboxsyncstatic HRESULT WINAPI IDirect3DCubeTexture8Impl_GetCubeMapSurface(LPDIRECT3DCUBETEXTURE8 iface, D3DCUBEMAP_FACES FaceType, UINT Level, IDirect3DSurface8 **ppCubeMapSurface) {
af062818b47340eef15700d2f0211576ba3506eevboxsync IDirect3DCubeTexture8Impl *This = (IDirect3DCubeTexture8Impl *)iface;
af062818b47340eef15700d2f0211576ba3506eevboxsync HRESULT hrc = D3D_OK;
af062818b47340eef15700d2f0211576ba3506eevboxsync IWineD3DSurface *mySurface = NULL;
af062818b47340eef15700d2f0211576ba3506eevboxsync
5112e32d7072e280613921c982a6672f2c859cf3vboxsync TRACE("iface %p, face %#x, level %u, surface %p.\n", iface, FaceType, Level, ppCubeMapSurface);
af062818b47340eef15700d2f0211576ba3506eevboxsync
a3133ef29cdf3656735d569fd64e54c9286effc0vboxsync wined3d_mutex_lock();
af062818b47340eef15700d2f0211576ba3506eevboxsync hrc = IWineD3DCubeTexture_GetCubeMapSurface(This->wineD3DCubeTexture, (WINED3DCUBEMAP_FACES) FaceType, Level, &mySurface);
af062818b47340eef15700d2f0211576ba3506eevboxsync if (hrc == D3D_OK && NULL != ppCubeMapSurface) {
af062818b47340eef15700d2f0211576ba3506eevboxsync IWineD3DCubeTexture_GetParent(mySurface, (IUnknown **)ppCubeMapSurface);
af062818b47340eef15700d2f0211576ba3506eevboxsync IWineD3DCubeTexture_Release(mySurface);
af062818b47340eef15700d2f0211576ba3506eevboxsync }
a3133ef29cdf3656735d569fd64e54c9286effc0vboxsync wined3d_mutex_unlock();
a3133ef29cdf3656735d569fd64e54c9286effc0vboxsync
af062818b47340eef15700d2f0211576ba3506eevboxsync return hrc;
af062818b47340eef15700d2f0211576ba3506eevboxsync}
af062818b47340eef15700d2f0211576ba3506eevboxsync
af062818b47340eef15700d2f0211576ba3506eevboxsyncstatic HRESULT WINAPI IDirect3DCubeTexture8Impl_LockRect(LPDIRECT3DCUBETEXTURE8 iface, D3DCUBEMAP_FACES FaceType, UINT Level, D3DLOCKED_RECT* pLockedRect, CONST RECT *pRect, DWORD Flags) {
af062818b47340eef15700d2f0211576ba3506eevboxsync IDirect3DCubeTexture8Impl *This = (IDirect3DCubeTexture8Impl *)iface;
af062818b47340eef15700d2f0211576ba3506eevboxsync HRESULT hr;
5112e32d7072e280613921c982a6672f2c859cf3vboxsync
5112e32d7072e280613921c982a6672f2c859cf3vboxsync TRACE("iface %p, face %#x, level %u, locked_rect %p, rect %p, flags %#x.\n",
5112e32d7072e280613921c982a6672f2c859cf3vboxsync iface, FaceType, Level, pLockedRect, pRect, Flags);
af062818b47340eef15700d2f0211576ba3506eevboxsync
a3133ef29cdf3656735d569fd64e54c9286effc0vboxsync wined3d_mutex_lock();
af062818b47340eef15700d2f0211576ba3506eevboxsync hr = IWineD3DCubeTexture_LockRect(This->wineD3DCubeTexture, (WINED3DCUBEMAP_FACES) FaceType, Level, (WINED3DLOCKED_RECT *) pLockedRect, pRect, Flags);
a3133ef29cdf3656735d569fd64e54c9286effc0vboxsync wined3d_mutex_unlock();
a3133ef29cdf3656735d569fd64e54c9286effc0vboxsync
af062818b47340eef15700d2f0211576ba3506eevboxsync return hr;
af062818b47340eef15700d2f0211576ba3506eevboxsync}
af062818b47340eef15700d2f0211576ba3506eevboxsync
af062818b47340eef15700d2f0211576ba3506eevboxsyncstatic HRESULT WINAPI IDirect3DCubeTexture8Impl_UnlockRect(LPDIRECT3DCUBETEXTURE8 iface, D3DCUBEMAP_FACES FaceType, UINT Level) {
af062818b47340eef15700d2f0211576ba3506eevboxsync IDirect3DCubeTexture8Impl *This = (IDirect3DCubeTexture8Impl *)iface;
af062818b47340eef15700d2f0211576ba3506eevboxsync HRESULT hr;
5112e32d7072e280613921c982a6672f2c859cf3vboxsync
5112e32d7072e280613921c982a6672f2c859cf3vboxsync TRACE("iface %p, face %#x, level %u.\n", iface, FaceType, Level);
af062818b47340eef15700d2f0211576ba3506eevboxsync
a3133ef29cdf3656735d569fd64e54c9286effc0vboxsync wined3d_mutex_lock();
af062818b47340eef15700d2f0211576ba3506eevboxsync hr = IWineD3DCubeTexture_UnlockRect(This->wineD3DCubeTexture, (WINED3DCUBEMAP_FACES) FaceType, Level);
a3133ef29cdf3656735d569fd64e54c9286effc0vboxsync wined3d_mutex_unlock();
a3133ef29cdf3656735d569fd64e54c9286effc0vboxsync
af062818b47340eef15700d2f0211576ba3506eevboxsync return hr;
af062818b47340eef15700d2f0211576ba3506eevboxsync}
af062818b47340eef15700d2f0211576ba3506eevboxsync
af062818b47340eef15700d2f0211576ba3506eevboxsyncstatic HRESULT WINAPI IDirect3DCubeTexture8Impl_AddDirtyRect(LPDIRECT3DCUBETEXTURE8 iface, D3DCUBEMAP_FACES FaceType, CONST RECT *pDirtyRect) {
af062818b47340eef15700d2f0211576ba3506eevboxsync IDirect3DCubeTexture8Impl *This = (IDirect3DCubeTexture8Impl *)iface;
af062818b47340eef15700d2f0211576ba3506eevboxsync HRESULT hr;
5112e32d7072e280613921c982a6672f2c859cf3vboxsync
5112e32d7072e280613921c982a6672f2c859cf3vboxsync TRACE("iface %p, face %#x, dirty_rect %p.\n", iface, FaceType, pDirtyRect);
af062818b47340eef15700d2f0211576ba3506eevboxsync
a3133ef29cdf3656735d569fd64e54c9286effc0vboxsync wined3d_mutex_lock();
af062818b47340eef15700d2f0211576ba3506eevboxsync hr = IWineD3DCubeTexture_AddDirtyRect(This->wineD3DCubeTexture, (WINED3DCUBEMAP_FACES) FaceType, pDirtyRect);
a3133ef29cdf3656735d569fd64e54c9286effc0vboxsync wined3d_mutex_unlock();
a3133ef29cdf3656735d569fd64e54c9286effc0vboxsync
af062818b47340eef15700d2f0211576ba3506eevboxsync return hr;
af062818b47340eef15700d2f0211576ba3506eevboxsync}
af062818b47340eef15700d2f0211576ba3506eevboxsync
a3133ef29cdf3656735d569fd64e54c9286effc0vboxsyncstatic const IDirect3DCubeTexture8Vtbl Direct3DCubeTexture8_Vtbl =
af062818b47340eef15700d2f0211576ba3506eevboxsync{
af062818b47340eef15700d2f0211576ba3506eevboxsync /* IUnknown */
af062818b47340eef15700d2f0211576ba3506eevboxsync IDirect3DCubeTexture8Impl_QueryInterface,
af062818b47340eef15700d2f0211576ba3506eevboxsync IDirect3DCubeTexture8Impl_AddRef,
af062818b47340eef15700d2f0211576ba3506eevboxsync IDirect3DCubeTexture8Impl_Release,
af062818b47340eef15700d2f0211576ba3506eevboxsync /* IDirect3DResource8 */
af062818b47340eef15700d2f0211576ba3506eevboxsync IDirect3DCubeTexture8Impl_GetDevice,
af062818b47340eef15700d2f0211576ba3506eevboxsync IDirect3DCubeTexture8Impl_SetPrivateData,
af062818b47340eef15700d2f0211576ba3506eevboxsync IDirect3DCubeTexture8Impl_GetPrivateData,
af062818b47340eef15700d2f0211576ba3506eevboxsync IDirect3DCubeTexture8Impl_FreePrivateData,
af062818b47340eef15700d2f0211576ba3506eevboxsync IDirect3DCubeTexture8Impl_SetPriority,
af062818b47340eef15700d2f0211576ba3506eevboxsync IDirect3DCubeTexture8Impl_GetPriority,
af062818b47340eef15700d2f0211576ba3506eevboxsync IDirect3DCubeTexture8Impl_PreLoad,
af062818b47340eef15700d2f0211576ba3506eevboxsync IDirect3DCubeTexture8Impl_GetType,
af062818b47340eef15700d2f0211576ba3506eevboxsync /* IDirect3DBaseTexture8 */
af062818b47340eef15700d2f0211576ba3506eevboxsync IDirect3DCubeTexture8Impl_SetLOD,
af062818b47340eef15700d2f0211576ba3506eevboxsync IDirect3DCubeTexture8Impl_GetLOD,
af062818b47340eef15700d2f0211576ba3506eevboxsync IDirect3DCubeTexture8Impl_GetLevelCount,
af062818b47340eef15700d2f0211576ba3506eevboxsync /* IDirect3DCubeTexture8 */
af062818b47340eef15700d2f0211576ba3506eevboxsync IDirect3DCubeTexture8Impl_GetLevelDesc,
af062818b47340eef15700d2f0211576ba3506eevboxsync IDirect3DCubeTexture8Impl_GetCubeMapSurface,
af062818b47340eef15700d2f0211576ba3506eevboxsync IDirect3DCubeTexture8Impl_LockRect,
af062818b47340eef15700d2f0211576ba3506eevboxsync IDirect3DCubeTexture8Impl_UnlockRect,
af062818b47340eef15700d2f0211576ba3506eevboxsync IDirect3DCubeTexture8Impl_AddDirtyRect
af062818b47340eef15700d2f0211576ba3506eevboxsync};
a3133ef29cdf3656735d569fd64e54c9286effc0vboxsync
a3133ef29cdf3656735d569fd64e54c9286effc0vboxsyncstatic void STDMETHODCALLTYPE d3d8_cubetexture_wined3d_object_destroyed(void *parent)
a3133ef29cdf3656735d569fd64e54c9286effc0vboxsync{
a3133ef29cdf3656735d569fd64e54c9286effc0vboxsync HeapFree(GetProcessHeap(), 0, parent);
a3133ef29cdf3656735d569fd64e54c9286effc0vboxsync}
a3133ef29cdf3656735d569fd64e54c9286effc0vboxsync
a3133ef29cdf3656735d569fd64e54c9286effc0vboxsyncstatic const struct wined3d_parent_ops d3d8_cubetexture_wined3d_parent_ops =
a3133ef29cdf3656735d569fd64e54c9286effc0vboxsync{
a3133ef29cdf3656735d569fd64e54c9286effc0vboxsync d3d8_cubetexture_wined3d_object_destroyed,
a3133ef29cdf3656735d569fd64e54c9286effc0vboxsync};
a3133ef29cdf3656735d569fd64e54c9286effc0vboxsync
a3133ef29cdf3656735d569fd64e54c9286effc0vboxsyncHRESULT cubetexture_init(IDirect3DCubeTexture8Impl *texture, IDirect3DDevice8Impl *device,
a3133ef29cdf3656735d569fd64e54c9286effc0vboxsync UINT edge_length, UINT levels, DWORD usage, D3DFORMAT format, D3DPOOL pool)
a3133ef29cdf3656735d569fd64e54c9286effc0vboxsync{
a3133ef29cdf3656735d569fd64e54c9286effc0vboxsync HRESULT hr;
a3133ef29cdf3656735d569fd64e54c9286effc0vboxsync
a3133ef29cdf3656735d569fd64e54c9286effc0vboxsync texture->lpVtbl = &Direct3DCubeTexture8_Vtbl;
a3133ef29cdf3656735d569fd64e54c9286effc0vboxsync texture->ref = 1;
a3133ef29cdf3656735d569fd64e54c9286effc0vboxsync
a3133ef29cdf3656735d569fd64e54c9286effc0vboxsync wined3d_mutex_lock();
a3133ef29cdf3656735d569fd64e54c9286effc0vboxsync hr = IWineD3DDevice_CreateCubeTexture(device->WineD3DDevice, edge_length, levels, usage & WINED3DUSAGE_MASK,
a3133ef29cdf3656735d569fd64e54c9286effc0vboxsync wined3dformat_from_d3dformat(format), pool, &texture->wineD3DCubeTexture,
a3133ef29cdf3656735d569fd64e54c9286effc0vboxsync (IUnknown *)texture, &d3d8_cubetexture_wined3d_parent_ops);
a3133ef29cdf3656735d569fd64e54c9286effc0vboxsync wined3d_mutex_unlock();
a3133ef29cdf3656735d569fd64e54c9286effc0vboxsync if (FAILED(hr))
a3133ef29cdf3656735d569fd64e54c9286effc0vboxsync {
a3133ef29cdf3656735d569fd64e54c9286effc0vboxsync WARN("Failed to create wined3d cube texture, hr %#x.\n", hr);
a3133ef29cdf3656735d569fd64e54c9286effc0vboxsync return hr;
a3133ef29cdf3656735d569fd64e54c9286effc0vboxsync }
a3133ef29cdf3656735d569fd64e54c9286effc0vboxsync
a3133ef29cdf3656735d569fd64e54c9286effc0vboxsync texture->parentDevice = (IDirect3DDevice8 *)device;
a3133ef29cdf3656735d569fd64e54c9286effc0vboxsync IDirect3DDevice8_AddRef(texture->parentDevice);
a3133ef29cdf3656735d569fd64e54c9286effc0vboxsync
a3133ef29cdf3656735d569fd64e54c9286effc0vboxsync return D3D_OK;
a3133ef29cdf3656735d569fd64e54c9286effc0vboxsync}