UNPKG

@arcgis/core

Version:

ArcGIS Maps SDK for JavaScript: A complete 2D and 3D mapping and data visualization API

6 lines (5 loc) 2.61 kB
/* All material copyright ESRI, All Rights Reserved, unless otherwise specified. See https://js.arcgis.com/4.33/esri/copyright.txt for details. */ import has from"../../core/has.js";import{glsl as e}from"../3d/webgl-engine/core/shaderModules/glsl.js";import{AppleAmdDriverHelper as r}from"./AppleAmdDriverHelper.js";import{BufferObject as t}from"./BufferObject.js";import{TextureWrapMode as o,TextureSamplingMode as n,Usage as i,BufferType as s,PrimitiveType as a,DataType as p,PixelFormat as l,PixelType as c}from"./enums.js";import{FramebufferObject as m}from"./FramebufferObject.js";import{TextureDescriptor as g}from"./TextureDescriptor.js";import{WebGLDriverTestModule as f}from"./WebGLDriverTestModule.js";class d extends f{constructor(e){super(),this._rctx=e,this._helperProgram=null,has("mac")&&has("chrome")&&(this._program=this._prepareProgram(),this._helperProgram=this._prepareHelperProgram())}dispose(){super.dispose(),this._helperProgram?.dispose(),this._helperProgram=null}_test(e){const r=this._rctx,f=r.getBoundFramebufferObject(),{x:d,y:h,width:u,height:_}=r.getViewport();r.resetState();const v=new g(1);v.wrapMode=o.CLAMP_TO_EDGE,v.samplingMode=n.NEAREST;const P=new m(r,v),w=t.createIndex(this._rctx,i.STATIC_DRAW,new Uint8Array([0]));r.bindFramebuffer(P),r.setViewport(0,0,1,1),r.useProgram(this._helperProgram),r.bindBuffer(w,s.ELEMENT_ARRAY_BUFFER),r.drawElements(a.POINTS,1,p.UNSIGNED_BYTE,0),r.useProgram(e),r.bindVAO(null),r.drawArrays(a.TRIANGLES,0,258);const x=new Uint8Array(4);return P.readPixels(0,0,1,1,l.RGBA,c.UNSIGNED_BYTE,x),r.setViewport(d,h,u,_),r.bindFramebuffer(f),P.dispose(),w.dispose(),255===x[0]}_prepareProgram(){const r=85,t=`#version 300 es\n precision highp float;\n\n out 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 / ${e.float(r)};\n position.z = 0.5 - offset;\n\n gl_Position = vec4(position, 1.0);\n }\n `,o=`#version 300 es\n precision highp float;\n\n in float triangleId;\n\n out vec4 fragColor;\n\n void main(void) {\n fragColor = triangleId == ${e.float(r)} ? 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([]))}_prepareHelperProgram(){const e=r.getShaderSources();return this._rctx.programCache.acquire(e.vertex,e.fragment,new Map([]))}}export{d as DrawArraysRequiresIndicesTypeReset};