Skip to content

Commit 43beca7

Browse files
committed
Create CheckShaderMax.js
1 parent 493553c commit 43beca7

1 file changed

Lines changed: 58 additions & 0 deletions

File tree

Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
// From Pixi v5
2+
3+
function GenerateSrc (maxIfs)
4+
{
5+
var src = '';
6+
7+
for (var i = 0; i < maxIfs; ++i)
8+
{
9+
if (i > 0)
10+
{
11+
src += '\nelse ';
12+
}
13+
14+
if (i < maxIfs - 1)
15+
{
16+
src += 'if(test == ' + i + '.0){}';
17+
}
18+
}
19+
20+
return src;
21+
}
22+
23+
var CheckShaderMax = function (gl, maxIfs)
24+
{
25+
var shader = gl.createShader(gl.FRAGMENT_SHADER);
26+
27+
var fragTemplate = [
28+
'precision mediump float;',
29+
'void main(void){',
30+
'float test = 0.1;',
31+
'%forloop%',
32+
'gl_FragColor = vec4(0.0);',
33+
'}'
34+
].join('\n');
35+
36+
// eslint-disable-next-line no-constant-condition
37+
while (true)
38+
{
39+
var fragmentSrc = fragTemplate.replace(/%forloop%/gi, GenerateSrc(maxIfs));
40+
41+
gl.shaderSource(shader, fragmentSrc);
42+
gl.compileShader(shader);
43+
44+
if (!gl.getShaderParameter(shader, gl.COMPILE_STATUS))
45+
{
46+
maxIfs = (maxIfs / 2) | 0;
47+
}
48+
else
49+
{
50+
// valid!
51+
break;
52+
}
53+
}
54+
55+
return maxIfs;
56+
};
57+
58+
module.exports = CheckShaderMax;

0 commit comments

Comments
 (0)