fixing things

This commit is contained in:
2025-01-07 01:20:26 +01:00
parent 3683a48e17
commit 1f482719e6
21 changed files with 242 additions and 199 deletions

1
.gitignore vendored
View File

@@ -13,6 +13,7 @@
*.pdb *.pdb
*.gch *.gch
*.pch *.pch
*.sym
*.exe *.exe
*vgcore.* *vgcore.*
*.gdb_history *.gdb_history

View File

@@ -18,23 +18,25 @@ typedef struct
static mlx_color pixels_circle[CIRCLE_DIAMETER * CIRCLE_DIAMETER] = { 0 }; static mlx_color pixels_circle[CIRCLE_DIAMETER * CIRCLE_DIAMETER] = { 0 };
#define THRESHOLD 200
void update(void* param) void update(void* param)
{ {
static int i = 0; static int i = 0;
mlx_t* mlx = (mlx_t*)param; mlx_t* mlx = (mlx_t*)param;
if(i > 200) if(i > THRESHOLD)
{ {
mlx_clear_window(mlx->mlx, mlx->win, (mlx_color){ .rgba = 0x334D4DFF }); mlx_clear_window(mlx->mlx, mlx->win, (mlx_color){ .rgba = 0x334D4DFF });
mlx_put_transformed_image_to_window(mlx->mlx, mlx->win, mlx->logo_bmp, 220, 40, 0.5f, 0.5f, i); mlx_put_transformed_image_to_window(mlx->mlx, mlx->win, mlx->logo_bmp, 220, 40, 0.5f, 0.5f, i);
} }
if(i >= 250) if(i >= THRESHOLD + THRESHOLD / 4)
mlx_set_font_scale(mlx->mlx, "default", 16.f); mlx_set_font_scale(mlx->mlx, "default", 16.f);
else else
mlx_set_font_scale(mlx->mlx, "default", 6.f); mlx_set_font_scale(mlx->mlx, "default", 6.f);
mlx_string_put(mlx->mlx, mlx->win, 160, 120, (mlx_color){ .rgba = 0xFF2066FF }, "this text should be hidden"); mlx_string_put(mlx->mlx, mlx->win, 160, 120, (mlx_color){ .rgba = 0xFF2066FF }, "this text should be behind");
mlx_put_image_to_window(mlx->mlx, mlx->win, mlx->logo_png, 100, 100); mlx_put_image_to_window(mlx->mlx, mlx->win, mlx->logo_png, 100, 100);
mlx_put_image_to_window(mlx->mlx, mlx->win, mlx->img, 150, 60); mlx_put_image_to_window(mlx->mlx, mlx->win, mlx->img, 150, 60);
@@ -50,7 +52,7 @@ void update(void* param)
color += (color < 255); color += (color < 255);
} }
if(i < 200) if(i < THRESHOLD)
mlx_put_transformed_image_to_window(mlx->mlx, mlx->win, mlx->logo_jpg, 210, 150, 0.5f, 2.0f, 0.0f); mlx_put_transformed_image_to_window(mlx->mlx, mlx->win, mlx->logo_jpg, 210, 150, 0.5f, 2.0f, 0.0f);
else else
mlx_put_transformed_image_to_window(mlx->mlx, mlx->win, mlx->logo_jpg, 210, 150, fabs(sin(i / 100.0f)), fabs(cos(i / 100.0f) * 2.0f), 0.0f); mlx_put_transformed_image_to_window(mlx->mlx, mlx->win, mlx->logo_jpg, 210, 150, fabs(sin(i / 100.0f)), fabs(cos(i / 100.0f) * 2.0f), 0.0f);
@@ -59,7 +61,7 @@ void update(void* param)
mlx_pixel_put_region(mlx->mlx, mlx->win, 200, 170, CIRCLE_DIAMETER, CIRCLE_DIAMETER, pixels_circle); mlx_pixel_put_region(mlx->mlx, mlx->win, 200, 170, CIRCLE_DIAMETER, CIRCLE_DIAMETER, pixels_circle);
i++; i++; // Will overflow and I don't care
} }
mlx_image create_image(mlx_t* mlx) mlx_image create_image(mlx_t* mlx)
@@ -166,14 +168,9 @@ int main(void)
mlx_on_event(mlx.mlx, mlx.win, MLX_KEYDOWN, key_hook, &mlx); mlx_on_event(mlx.mlx, mlx.win, MLX_KEYDOWN, key_hook, &mlx);
mlx_on_event(mlx.mlx, mlx.win, MLX_WINDOW_EVENT, window_hook, &mlx); mlx_on_event(mlx.mlx, mlx.win, MLX_WINDOW_EVENT, window_hook, &mlx);
mlx.logo_png = mlx_new_image_from_file(mlx.mlx, "42_logo.png", &dummy, &dummy);
mlx.logo_bmp = mlx_new_image_from_file(mlx.mlx, "42_logo.bmp", &dummy, &dummy); mlx.logo_bmp = mlx_new_image_from_file(mlx.mlx, "42_logo.bmp", &dummy, &dummy);
//mlx.logo_jpg = mlx_new_image_from_file(mlx.mlx, "42_logo.jpg", &dummy, &dummy); mlx.logo_png = mlx_new_image_from_file(mlx.mlx, "42_logo.png", &dummy, &dummy);
mlx.logo_jpg = mlx_new_image(mlx.mlx, dummy, dummy); mlx.logo_jpg = mlx_new_image_from_file(mlx.mlx, "42_logo.jpg", &dummy, &dummy);
mlx_color* data = (mlx_color*)malloc(dummy * dummy * sizeof(mlx_color));
mlx_get_image_region(mlx.mlx, mlx.logo_png, 0, 0, dummy, dummy, data);
mlx_set_image_region(mlx.mlx, mlx.logo_jpg, 0, 0, dummy, dummy, data);
mlx_pixel_put(mlx.mlx, mlx.win, 200, 10, (mlx_color){ .rgba = 0xFF00FFFF }); mlx_pixel_put(mlx.mlx, mlx.win, 200, 10, (mlx_color){ .rgba = 0xFF00FFFF });
mlx_put_image_to_window(mlx.mlx, mlx.win, mlx.logo_png, 0, 0); mlx_put_image_to_window(mlx.mlx, mlx.win, mlx.logo_png, 0, 0);

View File

@@ -6,7 +6,7 @@
/* By: maldavid <contact@kbz8.me> +#+ +:+ +#+ */ /* By: maldavid <contact@kbz8.me> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */ /* +#+#+#+#+#+ +#+ */
/* Created: 2022/10/04 16:56:35 by maldavid #+# #+# */ /* Created: 2022/10/04 16:56:35 by maldavid #+# #+# */
/* Updated: 2024/12/20 00:42:01 by maldavid ### ########.fr */ /* Updated: 2025/01/05 22:44:22 by maldavid ### ########.fr */
/* */ /* */
/* ************************************************************************** */ /* ************************************************************************** */
@@ -79,7 +79,7 @@ MLX_API mlx_context mlx_init();
* @brief Caps the FPS * @brief Caps the FPS
* *
* @param mlx Internal MLX application * @param mlx Internal MLX application
* @param fps The FPS cap * @param fps The FPS cap or 0 for vsync
*/ */
MLX_API void mlx_set_fps_goal(mlx_context mlx, int fps); MLX_API void mlx_set_fps_goal(mlx_context mlx, int fps);

View File

@@ -6,12 +6,12 @@
/* By: maldavid <kbz_8.dev@akel-engine.com> +#+ +:+ +#+ */ /* By: maldavid <kbz_8.dev@akel-engine.com> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */ /* +#+#+#+#+#+ +#+ */
/* Created: 2023/11/10 08:49:17 by maldavid #+# #+# */ /* Created: 2023/11/10 08:49:17 by maldavid #+# #+# */
/* Updated: 2024/12/17 00:35:35 by maldavid ### ########.fr */ /* Updated: 2025/01/07 00:17:45 by maldavid ### ########.fr */
/* */ /* */
/* ************************************************************************** */ /* ************************************************************************** */
#ifndef __MLX_PROFILE__ #ifndef MACROLIBX_PROFILE_H
#define __MLX_PROFILE__ #define MACROLIBX_PROFILE_H
// Try to identify the compiler // Try to identify the compiler
#if defined(__BORLANDC__) #if defined(__BORLANDC__)

View File

@@ -50,6 +50,13 @@ namespace mlx
void Application::SetFPSCap(std::uint32_t fps) noexcept void Application::SetFPSCap(std::uint32_t fps) noexcept
{ {
if(fps == 0)
{
SDL_DisplayMode mode;
if(!SDL_GetCurrentDisplayMode(1, &mode))
return;
fps = mode.refresh_rate;
}
m_fps.SetMaxFPS(fps); m_fps.SetMaxFPS(fps);
} }

View File

@@ -22,13 +22,13 @@ namespace mlx
void Render() noexcept; void Render() noexcept;
inline void ResetRenderData(mlx_color color) noexcept; void ResetRenderData(mlx_color color) noexcept;
inline void PixelPut(int x, int y, mlx_color color) noexcept; void PixelPut(int x, int y, mlx_color color) noexcept;
inline void PixelPutArray(int x, int y, mlx_color* color, std::size_t pixels_size) noexcept; void PixelPutArray(int x, int y, mlx_color* color, std::size_t pixels_size) noexcept;
inline void PixelPutRegion(int x, int y, int w, int h, mlx_color* color) noexcept; void PixelPutRegion(int x, int y, int w, int h, mlx_color* color) noexcept;
inline void StringPut(int x, int y, mlx_color color, std::string str); void StringPut(int x, int y, mlx_color color, std::string str);
inline void TexturePut(NonOwningPtr<class Texture> texture, int x, int y, float scale_x, float scale_y, float angle); void TexturePut(NonOwningPtr<class Texture> texture, int x, int y, float scale_x, float scale_y, float angle);
inline void TryEraseSpritesInScene(NonOwningPtr<Texture> texture) noexcept; inline void TryEraseSpritesInScene(NonOwningPtr<Texture> texture) noexcept;

View File

@@ -3,107 +3,6 @@
namespace mlx namespace mlx
{ {
void GraphicsSupport::ResetRenderData(mlx_color color) noexcept
{
MLX_PROFILE_FUNCTION();
Vec4f vec_color = {
static_cast<float>(color.r) / 255.0f,
static_cast<float>(color.g) / 255.0f,
static_cast<float>(color.b) / 255.0f,
static_cast<float>(color.a) / 255.0f
};
p_scene->ResetScene(std::move(vec_color));
m_put_pixel_manager.ResetRenderData();
m_draw_layer = 0;
m_pixelput_called = false;
}
void GraphicsSupport::PixelPut(int x, int y, mlx_color color) noexcept
{
MLX_PROFILE_FUNCTION();
NonOwningPtr<Texture> texture = m_put_pixel_manager.DrawPixel(x, y, m_draw_layer, color);
if(texture)
{
m_pixelput_called = true;
Sprite& new_sprite = p_scene->CreateSprite(texture);
new_sprite.SetPosition(Vec2f{ 0.0f, 0.0f });
}
}
void GraphicsSupport::PixelPutArray(int x, int y, mlx_color* pixels, std::size_t pixels_size) noexcept
{
MLX_PROFILE_FUNCTION();
NonOwningPtr<Texture> texture = m_put_pixel_manager.DrawPixelsArray(x, y, m_draw_layer, pixels, pixels_size);
if(texture)
{
m_pixelput_called = true;
Sprite& new_sprite = p_scene->CreateSprite(texture);
new_sprite.SetPosition(Vec2f{ 0.0f, 0.0f });
}
}
void GraphicsSupport::PixelPutRegion(int x, int y, int w, int h, mlx_color* pixels) noexcept
{
MLX_PROFILE_FUNCTION();
NonOwningPtr<Texture> texture = m_put_pixel_manager.DrawPixelsRegion(x, y, w, h, m_draw_layer, pixels);
if(texture)
{
m_pixelput_called = true;
Sprite& new_sprite = p_scene->CreateSprite(texture);
new_sprite.SetPosition(Vec2f{ 0.0f, 0.0f });
}
}
void GraphicsSupport::StringPut(int x, int y, mlx_color color, std::string str)
{
MLX_PROFILE_FUNCTION();
if(str.empty())
return;
Vec4f vec_color = {
static_cast<float>(color.r) / 255.0f,
static_cast<float>(color.g) / 255.0f,
static_cast<float>(color.b) / 255.0f,
static_cast<float>(color.a) / 255.0f,
};
NonOwningPtr<Text> text = p_scene->GetTextFromPositionAndColor(str, Vec2f{ static_cast<float>(x), static_cast<float>(y) }, vec_color);
if(!text)
{
if(m_pixelput_called)
{
m_draw_layer++;
m_pixelput_called = false;
}
Text& new_text = p_scene->CreateText(str);
new_text.SetPosition(Vec2f{ static_cast<float>(x), static_cast<float>(y) });
new_text.SetColor(std::move(vec_color));
}
else if(!p_scene->IsTextAtGivenDrawLayer(str, m_draw_layer))
p_scene->BringToDrawLayer(text.Get(), m_draw_layer);
}
void GraphicsSupport::TexturePut(NonOwningPtr<Texture> texture, int x, int y, float scale_x, float scale_y, float angle)
{
MLX_PROFILE_FUNCTION();
NonOwningPtr<Sprite> sprite = p_scene->GetSpriteFromTexturePositionScaleRotation(texture, Vec2f{ static_cast<float>(x), static_cast<float>(y) }, scale_x, scale_y, angle);
if(!sprite)
{
if(m_pixelput_called)
{
m_draw_layer++;
m_pixelput_called = false;
}
Sprite& new_sprite = p_scene->CreateSprite(texture);
new_sprite.SetCenter(Vec2f{ texture->GetWidth() / 2.0f, texture->GetHeight() / 2.0f });
new_sprite.SetPosition(Vec2f{ static_cast<float>(x), static_cast<float>(y) });
new_sprite.SetScale(Vec2f{ scale_x, scale_y });
new_sprite.SetRotation(angle);
}
else if(!p_scene->IsTextureAtGivenDrawLayer(texture, m_draw_layer))
p_scene->BringToDrawLayer(sprite.Get(), m_draw_layer);
}
void GraphicsSupport::TryEraseSpritesInScene(NonOwningPtr<Texture> texture) noexcept void GraphicsSupport::TryEraseSpritesInScene(NonOwningPtr<Texture> texture) noexcept
{ {
MLX_PROFILE_FUNCTION(); MLX_PROFILE_FUNCTION();

View File

@@ -29,17 +29,21 @@ namespace mlx
void BringToDrawLayer(NonOwningPtr<Drawable> drawable, std::uint64_t draw_layer); void BringToDrawLayer(NonOwningPtr<Drawable> drawable, std::uint64_t draw_layer);
inline void ResetScene(Vec4f clear) { m_drawables.clear(); m_clear_color = std::move(clear); } inline void ResetScene(Vec4f clear) { m_drawables.clear(); m_clear_color = std::move(clear); m_has_scene_changed = true; }
inline const Vec4f& GetClearColor() const noexcept { return m_clear_color; } inline const Vec4f& GetClearColor() const noexcept { return m_clear_color; }
[[nodiscard]] MLX_FORCEINLINE const std::vector<std::shared_ptr<Drawable>>& GetDrawables() const noexcept { return m_drawables; } [[nodiscard]] MLX_FORCEINLINE const std::vector<std::shared_ptr<Drawable>>& GetDrawables() const noexcept { return m_drawables; }
inline void ResetChangeChecker() noexcept { m_has_scene_changed = false; }
inline bool HasSceneChanged() const noexcept { return m_has_scene_changed; }
~Scene() = default; ~Scene() = default;
private: private:
std::vector<std::shared_ptr<Drawable>> m_drawables; std::vector<std::shared_ptr<Drawable>> m_drawables;
std::shared_ptr<Font> p_bound_font; std::shared_ptr<Font> p_bound_font;
Vec4f m_clear_color = { 0.0f, 0.0f, 0.0f, 1.0f }; Vec4f m_clear_color = { 0.0f, 0.0f, 0.0f, 1.0f };
bool m_has_scene_changed = false;
}; };
} }

View File

@@ -66,6 +66,7 @@ namespace mlx
catch(...) { return nullptr; } catch(...) { return nullptr; }
m_image_registry.RegisterTexture(texture); m_image_registry.RegisterTexture(texture);
image->texture = texture; image->texture = texture;
texture->Clear(VK_NULL_HANDLE, Vec4f{ 0.0f });
return image; return image;
} }

View File

@@ -47,8 +47,6 @@ extern "C"
MLX_CHECK_APPLICATION_POINTER(mlx); MLX_CHECK_APPLICATION_POINTER(mlx);
if(fps < 0) if(fps < 0)
mlx::Error("You cannot set a negative FPS cap (nice try)"); mlx::Error("You cannot set a negative FPS cap (nice try)");
else if(fps == 0)
mlx::Error("You cannot set a FPS cap to 0 (nice try)");
else else
mlx->app->SetFPSCap(static_cast<std::uint32_t>(fps)); mlx->app->SetFPSCap(static_cast<std::uint32_t>(fps));
} }

View File

@@ -51,6 +51,107 @@ namespace mlx
#endif #endif
} }
void GraphicsSupport::ResetRenderData(mlx_color color) noexcept
{
MLX_PROFILE_FUNCTION();
Vec4f vec_color = {
static_cast<float>(color.r) / 255.0f,
static_cast<float>(color.g) / 255.0f,
static_cast<float>(color.b) / 255.0f,
static_cast<float>(color.a) / 255.0f
};
p_scene->ResetScene(std::move(vec_color));
m_put_pixel_manager.ResetRenderData();
m_draw_layer = 0;
m_pixelput_called = false;
}
void GraphicsSupport::PixelPut(int x, int y, mlx_color color) noexcept
{
MLX_PROFILE_FUNCTION();
NonOwningPtr<Texture> texture = m_put_pixel_manager.DrawPixel(x, y, m_draw_layer, color);
if(texture)
{
m_pixelput_called = true;
Sprite& new_sprite = p_scene->CreateSprite(texture);
new_sprite.SetPosition(Vec2f{ 0.0f, 0.0f });
}
}
void GraphicsSupport::PixelPutArray(int x, int y, mlx_color* pixels, std::size_t pixels_size) noexcept
{
MLX_PROFILE_FUNCTION();
NonOwningPtr<Texture> texture = m_put_pixel_manager.DrawPixelsArray(x, y, m_draw_layer, pixels, pixels_size);
if(texture)
{
m_pixelput_called = true;
Sprite& new_sprite = p_scene->CreateSprite(texture);
new_sprite.SetPosition(Vec2f{ 0.0f, 0.0f });
}
}
void GraphicsSupport::PixelPutRegion(int x, int y, int w, int h, mlx_color* pixels) noexcept
{
MLX_PROFILE_FUNCTION();
NonOwningPtr<Texture> texture = m_put_pixel_manager.DrawPixelsRegion(x, y, w, h, m_draw_layer, pixels);
if(texture)
{
m_pixelput_called = true;
Sprite& new_sprite = p_scene->CreateSprite(texture);
new_sprite.SetPosition(Vec2f{ 0.0f, 0.0f });
}
}
void GraphicsSupport::StringPut(int x, int y, mlx_color color, std::string str)
{
MLX_PROFILE_FUNCTION();
if(str.empty())
return;
Vec4f vec_color = {
static_cast<float>(color.r) / 255.0f,
static_cast<float>(color.g) / 255.0f,
static_cast<float>(color.b) / 255.0f,
static_cast<float>(color.a) / 255.0f,
};
NonOwningPtr<Text> text = p_scene->GetTextFromPositionAndColor(str, Vec2f{ static_cast<float>(x), static_cast<float>(y) }, vec_color);
if(!text)
{
if(m_pixelput_called)
{
m_draw_layer++;
m_pixelput_called = false;
}
Text& new_text = p_scene->CreateText(str);
new_text.SetPosition(Vec2f{ static_cast<float>(x), static_cast<float>(y) });
new_text.SetColor(std::move(vec_color));
}
else if(!p_scene->IsTextAtGivenDrawLayer(str, m_draw_layer))
p_scene->BringToDrawLayer(text.Get(), m_draw_layer);
}
void GraphicsSupport::TexturePut(NonOwningPtr<Texture> texture, int x, int y, float scale_x, float scale_y, float angle)
{
MLX_PROFILE_FUNCTION();
NonOwningPtr<Sprite> sprite = p_scene->GetSpriteFromTexturePositionScaleRotation(texture, Vec2f{ static_cast<float>(x), static_cast<float>(y) }, scale_x, scale_y, angle);
if(!sprite)
{
if(m_pixelput_called)
{
m_draw_layer++;
m_pixelput_called = false;
}
Sprite& new_sprite = p_scene->CreateSprite(texture);
new_sprite.SetCenter(Vec2f{ texture->GetWidth() / 2.0f, texture->GetHeight() / 2.0f });
new_sprite.SetPosition(Vec2f{ static_cast<float>(x), static_cast<float>(y) });
new_sprite.SetScale(Vec2f{ scale_x, scale_y });
new_sprite.SetRotation(angle);
}
else if(!p_scene->IsTextureAtGivenDrawLayer(texture, m_draw_layer))
p_scene->BringToDrawLayer(sprite.Get(), m_draw_layer);
}
GraphicsSupport::~GraphicsSupport() GraphicsSupport::~GraphicsSupport()
{ {
MLX_PROFILE_FUNCTION(); MLX_PROFILE_FUNCTION();

View File

@@ -18,12 +18,14 @@ namespace mlx
{ {
std::shared_ptr<Sprite> new_sprite = std::make_shared<Sprite>(drawable->GetMesh(), texture); std::shared_ptr<Sprite> new_sprite = std::make_shared<Sprite>(drawable->GetMesh(), texture);
m_drawables.push_back(new_sprite); m_drawables.push_back(new_sprite);
m_has_scene_changed = true;
return *new_sprite; return *new_sprite;
} }
} }
std::shared_ptr<Sprite> sprite = std::make_shared<Sprite>(texture); std::shared_ptr<Sprite> sprite = std::make_shared<Sprite>(texture);
m_drawables.push_back(sprite); m_drawables.push_back(sprite);
m_has_scene_changed = true;
return *sprite; return *sprite;
} }
@@ -83,12 +85,14 @@ namespace mlx
{ {
std::shared_ptr<Text> new_text = std::make_shared<Text>(text, p_bound_font, drawable->GetMesh()); std::shared_ptr<Text> new_text = std::make_shared<Text>(text, p_bound_font, drawable->GetMesh());
m_drawables.push_back(new_text); m_drawables.push_back(new_text);
m_has_scene_changed = true;
return *new_text; return *new_text;
} }
} }
std::shared_ptr<Text> new_text = std::make_shared<Text>(text, p_bound_font); std::shared_ptr<Text> new_text = std::make_shared<Text>(text, p_bound_font);
m_drawables.push_back(new_text); m_drawables.push_back(new_text);
m_has_scene_changed = true;
return *new_text; return *new_text;
} }
@@ -127,5 +131,6 @@ namespace mlx
if(it == m_drawables.end()) if(it == m_drawables.end())
return; return;
std::swap(*it, *(m_drawables.begin() + draw_layer)); std::swap(*it, *(m_drawables.begin() + draw_layer));
m_has_scene_changed = true;
} }
} }

View File

@@ -227,9 +227,27 @@ namespace mlx
{ {
MLX_PROFILE_FUNCTION(); MLX_PROFILE_FUNCTION();
Verify(m_sets[i] != VK_NULL_HANDLE, "invalid descriptor"); Verify(m_sets[i] != VK_NULL_HANDLE, "invalid descriptor");
std::vector<VkWriteDescriptorSet> writes;
std::vector<VkDescriptorBufferInfo> buffer_infos; std::size_t image_count = 0;
std::vector<VkDescriptorImageInfo> image_infos; std::size_t buffer_count = 0;
for(auto& descriptor : m_descriptors)
{
if(descriptor.image_ptr)
image_count++;
else if(descriptor.uniform_buffer_ptr || descriptor.storage_buffer_ptr)
buffer_count++;
else
FatalError("unknown descriptor data");
}
std::vector<VkWriteDescriptorSet> writes(m_descriptors.size());
std::vector<VkDescriptorBufferInfo> buffer_infos(buffer_count);
std::vector<VkDescriptorImageInfo> image_infos(image_count);
std::size_t buffer_index = 0;
std::size_t image_index = 0;
std::size_t write_index = 0;
for(auto& descriptor : m_descriptors) for(auto& descriptor : m_descriptors)
{ {
if(descriptor.image_ptr) if(descriptor.image_ptr)
@@ -239,8 +257,9 @@ namespace mlx
info.sampler = descriptor.image_ptr->GetSampler(); info.sampler = descriptor.image_ptr->GetSampler();
info.imageLayout = descriptor.image_ptr->GetLayout(); info.imageLayout = descriptor.image_ptr->GetLayout();
info.imageView = descriptor.image_ptr->GetImageView(); info.imageView = descriptor.image_ptr->GetImageView();
image_infos.push_back(info); image_infos[image_index] = std::move(info);
writes.push_back(kvfWriteImageToDescriptorSet(RenderCore::Get().GetDevice(), m_sets[i], &image_infos.back(), descriptor.binding)); writes[write_index] = kvfWriteImageToDescriptorSet(RenderCore::Get().GetDevice(), m_sets[i], &image_infos[image_index], descriptor.binding);
image_index++;
} }
else if(descriptor.uniform_buffer_ptr) else if(descriptor.uniform_buffer_ptr)
{ {
@@ -248,8 +267,9 @@ namespace mlx
info.buffer = descriptor.uniform_buffer_ptr->Get(); info.buffer = descriptor.uniform_buffer_ptr->Get();
info.offset = descriptor.uniform_buffer_ptr->GetOffset(); info.offset = descriptor.uniform_buffer_ptr->GetOffset();
info.range = VK_WHOLE_SIZE; info.range = VK_WHOLE_SIZE;
buffer_infos.push_back(info); buffer_infos[buffer_index] = std::move(info);
writes.push_back(kvfWriteUniformBufferToDescriptorSet(RenderCore::Get().GetDevice(), m_sets[i], &buffer_infos.back(), descriptor.binding)); writes[write_index] = kvfWriteUniformBufferToDescriptorSet(RenderCore::Get().GetDevice(), m_sets[i], &buffer_infos[buffer_index], descriptor.binding);
buffer_index++;
} }
else if(descriptor.storage_buffer_ptr) else if(descriptor.storage_buffer_ptr)
{ {
@@ -257,9 +277,11 @@ namespace mlx
info.buffer = descriptor.storage_buffer_ptr->Get(); info.buffer = descriptor.storage_buffer_ptr->Get();
info.offset = descriptor.storage_buffer_ptr->GetOffset(); info.offset = descriptor.storage_buffer_ptr->GetOffset();
info.range = VK_WHOLE_SIZE; info.range = VK_WHOLE_SIZE;
buffer_infos.push_back(info); buffer_infos[buffer_index] = std::move(info);
writes.push_back(kvfWriteStorageBufferToDescriptorSet(RenderCore::Get().GetDevice(), m_sets[i], &buffer_infos.back(), descriptor.binding)); writes[write_index] = kvfWriteStorageBufferToDescriptorSet(RenderCore::Get().GetDevice(), m_sets[i], &buffer_infos[buffer_index], descriptor.binding);
buffer_index++;
} }
write_index++;
} }
RenderCore::Get().vkUpdateDescriptorSets(RenderCore::Get().GetDevice(), writes.size(), writes.data(), 0, nullptr); RenderCore::Get().vkUpdateDescriptorSets(RenderCore::Get().GetDevice(), writes.size(), writes.data(), 0, nullptr);
} }

View File

@@ -100,9 +100,9 @@ namespace mlx
for(auto& drawable : drawables) for(auto& drawable : drawables)
{ {
// Check every textures and update modified ones to GPU before starting the render pass // Check every textures and update modified ones to GPU before starting the render pass
drawable->Update(cmd);
if(!drawable->IsSetInit()) if(!drawable->IsSetInit())
drawable->UpdateDescriptorSet(p_texture_set); drawable->UpdateDescriptorSet(p_texture_set);
drawable->Update(cmd);
} }
m_pipeline.BindPipeline(cmd, 0, {}); m_pipeline.BindPipeline(cmd, 0, {});

View File

@@ -21,6 +21,7 @@ namespace mlx
void RenderPasses::Pass(Scene& scene, Renderer& renderer, const Vec4f& clear_color) void RenderPasses::Pass(Scene& scene, Renderer& renderer, const Vec4f& clear_color)
{ {
bool force_render = false;
if(!m_main_render_texture.IsInit()) if(!m_main_render_texture.IsInit())
{ {
VkExtent2D extent; VkExtent2D extent;
@@ -34,11 +35,15 @@ namespace mlx
m_main_render_texture.Init({}, extent.width, extent.height, VK_FORMAT_R8G8B8A8_UNORM, false, {}); m_main_render_texture.Init({}, extent.width, extent.height, VK_FORMAT_R8G8B8A8_UNORM, false, {});
#endif #endif
m_main_render_texture.TransitionLayout(VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL); m_main_render_texture.TransitionLayout(VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL);
force_render = true;
}
if(scene.HasSceneChanged() || force_render)
{
m_main_render_texture.Clear(renderer.GetActiveCommandBuffer(), clear_color);
m_2Dpass.Pass(scene, renderer, m_main_render_texture);
} }
m_main_render_texture.Clear(renderer.GetActiveCommandBuffer(), clear_color);
m_2Dpass.Pass(scene, renderer, m_main_render_texture);
m_final.Pass(scene, renderer, m_main_render_texture, p_render_target); m_final.Pass(scene, renderer, m_main_render_texture, p_render_target);
scene.ResetChangeChecker();
} }
void RenderPasses::Destroy() void RenderPasses::Destroy()

View File

@@ -87,6 +87,8 @@ namespace mlx
DebugLog("Vulkan: image available semaphore destroyed"); DebugLog("Vulkan: image available semaphore destroyed");
kvfDestroySemaphore(RenderCore::Get().GetDevice(), m_render_finished_semaphores[i]); kvfDestroySemaphore(RenderCore::Get().GetDevice(), m_render_finished_semaphores[i]);
DebugLog("Vulkan: render finished semaphore destroyed"); DebugLog("Vulkan: render finished semaphore destroyed");
kvfDestroyCommandBuffer(RenderCore::Get().GetDevice(), m_cmd_buffers[i]);
DebugLog("Vulkan: command buffer destroyed");
kvfDestroyFence(RenderCore::Get().GetDevice(), m_cmd_fences[i]); kvfDestroyFence(RenderCore::Get().GetDevice(), m_cmd_fences[i]);
DebugLog("Vulkan: fence destroyed"); DebugLog("Vulkan: fence destroyed");
} }

115
third_party/kvf.h vendored
View File

@@ -549,7 +549,7 @@ void __kvfCompleteDevice(VkPhysicalDevice physical, VkDevice device)
kvf_device = &__kvf_internal_devices[i]; kvf_device = &__kvf_internal_devices[i];
} }
KVF_ASSERT(kvf_device != NULL); KVF_ASSERT(kvf_device != NULL && "could not find VkDevice in registered devices");
VkCommandPool pool; VkCommandPool pool;
VkCommandPoolCreateInfo pool_info = {}; VkCommandPoolCreateInfo pool_info = {};
@@ -583,7 +583,7 @@ void __kvfCompleteDeviceCustomPhysicalDeviceAndQueues(VkPhysicalDevice physical,
kvf_device = &__kvf_internal_devices[i]; kvf_device = &__kvf_internal_devices[i];
} }
KVF_ASSERT(kvf_device != NULL); KVF_ASSERT(kvf_device != NULL && "could not find VkDevice in registered devices");
VkCommandPool pool; VkCommandPool pool;
VkCommandPoolCreateInfo pool_info = {}; VkCommandPoolCreateInfo pool_info = {};
@@ -645,7 +645,7 @@ void kvfSetAllocationCallbacks(VkDevice device, const VkAllocationCallbacks* cal
{ {
KVF_ASSERT(device != VK_NULL_HANDLE); KVF_ASSERT(device != VK_NULL_HANDLE);
__KvfDevice* kvf_device = __kvfGetKvfDeviceFromVkDevice(device); __KvfDevice* kvf_device = __kvfGetKvfDeviceFromVkDevice(device);
KVF_ASSERT(kvf_device != NULL); KVF_ASSERT(kvf_device != NULL && "could not find VkDevice in registered devices");
kvf_device->callbacks = (VkAllocationCallbacks*)KVF_MALLOC(sizeof(VkAllocationCallbacks)); kvf_device->callbacks = (VkAllocationCallbacks*)KVF_MALLOC(sizeof(VkAllocationCallbacks));
KVF_ASSERT(kvf_device->callbacks && "allocation failed :("); KVF_ASSERT(kvf_device->callbacks && "allocation failed :(");
memcpy(kvf_device->callbacks, callbacks, sizeof(VkAllocationCallbacks)); memcpy(kvf_device->callbacks, callbacks, sizeof(VkAllocationCallbacks));
@@ -703,7 +703,7 @@ void __kvfDestroyDevice(VkDevice device)
KVF_ASSERT(device != VK_NULL_HANDLE); KVF_ASSERT(device != VK_NULL_HANDLE);
__KvfDevice* kvf_device = __kvfGetKvfDeviceFromVkDevice(device); __KvfDevice* kvf_device = __kvfGetKvfDeviceFromVkDevice(device);
KVF_ASSERT(kvf_device != NULL); KVF_ASSERT(kvf_device != NULL && "could not find VkDevice in registered devices");
for(size_t i = 0; i < __kvf_internal_swapchains_size; i++) for(size_t i = 0; i < __kvf_internal_swapchains_size; i++)
{ {
@@ -758,7 +758,7 @@ void __kvfDestroyFramebuffer(VkDevice device, VkFramebuffer framebuffer)
KVF_ASSERT(device != VK_NULL_HANDLE); KVF_ASSERT(device != VK_NULL_HANDLE);
__KvfDevice* kvf_device = __kvfGetKvfDeviceFromVkDevice(device); __KvfDevice* kvf_device = __kvfGetKvfDeviceFromVkDevice(device);
KVF_ASSERT(kvf_device != NULL); KVF_ASSERT(kvf_device != NULL && "could not find VkDevice in registered devices");
for(size_t i = 0; i < __kvf_internal_framebuffers_size; i++) for(size_t i = 0; i < __kvf_internal_framebuffers_size; i++)
{ {
@@ -796,7 +796,7 @@ VkDescriptorPool __kvfDeviceCreateDescriptorPool(VkDevice device)
{ {
KVF_ASSERT(device != VK_NULL_HANDLE); KVF_ASSERT(device != VK_NULL_HANDLE);
__KvfDevice* kvf_device = __kvfGetKvfDeviceFromVkDevice(device); __KvfDevice* kvf_device = __kvfGetKvfDeviceFromVkDevice(device);
KVF_ASSERT(kvf_device != NULL); KVF_ASSERT(kvf_device != NULL && "could not find VkDevice in registered devices");
kvf_device->sets_pools_size++; kvf_device->sets_pools_size++;
kvf_device->sets_pools = (__KvfDescriptorPool*)KVF_REALLOC(kvf_device->sets_pools, kvf_device->sets_pools_size * sizeof(__KvfDescriptorPool)); kvf_device->sets_pools = (__KvfDescriptorPool*)KVF_REALLOC(kvf_device->sets_pools, kvf_device->sets_pools_size * sizeof(__KvfDescriptorPool));
memset(&kvf_device->sets_pools[kvf_device->sets_pools_size - 1], 0, sizeof(__KvfDescriptorPool)); memset(&kvf_device->sets_pools[kvf_device->sets_pools_size - 1], 0, sizeof(__KvfDescriptorPool));
@@ -831,7 +831,7 @@ void __kvfDestroyDescriptorPools(VkDevice device)
{ {
KVF_ASSERT(device != VK_NULL_HANDLE); KVF_ASSERT(device != VK_NULL_HANDLE);
__KvfDevice* kvf_device = __kvfGetKvfDeviceFromVkDevice(device); __KvfDevice* kvf_device = __kvfGetKvfDeviceFromVkDevice(device);
KVF_ASSERT(kvf_device != NULL); KVF_ASSERT(kvf_device != NULL && "could not find VkDevice in registered devices");
for(size_t i = 0; i < kvf_device->sets_pools_size; i++) for(size_t i = 0; i < kvf_device->sets_pools_size; i++)
KVF_GET_DEVICE_FUNCTION(vkDestroyDescriptorPool)(device, kvf_device->sets_pools[i].pool, NULL); KVF_GET_DEVICE_FUNCTION(vkDestroyDescriptorPool)(device, kvf_device->sets_pools[i].pool, NULL);
@@ -976,7 +976,7 @@ VkFormat kvfFindSupportFormatInCandidates(VkDevice device, VkFormat* candidates,
{ {
KVF_ASSERT(device != VK_NULL_HANDLE); KVF_ASSERT(device != VK_NULL_HANDLE);
__KvfDevice* kvf_device = __kvfGetKvfDeviceFromVkDevice(device); __KvfDevice* kvf_device = __kvfGetKvfDeviceFromVkDevice(device);
KVF_ASSERT(kvf_device != NULL); KVF_ASSERT(kvf_device != NULL && "could not find VkDevice in registered devices");
for(size_t i = 0; i < candidates_count; i++) for(size_t i = 0; i < candidates_count; i++)
{ {
VkFormatProperties props; VkFormatProperties props;
@@ -1529,7 +1529,7 @@ VkDevice kvfCreateDevice(VkPhysicalDevice physical, const char** extensions, uin
__KvfDevice* kvf_device = __kvfGetKvfDeviceFromVkPhysicalDevice(physical); __KvfDevice* kvf_device = __kvfGetKvfDeviceFromVkPhysicalDevice(physical);
KVF_ASSERT(kvf_device != NULL); KVF_ASSERT(kvf_device != NULL && "could not find VkDevice in registered devices");
uint32_t queue_count = 0; uint32_t queue_count = 0;
queue_count += (kvf_device->queues.graphics != -1); queue_count += (kvf_device->queues.graphics != -1);
@@ -1668,7 +1668,7 @@ VkDevice kvfCreateDeviceCustomPhysicalDeviceAndQueues(VkPhysicalDevice physical,
KVF_ASSERT(device != VK_NULL_HANDLE); KVF_ASSERT(device != VK_NULL_HANDLE);
KVF_ASSERT(fns != NULL); KVF_ASSERT(fns != NULL);
__KvfDevice* kvf_device = __kvfGetKvfDeviceFromVkPhysicalDevice(physical); __KvfDevice* kvf_device = __kvfGetKvfDeviceFromVkPhysicalDevice(physical);
KVF_ASSERT(kvf_device != NULL); KVF_ASSERT(kvf_device != NULL && "could not find VkDevice in registered devices");
kvf_device->fns = *fns; kvf_device->fns = *fns;
__kvfCompleteDevice(physical, device); __kvfCompleteDevice(physical, device);
} }
@@ -1685,7 +1685,7 @@ VkQueue kvfGetDeviceQueue(VkDevice device, KvfQueueType queue)
{ {
KVF_ASSERT(device != VK_NULL_HANDLE); KVF_ASSERT(device != VK_NULL_HANDLE);
__KvfDevice* kvf_device = __kvfGetKvfDeviceFromVkDevice(device); __KvfDevice* kvf_device = __kvfGetKvfDeviceFromVkDevice(device);
KVF_ASSERT(kvf_device != NULL); KVF_ASSERT(kvf_device != NULL && "could not find VkDevice in registered devices");
VkQueue vk_queue = VK_NULL_HANDLE; VkQueue vk_queue = VK_NULL_HANDLE;
if(queue == KVF_GRAPHICS_QUEUE) if(queue == KVF_GRAPHICS_QUEUE)
{ {
@@ -1709,7 +1709,7 @@ uint32_t kvfGetDeviceQueueFamily(VkDevice device, KvfQueueType queue)
{ {
KVF_ASSERT(device != VK_NULL_HANDLE); KVF_ASSERT(device != VK_NULL_HANDLE);
__KvfDevice* kvf_device = __kvfGetKvfDeviceFromVkDevice(device); __KvfDevice* kvf_device = __kvfGetKvfDeviceFromVkDevice(device);
KVF_ASSERT(kvf_device != NULL); KVF_ASSERT(kvf_device != NULL && "could not find VkDevice in registered devices");
if(queue == KVF_GRAPHICS_QUEUE) if(queue == KVF_GRAPHICS_QUEUE)
return kvf_device->queues.graphics; return kvf_device->queues.graphics;
else if(queue == KVF_PRESENT_QUEUE) else if(queue == KVF_PRESENT_QUEUE)
@@ -1726,7 +1726,7 @@ uint32_t kvfGetDeviceQueueFamily(VkDevice device, KvfQueueType queue)
KVF_ASSERT(device != VK_NULL_HANDLE); KVF_ASSERT(device != VK_NULL_HANDLE);
#ifdef KVF_IMPL_VK_NO_PROTOTYPES #ifdef KVF_IMPL_VK_NO_PROTOTYPES
__KvfDevice* kvf_device = __kvfGetKvfDeviceFromVkDevice(device); __KvfDevice* kvf_device = __kvfGetKvfDeviceFromVkDevice(device);
KVF_ASSERT(kvf_device != NULL); KVF_ASSERT(kvf_device != NULL && "could not find VkDevice in registered devices");
#endif #endif
VkPresentInfoKHR present_info = {}; VkPresentInfoKHR present_info = {};
present_info.sType = VK_STRUCTURE_TYPE_PRESENT_INFO_KHR; present_info.sType = VK_STRUCTURE_TYPE_PRESENT_INFO_KHR;
@@ -1814,7 +1814,7 @@ VkFence kvfCreateFence(VkDevice device)
{ {
KVF_ASSERT(device != VK_NULL_HANDLE); KVF_ASSERT(device != VK_NULL_HANDLE);
__KvfDevice* kvf_device = __kvfGetKvfDeviceFromVkDevice(device); __KvfDevice* kvf_device = __kvfGetKvfDeviceFromVkDevice(device);
KVF_ASSERT(kvf_device != NULL); KVF_ASSERT(kvf_device != NULL && "could not find VkDevice in registered devices");
VkFenceCreateInfo fence_info = {}; VkFenceCreateInfo fence_info = {};
fence_info.sType = VK_STRUCTURE_TYPE_FENCE_CREATE_INFO; fence_info.sType = VK_STRUCTURE_TYPE_FENCE_CREATE_INFO;
fence_info.flags = VK_FENCE_CREATE_SIGNALED_BIT; fence_info.flags = VK_FENCE_CREATE_SIGNALED_BIT;
@@ -1829,7 +1829,7 @@ void kvfWaitForFence(VkDevice device, VkFence fence)
KVF_ASSERT(fence != VK_NULL_HANDLE); KVF_ASSERT(fence != VK_NULL_HANDLE);
#ifdef KVF_IMPL_VK_NO_PROTOTYPES #ifdef KVF_IMPL_VK_NO_PROTOTYPES
__KvfDevice* kvf_device = __kvfGetKvfDeviceFromVkDevice(device); __KvfDevice* kvf_device = __kvfGetKvfDeviceFromVkDevice(device);
KVF_ASSERT(kvf_device != NULL); KVF_ASSERT(kvf_device != NULL && "could not find VkDevice in registered devices");
#endif #endif
KVF_GET_DEVICE_FUNCTION(vkWaitForFences)(device, 1, &fence, VK_TRUE, UINT64_MAX); KVF_GET_DEVICE_FUNCTION(vkWaitForFences)(device, 1, &fence, VK_TRUE, UINT64_MAX);
} }
@@ -1840,7 +1840,7 @@ void kvfDestroyFence(VkDevice device, VkFence fence)
return; return;
KVF_ASSERT(device != VK_NULL_HANDLE); KVF_ASSERT(device != VK_NULL_HANDLE);
__KvfDevice* kvf_device = __kvfGetKvfDeviceFromVkDevice(device); __KvfDevice* kvf_device = __kvfGetKvfDeviceFromVkDevice(device);
KVF_ASSERT(kvf_device != NULL); KVF_ASSERT(kvf_device != NULL && "could not find VkDevice in registered devices");
KVF_GET_DEVICE_FUNCTION(vkDestroyFence)(device, fence, kvf_device->callbacks); KVF_GET_DEVICE_FUNCTION(vkDestroyFence)(device, fence, kvf_device->callbacks);
} }
@@ -1848,7 +1848,7 @@ VkSemaphore kvfCreateSemaphore(VkDevice device)
{ {
KVF_ASSERT(device != VK_NULL_HANDLE); KVF_ASSERT(device != VK_NULL_HANDLE);
__KvfDevice* kvf_device = __kvfGetKvfDeviceFromVkDevice(device); __KvfDevice* kvf_device = __kvfGetKvfDeviceFromVkDevice(device);
KVF_ASSERT(kvf_device != NULL); KVF_ASSERT(kvf_device != NULL && "could not find VkDevice in registered devices");
VkSemaphoreCreateInfo semaphore_info = {}; VkSemaphoreCreateInfo semaphore_info = {};
semaphore_info.sType = VK_STRUCTURE_TYPE_SEMAPHORE_CREATE_INFO; semaphore_info.sType = VK_STRUCTURE_TYPE_SEMAPHORE_CREATE_INFO;
VkSemaphore semaphore; VkSemaphore semaphore;
@@ -1862,7 +1862,7 @@ void kvfDestroySemaphore(VkDevice device, VkSemaphore semaphore)
return; return;
KVF_ASSERT(device != VK_NULL_HANDLE); KVF_ASSERT(device != VK_NULL_HANDLE);
__KvfDevice* kvf_device = __kvfGetKvfDeviceFromVkDevice(device); __KvfDevice* kvf_device = __kvfGetKvfDeviceFromVkDevice(device);
KVF_ASSERT(kvf_device != NULL); KVF_ASSERT(kvf_device != NULL && "could not find VkDevice in registered devices");
KVF_GET_DEVICE_FUNCTION(vkDestroySemaphore)(device, semaphore, kvf_device->callbacks); KVF_GET_DEVICE_FUNCTION(vkDestroySemaphore)(device, semaphore, kvf_device->callbacks);
} }
@@ -1941,7 +1941,7 @@ void kvfDestroySemaphore(VkDevice device, VkSemaphore semaphore)
image_count = support.capabilities.maxImageCount; image_count = support.capabilities.maxImageCount;
__KvfDevice* kvf_device = __kvfGetKvfDeviceFromVkDevice(device); __KvfDevice* kvf_device = __kvfGetKvfDeviceFromVkDevice(device);
KVF_ASSERT(kvf_device != NULL); KVF_ASSERT(kvf_device != NULL && "could not find VkDevice in registered devices");
uint32_t queue_family_indices[] = { (uint32_t)kvf_device->queues.graphics, (uint32_t)kvf_device->queues.present }; uint32_t queue_family_indices[] = { (uint32_t)kvf_device->queues.graphics, (uint32_t)kvf_device->queues.present };
@@ -2032,7 +2032,7 @@ VkImage kvfCreateImage(VkDevice device, uint32_t width, uint32_t height, VkForma
{ {
KVF_ASSERT(device != VK_NULL_HANDLE); KVF_ASSERT(device != VK_NULL_HANDLE);
__KvfDevice* kvf_device = __kvfGetKvfDeviceFromVkDevice(device); __KvfDevice* kvf_device = __kvfGetKvfDeviceFromVkDevice(device);
KVF_ASSERT(kvf_device != NULL); KVF_ASSERT(kvf_device != NULL && "could not find VkDevice in registered devices");
VkImageCreateInfo image_info = {}; VkImageCreateInfo image_info = {};
image_info.sType = VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO; image_info.sType = VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO;
image_info.imageType = VK_IMAGE_TYPE_2D; image_info.imageType = VK_IMAGE_TYPE_2D;
@@ -2066,7 +2066,7 @@ void kvfCopyImageToBuffer(VkCommandBuffer cmd, VkBuffer dst, VkImage src, size_t
KVF_ASSERT(src != VK_NULL_HANDLE); KVF_ASSERT(src != VK_NULL_HANDLE);
#ifdef KVF_IMPL_VK_NO_PROTOTYPES #ifdef KVF_IMPL_VK_NO_PROTOTYPES
__KvfDevice* kvf_device = __kvfGetKvfDeviceFromVkCommandBuffer(cmd); __KvfDevice* kvf_device = __kvfGetKvfDeviceFromVkCommandBuffer(cmd);
KVF_ASSERT(kvf_device != NULL); KVF_ASSERT(kvf_device != NULL && "could not find VkDevice in registered devices");
#endif #endif
VkOffset3D offset = { 0, 0, 0 }; VkOffset3D offset = { 0, 0, 0 };
VkBufferImageCopy region = {}; VkBufferImageCopy region = {};
@@ -2088,7 +2088,7 @@ void kvfDestroyImage(VkDevice device, VkImage image)
return; return;
KVF_ASSERT(device != VK_NULL_HANDLE); KVF_ASSERT(device != VK_NULL_HANDLE);
__KvfDevice* kvf_device = __kvfGetKvfDeviceFromVkDevice(device); __KvfDevice* kvf_device = __kvfGetKvfDeviceFromVkDevice(device);
KVF_ASSERT(kvf_device != NULL); KVF_ASSERT(kvf_device != NULL && "could not find VkDevice in registered devices");
KVF_GET_DEVICE_FUNCTION(vkDestroyImage)(device, image, kvf_device->callbacks); KVF_GET_DEVICE_FUNCTION(vkDestroyImage)(device, image, kvf_device->callbacks);
} }
@@ -2096,7 +2096,7 @@ VkImageView kvfCreateImageView(VkDevice device, VkImage image, VkFormat format,
{ {
KVF_ASSERT(device != VK_NULL_HANDLE); KVF_ASSERT(device != VK_NULL_HANDLE);
__KvfDevice* kvf_device = __kvfGetKvfDeviceFromVkDevice(device); __KvfDevice* kvf_device = __kvfGetKvfDeviceFromVkDevice(device);
KVF_ASSERT(kvf_device != NULL); KVF_ASSERT(kvf_device != NULL && "could not find VkDevice in registered devices");
VkImageViewCreateInfo create_info = {}; VkImageViewCreateInfo create_info = {};
create_info.sType = VK_STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO; create_info.sType = VK_STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO;
create_info.image = image; create_info.image = image;
@@ -2121,7 +2121,7 @@ void kvfDestroyImageView(VkDevice device, VkImageView image_view)
KVF_ASSERT(device != VK_NULL_HANDLE); KVF_ASSERT(device != VK_NULL_HANDLE);
KVF_ASSERT(image_view != VK_NULL_HANDLE); KVF_ASSERT(image_view != VK_NULL_HANDLE);
__KvfDevice* kvf_device = __kvfGetKvfDeviceFromVkDevice(device); __KvfDevice* kvf_device = __kvfGetKvfDeviceFromVkDevice(device);
KVF_ASSERT(kvf_device != NULL); KVF_ASSERT(kvf_device != NULL && "could not find VkDevice in registered devices");
KVF_GET_DEVICE_FUNCTION(vkDestroyImageView)(device, image_view, kvf_device->callbacks); KVF_GET_DEVICE_FUNCTION(vkDestroyImageView)(device, image_view, kvf_device->callbacks);
} }
@@ -2135,7 +2135,7 @@ void kvfTransitionImageLayout(VkDevice device, VkImage image, KvfImageType type,
#ifdef KVF_IMPL_VK_NO_PROTOTYPES #ifdef KVF_IMPL_VK_NO_PROTOTYPES
__KvfDevice* kvf_device = __kvfGetKvfDeviceFromVkDevice(device); __KvfDevice* kvf_device = __kvfGetKvfDeviceFromVkDevice(device);
KVF_ASSERT(kvf_device != NULL); KVF_ASSERT(kvf_device != NULL && "could not find VkDevice in registered devices");
#endif #endif
if(is_single_time_cmd_buffer) if(is_single_time_cmd_buffer)
@@ -2189,7 +2189,7 @@ VkSampler kvfCreateSampler(VkDevice device, VkFilter filters, VkSamplerAddressMo
{ {
KVF_ASSERT(device != VK_NULL_HANDLE); KVF_ASSERT(device != VK_NULL_HANDLE);
__KvfDevice* kvf_device = __kvfGetKvfDeviceFromVkDevice(device); __KvfDevice* kvf_device = __kvfGetKvfDeviceFromVkDevice(device);
KVF_ASSERT(kvf_device != NULL); KVF_ASSERT(kvf_device != NULL && "could not find VkDevice in registered devices");
VkSamplerCreateInfo info = {}; VkSamplerCreateInfo info = {};
info.sType = VK_STRUCTURE_TYPE_SAMPLER_CREATE_INFO; info.sType = VK_STRUCTURE_TYPE_SAMPLER_CREATE_INFO;
info.magFilter = filters; info.magFilter = filters;
@@ -2213,7 +2213,7 @@ void kvfDestroySampler(VkDevice device, VkSampler sampler)
return; return;
KVF_ASSERT(device != VK_NULL_HANDLE); KVF_ASSERT(device != VK_NULL_HANDLE);
__KvfDevice* kvf_device = __kvfGetKvfDeviceFromVkDevice(device); __KvfDevice* kvf_device = __kvfGetKvfDeviceFromVkDevice(device);
KVF_ASSERT(kvf_device != NULL); KVF_ASSERT(kvf_device != NULL && "could not find VkDevice in registered devices");
KVF_GET_DEVICE_FUNCTION(vkDestroySampler)(device, sampler, kvf_device->callbacks); KVF_GET_DEVICE_FUNCTION(vkDestroySampler)(device, sampler, kvf_device->callbacks);
} }
@@ -2221,7 +2221,7 @@ VkBuffer kvfCreateBuffer(VkDevice device, VkBufferUsageFlags usage, VkDeviceSize
{ {
KVF_ASSERT(device != VK_NULL_HANDLE); KVF_ASSERT(device != VK_NULL_HANDLE);
__KvfDevice* kvf_device = __kvfGetKvfDeviceFromVkDevice(device); __KvfDevice* kvf_device = __kvfGetKvfDeviceFromVkDevice(device);
KVF_ASSERT(kvf_device != NULL); KVF_ASSERT(kvf_device != NULL && "could not find VkDevice in registered devices");
VkBufferCreateInfo buffer_info = {}; VkBufferCreateInfo buffer_info = {};
buffer_info.sType = VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO; buffer_info.sType = VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO;
buffer_info.size = size; buffer_info.size = size;
@@ -2239,7 +2239,7 @@ void kvfCopyBufferToBuffer(VkCommandBuffer cmd, VkBuffer dst, VkBuffer src, size
KVF_ASSERT(src != VK_NULL_HANDLE); KVF_ASSERT(src != VK_NULL_HANDLE);
#ifdef KVF_IMPL_VK_NO_PROTOTYPES #ifdef KVF_IMPL_VK_NO_PROTOTYPES
__KvfDevice* kvf_device = __kvfGetKvfDeviceFromVkCommandBuffer(cmd); __KvfDevice* kvf_device = __kvfGetKvfDeviceFromVkCommandBuffer(cmd);
KVF_ASSERT(kvf_device != NULL); KVF_ASSERT(kvf_device != NULL && "could not find VkDevice in registered devices");
#endif #endif
VkBufferCopy copy_region = {}; VkBufferCopy copy_region = {};
copy_region.size = size; copy_region.size = size;
@@ -2253,7 +2253,7 @@ void kvfCopyBufferToImage(VkCommandBuffer cmd, VkImage dst, VkBuffer src, size_t
KVF_ASSERT(src != VK_NULL_HANDLE); KVF_ASSERT(src != VK_NULL_HANDLE);
#ifdef KVF_IMPL_VK_NO_PROTOTYPES #ifdef KVF_IMPL_VK_NO_PROTOTYPES
__KvfDevice* kvf_device = __kvfGetKvfDeviceFromVkCommandBuffer(cmd); __KvfDevice* kvf_device = __kvfGetKvfDeviceFromVkCommandBuffer(cmd);
KVF_ASSERT(kvf_device != NULL); KVF_ASSERT(kvf_device != NULL && "could not find VkDevice in registered devices");
#endif #endif
VkOffset3D offset = { 0, 0, 0 }; VkOffset3D offset = { 0, 0, 0 };
VkBufferImageCopy region = {}; VkBufferImageCopy region = {};
@@ -2275,7 +2275,7 @@ void kvfDestroyBuffer(VkDevice device, VkBuffer buffer)
return; return;
KVF_ASSERT(device != VK_NULL_HANDLE); KVF_ASSERT(device != VK_NULL_HANDLE);
__KvfDevice* kvf_device = __kvfGetKvfDeviceFromVkDevice(device); __KvfDevice* kvf_device = __kvfGetKvfDeviceFromVkDevice(device);
KVF_ASSERT(kvf_device != NULL); KVF_ASSERT(kvf_device != NULL && "could not find VkDevice in registered devices");
KVF_GET_DEVICE_FUNCTION(vkDestroyBuffer)(device, buffer, kvf_device->callbacks); KVF_GET_DEVICE_FUNCTION(vkDestroyBuffer)(device, buffer, kvf_device->callbacks);
} }
@@ -2284,7 +2284,7 @@ VkFramebuffer kvfCreateFramebuffer(VkDevice device, VkRenderPass render_pass, Vk
KVF_ASSERT(device != VK_NULL_HANDLE); KVF_ASSERT(device != VK_NULL_HANDLE);
KVF_ASSERT(image_views != NULL); KVF_ASSERT(image_views != NULL);
__KvfDevice* kvf_device = __kvfGetKvfDeviceFromVkDevice(device); __KvfDevice* kvf_device = __kvfGetKvfDeviceFromVkDevice(device);
KVF_ASSERT(kvf_device != NULL); KVF_ASSERT(kvf_device != NULL && "could not find VkDevice in registered devices");
VkFramebufferCreateInfo framebuffer_info = {}; VkFramebufferCreateInfo framebuffer_info = {};
framebuffer_info.sType = VK_STRUCTURE_TYPE_FRAMEBUFFER_CREATE_INFO; framebuffer_info.sType = VK_STRUCTURE_TYPE_FRAMEBUFFER_CREATE_INFO;
framebuffer_info.renderPass = render_pass; framebuffer_info.renderPass = render_pass;
@@ -2324,7 +2324,7 @@ VkCommandBuffer kvfCreateCommandBufferLeveled(VkDevice device, VkCommandBufferLe
{ {
KVF_ASSERT(device != VK_NULL_HANDLE); KVF_ASSERT(device != VK_NULL_HANDLE);
__KvfDevice* kvf_device = __kvfGetKvfDeviceFromVkDevice(device); __KvfDevice* kvf_device = __kvfGetKvfDeviceFromVkDevice(device);
KVF_ASSERT(kvf_device != NULL); KVF_ASSERT(kvf_device != NULL && "could not find VkDevice in registered devices");
VkCommandPool pool = kvf_device->cmd_pool; VkCommandPool pool = kvf_device->cmd_pool;
VkCommandBuffer buffer; VkCommandBuffer buffer;
@@ -2335,7 +2335,7 @@ VkCommandBuffer kvfCreateCommandBufferLeveled(VkDevice device, VkCommandBufferLe
alloc_info.commandBufferCount = 1; alloc_info.commandBufferCount = 1;
__kvfCheckVk(KVF_GET_DEVICE_FUNCTION(vkAllocateCommandBuffers)(device, &alloc_info, &buffer)); __kvfCheckVk(KVF_GET_DEVICE_FUNCTION(vkAllocateCommandBuffers)(device, &alloc_info, &buffer));
if(kvf_device->cmd_buffers_size == kvf_device->cmd_buffers_capacity) if(kvf_device->cmd_buffers_size >= kvf_device->cmd_buffers_capacity)
{ {
// Resize the dynamic array if necessary // Resize the dynamic array if necessary
kvf_device->cmd_buffers_capacity += KVF_COMMAND_POOL_CAPACITY; kvf_device->cmd_buffers_capacity += KVF_COMMAND_POOL_CAPACITY;
@@ -2352,7 +2352,7 @@ void kvfBeginCommandBuffer(VkCommandBuffer buffer, VkCommandBufferUsageFlags usa
KVF_ASSERT(buffer != VK_NULL_HANDLE); KVF_ASSERT(buffer != VK_NULL_HANDLE);
#ifdef KVF_IMPL_VK_NO_PROTOTYPES #ifdef KVF_IMPL_VK_NO_PROTOTYPES
__KvfDevice* kvf_device = __kvfGetKvfDeviceFromVkCommandBuffer(buffer); __KvfDevice* kvf_device = __kvfGetKvfDeviceFromVkCommandBuffer(buffer);
KVF_ASSERT(kvf_device != NULL); KVF_ASSERT(kvf_device != NULL && "could not find VkDevice in registered devices");
#endif #endif
VkCommandBufferBeginInfo begin_info = {}; VkCommandBufferBeginInfo begin_info = {};
begin_info.sType = VK_STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO; begin_info.sType = VK_STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO;
@@ -2365,7 +2365,7 @@ void kvfEndCommandBuffer(VkCommandBuffer buffer)
KVF_ASSERT(buffer != VK_NULL_HANDLE); KVF_ASSERT(buffer != VK_NULL_HANDLE);
#ifdef KVF_IMPL_VK_NO_PROTOTYPES #ifdef KVF_IMPL_VK_NO_PROTOTYPES
__KvfDevice* kvf_device = __kvfGetKvfDeviceFromVkCommandBuffer(buffer); __KvfDevice* kvf_device = __kvfGetKvfDeviceFromVkCommandBuffer(buffer);
KVF_ASSERT(kvf_device != NULL); KVF_ASSERT(kvf_device != NULL && "could not find VkDevice in registered devices");
#endif #endif
__kvfCheckVk(KVF_GET_DEVICE_FUNCTION(vkEndCommandBuffer)(buffer)); __kvfCheckVk(KVF_GET_DEVICE_FUNCTION(vkEndCommandBuffer)(buffer));
} }
@@ -2376,7 +2376,7 @@ void kvfSubmitCommandBuffer(VkDevice device, VkCommandBuffer buffer, KvfQueueTyp
#ifdef KVF_IMPL_VK_NO_PROTOTYPES #ifdef KVF_IMPL_VK_NO_PROTOTYPES
__KvfDevice* kvf_device = __kvfGetKvfDeviceFromVkDevice(device); __KvfDevice* kvf_device = __kvfGetKvfDeviceFromVkDevice(device);
KVF_ASSERT(kvf_device != NULL); KVF_ASSERT(kvf_device != NULL && "could not find VkDevice in registered devices");
#endif #endif
VkSemaphore signal_semaphores[1]; VkSemaphore signal_semaphores[1];
VkSemaphore wait_semaphores[1]; VkSemaphore wait_semaphores[1];
@@ -2403,7 +2403,7 @@ void kvfSubmitSingleTimeCommandBuffer(VkDevice device, VkCommandBuffer buffer, K
KVF_ASSERT(device != VK_NULL_HANDLE); KVF_ASSERT(device != VK_NULL_HANDLE);
#ifdef KVF_IMPL_VK_NO_PROTOTYPES #ifdef KVF_IMPL_VK_NO_PROTOTYPES
__KvfDevice* kvf_device = __kvfGetKvfDeviceFromVkDevice(device); __KvfDevice* kvf_device = __kvfGetKvfDeviceFromVkDevice(device);
KVF_ASSERT(kvf_device != NULL); KVF_ASSERT(kvf_device != NULL && "could not find VkDevice in registered devices");
#endif #endif
if(fence != VK_NULL_HANDLE) if(fence != VK_NULL_HANDLE)
@@ -2424,7 +2424,7 @@ void kvfDestroyCommandBuffer(VkDevice device, VkCommandBuffer buffer)
return; return;
KVF_ASSERT(device != VK_NULL_HANDLE); KVF_ASSERT(device != VK_NULL_HANDLE);
__KvfDevice* kvf_device = __kvfGetKvfDeviceFromVkDevice(device); __KvfDevice* kvf_device = __kvfGetKvfDeviceFromVkDevice(device);
KVF_ASSERT(kvf_device != NULL); KVF_ASSERT(kvf_device != NULL && "could not find VkDevice in registered devices");
for(size_t i = 0; i < kvf_device->cmd_buffers_size; i++) for(size_t i = 0; i < kvf_device->cmd_buffers_size; i++)
{ {
@@ -2434,7 +2434,7 @@ void kvfDestroyCommandBuffer(VkDevice device, VkCommandBuffer buffer)
// Shift the elements to fill the gap // Shift the elements to fill the gap
for(size_t j = i; j < kvf_device->cmd_buffers_size - 1; j++) for(size_t j = i; j < kvf_device->cmd_buffers_size - 1; j++)
kvf_device->cmd_buffers[j] = kvf_device->cmd_buffers[j + 1]; kvf_device->cmd_buffers[j] = kvf_device->cmd_buffers[j + 1];
kvf_device->cmd_buffers--; kvf_device->cmd_buffers_size--;
return; return;
} }
} }
@@ -2553,7 +2553,7 @@ VkRenderPass kvfCreateRenderPassWithSubpassDependencies(VkDevice device, VkAttac
} }
__KvfDevice* kvf_device = __kvfGetKvfDeviceFromVkDevice(device); __KvfDevice* kvf_device = __kvfGetKvfDeviceFromVkDevice(device);
KVF_ASSERT(kvf_device != NULL); KVF_ASSERT(kvf_device != NULL && "could not find VkDevice in registered devices");
VkSubpassDescription subpass = {}; VkSubpassDescription subpass = {};
subpass.pipelineBindPoint = bind_point; subpass.pipelineBindPoint = bind_point;
@@ -2583,7 +2583,7 @@ void kvfDestroyRenderPass(VkDevice device, VkRenderPass renderPass)
return; return;
KVF_ASSERT(device != VK_NULL_HANDLE); KVF_ASSERT(device != VK_NULL_HANDLE);
__KvfDevice* kvf_device = __kvfGetKvfDeviceFromVkDevice(device); __KvfDevice* kvf_device = __kvfGetKvfDeviceFromVkDevice(device);
KVF_ASSERT(kvf_device != NULL); KVF_ASSERT(kvf_device != NULL && "could not find VkDevice in registered devices");
KVF_GET_DEVICE_FUNCTION(vkDestroyRenderPass)(device, renderPass, kvf_device->callbacks); KVF_GET_DEVICE_FUNCTION(vkDestroyRenderPass)(device, renderPass, kvf_device->callbacks);
} }
@@ -2593,7 +2593,7 @@ void kvfBeginRenderPass(VkRenderPass pass, VkCommandBuffer cmd, VkFramebuffer fr
KVF_ASSERT(framebuffer != VK_NULL_HANDLE); KVF_ASSERT(framebuffer != VK_NULL_HANDLE);
#ifdef KVF_IMPL_VK_NO_PROTOTYPES #ifdef KVF_IMPL_VK_NO_PROTOTYPES
__KvfDevice* kvf_device = __kvfGetKvfDeviceFromVkCommandBuffer(cmd); __KvfDevice* kvf_device = __kvfGetKvfDeviceFromVkCommandBuffer(cmd);
KVF_ASSERT(kvf_device != NULL); KVF_ASSERT(kvf_device != NULL && "could not find VkDevice in registered devices");
#endif #endif
VkOffset2D offset = { 0, 0 }; VkOffset2D offset = { 0, 0 };
@@ -2612,7 +2612,7 @@ VkShaderModule kvfCreateShaderModule(VkDevice device, uint32_t* code, size_t siz
{ {
KVF_ASSERT(device != VK_NULL_HANDLE); KVF_ASSERT(device != VK_NULL_HANDLE);
__KvfDevice* kvf_device = __kvfGetKvfDeviceFromVkDevice(device); __KvfDevice* kvf_device = __kvfGetKvfDeviceFromVkDevice(device);
KVF_ASSERT(kvf_device != NULL); KVF_ASSERT(kvf_device != NULL && "could not find VkDevice in registered devices");
VkShaderModuleCreateInfo createInfo = {}; VkShaderModuleCreateInfo createInfo = {};
createInfo.sType = VK_STRUCTURE_TYPE_SHADER_MODULE_CREATE_INFO; createInfo.sType = VK_STRUCTURE_TYPE_SHADER_MODULE_CREATE_INFO;
createInfo.codeSize = size * sizeof(uint32_t); createInfo.codeSize = size * sizeof(uint32_t);
@@ -2628,7 +2628,7 @@ void kvfDestroyShaderModule(VkDevice device, VkShaderModule shader)
return; return;
KVF_ASSERT(device != VK_NULL_HANDLE); KVF_ASSERT(device != VK_NULL_HANDLE);
__KvfDevice* kvf_device = __kvfGetKvfDeviceFromVkDevice(device); __KvfDevice* kvf_device = __kvfGetKvfDeviceFromVkDevice(device);
KVF_ASSERT(kvf_device != NULL); KVF_ASSERT(kvf_device != NULL && "could not find VkDevice in registered devices");
KVF_GET_DEVICE_FUNCTION(vkDestroyShaderModule)(device, shader, kvf_device->callbacks); KVF_GET_DEVICE_FUNCTION(vkDestroyShaderModule)(device, shader, kvf_device->callbacks);
} }
@@ -2636,7 +2636,7 @@ VkDescriptorSetLayout kvfCreateDescriptorSetLayout(VkDevice device, VkDescriptor
{ {
KVF_ASSERT(device != VK_NULL_HANDLE); KVF_ASSERT(device != VK_NULL_HANDLE);
__KvfDevice* kvf_device = __kvfGetKvfDeviceFromVkDevice(device); __KvfDevice* kvf_device = __kvfGetKvfDeviceFromVkDevice(device);
KVF_ASSERT(kvf_device != NULL); KVF_ASSERT(kvf_device != NULL && "could not find VkDevice in registered devices");
VkDescriptorSetLayoutCreateInfo layout_info = {}; VkDescriptorSetLayoutCreateInfo layout_info = {};
layout_info.sType = VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_CREATE_INFO; layout_info.sType = VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_CREATE_INFO;
layout_info.bindingCount = bindings_count; layout_info.bindingCount = bindings_count;
@@ -2653,7 +2653,7 @@ void kvfDestroyDescriptorSetLayout(VkDevice device, VkDescriptorSetLayout layout
return; return;
KVF_ASSERT(device != VK_NULL_HANDLE); KVF_ASSERT(device != VK_NULL_HANDLE);
__KvfDevice* kvf_device = __kvfGetKvfDeviceFromVkDevice(device); __KvfDevice* kvf_device = __kvfGetKvfDeviceFromVkDevice(device);
KVF_ASSERT(kvf_device != NULL); KVF_ASSERT(kvf_device != NULL && "could not find VkDevice in registered devices");
KVF_GET_DEVICE_FUNCTION(vkDestroyDescriptorSetLayout)(device, layout, kvf_device->callbacks); KVF_GET_DEVICE_FUNCTION(vkDestroyDescriptorSetLayout)(device, layout, kvf_device->callbacks);
} }
@@ -2661,7 +2661,7 @@ VkDescriptorSet kvfAllocateDescriptorSet(VkDevice device, VkDescriptorSetLayout
{ {
KVF_ASSERT(device != VK_NULL_HANDLE); KVF_ASSERT(device != VK_NULL_HANDLE);
__KvfDevice* kvf_device = __kvfGetKvfDeviceFromVkDevice(device); __KvfDevice* kvf_device = __kvfGetKvfDeviceFromVkDevice(device);
KVF_ASSERT(kvf_device != NULL); KVF_ASSERT(kvf_device != NULL && "could not find VkDevice in registered devices");
VkDescriptorPool pool = VK_NULL_HANDLE; VkDescriptorPool pool = VK_NULL_HANDLE;
for(uint32_t i = 0; i < kvf_device->sets_pools_size; i++) for(uint32_t i = 0; i < kvf_device->sets_pools_size; i++)
{ {
@@ -2687,7 +2687,7 @@ void kvfUpdateStorageBufferToDescriptorSet(VkDevice device, VkDescriptorSet set,
{ {
#ifdef KVF_IMPL_VK_NO_PROTOTYPES #ifdef KVF_IMPL_VK_NO_PROTOTYPES
__KvfDevice* kvf_device = __kvfGetKvfDeviceFromVkDevice(device); __KvfDevice* kvf_device = __kvfGetKvfDeviceFromVkDevice(device);
KVF_ASSERT(kvf_device != NULL); KVF_ASSERT(kvf_device != NULL && "could not find VkDevice in registered devices");
#endif #endif
VkWriteDescriptorSet write = kvfWriteStorageBufferToDescriptorSet(device, set, info, binding); VkWriteDescriptorSet write = kvfWriteStorageBufferToDescriptorSet(device, set, info, binding);
KVF_GET_DEVICE_FUNCTION(vkUpdateDescriptorSets)(device, 1, &write, 0, NULL); KVF_GET_DEVICE_FUNCTION(vkUpdateDescriptorSets)(device, 1, &write, 0, NULL);
@@ -2697,7 +2697,7 @@ void kvfUpdateUniformBufferToDescriptorSet(VkDevice device, VkDescriptorSet set,
{ {
#ifdef KVF_IMPL_VK_NO_PROTOTYPES #ifdef KVF_IMPL_VK_NO_PROTOTYPES
__KvfDevice* kvf_device = __kvfGetKvfDeviceFromVkDevice(device); __KvfDevice* kvf_device = __kvfGetKvfDeviceFromVkDevice(device);
KVF_ASSERT(kvf_device != NULL); KVF_ASSERT(kvf_device != NULL && "could not find VkDevice in registered devices");
#endif #endif
VkWriteDescriptorSet write = kvfWriteUniformBufferToDescriptorSet(device, set, info, binding); VkWriteDescriptorSet write = kvfWriteUniformBufferToDescriptorSet(device, set, info, binding);
KVF_GET_DEVICE_FUNCTION(vkUpdateDescriptorSets)(device, 1, &write, 0, NULL); KVF_GET_DEVICE_FUNCTION(vkUpdateDescriptorSets)(device, 1, &write, 0, NULL);
@@ -2707,7 +2707,7 @@ void kvfUpdateImageToDescriptorSet(VkDevice device, VkDescriptorSet set, const V
{ {
#ifdef KVF_IMPL_VK_NO_PROTOTYPES #ifdef KVF_IMPL_VK_NO_PROTOTYPES
__KvfDevice* kvf_device = __kvfGetKvfDeviceFromVkDevice(device); __KvfDevice* kvf_device = __kvfGetKvfDeviceFromVkDevice(device);
KVF_ASSERT(kvf_device != NULL); KVF_ASSERT(kvf_device != NULL && "could not find VkDevice in registered devices");
#endif #endif
VkWriteDescriptorSet write = kvfWriteImageToDescriptorSet(device, set, info, binding); VkWriteDescriptorSet write = kvfWriteImageToDescriptorSet(device, set, info, binding);
KVF_GET_DEVICE_FUNCTION(vkUpdateDescriptorSets)(device, 1, &write, 0, NULL); KVF_GET_DEVICE_FUNCTION(vkUpdateDescriptorSets)(device, 1, &write, 0, NULL);
@@ -2725,6 +2725,7 @@ VkWriteDescriptorSet kvfWriteStorageBufferToDescriptorSet(VkDevice device, VkDes
descriptor_write.descriptorType = VK_DESCRIPTOR_TYPE_STORAGE_BUFFER; descriptor_write.descriptorType = VK_DESCRIPTOR_TYPE_STORAGE_BUFFER;
descriptor_write.descriptorCount = 1; descriptor_write.descriptorCount = 1;
descriptor_write.pBufferInfo = info; descriptor_write.pBufferInfo = info;
descriptor_write.pNext = NULL;
return descriptor_write; return descriptor_write;
} }
@@ -2740,6 +2741,7 @@ VkWriteDescriptorSet kvfWriteUniformBufferToDescriptorSet(VkDevice device, VkDes
descriptor_write.descriptorType = VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER; descriptor_write.descriptorType = VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER;
descriptor_write.descriptorCount = 1; descriptor_write.descriptorCount = 1;
descriptor_write.pBufferInfo = info; descriptor_write.pBufferInfo = info;
descriptor_write.pNext = NULL;
return descriptor_write; return descriptor_write;
} }
@@ -2755,6 +2757,7 @@ VkWriteDescriptorSet kvfWriteImageToDescriptorSet(VkDevice device, VkDescriptorS
descriptor_write.descriptorType = VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER; descriptor_write.descriptorType = VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER;
descriptor_write.descriptorCount = 1; descriptor_write.descriptorCount = 1;
descriptor_write.pImageInfo = info; descriptor_write.pImageInfo = info;
descriptor_write.pNext = NULL;
return descriptor_write; return descriptor_write;
} }
@@ -2762,7 +2765,7 @@ VkPipelineLayout kvfCreatePipelineLayout(VkDevice device, VkDescriptorSetLayout*
{ {
KVF_ASSERT(device != VK_NULL_HANDLE); KVF_ASSERT(device != VK_NULL_HANDLE);
__KvfDevice* kvf_device = __kvfGetKvfDeviceFromVkDevice(device); __KvfDevice* kvf_device = __kvfGetKvfDeviceFromVkDevice(device);
KVF_ASSERT(kvf_device != NULL); KVF_ASSERT(kvf_device != NULL && "could not find VkDevice in registered devices");
VkPipelineLayoutCreateInfo pipeline_layout_info = {}; VkPipelineLayoutCreateInfo pipeline_layout_info = {};
pipeline_layout_info.sType = VK_STRUCTURE_TYPE_PIPELINE_LAYOUT_CREATE_INFO; pipeline_layout_info.sType = VK_STRUCTURE_TYPE_PIPELINE_LAYOUT_CREATE_INFO;
pipeline_layout_info.setLayoutCount = set_layouts_count; pipeline_layout_info.setLayoutCount = set_layouts_count;
@@ -2781,7 +2784,7 @@ void kvfDestroyPipelineLayout(VkDevice device, VkPipelineLayout layout)
return; return;
KVF_ASSERT(device != VK_NULL_HANDLE); KVF_ASSERT(device != VK_NULL_HANDLE);
__KvfDevice* kvf_device = __kvfGetKvfDeviceFromVkDevice(device); __KvfDevice* kvf_device = __kvfGetKvfDeviceFromVkDevice(device);
KVF_ASSERT(kvf_device != NULL); KVF_ASSERT(kvf_device != NULL && "could not find VkDevice in registered devices");
KVF_GET_DEVICE_FUNCTION(vkDestroyPipelineLayout)(device, layout, kvf_device->callbacks); KVF_GET_DEVICE_FUNCTION(vkDestroyPipelineLayout)(device, layout, kvf_device->callbacks);
} }
@@ -2789,7 +2792,7 @@ void kvfResetDeviceDescriptorPools(VkDevice device)
{ {
KVF_ASSERT(device != VK_NULL_HANDLE); KVF_ASSERT(device != VK_NULL_HANDLE);
__KvfDevice* kvf_device = __kvfGetKvfDeviceFromVkDevice(device); __KvfDevice* kvf_device = __kvfGetKvfDeviceFromVkDevice(device);
KVF_ASSERT(kvf_device != NULL); KVF_ASSERT(kvf_device != NULL && "could not find VkDevice in registered devices");
for(uint32_t i = 0; i < kvf_device->sets_pools_size; i++) for(uint32_t i = 0; i < kvf_device->sets_pools_size; i++)
{ {
KVF_GET_DEVICE_FUNCTION(vkResetDescriptorPool)(device, kvf_device->sets_pools[i].pool, 0); KVF_GET_DEVICE_FUNCTION(vkResetDescriptorPool)(device, kvf_device->sets_pools[i].pool, 0);
@@ -3018,7 +3021,7 @@ VkPipeline kvfCreateGraphicsPipeline(VkDevice device, VkPipelineCache cache, VkP
pipeline_info.pDepthStencilState = &builder->depth_stencil_state; pipeline_info.pDepthStencilState = &builder->depth_stencil_state;
__KvfDevice* kvf_device = __kvfGetKvfDeviceFromVkDevice(device); __KvfDevice* kvf_device = __kvfGetKvfDeviceFromVkDevice(device);
KVF_ASSERT(kvf_device != NULL); KVF_ASSERT(kvf_device != NULL && "could not find VkDevice in registered devices");
VkPipeline pipeline; VkPipeline pipeline;
__kvfCheckVk(KVF_GET_DEVICE_FUNCTION(vkCreateGraphicsPipelines)(device, cache, 1, &pipeline_info, kvf_device->callbacks, &pipeline)); __kvfCheckVk(KVF_GET_DEVICE_FUNCTION(vkCreateGraphicsPipelines)(device, cache, 1, &pipeline_info, kvf_device->callbacks, &pipeline));
return pipeline; return pipeline;
@@ -3028,7 +3031,7 @@ void kvfDestroyPipeline(VkDevice device, VkPipeline pipeline)
{ {
KVF_ASSERT(device != VK_NULL_HANDLE); KVF_ASSERT(device != VK_NULL_HANDLE);
__KvfDevice* kvf_device = __kvfGetKvfDeviceFromVkDevice(device); __KvfDevice* kvf_device = __kvfGetKvfDeviceFromVkDevice(device);
KVF_ASSERT(kvf_device != NULL); KVF_ASSERT(kvf_device != NULL && "could not find VkDevice in registered devices");
KVF_GET_DEVICE_FUNCTION(vkDestroyPipeline)(device, pipeline, kvf_device->callbacks); KVF_GET_DEVICE_FUNCTION(vkDestroyPipeline)(device, pipeline, kvf_device->callbacks);
} }

View File

@@ -2,7 +2,7 @@
add_requires("libsdl", { configs = { sdlmain = false } }) add_requires("libsdl", { configs = { sdlmain = false } })
add_rules("mode.debug", "mode.release") add_rules("mode.debug", "mode.release", "mode.releasedbg")
set_languages("cxx20", "c11") set_languages("cxx20", "c11")
set_objectdir("objs/xmake/$(os)_$(arch)") set_objectdir("objs/xmake/$(os)_$(arch)")
@@ -85,7 +85,6 @@ target("mlx")
end) end)
target_end() target_end()
--[[
target("Test") target("Test")
set_default(false) set_default(false)
set_kind("binary") set_kind("binary")
@@ -101,4 +100,3 @@ target("Test")
add_packages("libsdl") add_packages("libsdl")
target_end() target_end()
]]--