This commit is contained in:
2024-10-22 16:25:13 +02:00
parent a86f26f0f3
commit 58ad52e1cc
7 changed files with 27 additions and 6 deletions

View File

@@ -84,8 +84,16 @@ namespace mlx
FatalError("invalid window title (NULL)");
return nullptr;
}
m_graphics.emplace_back(std::make_unique<GraphicsSupport>(w, h, title, m_graphics.size()));
m_in.RegisterWindow(m_graphics.back()->GetWindow());
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());
}
@@ -102,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)

View File

@@ -9,7 +9,7 @@ namespace mlx
p_scene->ResetSprites();
m_put_pixel_manager.ResetRenderData();
m_draw_layer = 0;
PixelPut(0, 0, 0x00000000); // bozoman solution FIXME
PixelPut(0, 0, 0x00000000); // bozoman solution FIXME WTF
}
void GraphicsSupport::PixelPut(int x, int y, std::uint32_t color) noexcept

View File

@@ -15,6 +15,7 @@ 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); }
@@ -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;

View File

@@ -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)
@@ -82,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)
{
@@ -94,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

View File

@@ -52,7 +52,10 @@ namespace mlx
Internal::WindowInfos* infos = new Internal::WindowInfos;
Verify(infos != nullptr, "SDL : window allocation failed");
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(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());
infos->icon = SDL_CreateRGBSurfaceFrom(static_cast<void*>(logo_mlx), logo_mlx_width, logo_mlx_height, 32, 4 * logo_mlx_width, rmask, gmask, bmask, amask);

View File

@@ -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);
}