diff --git a/src/render/SDL_render.c b/src/render/SDL_render.c index c5259ca5a4..4a7bd01717 100644 --- a/src/render/SDL_render.c +++ b/src/render/SDL_render.c @@ -4581,8 +4581,8 @@ bool SDL_RenderTextureTiled(SDL_Renderer *renderer, SDL_Texture *texture, const (!srcrect || (real_srcrect.x == 0.0f && real_srcrect.y == 0.0f && real_srcrect.w == (float)texture->w && real_srcrect.h == (float)texture->h)); - if (do_wrapping) { - if (renderer->npot_texture_wrap_unsupported && (IsNPOT((int) real_srcrect.w) || IsNPOT((int) real_srcrect.h))) { + if (do_wrapping && !renderer->npot_texture_wrap_unsupported) { + if (renderer->npot_texture_wrap_unsupported && (IsNPOT(texture->w) || IsNPOT(texture->h))) { do_wrapping = false; } } @@ -5428,6 +5428,12 @@ bool SDL_SetRenderTextureAddressMode(SDL_Renderer *renderer, SDL_TextureAddressM { CHECK_RENDERER_MAGIC(renderer, false); + if ((u_mode == SDL_TEXTURE_ADDRESS_WRAP || v_mode == SDL_TEXTURE_ADDRESS_WRAP) && + renderer->npot_texture_wrap_unsupported) { + // Technically it's supported on power of two textures, but we're assuming that non-power-of-two textures are going to be used. + return SDL_SetError("SDL_TEXTURE_ADDRESS_WRAP not supported"); + } + renderer->texture_address_mode_u = u_mode; renderer->texture_address_mode_v = v_mode; return true; diff --git a/src/render/direct3d/SDL_render_d3d.c b/src/render/direct3d/SDL_render_d3d.c index dad3043b0d..89b3a1fac6 100644 --- a/src/render/direct3d/SDL_render_d3d.c +++ b/src/render/direct3d/SDL_render_d3d.c @@ -1843,6 +1843,13 @@ static bool D3D_CreateRenderer(SDL_Renderer *renderer, SDL_Window *window, SDL_P } else { device_flags |= D3DCREATE_SOFTWARE_VERTEXPROCESSING; } + if (caps.TextureCaps & D3DPTEXTURECAPS_POW2) { + if (caps.TextureCaps & D3DPTEXTURECAPS_NONPOW2CONDITIONAL) { + renderer->npot_texture_wrap_unsupported = true; + } else { + return SDL_SetError("Non-power-of-two textures are not supported"); + } + } if (SDL_GetHintBoolean(SDL_HINT_RENDER_DIRECT3D_THREADSAFE, false)) { device_flags |= D3DCREATE_MULTITHREADED; diff --git a/src/render/ngage/SDL_render_ngage.c b/src/render/ngage/SDL_render_ngage.c index 3956286d38..3254a0339d 100644 --- a/src/render/ngage/SDL_render_ngage.c +++ b/src/render/ngage/SDL_render_ngage.c @@ -63,7 +63,6 @@ static bool NGAGE_UpdateTexture(SDL_Renderer *renderer, SDL_Texture *texture, co static bool NGAGE_LockTexture(SDL_Renderer *renderer, SDL_Texture *texture, const SDL_Rect *rect, void **pixels, int *pitch); static void NGAGE_UnlockTexture(SDL_Renderer *renderer, SDL_Texture *texture); -static void NGAGE_SetTextureScaleMode(SDL_Renderer *renderer, SDL_Texture *texture, SDL_ScaleMode scaleMode); static bool NGAGE_SetRenderTarget(SDL_Renderer *renderer, SDL_Texture *texture); static SDL_Surface *NGAGE_RenderReadPixels(SDL_Renderer *renderer, const SDL_Rect *rect); static bool NGAGE_RenderPresent(SDL_Renderer *renderer); @@ -99,25 +98,22 @@ static bool NGAGE_CreateRenderer(SDL_Renderer *renderer, SDL_Window *window, SDL renderer->QueueCopy = NGAGE_QueueCopy; renderer->QueueCopyEx = NGAGE_QueueCopyEx; renderer->QueueGeometry = NGAGE_QueueGeometry; - renderer->InvalidateCachedState = NGAGE_InvalidateCachedState; renderer->RunCommandQueue = NGAGE_RunCommandQueue; renderer->UpdateTexture = NGAGE_UpdateTexture; renderer->LockTexture = NGAGE_LockTexture; renderer->UnlockTexture = NGAGE_UnlockTexture; - // renderer->SetTextureScaleMode = NGAGE_SetTextureScaleMode; renderer->SetRenderTarget = NGAGE_SetRenderTarget; renderer->RenderReadPixels = NGAGE_RenderReadPixels; renderer->RenderPresent = NGAGE_RenderPresent; renderer->DestroyTexture = NGAGE_DestroyTexture; - renderer->DestroyRenderer = NGAGE_DestroyRenderer; - renderer->SetVSync = NGAGE_SetVSync; renderer->name = NGAGE_RenderDriver.name; renderer->window = window; renderer->internal = phdata; + renderer->npot_texture_wrap_unsupported = true; SDL_AddSupportedTextureFormat(renderer, SDL_PIXELFORMAT_XRGB4444); SDL_SetNumberProperty(SDL_GetRendererProperties(renderer), SDL_PROP_RENDERER_MAX_TEXTURE_SIZE_NUMBER, 1024); @@ -495,10 +491,6 @@ static void NGAGE_UnlockTexture(SDL_Renderer *renderer, SDL_Texture *texture) { } -static void NGAGE_SetTextureScaleMode(SDL_Renderer *renderer, SDL_Texture *texture, SDL_ScaleMode scaleMode) -{ -} - static bool NGAGE_SetRenderTarget(SDL_Renderer *renderer, SDL_Texture *texture) { return true; diff --git a/src/render/ps2/SDL_render_ps2.c b/src/render/ps2/SDL_render_ps2.c index b15e39824d..b366313d4e 100644 --- a/src/render/ps2/SDL_render_ps2.c +++ b/src/render/ps2/SDL_render_ps2.c @@ -752,6 +752,7 @@ static bool PS2_CreateRenderer(SDL_Renderer *renderer, SDL_Window *window, SDL_P renderer->window = window; renderer->name = PS2_RenderDriver.name; + renderer->npot_texture_wrap_unsupported = true; SDL_AddSupportedTextureFormat(renderer, SDL_PIXELFORMAT_ABGR1555); SDL_AddSupportedTextureFormat(renderer, SDL_PIXELFORMAT_ABGR8888); SDL_SetNumberProperty(SDL_GetRendererProperties(renderer), SDL_PROP_RENDERER_MAX_TEXTURE_SIZE_NUMBER, 1024); diff --git a/src/render/psp/SDL_render_psp.c b/src/render/psp/SDL_render_psp.c index 7cc2033b34..8f5a3ce4da 100644 --- a/src/render/psp/SDL_render_psp.c +++ b/src/render/psp/SDL_render_psp.c @@ -1532,6 +1532,7 @@ static bool PSP_CreateRenderer(SDL_Renderer *renderer, SDL_Window *window, SDL_P renderer->window = window; renderer->name = PSP_RenderDriver.name; + renderer->npot_texture_wrap_unsupported = true; SDL_AddSupportedTextureFormat(renderer, SDL_PIXELFORMAT_BGR565); SDL_AddSupportedTextureFormat(renderer, SDL_PIXELFORMAT_ABGR1555); SDL_AddSupportedTextureFormat(renderer, SDL_PIXELFORMAT_ABGR4444); diff --git a/src/render/vitagxm/SDL_render_vita_gxm.c b/src/render/vitagxm/SDL_render_vita_gxm.c index 039155b732..346bebb4db 100644 --- a/src/render/vitagxm/SDL_render_vita_gxm.c +++ b/src/render/vitagxm/SDL_render_vita_gxm.c @@ -233,6 +233,7 @@ static bool VITA_GXM_CreateRenderer(SDL_Renderer *renderer, SDL_Window *window, renderer->window = window; renderer->name = VITA_GXM_RenderDriver.name; + renderer->npot_texture_wrap_unsupported = true; SDL_AddSupportedTextureFormat(renderer, SDL_PIXELFORMAT_ABGR8888); SDL_AddSupportedTextureFormat(renderer, SDL_PIXELFORMAT_ARGB8888); SDL_AddSupportedTextureFormat(renderer, SDL_PIXELFORMAT_RGB565);