UNPKG

@doegis/core

Version:

DOE GIS API

3 lines (1 loc) 2.57 kB
import has from"../../core/has.js";import{glsl as r}from"../3d/webgl-engine/core/shaderModules/interfaces.js";import{BufferObject as e}from"./BufferObject.js";import{ContextType as t}from"./context-util.js";import{TargetType as o,DepthStencilTargetType as i,TextureType as n,TextureWrapMode as a,PixelFormat as s,PixelType as m,TextureSamplingMode as c,Usage as l,BufferType as p,PrimitiveType as g,DataType as d}from"./enums.js";import{FramebufferObject as _}from"./FramebufferObject.js";import{WebGLDriverTestModule as f}from"./WebGLDriverTestModule.js";class u extends f{constructor(r){super(),this._rctx=r,this._dummyProgram=null,this._rctx.type===t.WEBGL2&&has("mac")&&has("chrome")&&(this._program=this._prepareProgram(),this._dummyProgram=this._prepareDummyProgram())}dispose(){super.dispose(),this._dummyProgram?.dispose(),this._dummyProgram=null}_test(r){const t=this._rctx;t.resetState();const f=new _(t,{colorTarget:o.TEXTURE,depthStencilTarget:i.NONE},{target:n.TEXTURE_2D,wrapMode:a.CLAMP_TO_EDGE,pixelFormat:s.RGBA,dataType:m.UNSIGNED_BYTE,samplingMode:c.NEAREST,width:1,height:1}),u=e.createIndex(this._rctx,l.STATIC_DRAW,new Uint8Array([0]));t.bindFramebuffer(f),t.setViewport(0,0,1,1),t.useProgram(this._dummyProgram),t.bindBuffer(u,p.ELEMENT_ARRAY_BUFFER),t.drawElements(g.POINTS,1,d.UNSIGNED_BYTE,0),t.useProgram(r),t.bindVAO(null),t.drawArrays(g.TRIANGLES,0,258);const h=new Uint8Array(4);return f.readPixels(0,0,1,1,s.RGBA,m.UNSIGNED_BYTE,h),f.dispose(),u.dispose(),255===h[0]}_prepareProgram(){const e=85,t=`\n precision highp float;\n\n varying float triangleId;\n\n const vec3 triangleVertices[3] = vec3[3](vec3(-0.5, -0.5, 0.0), vec3(0.5, -0.5, 0.0), vec3(0.0, 0.5, 0.0));\n\n void main(void) {\n triangleId = floor(float(gl_VertexID)/3.0);\n\n vec3 position = triangleVertices[gl_VertexID % 3];\n float offset = triangleId / ${r.float(e)};\n position.z = 0.5 - offset;\n\n gl_Position = vec4(position, 1.0);\n }\n `,o=`\n precision highp float;\n\n varying float triangleId;\n\n void main(void) {\n gl_FragColor = triangleId == ${r.float(e)} ? vec4(0.0, 1.0, 0.0, 1.0) : vec4(1.0, 0.0, 0.0, 1.0);\n }\n `;return this._rctx.programCache.acquire(t,o,new Map([]))}_prepareDummyProgram(){const r="\n void main(void) {\n gl_Position = vec4(0.0, 0.0, float(gl_VertexID)-2.0, 1.0);\n }",e="\n void main(void) {\n gl_FragColor = vec4(0.0, 0.0, 0.0, 1.0);\n }";return this._rctx.programCache.acquire(r,e,new Map([]))}}export{u as DrawArraysRequiresIndicesTypeReset};