Полуплавающие текстуры OpenGL ES 3.0 (R16F)

Может кто-нибудь ответить мне, как появилась эта строка:

GLES30.glTexImage2D(GLES30.GL_TEXTURE_2D, 0,  GLES30.GL_R16F, width, height, 0,  GLES30.GL_RED, GLES30.GL_HALF_FLOAT, myBuffer);

работает на tegra4, но не работает на ARM Mali-T628 MP6?

Кстати, я не прикрепляю это к фреймбуферу, я использую это как текстуру только для чтения. Код, возвращаемый ARM, — 1280, когда Tegra «вообще не жалуется».

Кроме того, я знаю, что Tegra4 имеет расширение для полуплавающих текстур, а конкретный Mali не имеет такого расширения, но поскольку это OpenGL ES 3.0, разве он не должен поддерживать такие текстуры?


person user1577566    schedule 16.12.2014    source источник


Ответы (1)


Этот призыв кажется мне вполне обоснованным. Ошибка 1280 — GL_INVALID_ENUM, что говорит о том, что один из 3 аргументов типа перечисления недействителен. Но каждый из них сам по себе, а также их комбинация, соответствует спецификации.

Наиболее вероятное объяснение — ошибка драйвера. Я обнаружил, что некоторые драйверы ES 3.0 имеют множество проблем, поэтому обнаружение проблем не является большим сюрпризом.


Раздел ниже был написан исходя из предположения, что текстура будет использоваться в качестве цели рендеринга (вложение FBO). Пожалуйста, игнорируйте, если вы ищете прямой ответ на вопрос.


GL_R16F не поддерживает цветопередачу в стандартном ES 3.0.

Если вы откроете документ спецификации, который можно найти на www.khronos.org (прямая ссылка), в таблице 3.13 на страницах 130-132 перечислены все форматы текстур и их свойства. R16F нет галочки в столбце "Цвето-рендеринг", что означает, что его нельзя использовать в качестве цели рендеринга.

Соответственно, R16F также указан в разделе «Цветовые форматы только для текстур» в разделе «Требуемые форматы текстур» на страницах 129–130.

Это означает, что устройству требуется расширение EXT_color_buffer_half_float для поддержки рендеринга в R16F. Это все еще имеет место и в ES 3.1.

person Reto Koradi    schedule 16.12.2014
comment
Я написал, что не прикрепляю это к фреймбуферу, я не использую это как цель рендеринга. Я хочу использовать это как текстуру LUT только для чтения. - person user1577566; 16.12.2014
comment
Хорошо, я отредактировал ответ, чтобы спасти его как можно лучше. Приносим свои извинения за первоначальное непонимание. - person Reto Koradi; 17.12.2014