Как увеличить GL_MAX_TEXTURE_SIZE для mesa драйверов?
Я пытаюсь создать большое изображение, используя WebGL и Xvfb.
Когда размер холста WebGL достигает 8192x8192px - он отлично работает, и я получаю свое изображение.
Когда размер холста WebGL превышает 8192x8192px - это не создает мое изображение.
Скрипт запускается на дисплее Xvfb с драйверами Mesa 10.1.3 в Ubuntu 14.04 на цифровом океане VPS.
Я подозреваю, что не могу получить мое большое изображение, потому что оно превышает предел GL_MAX_TEXTURE_SIZE (это 8192). Похоже, что этот предел был увеличен до 16 КБ в Mesa 7.10, но я не знаю, почему он все еще составляет 8 КБ для Mesa 10.1.3.
Как я могу поднять GL_MAX_TEXTURE_SIZE с 8192 до 16384?
Вот дополнительная информация:
$> nohup Xvfb :99 -ac -screen 0 10000x10000x24 &
$> DISPLAY=:99 glxinfo -l | grep GL_MAX_TEXTURE_SIZE
GL_MAX_TEXTURE_SIZE = 8192
$> DISPLAY=:99 glxinfo -l | grep Mesa
OpenGL version string: 2.1 Mesa 10.1.3
Вот несколько пакетов, которые я установил:
$> apt list --installed | grep mesa
libgl1-mesa-dev/trusty-updates,now 10.1.3-0ubuntu0.6 amd64 [installed]
libgl1-mesa-dri/trusty-updates,now 10.1.3-0ubuntu0.6 amd64 [installed]
libgl1-mesa-glx/trusty-updates,now 10.1.3-0ubuntu0.6 amd64 [installed,automatic]
libglapi-mesa/trusty-updates,now 10.1.3-0ubuntu0.6 amd64 [installed,automatic]
libglu1-mesa/trusty,now 9.0.0-2 amd64 [installed,automatic]
libglu1-mesa-dev/trusty,now 9.0.0-2 amd64 [installed]
mesa-common-dev/trusty-updates,now 10.1.3-0ubuntu0.6 amd64 [installed,automatic]
mesa-utils/trusty,now 8.1.0-2 amd64 [installed]
$> apt list --installed | grep gl
gir1.2-glib-2.0/trusty-updates,now 1.40.0-1ubuntu0.2 amd64 [installed]
libclass-singleton-perl/trusty,now 1.4-1 all [installed,automatic]
libdbus-glib-1-2/trusty,now 0.100.2-1 amd64 [installed]
libgl1-mesa-dev/trusty-updates,now 10.1.3-0ubuntu0.6 amd64 [installed]
libgl1-mesa-dri/trusty-updates,now 10.1.3-0ubuntu0.6 amd64 [installed]
libgl1-mesa-glx/trusty-updates,now 10.1.3-0ubuntu0.6 amd64 [installed,automatic]
libglapi-mesa/trusty-updates,now 10.1.3-0ubuntu0.6 amd64 [installed,automatic]
libglew-dev/trusty,now 1.10.0-3 amd64 [installed]
libglew1.10/trusty,now 1.10.0-3 amd64 [installed,automatic]
libglib2.0-0/trusty-updates,now 2.40.2-0ubuntu1 amd64 [installed]
libglib2.0-data/trusty-updates,now 2.40.2-0ubuntu1 all [installed]
libglu1-mesa/trusty,now 9.0.0-2 amd64 [installed,automatic]
libglu1-mesa-dev/trusty,now 9.0.0-2 amd64 [installed]
libxcb-glx0/trusty,now 1.10-2ubuntu1 amd64 [installed,automatic]
libxcb-glx0-dev/trusty,now 1.10-2ubuntu1 amd64 [installed,automatic]
node-glob/trusty,now 3.2.6-1 all [installed,automatic]
x11proto-gl-dev/trusty,now 1.4.17-1 all [installed,automatic]
Я запускаю пример скрипта из headless-gl в сочетании с pngjs для вывода красного квадрата png:
// test.js
var PNG = require('pngjs').PNG
//Create context
var width = 64
var height = 64
var gl = require('gl')(width, height, { preserveDrawingBuffer: true })
//Clear screen to red
gl.clearColor(1, 0, 0, 1)
gl.clear(gl.COLOR_BUFFER_BIT)
function glToPNGStream(gl) {
const png = new PNG({ width, height })
let a
let b
let g
let k
let m
let r
const pixels = new Uint8Array(4 * width * height)
gl.readPixels(0, 0, width, height, gl.RGBA, gl.UNSIGNED_BYTE, pixels)
for (let j = 0; j < height; j++) {
for (let i = 0; i < width; i++) {
k = j * width + i
r = pixels[4 * k]
g = pixels[4 * k + 1]
b = pixels[4 * k + 2]
a = pixels[4 * k + 3]
m = (height - j + 1) * width + i
png.data[4 * m] = r
png.data[4 * m + 1] = g
png.data[4 * m + 2] = b
png.data[4 * m + 3] = a
}
}
return png.pack()
}
glToPNGStream(gl).pipe(process.stdout)
2 ответа
Если это не программная реализация, вы не можете увеличить максимальный размер текстуры вашей реализации. Для аппаратных реализаций OpenGL это определяется тем, что позволяет аппаратное обеспечение, поэтому оно не меняется.
Увеличение, о котором вы говорите, происходит в программном растеризаторе Mesa OpenGL. Для аппаратных драйверов он будет использовать то, что обеспечивает графический процессор.
У Xdummy есть
GL_MAX_TEXTURE_SIZE = 16384
и обычно является заменой
Xvfb
так что вы можете переключиться на использование этого.