Fix freeze on fullscreen
This commit is contained in:
parent
8efe95258a
commit
f0892fd902
2 changed files with 8 additions and 22 deletions
29
src/vulkan.c
29
src/vulkan.c
|
@ -1,7 +1,6 @@
|
||||||
#include "vulkan.h"
|
#include "vulkan.h"
|
||||||
#include "kitty.h"
|
#include "kitty.h"
|
||||||
#include "log.h"
|
#include "log.h"
|
||||||
#include "matrix.h"
|
|
||||||
#include "types.h"
|
#include "types.h"
|
||||||
|
|
||||||
#include "image.h"
|
#include "image.h"
|
||||||
|
@ -12,24 +11,6 @@
|
||||||
#include <vulkan/vulkan.h>
|
#include <vulkan/vulkan.h>
|
||||||
#include <vulkan/vulkan_core.h>
|
#include <vulkan/vulkan_core.h>
|
||||||
|
|
||||||
#define VERTEX_ATTRIBUTE_COUNT 2
|
|
||||||
|
|
||||||
#define QUAD_VERTEX_COUNT 3
|
|
||||||
struct Vertex quad_vertices[QUAD_VERTEX_COUNT] = {
|
|
||||||
(struct Vertex){(struct Vec2){.x = 0.0f, .y = -0.5f},
|
|
||||||
(struct Vec3){1.0f, 0.0f, 1.0f}},
|
|
||||||
(struct Vertex){(struct Vec2){.x = 0.5f, .y = 0.5f},
|
|
||||||
(struct Vec3){1.0f, 0.0f, 0.2f}},
|
|
||||||
(struct Vertex){(struct Vec2){.x = -0.5f, .y = 0.5f},
|
|
||||||
(struct Vec3){0.2f, 0.0f, 1.0f}},
|
|
||||||
};
|
|
||||||
|
|
||||||
struct UBO {
|
|
||||||
struct mat3x3 model;
|
|
||||||
struct mat3x3 view;
|
|
||||||
struct mat3x3 proj;
|
|
||||||
};
|
|
||||||
|
|
||||||
VkVertexInputBindingDescription get_vertex_binding_description() {
|
VkVertexInputBindingDescription get_vertex_binding_description() {
|
||||||
VkVertexInputBindingDescription description = {0};
|
VkVertexInputBindingDescription description = {0};
|
||||||
description.binding = 0;
|
description.binding = 0;
|
||||||
|
@ -796,9 +777,12 @@ void uninit_vk(struct Vk *state) {
|
||||||
}
|
}
|
||||||
|
|
||||||
void vk_draw(struct Vk *state) {
|
void vk_draw(struct Vk *state) {
|
||||||
CHECK_VK_RESULT(vkWaitForFences(
|
if (state->should_wait_for_fences) {
|
||||||
state->device, 1, &state->flights[state->current_frame].in_flight_fence,
|
CHECK_VK_RESULT(vkWaitForFences(
|
||||||
VK_TRUE, UINT64_MAX));
|
state->device, 1, &state->flights[state->current_frame].in_flight_fence,
|
||||||
|
VK_TRUE, UINT64_MAX));
|
||||||
|
state->should_wait_for_fences = true;
|
||||||
|
}
|
||||||
CHECK_VK_RESULT(vkResetFences(
|
CHECK_VK_RESULT(vkResetFences(
|
||||||
state->device, 1, &state->flights[state->current_frame].in_flight_fence));
|
state->device, 1, &state->flights[state->current_frame].in_flight_fence));
|
||||||
|
|
||||||
|
@ -815,6 +799,7 @@ void vk_draw(struct Vk *state) {
|
||||||
meow("recreating swapchain");
|
meow("recreating swapchain");
|
||||||
CHECK_VK_RESULT(vkDeviceWaitIdle(state->device));
|
CHECK_VK_RESULT(vkDeviceWaitIdle(state->device));
|
||||||
recreate_swapchain(state);
|
recreate_swapchain(state);
|
||||||
|
state->should_wait_for_fences = false;
|
||||||
return;
|
return;
|
||||||
} else if (result < 0) {
|
} else if (result < 0) {
|
||||||
CHECK_VK_RESULT(result);
|
CHECK_VK_RESULT(result);
|
||||||
|
|
|
@ -95,6 +95,7 @@ struct Vk {
|
||||||
uint32_t width;
|
uint32_t width;
|
||||||
uint32_t heigh;
|
uint32_t heigh;
|
||||||
VkRenderPass render_pass;
|
VkRenderPass render_pass;
|
||||||
|
bool should_wait_for_fences;
|
||||||
|
|
||||||
struct GpuMem *mem;
|
struct GpuMem *mem;
|
||||||
struct da_Kitty kitties;
|
struct da_Kitty kitties;
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue