이것은 uint8 값 255 하나만으로 인덱스 버퍼를 생성하는 가장 간단한 WebGL 테스트 프로그램입니다. 64px 크기의 빨간색 정사각형을 그려야 하지만 그렇지 않습니다(인덱스 값은 그리기에 중요하지 않습니다).
어쨌든 WebGL은 부호 없는 바이트 범위에 있더라도 인덱스 255의 요소를 무시합니다. 254 또는 다른 값을 사용하면 빨간색 사각형이 예상대로 나타납니다.
이것은 WebGL의 버그입니까, 아니면 예상되는 동작입니까? 관련 정보를 찾을 수 없습니다.
<스크립트 유형="모듈"> let canvas = document.querySelector("canvas"); let gl = canvas.getContext("webgl2", {antialias: false}); vert = gl.createShader(gl.VERTEX_SHADER); let frag = gl.createShader(gl.FRAGMENT_SHADER); let prog = gl.createProgram(); let index_buf = gl.createBuffer(); gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, index_buf); gl.bufferData( gl.ELEMENT_ARRAY_BUFFER, 새로운 Uint8Array([255]), gl.STATIC_DRAW ); gl.shaderSource(vert, `#version 300 es 무효 메인() { gl_Position = vec4(pos, 1); gl_PointSize = 64.0; } `); gl.shaderSource(frag, `#version 300 es 정밀 하이프 플로트; vec4 색상 출력; 무효 메인() { 색상 = vec4(1,0,0,1); } `); gl.compileShader(vert); gl.compileShader(frag); gl.attachShader(prog, vert); gl.attachShader(prog, frag); gl.linkProgram(prog); gl.clearColor(0, 0, 0, 1); gl.clear(gl.COLOR_BUFFER_BIT); gl.useProgram(prog); gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, index_buf); gl.drawElements(gl.POINTS, 1, gl.UNSIGNED_BYTE, 0);
보기WebGL 2.0 사양 - PRIMITIVE_RESTART_FIXED_INDEX는 항상 활성화되어 있습니다:
따라서 인덱스 유형이
UNSIGNED_BYTE
인 경우 인덱스 255는raw restart인덱스이며 정점을 인덱스하는 데 사용할 수 없습니다.