From 75bbf03cfb1d7f09887c89566ae21118b9f69366 Mon Sep 17 00:00:00 2001 From: Haroon Qureshi Date: Fri, 27 Mar 2026 07:04:25 -0700 Subject: [PATCH] Add PBR test model. PiperOrigin-RevId: 890431107 Change-Id: Ib3b5fa775daa93b4c798483df226585441ea5c61 --- src/user/user_objects.cc | 1 + test/user/testdata/ibl.ktx | Bin 0 -> 31056 bytes test/user/testdata/pbr.xml | 249 +++++++++++++++++++++++++++++++++++++ 3 files changed, 250 insertions(+) create mode 100644 test/user/testdata/ibl.ktx create mode 100644 test/user/testdata/pbr.xml diff --git a/src/user/user_objects.cc b/src/user/user_objects.cc index ce5d7cff..c8395157 100644 --- a/src/user/user_objects.cc +++ b/src/user/user_objects.cc @@ -5265,6 +5265,7 @@ void mjCTexture::LoadKTX(mjResource* resource, std::vector& image, w = buffer_sz; h = 1; + nchannel = 1; is_srgb = false; image.resize(buffer_sz); diff --git a/test/user/testdata/ibl.ktx b/test/user/testdata/ibl.ktx new file mode 100644 index 0000000000000000000000000000000000000000..b46b730dcd95edcd114fa97ddd272dcc0b8c9b14 GIT binary patch literal 31056 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 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +