путаница с переменной gl.COLOR_BUFFER_BIT - PullRequest
1 голос
/ 04 апреля 2019

В настоящее время я изучаю Webgl, в следующем примере у меня есть запутанная точка зрения об использовании gl.COLOR_BUFFER_BIT:

  const canvas = document.querySelector("#glcanvas");
  // Initialize the GL context
  const gl = canvas.getContext("webgl");

  // Only continue if WebGL is available and working
  if (!gl) {
    alert("Unable to initialize WebGL. Your browser or machine may not support it.");
    return;
  }
  // Set clear color to black, fully opaque
  gl.clearColor(0.0, 0.0, 0.0, 1.0);
  gl.clear(gl.COLOR_BUFFER_BIT);
  console.log('1: ', gl.COLOR_BUFFER_BIT);

  // Clear the color buffer with specified clear color
  gl.clearColor(1, 1, 1, 1.0);
  gl.clear(gl.COLOR_BUFFER_BIT);
  console.log('2: ', gl.COLOR_BUFFER_BIT);

Насколько я понимаю, gl.clear(gl.COLOR_BUFFER_BIT) устанавливает значение gl.COLOR_BUFFER_BIT в качестве цвета, установленного в gl.clearColor().

Таким образом, два console.log(gl.COLOR_BUFFER_BIT) выше должны вывести различное значение. Но реальный результат выглядит следующим образом:

1:  16384
2:  16384

так что с ним не так?

1 Ответ

2 голосов
/ 04 апреля 2019

COLOR_BUFFER_BIT - это константа, которая сообщает clear, какой буфер очищать, также есть DEPTH_BUFFER_BIT и STENCIL_BUFFER_BIT, эти значения являются битовой маской, что означает, что вы можете предоставить несколько «чистых целей» с помощью двоичного файла OR ing их, например Вы можете очистить буфер цвета и глубины, вызвав gl.clear(gl.COLOR_BUFFER_BIT|gl.DEPTH_BUFFER_BIT). Вызов clearColor устанавливает (есть только один) глобальный сброс color , также есть функции clearDepth и clearStencil, которые устанавливают свои соответствующие глобальные значения.

Другими словами, clear фактически очищает данные цели, используя значения, которые были ранее определены с помощью методов clear****, после того, как эти значения сохраняются, пока вы не установите другое значение.

...