Fix Render discard issue [pd-3ds]

- Clip Rects do now not discard when they move out of screen (cause the maths ends in < 0 which is not working with u32)
- Fixing ui7 crash wehn im input was nullptr
This commit is contained in:
2026-03-10 18:57:29 +01:00
parent 97efca5173
commit 02d2200edd
6 changed files with 15 additions and 11 deletions

View File

@@ -9,11 +9,11 @@ set(SRC
)
add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/libpicasso)
add_library(pd-3ds STATIC ${SRC})
target_include_directories(pd-3ds PUBLIC
PUBLIC
target_include_directories(pd-3ds PUBLIC
PUBLIC
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
$<INSTALL_INTERFACE:include>
)
)
target_link_libraries(pd-3ds PUBLIC m palladium ctru citro3d pica::pica)
add_library(palladium::pd-3ds ALIAS pd-3ds)
install(TARGETS pd-3ds
@@ -34,4 +34,4 @@ install(TARGETS pica
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
INCLUDES DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}
)
)

View File

@@ -180,8 +180,10 @@ void GfxC3D::RenderDrawData(const PD::Li::CmdPool& Commands) {
if (ScissorEnabled) {
// Figure out this setup was pain
C3D_SetScissor(GPU_SCISSOR_NORMAL,
ViewPort.y - (ScissorRect.y + ScissorRect.w),
ViewPort.x - (ScissorRect.x + ScissorRect.z),
std::clamp(ViewPort.y - (ScissorRect.y + ScissorRect.w), 0,
ViewPort.y),
std::clamp(ViewPort.x - (ScissorRect.x + ScissorRect.z), 0,
ViewPort.x),
ViewPort.y - ScissorRect.y, ViewPort.x - ScissorRect.x);
} else {
C3D_SetScissor(GPU_SCISSOR_DISABLE, 0, 0, 0, 0);

View File

@@ -153,7 +153,7 @@ class U8Iterator {
}
bool PeekNext32(u32& ret) {
if (ptr + 1 == nullptr || *ptr + 1 == 0) return false;
// if ((ptr + 1) == 0 || *(ptr + 1) == 0) return false;
u8 c = *ptr;
if (c < 0x80) {
ret = c;

View File

@@ -38,6 +38,7 @@ class PD_API Image : public Container {
* @param size Custom Size of the Image
*/
Image(Li::Texture::Ref img, fvec2 size = 0.f, Li::Rect uv = fvec4(0.f)) {
if (!img) return;
this->img = img;
if (size == fvec2(0.f)) {
size = img->GetSize();
@@ -60,9 +61,9 @@ class PD_API Image : public Container {
void Draw() override;
private:
Li::Texture::Ref img; ///< Texture reference to the Image
fvec2 newsize = 0.f; ///< New Size
Li::Rect cuv; ///< Custom UV
Li::Texture::Ref img = nullptr; ///< Texture reference to the Image
fvec2 newsize = 0.f; ///< New Size
Li::Rect cuv; ///< Custom UV
};
} // namespace UI7
} // namespace PD

View File

@@ -26,6 +26,7 @@ SOFTWARE.
namespace PD {
namespace UI7 {
PD_API void Image::Draw() {
if (!img) return;
// Assert(io.get() && list.get(), "Did you run Container::Init correctly?");
// Assert(img.get(), "Image is nullptr!");
// io->Ren->OnScreen(screen);