mirror of
https://github.com/libsdl-org/SDL.git
synced 2025-12-26 08:09:11 +00:00
Cocoa metal layers need their size updated before renderer updates
Also refactored event watch code so it can be shared between internal window event dispatch and public event watchers. Fixes https://github.com/libsdl-org/SDL/issues/12376
This commit is contained in:
@@ -25,6 +25,7 @@
|
||||
#include "SDL_sysrender.h"
|
||||
#include "SDL_render_debug_font.h"
|
||||
#include "software/SDL_render_sw_c.h"
|
||||
#include "../events/SDL_windowevents_c.h"
|
||||
#include "../video/SDL_pixels_c.h"
|
||||
#include "../video/SDL_video_c.h"
|
||||
|
||||
@@ -820,8 +821,9 @@ const char *SDL_GetRenderDriver(int index)
|
||||
#endif
|
||||
}
|
||||
|
||||
void SDL_RendererEventWatch(SDL_Renderer *renderer, SDL_Event *event)
|
||||
static bool SDL_RendererEventWatch(void *userdata, SDL_Event *event)
|
||||
{
|
||||
SDL_Renderer *renderer = (SDL_Renderer *)userdata;
|
||||
SDL_Window *window = renderer->window;
|
||||
|
||||
if (renderer->WindowEvent) {
|
||||
@@ -849,6 +851,7 @@ void SDL_RendererEventWatch(SDL_Renderer *renderer, SDL_Event *event)
|
||||
event->type == SDL_EVENT_WINDOW_HDR_STATE_CHANGED) {
|
||||
UpdateHDRProperties(renderer);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
bool SDL_CreateWindowAndRenderer(const char *title, int width, int height, SDL_WindowFlags window_flags, SDL_Window **window, SDL_Renderer **renderer)
|
||||
@@ -1107,6 +1110,10 @@ SDL_Renderer *SDL_CreateRendererWithProperties(SDL_PropertiesID props)
|
||||
|
||||
SDL_SetRenderViewport(renderer, NULL);
|
||||
|
||||
if (window) {
|
||||
SDL_AddWindowEventWatch(SDL_WINDOW_EVENT_WATCH_NORMAL, SDL_RendererEventWatch, renderer);
|
||||
}
|
||||
|
||||
int vsync = (int)SDL_GetNumberProperty(props, SDL_PROP_RENDERER_CREATE_PRESENT_VSYNC_NUMBER, 0);
|
||||
if (!SDL_SetRenderVSync(renderer, vsync)) {
|
||||
if (vsync == 0) {
|
||||
@@ -5224,6 +5231,8 @@ void SDL_DestroyRendererWithoutFreeing(SDL_Renderer *renderer)
|
||||
|
||||
renderer->destroyed = true;
|
||||
|
||||
SDL_RemoveWindowEventWatch(SDL_WINDOW_EVENT_WATCH_NORMAL, SDL_RendererEventWatch, renderer);
|
||||
|
||||
if (renderer->window) {
|
||||
SDL_PropertiesID props = SDL_GetWindowProperties(renderer->window);
|
||||
if (SDL_GetPointerProperty(props, SDL_PROP_WINDOW_RENDERER_POINTER, NULL) == renderer) {
|
||||
|
||||
@@ -339,9 +339,6 @@ extern SDL_RenderDriver GPU_RenderDriver;
|
||||
// Clean up any renderers at shutdown
|
||||
extern void SDL_QuitRender(void);
|
||||
|
||||
// Handle window events for a renderer
|
||||
extern void SDL_RendererEventWatch(SDL_Renderer *renderer, SDL_Event *event);
|
||||
|
||||
// Add a supported texture format to a renderer
|
||||
extern bool SDL_AddSupportedTextureFormat(SDL_Renderer *renderer, SDL_PixelFormat format);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user