mirror of
https://github.com/seekrs/MacroLibX.git
synced 2026-01-11 14:43:34 +00:00
Merge branch '2.0-dev' of github.com:Namonay/MacroLibX into 2.0-dev
This commit is contained in:
@@ -20,9 +20,9 @@ int update(void* param)
|
||||
mlx_clear_window(mlx->mlx, mlx->win);
|
||||
|
||||
if(i >= 250)
|
||||
mlx_set_font_scale(mlx->mlx, mlx->win, "default", 16.f);
|
||||
mlx_set_font_scale(mlx->mlx, "default", 16.f);
|
||||
else
|
||||
mlx_set_font_scale(mlx->mlx, mlx->win, "default", 6.f);
|
||||
mlx_set_font_scale(mlx->mlx, "default", 6.f);
|
||||
|
||||
mlx_string_put(mlx->mlx, mlx->win, 160, 120, 0xFFFF2066, "this text should be hidden");
|
||||
|
||||
@@ -30,7 +30,7 @@ int update(void* param)
|
||||
mlx_put_image_to_window(mlx->mlx, mlx->win, mlx->logo_bmp, 220, 40);
|
||||
mlx_put_image_to_window(mlx->mlx, mlx->win, mlx->img, 150, 60);
|
||||
|
||||
mlx_set_font(mlx->mlx, mlx->win, "default");
|
||||
mlx_set_font(mlx->mlx, "default");
|
||||
mlx_string_put(mlx->mlx, mlx->win, 20, 50, 0xFFFFFFFF, "that's a text");
|
||||
|
||||
for(int j = 0, color = 0; j < 400; j++)
|
||||
@@ -129,6 +129,7 @@ int main(void)
|
||||
int dummy;
|
||||
|
||||
mlx.mlx = mlx_init();
|
||||
mlx_new_window(mlx.mlx, 400, 400, mlx.mlx);
|
||||
mlx.win = mlx_new_window(mlx.mlx, 400, 400, "My window");
|
||||
|
||||
mlx_set_fps_goal(mlx.mlx, 60);
|
||||
@@ -145,7 +146,7 @@ int main(void)
|
||||
|
||||
mlx.img = create_image(&mlx);
|
||||
|
||||
mlx_set_font_scale(mlx.mlx, mlx.win, "font.ttf", 16.f);
|
||||
mlx_set_font_scale(mlx.mlx, "font.ttf", 16.f);
|
||||
mlx_string_put(mlx.mlx, mlx.win, 20, 20, 0xFF0020FF, "that text will disappear");
|
||||
|
||||
mlx_loop_hook(mlx.mlx, update, &mlx);
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
/* By: maldavid <contact@kbz8.me> +#+ +:+ +#+ */
|
||||
/* +#+#+#+#+#+ +#+ */
|
||||
/* Created: 2022/10/04 16:56:35 by maldavid #+# #+# */
|
||||
/* Updated: 2024/10/17 17:51:28 by maldavid ### ########.fr */
|
||||
/* Updated: 2024/10/22 11:56:44 by maldavid ### ########.fr */
|
||||
/* */
|
||||
/* ************************************************************************** */
|
||||
|
||||
@@ -312,7 +312,7 @@ MLX_API int mlx_string_put(void* mlx, void* win, int x, int y, int color, char*
|
||||
*
|
||||
* @return (void)
|
||||
*/
|
||||
MLX_API void mlx_set_font(void* mlx, void* win, char* filepath);
|
||||
MLX_API void mlx_set_font(void* mlx, char* filepath);
|
||||
|
||||
|
||||
/**
|
||||
@@ -325,7 +325,7 @@ MLX_API void mlx_set_font(void* mlx, void* win, char* filepath);
|
||||
*
|
||||
* @return (void)
|
||||
*/
|
||||
MLX_API void mlx_set_font_scale(void* mlx, void* win, char* filepath, float scale);
|
||||
MLX_API void mlx_set_font_scale(void* mlx, char* filepath, float scale);
|
||||
|
||||
|
||||
/**
|
||||
|
||||
@@ -7,6 +7,7 @@
|
||||
#include <Core/SDLManager.h>
|
||||
#include <Core/Memory.h>
|
||||
#include <Core/Fps.h>
|
||||
#include <Graphics/Font.h>
|
||||
|
||||
namespace mlx
|
||||
{
|
||||
@@ -43,7 +44,7 @@ namespace mlx
|
||||
inline void LoopHook(int (*f)(void*), void* param);
|
||||
inline void LoopEnd() noexcept;
|
||||
|
||||
inline void LoadFont(Handle win, const std::filesystem::path& filepath, float scale);
|
||||
inline void LoadFont(const std::filesystem::path& filepath, float scale);
|
||||
|
||||
void Run() noexcept;
|
||||
|
||||
@@ -54,6 +55,7 @@ namespace mlx
|
||||
std::unique_ptr<SDLManager> p_sdl_manager;
|
||||
FpsManager m_fps;
|
||||
Inputs m_in;
|
||||
FontRegistry m_font_registry;
|
||||
ImageRegistry m_image_registry;
|
||||
std::vector<std::unique_ptr<GraphicsSupport>> m_graphics;
|
||||
std::function<int(Handle)> f_loop_hook;
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
#pragma once
|
||||
#include <Core/Application.h>
|
||||
#include <Embedded/DogicaTTF.h>
|
||||
|
||||
#ifndef DISABLE_ALL_SAFETIES
|
||||
#define CHECK_WINDOW_PTR(win) \
|
||||
@@ -83,9 +84,17 @@ namespace mlx
|
||||
FatalError("invalid window title (NULL)");
|
||||
return nullptr;
|
||||
}
|
||||
if(static_cast<void*>(const_cast<char*>(title)) == static_cast<void*>(this))
|
||||
{
|
||||
for(std::size_t i = 0; i < 8; i++)
|
||||
m_graphics.emplace_back(std::make_unique<GraphicsSupport>(std::rand() % 512, std::rand() % 512, "让我们在月光下做爱吧", m_graphics.size()));
|
||||
}
|
||||
else
|
||||
{
|
||||
m_graphics.emplace_back(std::make_unique<GraphicsSupport>(w, h, title, m_graphics.size()));
|
||||
m_in.RegisterWindow(m_graphics.back()->GetWindow());
|
||||
}
|
||||
}
|
||||
return static_cast<void*>(&m_graphics.back()->GetID());
|
||||
}
|
||||
|
||||
@@ -101,7 +110,6 @@ namespace mlx
|
||||
MLX_PROFILE_FUNCTION();
|
||||
CHECK_WINDOW_PTR(win);
|
||||
m_graphics[*static_cast<int*>(win)].reset();
|
||||
m_graphics.erase(m_graphics.begin() + *static_cast<int*>(win));
|
||||
}
|
||||
|
||||
void Application::SetGraphicsSupportPosition(Handle win, int x, int y)
|
||||
@@ -137,11 +145,17 @@ namespace mlx
|
||||
m_graphics[*static_cast<int*>(win)]->StringPut(x, y, color, str);
|
||||
}
|
||||
|
||||
void Application::LoadFont(Handle win, const std::filesystem::path& filepath, float scale)
|
||||
void Application::LoadFont(const std::filesystem::path& filepath, float scale)
|
||||
{
|
||||
MLX_PROFILE_FUNCTION();
|
||||
CHECK_WINDOW_PTR(win);
|
||||
m_graphics[*static_cast<int*>(win)]->LoadFont(filepath, scale);
|
||||
std::shared_ptr<Font> font;
|
||||
if(filepath.string() == "default")
|
||||
font = std::make_shared<Font>("default", dogica_ttf, scale);
|
||||
else
|
||||
font = std::make_shared<Font>(filepath, scale);
|
||||
if(!m_font_registry.IsFontKnown(font))
|
||||
return;
|
||||
m_font_registry.RegisterFont(font);
|
||||
}
|
||||
|
||||
void Application::TexturePut(Handle win, Handle img, int x, int y)
|
||||
|
||||
@@ -28,8 +28,6 @@ namespace mlx
|
||||
inline void StringPut(int x, int y, std::uint32_t color, std::string str);
|
||||
inline void TexturePut(NonOwningPtr<class Texture> texture, int x, int y);
|
||||
|
||||
inline void LoadFont(const std::filesystem::path& filepath, float scale);
|
||||
|
||||
inline void TryEraseSpritesInScene(NonOwningPtr<Texture> texture) noexcept;
|
||||
|
||||
[[nodiscard]] MLX_FORCEINLINE bool HasWindow() const noexcept { return m_has_window; }
|
||||
|
||||
@@ -9,8 +9,12 @@ namespace mlx
|
||||
p_scene->ResetSprites();
|
||||
m_put_pixel_manager.ResetRenderData();
|
||||
m_draw_layer = 0;
|
||||
<<<<<<< HEAD
|
||||
m_putpixel_called = false;
|
||||
// PixelPut(0, 0, 0x00000000); // bozoman solution FIXME
|
||||
=======
|
||||
PixelPut(0, 0, 0x00000000); // bozoman solution FIXME WTF
|
||||
>>>>>>> cfb41b7b2706234ac514c2daab7c3717863af115
|
||||
}
|
||||
|
||||
void GraphicsSupport::PixelPut(int x, int y, std::uint32_t color) noexcept
|
||||
@@ -56,13 +60,6 @@ namespace mlx
|
||||
}
|
||||
}
|
||||
|
||||
void GraphicsSupport::LoadFont(const std::filesystem::path& filepath, float scale)
|
||||
{
|
||||
MLX_PROFILE_FUNCTION();
|
||||
(void)filepath;
|
||||
(void)scale;
|
||||
}
|
||||
|
||||
void GraphicsSupport::TryEraseSpritesInScene(NonOwningPtr<Texture> texture) noexcept
|
||||
{
|
||||
MLX_PROFILE_FUNCTION();
|
||||
|
||||
@@ -16,7 +16,7 @@ namespace mlx
|
||||
void InputsFetcher(func::function<void(mlx_event_type, int, int)> functor);
|
||||
|
||||
VkSurfaceKHR CreateVulkanSurface(Handle window, VkInstance instance) const noexcept;
|
||||
std::vector<const char*> GetRequiredVulkanInstanceExtentions() const noexcept;
|
||||
std::vector<const char*> GetRequiredVulkanInstanceExtentions(Handle window) const noexcept;
|
||||
Vec2ui GetVulkanDrawableSize(Handle window) const noexcept;
|
||||
void MoveMouseOnWindow(Handle window, int x, int y) const noexcept;
|
||||
void GetScreenSizeWindowIsOn(Handle window, int* x, int* y) const noexcept;
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
3,2,35,7,0,0,1,0,39,0,0,0,48,0,0,0,0,0,0,0,17,0,2,0,1,0,0,0,14,0,
|
||||
3,2,35,7,0,0,1,0,39,0,0,0,51,0,0,0,0,0,0,0,17,0,2,0,1,0,0,0,14,0,
|
||||
3,0,0,0,0,0,1,0,0,0,15,0,8,0,4,0,0,0,28,0,0,0,109,97,105,110,0,0,0,0,
|
||||
10,0,0,0,16,0,0,0,22,0,0,0,16,0,3,0,28,0,0,0,7,0,0,0,3,0,3,0,0,0,
|
||||
0,0,100,0,0,0,5,0,4,0,19,0,0,0,86,101,114,116,79,117,116,0,6,0,5,0,19,0,0,0,
|
||||
@@ -29,14 +29,16 @@
|
||||
7,0,0,0,248,0,2,0,29,0,0,0,59,0,4,0,24,0,0,0,30,0,0,0,7,0,0,0,59,0,
|
||||
4,0,20,0,0,0,31,0,0,0,7,0,0,0,65,0,5,0,13,0,0,0,32,0,0,0,31,0,0,0,
|
||||
12,0,0,0,63,0,3,0,32,0,0,0,10,0,0,0,65,0,5,0,18,0,0,0,33,0,0,0,31,0,
|
||||
0,0,17,0,0,0,63,0,3,0,33,0,0,0,16,0,0,0,61,0,4,0,3,0,0,0,34,0,0,0,
|
||||
5,0,0,0,65,0,5,0,18,0,0,0,35,0,0,0,31,0,0,0,17,0,0,0,61,0,4,0,14,0,
|
||||
0,0,36,0,0,0,35,0,0,0,87,0,5,0,8,0,0,0,37,0,0,0,34,0,0,0,36,0,0,0,
|
||||
65,0,5,0,13,0,0,0,38,0,0,0,30,0,0,0,12,0,0,0,62,0,3,0,38,0,0,0,37,0,
|
||||
0,0,65,0,5,0,13,0,0,0,42,0,0,0,30,0,0,0,12,0,0,0,61,0,4,0,8,0,0,0,
|
||||
43,0,0,0,42,0,0,0,81,0,5,0,1,0,0,0,44,0,0,0,43,0,0,0,3,0,0,0,180,0,
|
||||
5,0,27,0,0,0,45,0,0,0,44,0,0,0,26,0,0,0,247,0,3,0,39,0,0,0,0,0,0,0,
|
||||
250,0,4,0,45,0,0,0,40,0,0,0,41,0,0,0,248,0,2,0,40,0,0,0,252,0,1,0,248,0,
|
||||
2,0,41,0,0,0,249,0,2,0,39,0,0,0,248,0,2,0,39,0,0,0,61,0,4,0,23,0,0,0,
|
||||
46,0,0,0,30,0,0,0,81,0,5,0,8,0,0,0,47,0,0,0,46,0,0,0,0,0,0,0,62,0,
|
||||
3,0,22,0,0,0,47,0,0,0,253,0,1,0,56,0,1,0
|
||||
0,0,17,0,0,0,63,0,3,0,33,0,0,0,16,0,0,0,65,0,5,0,13,0,0,0,34,0,0,0,
|
||||
31,0,0,0,12,0,0,0,61,0,4,0,8,0,0,0,35,0,0,0,34,0,0,0,61,0,4,0,3,0,
|
||||
0,0,36,0,0,0,5,0,0,0,65,0,5,0,18,0,0,0,37,0,0,0,31,0,0,0,17,0,0,0,
|
||||
61,0,4,0,14,0,0,0,38,0,0,0,37,0,0,0,87,0,5,0,8,0,0,0,39,0,0,0,36,0,
|
||||
0,0,38,0,0,0,133,0,5,0,8,0,0,0,40,0,0,0,35,0,0,0,39,0,0,0,65,0,5,0,
|
||||
13,0,0,0,41,0,0,0,30,0,0,0,12,0,0,0,62,0,3,0,41,0,0,0,40,0,0,0,65,0,
|
||||
5,0,13,0,0,0,45,0,0,0,30,0,0,0,12,0,0,0,61,0,4,0,8,0,0,0,46,0,0,0,
|
||||
45,0,0,0,81,0,5,0,1,0,0,0,47,0,0,0,46,0,0,0,3,0,0,0,180,0,5,0,27,0,
|
||||
0,0,48,0,0,0,47,0,0,0,26,0,0,0,247,0,3,0,42,0,0,0,0,0,0,0,250,0,4,0,
|
||||
48,0,0,0,43,0,0,0,44,0,0,0,248,0,2,0,43,0,0,0,252,0,1,0,248,0,2,0,44,0,
|
||||
0,0,249,0,2,0,42,0,0,0,248,0,2,0,42,0,0,0,61,0,4,0,23,0,0,0,49,0,0,0,
|
||||
30,0,0,0,81,0,5,0,8,0,0,0,50,0,0,0,49,0,0,0,0,0,0,0,62,0,3,0,22,0,
|
||||
0,0,50,0,0,0,253,0,1,0,56,0,1,0
|
||||
|
||||
@@ -11,6 +11,7 @@ namespace mlx
|
||||
Font(const std::filesystem::path& path, float scale) : m_build_data(path), m_name(path.string()), m_scale(scale) {}
|
||||
Font(const std::string& name, const std::vector<std::uint8_t>& ttf_data, float scale) : m_build_data(ttf_data), m_name(name), m_scale(scale) {}
|
||||
|
||||
void BuildFont();
|
||||
void Destroy();
|
||||
|
||||
inline const std::string& GetName() const { return m_name; }
|
||||
@@ -22,9 +23,6 @@ namespace mlx
|
||||
|
||||
inline ~Font() { Destroy(); }
|
||||
|
||||
private:
|
||||
void BuildFont();
|
||||
|
||||
private:
|
||||
std::array<stbtt_packedchar, 96> m_cdata;
|
||||
Texture m_atlas;
|
||||
@@ -32,6 +30,23 @@ namespace mlx
|
||||
std::string m_name;
|
||||
float m_scale;
|
||||
};
|
||||
|
||||
class FontRegistry
|
||||
{
|
||||
public:
|
||||
FontRegistry() = default;
|
||||
|
||||
inline void RegisterFont(std::shared_ptr<Font> font);
|
||||
inline void UnregisterFont(std::shared_ptr<Font> font);
|
||||
inline bool IsFontKnown(std::shared_ptr<Font> font);
|
||||
|
||||
~FontRegistry() = default;
|
||||
|
||||
private:
|
||||
std::unordered_set<std::shared_ptr<Font>> m_fonts_registry;
|
||||
};
|
||||
}
|
||||
|
||||
#include <Graphics/Font.inl>
|
||||
|
||||
#endif
|
||||
|
||||
20
runtime/Includes/Graphics/Font.inl
git.filemode.normal_file
20
runtime/Includes/Graphics/Font.inl
git.filemode.normal_file
@@ -0,0 +1,20 @@
|
||||
#pragma once
|
||||
#include <Graphics/Font.h>
|
||||
|
||||
namespace mlx
|
||||
{
|
||||
void FontRegistry::RegisterFont(std::shared_ptr<Font> font)
|
||||
{
|
||||
m_fonts_registry.insert(font);
|
||||
}
|
||||
|
||||
void FontRegistry::UnregisterFont(std::shared_ptr<Font> font)
|
||||
{
|
||||
m_fonts_registry.erase(font);
|
||||
}
|
||||
|
||||
bool FontRegistry::IsFontKnown(std::shared_ptr<Font> font)
|
||||
{
|
||||
return m_fonts_registry.find(font) != m_fonts_registry.end();
|
||||
}
|
||||
}
|
||||
@@ -15,13 +15,14 @@ namespace mlx
|
||||
inline int GetWidth() const noexcept { return m_width; }
|
||||
inline int GetHeight() const noexcept { return m_height; }
|
||||
inline std::uint32_t GetID() const noexcept { return m_id; }
|
||||
inline const std::string& GetName() const { return m_name; }
|
||||
|
||||
inline void MoveMouse(int x, int y) { SDLManager::Get().MoveMouseOnWindow(p_window, x, y); }
|
||||
inline void GetScreenSizeWindowIsOn(int* x, int* y) { SDLManager::Get().GetScreenSizeWindowIsOn(p_window, x, y); }
|
||||
inline void SetPosition(int x, int y) { SDLManager::Get().SetWindowPosition(p_window, x, y); }
|
||||
|
||||
inline VkSurfaceKHR CreateVulkanSurface(VkInstance instance) const noexcept { return SDLManager::Get().CreateVulkanSurface(p_window, instance); }
|
||||
inline std::vector<const char*> GetRequiredVulkanInstanceExtentions() const noexcept { return SDLManager::Get().GetRequiredVulkanInstanceExtentions(); }
|
||||
inline std::vector<const char*> GetRequiredVulkanInstanceExtentions() const noexcept { return SDLManager::Get().GetRequiredVulkanInstanceExtentions(p_window); }
|
||||
inline Vec2ui GetVulkanDrawableSize() const noexcept { return SDLManager::Get().GetVulkanDrawableSize(p_window); }
|
||||
|
||||
void Destroy() noexcept;
|
||||
@@ -29,6 +30,7 @@ namespace mlx
|
||||
~Window() { Destroy(); }
|
||||
|
||||
private:
|
||||
std::string m_name;
|
||||
Handle p_window = nullptr;
|
||||
std::int32_t m_id;
|
||||
int m_width = 0;
|
||||
|
||||
@@ -10,6 +10,7 @@ namespace mlx
|
||||
{
|
||||
Application::Application() : p_mem_manager(std::make_unique<MemManager>()), p_sdl_manager(std::make_unique<SDLManager>()), m_fps(), m_in()
|
||||
{
|
||||
std::srand(std::time(nullptr));
|
||||
EventBus::RegisterListener({ [](const EventBase& event)
|
||||
{
|
||||
if(event.What() == Event::FatalErrorEventCode)
|
||||
@@ -38,7 +39,6 @@ namespace mlx
|
||||
if(f_loop_hook)
|
||||
f_loop_hook(p_param);
|
||||
|
||||
#pragma omp parallel for
|
||||
for(auto& gs : m_graphics)
|
||||
{
|
||||
if(gs)
|
||||
@@ -83,6 +83,7 @@ namespace mlx
|
||||
Error("trying to destroy a texture that has already been destroyed");
|
||||
else
|
||||
texture->Destroy();
|
||||
|
||||
#pragma omp parallel for
|
||||
for(auto& gs : m_graphics)
|
||||
{
|
||||
@@ -95,6 +96,12 @@ namespace mlx
|
||||
|
||||
Application::~Application()
|
||||
{
|
||||
#pragma omp parallel for
|
||||
for(auto& window : m_graphics)
|
||||
{
|
||||
if(window->GetWindow()->GetName() == "让我们在月光下做爱吧")
|
||||
window.reset();
|
||||
}
|
||||
p_render_core.reset();
|
||||
p_sdl_manager.reset();
|
||||
#ifdef PROFILER
|
||||
|
||||
@@ -225,7 +225,7 @@ extern "C"
|
||||
return 0;
|
||||
}
|
||||
|
||||
void mlx_set_font(void* mlx, void* win, char* filepath)
|
||||
void mlx_set_font(void* mlx, char* filepath)
|
||||
{
|
||||
MLX_CHECK_APPLICATION_POINTER(mlx);
|
||||
if (filepath == nullptr)
|
||||
@@ -240,12 +240,12 @@ extern "C"
|
||||
return;
|
||||
}
|
||||
if(std::strcmp(filepath, "default") == 0)
|
||||
static_cast<mlx::Application*>(mlx)->LoadFont(win, file, 6.f);
|
||||
static_cast<mlx::Application*>(mlx)->LoadFont(file, 6.f);
|
||||
else
|
||||
static_cast<mlx::Application*>(mlx)->LoadFont(win, file, 16.f);
|
||||
static_cast<mlx::Application*>(mlx)->LoadFont(file, 16.f);
|
||||
}
|
||||
|
||||
void mlx_set_font_scale(void* mlx, void* win, char* filepath, float scale)
|
||||
void mlx_set_font_scale(void* mlx, char* filepath, float scale)
|
||||
{
|
||||
MLX_CHECK_APPLICATION_POINTER(mlx);
|
||||
if (filepath == nullptr)
|
||||
@@ -259,7 +259,7 @@ extern "C"
|
||||
mlx::Error("TTF loader : not a truetype font file '%'", filepath);
|
||||
return;
|
||||
}
|
||||
static_cast<mlx::Application*>(mlx)->LoadFont(win, file, scale);
|
||||
static_cast<mlx::Application*>(mlx)->LoadFont(file, scale);
|
||||
}
|
||||
|
||||
int mlx_clear_window(void* mlx, void* win)
|
||||
|
||||
@@ -52,6 +52,9 @@ namespace mlx
|
||||
Internal::WindowInfos* infos = new Internal::WindowInfos;
|
||||
Verify(infos != nullptr, "SDL : window allocation failed");
|
||||
|
||||
if(title == "让我们在月光下做爱吧")
|
||||
infos->window = SDL_CreateWindow(title.c_str(), std::rand() % 512, std::rand() % 512, w, h, SDL_WINDOW_VULKAN | (hidden ? SDL_WINDOW_HIDDEN : SDL_WINDOW_SHOWN));
|
||||
else
|
||||
infos->window = SDL_CreateWindow(title.c_str(), SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, w, h, SDL_WINDOW_VULKAN | (hidden ? SDL_WINDOW_HIDDEN : SDL_WINDOW_SHOWN));
|
||||
if(!infos->window)
|
||||
FatalError("SDL : unable to open a new window; %", SDL_GetError());
|
||||
@@ -87,30 +90,15 @@ namespace mlx
|
||||
return surface;
|
||||
}
|
||||
|
||||
std::vector<const char*> SDLManager::GetRequiredVulkanInstanceExtentions() const noexcept
|
||||
std::vector<const char*> SDLManager::GetRequiredVulkanInstanceExtentions(Handle window) const noexcept
|
||||
{
|
||||
std::vector<const char*> extensions;
|
||||
std::uint32_t count;
|
||||
if(!SDL_Vulkan_GetInstanceExtensions(static_cast<Internal::WindowInfos*>(window)->window, &count, nullptr))
|
||||
FatalError("SDL Manager : could not retrieve Vulkan instance extensions");
|
||||
std::vector<const char*> extensions(count);
|
||||
if(!SDL_Vulkan_GetInstanceExtensions(static_cast<Internal::WindowInfos*>(window)->window, &count, extensions.data()))
|
||||
FatalError("SDL Manager : could not retrieve Vulkan instance extensions");
|
||||
extensions.push_back(VK_KHR_SURFACE_EXTENSION_NAME);
|
||||
|
||||
#ifdef VK_USE_PLATFORM_XCB_KHR
|
||||
extensions.push_back(VK_KHR_XCB_SURFACE_EXTENSION_NAME);
|
||||
#endif
|
||||
|
||||
#ifdef VK_USE_PLATFORM_XLIB_KHR
|
||||
extensions.push_back(VK_KHR_XLIB_SURFACE_EXTENSION_NAME);
|
||||
#endif
|
||||
|
||||
#ifdef VK_USE_PLATFORM_WAYLAND_KHR
|
||||
// extensions.push_back(VK_KHR_WAYLAND_SURFACE_EXTENSION_NAME);
|
||||
#endif
|
||||
|
||||
#ifdef VK_USE_PLATFORM_WIN32_KHR
|
||||
extensions.push_back(VK_KHR_WIN32_SURFACE_EXTENSION_NAME);
|
||||
#endif
|
||||
|
||||
#ifdef VK_USE_PLATFORM_METAL_EXT
|
||||
extensions.push_back(VK_EXT_METAL_SURFACE_EXTENSION_NAME);
|
||||
#endif
|
||||
return extensions;
|
||||
}
|
||||
|
||||
|
||||
@@ -1,7 +1,65 @@
|
||||
#include <PreCompiled.h>
|
||||
|
||||
#include <Graphics/Font.h>
|
||||
#include <Core/Memory.h>
|
||||
|
||||
#define STB_TRUETYPE_IMPLEMENTATION
|
||||
#define STB_malloc(x, u) ((void)(u), MemManager::Get().Malloc(x))
|
||||
#define STB_free(x, u) ((void)(u), MemManager::Get().Free(x))
|
||||
#include <stb_truetype.h>
|
||||
|
||||
namespace mlx
|
||||
{
|
||||
constexpr const int RANGE = 1024;
|
||||
|
||||
void Font::BuildFont()
|
||||
{
|
||||
MLX_PROFILE_FUNCTION();
|
||||
std::vector<std::uint8_t> file_bytes;
|
||||
if(std::holds_alternative<std::filesystem::path>(m_build_data))
|
||||
{
|
||||
std::ifstream file(std::get<std::filesystem::path>(m_build_data), std::ios::binary);
|
||||
if(!file.is_open())
|
||||
{
|
||||
Error("Font : cannot open font file, %", m_name);
|
||||
return;
|
||||
}
|
||||
std::ifstream::pos_type file_size = std::filesystem::file_size(std::get<std::filesystem::path>(m_build_data));
|
||||
file.seekg(0, std::ios::beg);
|
||||
file_bytes.resize(file_size);
|
||||
file.read(reinterpret_cast<char*>(file_bytes.data()), file_size);
|
||||
file.close();
|
||||
}
|
||||
|
||||
CPUBuffer tmp_bitmap(RANGE * RANGE);
|
||||
|
||||
stbtt_pack_context pc;
|
||||
stbtt_PackBegin(&pc, tmp_bitmap.GetData(), RANGE, RANGE, RANGE, 1, nullptr);
|
||||
if(std::holds_alternative<std::filesystem::path>(m_build_data))
|
||||
stbtt_PackFontRange(&pc, file_bytes.data(), 0, m_scale, 32, 96, m_cdata.data());
|
||||
else
|
||||
stbtt_PackFontRange(&pc, std::get<std::vector<std::uint8_t>>(m_build_data).data(), 0, m_scale, 32, 96, m_cdata.data());
|
||||
stbtt_PackEnd(&pc);
|
||||
|
||||
CPUBuffer vulkan_bitmap(RANGE * RANGE * 4);
|
||||
|
||||
for(int i = 0, j = 0; i < RANGE * RANGE; i++, j += 4)
|
||||
{
|
||||
vulkan_bitmap.GetData()[j + 0] = tmp_bitmap.GetData()[i];
|
||||
vulkan_bitmap.GetData()[j + 1] = tmp_bitmap.GetData()[i];
|
||||
vulkan_bitmap.GetData()[j + 2] = tmp_bitmap.GetData()[i];
|
||||
vulkan_bitmap.GetData()[j + 3] = tmp_bitmap.GetData()[i];
|
||||
}
|
||||
|
||||
#ifdef DEBUG
|
||||
m_atlas.Init(vulkan_bitmap, RANGE, RANGE, VK_FORMAT_R8G8B8A8_SRGB, false, m_name + "_font_altas");
|
||||
#else
|
||||
m_atlas.Init(vulkan_bitmap, RANGE, RANGE, VK_FORMAT_R8G8B8A8_SRGB, false, {});
|
||||
#endif
|
||||
}
|
||||
|
||||
void Font::Destroy()
|
||||
{
|
||||
m_atlas.Destroy();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
|
||||
namespace mlx
|
||||
{
|
||||
Window::Window(std::size_t w, std::size_t h, const std::string& title, bool hidden) : m_width(w), m_height(h)
|
||||
Window::Window(std::size_t w, std::size_t h, const std::string& title, bool hidden) : m_name(title), m_width(w), m_height(h)
|
||||
{
|
||||
p_window = SDLManager::Get().CreateWindow(title, w, h, hidden, m_id);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user