mirror of
https://github.com/ZDoom/qzdoom.git
synced 2024-11-24 13:01:47 +00:00
- fix burn crash on vulkan
This commit is contained in:
parent
cace5079fe
commit
d5761740d3
4 changed files with 17 additions and 1 deletions
|
@ -336,7 +336,7 @@ void Wiper_Burn::SetTextures(FTexture *startscreen, FTexture *endscreen)
|
||||||
startScreen = startscreen;
|
startScreen = startscreen;
|
||||||
endScreen = endscreen;
|
endScreen = endscreen;
|
||||||
BurnTexture = new FBurnTexture(WIDTH, HEIGHT);
|
BurnTexture = new FBurnTexture(WIDTH, HEIGHT);
|
||||||
auto mat = FMaterial::ValidateTexture(startscreen, false);
|
auto mat = FMaterial::ValidateTexture(endScreen, false);
|
||||||
mat->AddTextureLayer(BurnTexture);
|
mat->AddTextureLayer(BurnTexture);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -374,6 +374,8 @@ bool Wiper_Burn::Run(int ticks)
|
||||||
}
|
}
|
||||||
|
|
||||||
BurnTexture->SystemTextures.Clean(true, true);
|
BurnTexture->SystemTextures.Clean(true, true);
|
||||||
|
endScreen->SystemTextures.Clean(false, false);
|
||||||
|
|
||||||
const uint8_t *src = BurnArray;
|
const uint8_t *src = BurnArray;
|
||||||
uint32_t *dest = (uint32_t *)BurnTexture->GetBuffer();
|
uint32_t *dest = (uint32_t *)BurnTexture->GetBuffer();
|
||||||
for (int y = HEIGHT; y != 0; --y)
|
for (int y = HEIGHT; y != 0; --y)
|
||||||
|
|
|
@ -17,6 +17,8 @@ public:
|
||||||
IHardwareTexture() {}
|
IHardwareTexture() {}
|
||||||
virtual ~IHardwareTexture() {}
|
virtual ~IHardwareTexture() {}
|
||||||
|
|
||||||
|
virtual void DeleteDescriptors() { }
|
||||||
|
|
||||||
virtual void AllocateBuffer(int w, int h, int texelsize) = 0;
|
virtual void AllocateBuffer(int w, int h, int texelsize) = 0;
|
||||||
virtual uint8_t *MapBuffer() = 0;
|
virtual uint8_t *MapBuffer() = 0;
|
||||||
virtual unsigned int CreateTexture(unsigned char * buffer, int w, int h, int texunit, bool mipmap, int translation, const char *name) = 0;
|
virtual unsigned int CreateTexture(unsigned char * buffer, int w, int h, int texunit, bool mipmap, int translation, const char *name) = 0;
|
||||||
|
|
|
@ -26,6 +26,11 @@ private:
|
||||||
hwTexture = nullptr;
|
hwTexture = nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void DeleteDescriptors()
|
||||||
|
{
|
||||||
|
if (hwTexture) hwTexture->DeleteDescriptors();
|
||||||
|
}
|
||||||
|
|
||||||
~TranslatedTexture()
|
~TranslatedTexture()
|
||||||
{
|
{
|
||||||
Delete();
|
Delete();
|
||||||
|
@ -69,10 +74,15 @@ public:
|
||||||
{
|
{
|
||||||
if (cleannormal) hwDefTex[0].Delete();
|
if (cleannormal) hwDefTex[0].Delete();
|
||||||
if (cleanexpanded) hwDefTex[1].Delete();
|
if (cleanexpanded) hwDefTex[1].Delete();
|
||||||
|
hwDefTex[0].DeleteDescriptors();
|
||||||
|
hwDefTex[1].DeleteDescriptors();
|
||||||
for (int i = hwTex_Translated.Size() - 1; i >= 0; i--)
|
for (int i = hwTex_Translated.Size() - 1; i >= 0; i--)
|
||||||
{
|
{
|
||||||
if (cleannormal && hwTex_Translated[i].translation > 0) hwTex_Translated.Delete(i);
|
if (cleannormal && hwTex_Translated[i].translation > 0) hwTex_Translated.Delete(i);
|
||||||
else if (cleanexpanded && hwTex_Translated[i].translation < 0) hwTex_Translated.Delete(i);
|
else if (cleanexpanded && hwTex_Translated[i].translation < 0) hwTex_Translated.Delete(i);
|
||||||
|
|
||||||
|
for (unsigned int j = 0; j < hwTex_Translated.Size(); j++)
|
||||||
|
hwTex_Translated[j].DeleteDescriptors();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -38,6 +38,8 @@ public:
|
||||||
// Wipe screen
|
// Wipe screen
|
||||||
void CreateWipeTexture(int w, int h, const char *name);
|
void CreateWipeTexture(int w, int h, const char *name);
|
||||||
|
|
||||||
|
void DeleteDescriptors() override { ResetDescriptors(); }
|
||||||
|
|
||||||
VulkanImage *GetImage(FTexture *tex, int translation, int flags);
|
VulkanImage *GetImage(FTexture *tex, int translation, int flags);
|
||||||
VulkanImageView *GetImageView(FTexture *tex, int translation, int flags);
|
VulkanImageView *GetImageView(FTexture *tex, int translation, int flags);
|
||||||
VulkanImageView *GetDepthStencilView(FTexture *tex);
|
VulkanImageView *GetDepthStencilView(FTexture *tex);
|
||||||
|
|
Loading…
Reference in a new issue