#include #include #include #include #include #include #include #include namespace DDraw { template HRESULT PalettizedTexture::create(CompatRef dd, TSurfaceDesc desc, TSurface*& surface) { LOG_FUNC("PalettizedTexture::create", &dd, desc, surface); DDSURFACEDESC d = {}; memcpy(&d, &desc, sizeof(d)); d.dwSize = sizeof(d); auto dd1(CompatPtr::from(&dd)); CompatPtr palettizedSurface; HRESULT result = Surface::create(*dd1, d, palettizedSurface.getRef(), std::make_unique(desc.ddsCaps.dwCaps)); if (FAILED(result)) { return LOG_RESULT(result); } auto privateData(std::make_unique(desc.ddsCaps.dwCaps)); auto data = privateData.get(); data->m_palettizedSurface = palettizedSurface; desc.dwFlags = DDSD_WIDTH | DDSD_HEIGHT | DDSD_PIXELFORMAT | DDSD_CAPS | (desc.dwFlags & (DDSD_CKSRCBLT | DDSD_CKDESTBLT)); desc.ddpfPixelFormat = D3dDdi::getPixelFormat(D3DDDIFMT_A8R8G8B8); desc.ddsCaps = {}; desc.ddsCaps.dwCaps = DDSCAPS_TEXTURE | DDSCAPS_3DDEVICE | DDSCAPS_VIDEOMEMORY; result = Surface::create(dd, desc, surface, std::move(privateData)); if (FAILED(result)) { return LOG_RESULT(result); } auto palettizedResource = D3dDdi::Device::findResource( DDraw::DirectDrawSurface::getDriverResourceHandle(*data->m_palettizedSurface)); auto paletteResolvedResource = D3dDdi::Device::findResource( DDraw::DirectDrawSurface::getDriverResourceHandle(*surface)); paletteResolvedResource->setPalettizedTexture(*palettizedResource); return LOG_RESULT(DD_OK); } template HRESULT PalettizedTexture::create( CompatRef dd, DDSURFACEDESC desc, IDirectDrawSurface*& surface); template HRESULT PalettizedTexture::create( CompatRef dd, DDSURFACEDESC desc, IDirectDrawSurface*& surface); template HRESULT PalettizedTexture::create( CompatRef dd, DDSURFACEDESC2 desc, IDirectDrawSurface4*& surface); template HRESULT PalettizedTexture::create( CompatRef dd, DDSURFACEDESC2 desc, IDirectDrawSurface7*& surface); PalettizedTexture::~PalettizedTexture() { LOG_FUNC("PalettizedTexture::~PalettizedTexture", this); } void PalettizedTexture::createImpl() { m_impl.reset(new PalettizedTextureImpl(*this, m_palettizedSurface)); m_impl2.reset(new PalettizedTextureImpl(*this, m_palettizedSurface)); m_impl3.reset(new PalettizedTextureImpl(*this, m_palettizedSurface)); m_impl4.reset(new PalettizedTextureImpl(*this, m_palettizedSurface)); m_impl7.reset(new PalettizedTextureImpl(*this, m_palettizedSurface)); } }