Nano Hash - криптовалюты, майнинг, программирование

Запрошенный размер текстуры превышает максимальный размер текстуры

В JavaFx у меня есть программа, в которой renderthread иногда вылетает с сообщением о том, что запрошенный размер текстуры слишком велик. Если я правильно прочитал трассировку стека, я предполагаю, что это происходит в NGCanvas (что, вероятно, означает собственный графический холст, часть реализации узла JavaFx Canvas).

Я проверил размеры холстов, которые я выделяю, и ни один не приблизился к этому размеру. Теперь, поскольку JavaFx выполняет рендеринг в своем собственном потоке, я даже не знаю, кто это создал.

Можно ли как-нибудь узнать, кто говорит рендерпайплайну выделять такую ​​большую текстуру?

java.lang.RuntimeException: Requested texture dimension (65824) requires dimension (0) that exceeds maximum texture size (16384)
    at com.sun.prism.es2.ES2RTTexture.getCompatibleDimension(ES2RTTexture.java:135)
    at com.sun.prism.es2.ES2ResourceFactory.getRTTWidth(ES2ResourceFactory.java:146)
    at com.sun.scenario.effect.impl.prism.ps.PPSDrawable.getCompatibleWidth(PPSDrawable.java:48)
    at com.sun.scenario.effect.impl.prism.ps.PPSRenderer.getCompatibleWidth(PPSRenderer.java:153)
    at com.sun.scenario.effect.impl.ImagePool.checkOut(ImagePool.java:119)
    at com.sun.scenario.effect.impl.Renderer.getCompatibleImage(Renderer.java:116)
    at com.sun.scenario.effect.impl.prism.ps.PPSRenderer.getCompatibleImage(PPSRenderer.java:168)
    at com.sun.scenario.effect.impl.prism.ps.PPSRenderer.getCompatibleImage(PPSRenderer.java:67)
    at com.sun.scenario.effect.Effect.getCompatibleImage(Effect.java:479)
    at com.sun.javafx.sg.prism.NGCanvas$RenderInput.filter(NGCanvas.java:1582)
    at com.sun.scenario.effect.FilterEffect.filter(FilterEffect.java:185)
    at com.sun.javafx.sg.prism.NGCanvas.applyEffectOnAintoC(NGCanvas.java:737)
    at com.sun.javafx.sg.prism.NGCanvas.renderStream(NGCanvas.java:1080)
    at com.sun.javafx.sg.prism.NGCanvas.renderContent(NGCanvas.java:606)
    at com.sun.javafx.sg.prism.NGNode.doRender(NGNode.java:2053)
    at com.sun.javafx.sg.prism.NGNode.render(NGNode.java:1945)
    at com.sun.javafx.sg.prism.NGGroup.renderContent(NGGroup.java:235)
    at com.sun.javafx.sg.prism.NGRegion.renderContent(NGRegion.java:576)
    at com.sun.javafx.sg.prism.NGNode.doRender(NGNode.java:2053)
    at com.sun.javafx.sg.prism.NGNode.render(NGNode.java:1945)
    at com.sun.javafx.tk.quantum.ViewPainter.doPaint(ViewPainter.java:477)
    at com.sun.javafx.tk.quantum.ViewPainter.paintImpl(ViewPainter.java:330)
    at com.sun.javafx.tk.quantum.PresentingPainter.run(PresentingPainter.java:91)
    at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
    at java.util.concurrent.FutureTask.runAndReset(FutureTask.java:308)
    at com.sun.javafx.tk.RenderJob.run(RenderJob.java:58)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    at com.sun.javafx.tk.quantum.QuantumRenderer$PipelineRunnable.run(QuantumRenderer.java:125)
    at java.lang.Thread.run(Thread.java:745)

По запросу: я использую среду linux debian amd64, jdk 1.8 update 66. Рендеринг происходит через mesa.

29.01.2016

  • Можете ли вы добавить подробности о вашей среде? Я уверен, что видел эту проблему в ошибках openjdk. 29.01.2016
  • @ItachiUchiha добавил больше информации об окружающей среде. 29.01.2016
  • Я не уверен, что вы сталкиваетесь с той же проблемой, но вы можете проверить - Exception при заполнении формы с помощью ImagePattern на основе большого изображения 29.01.2016
  • Кажется, это не связано с этой проблемой. 30.01.2016
  • Может ли это быть ошибкой в ​​драйвере? Попробуйте запустить программу с помощью -Dprism.order=sw, чтобы принудительно выполнить программный рендеринг. Если это поможет, вы можете попробовать обновить драйвер графического процессора (и, в любом случае, публикация вашей текущей версии и графической конфигурации может быть уместной). 03.02.2016
  • Бага в драйвере нет. Это также происходит под окнами 7; которые, как я подозреваю, являются совершенно разными драйверами. 03.02.2016
  • Вы пробовали программное обеспечение, sw, предложение? Сработало или не получилось? Можете ли вы предоставить mcve, чтобы легко воспроизвести проблему? Почему вы пытаетесь работать с такими большими текстурами? Максимальный размер текстуры может быть ограничением базового графического оборудования, а не обязательно драйвера. Возможно, вам придется работать с узлами меньшего размера. Например, максимальный размер текстуры, поддерживаемый базовым графическим оборудованием, может варьироваться от 4096x4096 до 16384x16384 в зависимости от чипа. 04.02.2016
  • Я столкнулся с тем же исключением. В моем случае виновником явно является слишком большой VBox, поэтому canvas немного вводит в заблуждение. Похоже, если вы получите это исключение, вам нужно проверить все узлы в вашей программе, чтобы увидеть, не слишком ли они велики, даже если (как в моем случае) они прокручиваются за пределы экрана в области прокрутки. 15.08.2017
  • Добавление: это был не просто большой VBox, но и попытка применить к нему клип и эффект преобразования перспективы, что, я думаю, в свою очередь потребовало JavaFX для создания изображения узла. Большой VBox сам по себе в порядке, это была моя пользовательская анимация, которая вызывала исключение. 15.08.2017

Ответы:


1

В javaFx только потоку приложения javaFx разрешено изменять холст. Попробуйте использовать Platform.runLater(), чтобы упаковать вызов отрисовки в GraphicsContext в новый Runnable.

02.02.2016
  • Я знаю это. JavaFx даже пожалуется, если вы посмеете использовать не тот поток. Но это не имеет отношения к вопросу. 03.02.2016
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..