Fix xatrix intro image

Recreate image if initiall image has different dimention or aspects.

Possible fix for #7
This commit is contained in:
Denis Pauk 2021-06-26 16:18:06 +03:00
parent a7e53dd827
commit 0facda008d
3 changed files with 15 additions and 2 deletions

View File

@ -285,6 +285,7 @@ VkResult QVk_CreateImage(uint32_t width, uint32_t height, VkFormat format, VkIma
void QVk_CreateDepthBuffer(VkSampleCountFlagBits sampleCount, qvktexture_t *depthBuffer); void QVk_CreateDepthBuffer(VkSampleCountFlagBits sampleCount, qvktexture_t *depthBuffer);
void QVk_CreateColorBuffer(VkSampleCountFlagBits sampleCount, qvktexture_t *colorBuffer, int extraFlags); void QVk_CreateColorBuffer(VkSampleCountFlagBits sampleCount, qvktexture_t *colorBuffer, int extraFlags);
void QVk_CreateTexture(qvktexture_t *texture, const unsigned char *data, uint32_t width, uint32_t height, qvksampler_t samplerType, qboolean clampToEdge); void QVk_CreateTexture(qvktexture_t *texture, const unsigned char *data, uint32_t width, uint32_t height, qvksampler_t samplerType, qboolean clampToEdge);
void QVk_ReleaseTexture(qvktexture_t *texture);
void QVk_UpdateTextureData(qvktexture_t *texture, const unsigned char *data, uint32_t offset_x, uint32_t offset_y, uint32_t width, uint32_t height); void QVk_UpdateTextureData(qvktexture_t *texture, const unsigned char *data, uint32_t offset_x, uint32_t offset_y, uint32_t width, uint32_t height);
VkSampler QVk_UpdateTextureSampler(qvktexture_t *texture, qvksampler_t samplerType, qboolean clampToEdge); VkSampler QVk_UpdateTextureSampler(qvktexture_t *texture, qvksampler_t samplerType, qboolean clampToEdge);
void QVk_ReadPixels(uint8_t *dstBuffer, const VkOffset2D *offset, const VkExtent2D *extent); void QVk_ReadPixels(uint8_t *dstBuffer, const VkOffset2D *offset, const VkExtent2D *extent);

View File

@ -270,6 +270,8 @@ RE_Draw_StretchRaw
*/ */
extern unsigned r_rawpalette[256]; extern unsigned r_rawpalette[256];
extern qvktexture_t vk_rawTexture; extern qvktexture_t vk_rawTexture;
static int vk_rawTexture_height;
static int vk_rawTexture_width;
void RE_Draw_StretchRaw (int x, int y, int w, int h, int cols, int rows, byte *data) void RE_Draw_StretchRaw (int x, int y, int w, int h, int cols, int rows, byte *data)
{ {
@ -333,12 +335,22 @@ void RE_Draw_StretchRaw (int x, int y, int w, int h, int cols, int rows, byte *d
SmoothColorImage(raw_image32, scaled_size, (scaled_size) >> 7); SmoothColorImage(raw_image32, scaled_size, (scaled_size) >> 7);
} }
if (vk_rawTexture.resource.image != VK_NULL_HANDLE &&
(vk_rawTexture_width != cols || vk_rawTexture_height != rows))
{
QVk_ReleaseTexture(&vk_rawTexture);
QVVKTEXTURE_CLEAR(vk_rawTexture);
}
if (vk_rawTexture.resource.image != VK_NULL_HANDLE) if (vk_rawTexture.resource.image != VK_NULL_HANDLE)
{ {
QVk_UpdateTextureData(&vk_rawTexture, (unsigned char*)raw_image32, 0, 0, cols, rows); QVk_UpdateTextureData(&vk_rawTexture, (unsigned char*)raw_image32, 0, 0, cols, rows);
} }
else else
{ {
vk_rawTexture_width = cols;
vk_rawTexture_height = rows;
QVVKTEXTURE_CLEAR(vk_rawTexture); QVVKTEXTURE_CLEAR(vk_rawTexture);
QVk_CreateTexture(&vk_rawTexture, (unsigned char*)raw_image32, cols, rows, QVk_CreateTexture(&vk_rawTexture, (unsigned char*)raw_image32, cols, rows,
vk_current_sampler, false); vk_current_sampler, false);

View File

@ -476,7 +476,7 @@ void QVk_UpdateTextureData(qvktexture_t *texture, const unsigned char *data, uin
} }
} }
static void QVk_ReleaseTexture(qvktexture_t *texture) void QVk_ReleaseTexture(qvktexture_t *texture)
{ {
QVk_SubmitStagingBuffers(); QVk_SubmitStagingBuffers();
if (vk_device.logical != VK_NULL_HANDLE) if (vk_device.logical != VK_NULL_HANDLE)
@ -584,7 +584,7 @@ void Vk_ImageList_f (void)
for (i = 0, image = vktextures; i < numvktextures; i++, image++) for (i = 0, image = vktextures; i < numvktextures; i++, image++)
{ {
char *in_use = ""; const char *in_use = "";
if (image->vk_texture.resource.image == VK_NULL_HANDLE) if (image->vk_texture.resource.image == VK_NULL_HANDLE)
continue; continue;