В WebGL для вызовов texSubImage2D
и readPixels
требуются параметры Format
и Type
. Кроме того, для texSubImage2D
требуется параметр InternalFormat
. Несмотря на то, что легко найти документацию о том, какие комбинации этих параметров являются действительными, неясно, что конкретно означают эти параметры и как их эффективно использовать, особенно учитывая, что некоторые внутренние форматы могут быть соединены с несколькими типами, например
R16F
/ HALF_FLOAT
против R16F
/ FLOAT
или GL_R11F_G11F_B10F
/ FLOAT
против GL_R11F_G11F_B10F
/ GL_UNSIGNED_INT_10F_11F_11F_REV
(где используется обозначение InternalFormat
/ Type
)
Также оба этих вызова API можно использовать в сочетании с параметром pixels
, который может быть TypedArray
- в этом случае неясно, какие варианты TypedArray
действительны для данного InternalFormat
/ Format
/ Type
комбо (и какой выбор оптимален с точки зрения избежания каста)
Например, верно ли, что внутренняя память, используемая графическим процессором на тексель, определяется исключительно InternalFormat
- либо в зависимости от реализации (например, форматы WebGL1
unsized
), либо для некоторых новых добавлено InternalFormat
с в WegGL2
, полностью указанным способом.
Связаны ли параметры Format
и Type
главным образом с тем, как данные собираются и выводятся из ArrayBuffers
? Например, если я использую GL_R11F_G11F_B10F
/ GL_UNSIGNED_INT_10F_11F_11F_REV
Означает ли это, что я должен передать texSubImage2D
Uint32Array
, где каждый элемент массива тщательно перемешан в javascript
, тогда как если я использую GL_R11F_G11F_B10F
/ Float
, тогда я должен использовать Float32Array
с тремя раз количество элементов, как в предыдущем случае, и WebGL будет обрабатывать немного вертеться для меня? Пытается ли WebGL проверить, что пройденный мною TypedArray
соответствует выбранному мною Format
/ Type
, или он работает напрямую с базовым ArrayBuffer
? Мог ли я использовать Float64Array
в последнем случае? А что делать с HALF_FLOAT
?