1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
|
define.class(function(require, exports){
DaliApi = require('./dali_api')
var DaliShader = exports
DaliShader.GlobalId = 0
this.atConstructor = function(vertexShader, fragmentShader) {
this.object_type = 'DaliShader'
var vs = vertexShader;
var fs = fragmentShader;
var shaderOptions = {
vertexShader : vs,
fragmentShader: fs
};
var dali = DaliApi.dali;
this.id = ++DaliShader.GlobalId;
this.dalishader = new dali.Shader(shaderOptions);
this.vertexshader = vertexShader;
this.fragmentShader = fragmentShader;
if (DaliApi.emitcode) {
vs = this.trimShader(vs);
fs = this.trimShader(fs);
vs = vs.replace(/(\#extension.*)\n/g, '$1\\n\\\n');
fs = fs.replace(/(\#extension.*)\n/g, '$1\\n\\\n');
vs = vs.replace(/\n/g, "\nDALICODE: ");
fs = fs.replace(/\n/g, "\nDALICODE: ");
console.log('DALICODE: var vertexShader' + this.id + ' = "' + vs + '"');
console.log('DALICODE: var fragmentShader' + this.id + ' = "' + fs + '"');
console.log('DALICODE: var shaderOptions' + this.id + ' = {vertexShader : vertexShader' + this.id + ', fragmentShader: fragmentShader' + this.id + ' };');
console.log('DALICODE: var ' + this.name() + ' = new dali.Shader(shaderOptions' + this.id + ');');
}
}
this.trimShader = function(code) {
var str = code;
str = str.replace(/\n\n/g, "\\n");
str = str.replace(/\/\/.*\n/g, '');
if (str[str.length-1] == "\n")
str = str.substring(0, str.length-1);
str = str.replace(/\n/g, "\\n");
str = str.replace(/\\n/g, "\\\n");
str = str.replace(/(\#extension.*)\\\n/g, '$1\n\\\n');
return str;
}
this.name = function() {
return 'dalishader' + this.id;
}
this.inspect = function(depth) {
var obj = {daliShader:this.id, vertex:this.vertexshader.length, fragment:this.fragmentShader.length};
var util = require('util')
return util.inspect(obj, {depth: null});
}
});
|