Я пишу код, который загружает ad-hoc-текстуры во время выполнения. Загружаемая текстура указана пользователем, поэтому я не знаю об этом до ее загрузки.JVM вылетает при использовании MipMaps на небольших текстурах в Windows
Некоторые текстуры могут быть довольно большими и очень сильно масштабироваться, поэтому я использую TextureFilter.MipMapLinearNearest
для моего фильтра min. Таким образом, я загружаю текстуру с useMipMaps значение ИСТИНА ...
Texture texture = new Texture(imageFile, true);
Вопрос заключается в том, что на Windows, моя JVM умирает с фатальной ошибкой, если пользователь указывает на изображение, которое только один пиксел.
Одним из решений было бы проверить это, загрузив текстуру без активации MipMaps, чтобы проверить размер, а затем перезагрузить его с включенным MipMaps, если размер больше 1, однако я бы хотел избежать чтобы загрузить его дважды.
Есть ли более эффективный способ обойти эту проблему?
Просто к сведению: это не виртуальная машина умирает. LibGDX неизбежно перейдет к внешнему внутреннему коду, который будет взаимодействовать с OpenGL, и если этот родной код выйдет из строя, в результате произойдет сбой JVM. API OpenGL точно не известен своей внутренней проверкой ошибок, если вы передадите ему мусор, авария, как правило, будет результатом. Таким образом, окончательный «обходной путь» заключается в том, чтобы найти, как вы запускаете LibGDX, чтобы делать все неправильные вещи в своем интерфейсе OpenGL и исправлять это. Или сообщите об этом как об ошибке для команды LibGDX. – Gimby
Спасибо за комментарий @Gimby: Да, я знал, что это был собственный код - это было ясно из дампа потока, и именно так я обнаружил, что это было mipmapping, которое вызывало проблему. Libgdx использует Lwjgl, поэтому я предполагаю, что это тот проект, который может сделать с усилением обработки ошибок. Тем не менее, создание MipMaps для текстур с шириной или высотой 1 почти никогда не будет полезной задачей, так как ошибки идут довольно незначительно. –
«Почти никогда» - я бы просто пошел на это и сказал «никогда». Таким образом, в этом отношении ваш собственный ответ на самом деле является правильным решением, а не обходным путем. – Gimby