1
+ // Name uniforms here, appear as fields in uniforms object from initUniforms()
1
2
const myUniforms = [
2
3
"resolution" ,
3
4
"time" ,
5
+ "mouse" ,
4
6
] ;
5
7
8
+
9
+
10
+ // Sets uniforms at start of program
6
11
function setupUniforms ( gl , uniforms , vars ) {
7
12
const canvas = document . getElementById ( "canvas" ) ;
8
13
gl . uniform2f ( uniforms . resolution , canvas . width , canvas . height ) ;
9
14
gl . uniform1f ( uniforms . time , vars . time ) ;
15
+ gl . uniform2f ( uniforms . mouse , 0 , 0 ) ;
10
16
}
11
17
18
+ // Sets uniforms before rendering each frame
12
19
function updateUniforms ( gl , uniforms , vars ) {
13
20
gl . uniform1f ( uniforms . time , vars . time ) ;
14
21
}
15
22
23
+
24
+
16
25
////////////////////////////////////////////////////////////////////////////////
17
26
27
+
28
+
29
+ // Call when page loads
18
30
function main ( ) {
19
31
const canvas = document . getElementById ( "canvas" ) ;
20
32
@@ -25,34 +37,97 @@ function main() {
25
37
return ;
26
38
}
27
39
40
+ // Initialize shader program and position buffer
28
41
const shaderProgram = initShaderProgram ( gl ) ;
29
42
const posBuffer = initBuffer ( gl ) ;
30
43
44
+ // Setup shader program with uniforms and vertices
31
45
const uniforms = initUniforms ( gl , shaderProgram , myUniforms ) ;
32
46
const program = {
33
47
program : shaderProgram ,
34
48
vertices : gl . getAttribLocation ( shaderProgram , "vPosition" ) ,
35
49
posBuffer : posBuffer
36
- } ;
37
-
50
+ } ;
38
51
prepareScene ( gl , program , uniforms ) ;
39
52
53
+
54
+ // Setup uniform vlaues
40
55
const vars = { "time" : 0 , "dt" : 0 } ;
41
56
setupUniforms ( gl , uniforms , vars ) ;
42
57
58
+ // Render loop
43
59
function render ( elapsed ) {
60
+ // Calculate time values
44
61
vars . dt = elapsed / 1000 - vars . time ;
45
62
vars . time = elapsed / 1000 ;
46
63
64
+ // Update uniform values
47
65
updateUniforms ( gl , uniforms , vars ) ;
48
66
67
+ // Render to screen
49
68
gl . drawArrays ( gl . TRIANGLE_STRIP , 0 , 4 ) ;
50
69
requestAnimationFrame ( render ) ;
51
70
}
71
+ // Loop
52
72
requestAnimationFrame ( render ) ;
73
+
74
+ // Add fullscreen
75
+ fullScreen ( ) ;
76
+ }
53
77
78
+
79
+
80
+ //
81
+ function fullScreen ( ) {
82
+ const canvas = document . getElementById ( "canvas" ) ;
83
+
84
+ // Find available fullscreen and pointerlock methods
85
+ canvas . requestFullscreen = canvas . requestFullscreen ||
86
+ canvas . mozRequestFullScreen ||
87
+ canvas . webkitRequestFullscreen ;
88
+
89
+ document . exitFullscreen = document . exitFullscreen ||
90
+ document . mozCancelFullScreen ||
91
+ document . webkitExitFullscreen ;
92
+
93
+ canvas . requestPointerLock = canvas . requestPointerLock ||
94
+ canvas . mozRequestPointerLock ||
95
+ canvas . webkitRequestPointerLock ;
96
+
97
+ document . exitPointerLock = document . exitPointerLock ||
98
+ document . mozExitPointerLock ||
99
+ document . webkitExitPointerLock ;
100
+
101
+ // Add pointer lock listener
102
+ document . addEventListener ( 'pointerlockchange' , pointerLockChange , false ) ;
103
+ document . addEventListener ( 'mozpointerlockchange' , pointerLockChange , false ) ;
104
+ document . addEventListener ( 'webkitpointerlockchange' , pointerLockChange , false ) ;
105
+
106
+ // Add mouse listener
107
+ document . addEventListener ( "mousemove" , onmousemove , false ) ;
108
+
109
+ // Fullscreen and pointer lock on click
110
+ canvas . onclick = function ( ) {
111
+ canvas . requestFullscreen ( ) ;
112
+ canvas . onmousemove = canvas . requestPointerLock ;
113
+ }
114
+ }
115
+
116
+ function pointerLockChange ( ) {
117
+ // Check if pointer just locked or unlocked
118
+ }
119
+
120
+ function onmousemove ( ) {
121
+ // pass
54
122
}
55
123
124
+
125
+
126
+ ////////////////////////////////////////////////////////////////////////////////
127
+
128
+
129
+
130
+ // Helper for linking shader programs
56
131
function initShaderProgram ( gl ) {
57
132
const vsh = loadShader ( gl , gl . VERTEX_SHADER , vsh_src ) ;
58
133
const fsh = loadShader ( gl , gl . FRAGMENT_SHADER , fsh_src ) ;
@@ -72,6 +147,9 @@ function initShaderProgram(gl) {
72
147
return shaderProgram ;
73
148
}
74
149
150
+
151
+
152
+ // Helper for compiling shader source
75
153
function loadShader ( gl , type , src ) {
76
154
const shader = gl . createShader ( type ) ;
77
155
@@ -89,6 +167,9 @@ function loadShader(gl, type, src) {
89
167
return shader ;
90
168
}
91
169
170
+
171
+
172
+ // Helper for initializing position buffer
92
173
function initBuffer ( gl ) {
93
174
// Create a buffer for the square's positions.
94
175
const positionBuffer = gl . createBuffer ( ) ;
@@ -110,6 +191,9 @@ function initBuffer(gl) {
110
191
return positionBuffer ;
111
192
}
112
193
194
+
195
+
196
+ // Helper for finishing setup for rendering
113
197
function prepareScene ( gl , program , uniforms ) {
114
198
// Clear screen
115
199
gl . clearColor ( 0.0 , 0.0 , 0.0 , 1.0 ) ;
@@ -126,6 +210,9 @@ function prepareScene(gl, program, uniforms) {
126
210
const canvas = document . getElementById ( "canvas" ) ;
127
211
}
128
212
213
+
214
+
215
+ // Helper for initializing uniforms
129
216
function initUniforms ( gl , shaderProgram , uniformNames ) {
130
217
var uniforms = { } ;
131
218
var location ;
0 commit comments