├── index.js └── readme.md /index.js: -------------------------------------------------------------------------------- 1 | import * as THREE from 'three' 2 | 3 | const w = 1 4 | const h = 1 5 | 6 | export default class WebGLTestShader { 7 | 8 | constructor(){ 9 | 10 | 11 | this.renderer = new THREE.WebGLRenderer() 12 | 13 | this.camera = new THREE.PerspectiveCamera( 50, 0.5, 0.0001, 1000 ); 14 | 15 | let geo = new THREE.PlaneBufferGeometry(2,2) 16 | 17 | this.createMaterial() 18 | 19 | this.renderTarget = new THREE.WebGLRenderTarget( 1,1 , 20 | { minFilter: THREE.NearestFilter, magFilter: THREE.NearestFilter, format: THREE.RGBAFormat, type: THREE.UnsignedByteType } 21 | ); 22 | 23 | this.mesh = new THREE.Mesh(geo, this.material ) 24 | 25 | this.scene = new THREE.Scene() 26 | 27 | this.scene.add(this.mesh) 28 | 29 | var res = this.render() 30 | 31 | var isIphone7 = res[3] == 35 32 | 33 | var isIphone8 = res[3] == 0 34 | 35 | } 36 | 37 | render(){ 38 | 39 | this.renderer.setRenderTarget(this.renderTarget) 40 | 41 | this.renderer.render(this.scene, this.camera) 42 | 43 | var read = new Uint8Array( 4 ); 44 | 45 | this.renderer.readRenderTargetPixels( this.renderTarget, 0, 0, 1, 1, read ); 46 | 47 | this.mesh.geometry.dispose() 48 | 49 | this.mesh.material.dispose() 50 | 51 | this.renderer.dispose() 52 | 53 | this.mesh.geometry = null 54 | 55 | this.mesh.material = null 56 | 57 | this.mesh = null 58 | 59 | this.renderer = null 60 | 61 | return read 62 | } 63 | 64 | createMaterial(){ 65 | 66 | this.material = new THREE.ShaderMaterial({ 67 | // transparent: true, 68 | depthTest: false, 69 | depthWrite: false, 70 | transparent: false, 71 | side: 2, 72 | uniforms: { 73 | 74 | }, 75 | vertexShader: ` 76 | 77 | varying float vvv; 78 | void main() { 79 | 80 | vvv = 0.31622776601683794; 81 | gl_Position = vec4( position.xy, 0.0, 1.0 ); 82 | 83 | } 84 | `, 85 | fragmentShader: ` 86 | 87 | 88 | uniform sampler2D map; 89 | 90 | varying vec2 vUv; 91 | varying float vvv; 92 | 93 | vec4 EncodeFloatRGBA( float v ) { 94 | vec4 enc = vec4(1.0, 255.0, 65025.0, 16581375.0) * v; 95 | enc = fract(enc); 96 | enc -= enc.yzww * vec4(1.0/255.0,1.0/255.0,1.0/255.0,0.0); 97 | return enc; 98 | } 99 | 100 | void main() { 101 | 102 | gl_FragColor = EncodeFloatRGBA(vvv); 103 | 104 | } 105 | `, 106 | 107 | }) 108 | } 109 | } 110 | 111 | -------------------------------------------------------------------------------- /readme.md: -------------------------------------------------------------------------------- 1 | https://medium.com/@Samsy/detecting-apple-a10-iphone-7-to-a11-iphone-8-and-b019b8f0eb87 --------------------------------------------------------------------------------