Last active
August 29, 2015 13:56
-
-
Save mikolalysenko/8792059 to your computer and use it in GitHub Desktop.
Sketch of glsl inlining
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
var shell = require('gl-shell') | |
var inlineGLSL = require('inline-glslify') | |
var createShadowMap = require('shadow-map') | |
var createShadowPassShader = inlineGLSL( | |
'attribute vec4 position;\ | |
varying vec4 fragmentPosition;\ | |
void main() {\ | |
gl_Position = position;\ | |
fragmentPosition = fragmentPosition;\ | |
}', | |
'#pragma glslify: computeShadowMapValue = require("shadow-map/shadow-pass")\ | |
uniform mat4 lightMatrix;\ | |
varying vec4 fragmentPosition;\ | |
void main() {\ | |
gl_FragColor = computeShadowMapValue(lightMatrix, fragmentPosition);\ | |
}') | |
var createRenderShader = inlineGLSL( | |
'attribute vec4 position;\ | |
void main() {\ | |
}', | |
'#pragma glslify: getShadowValue = require("shadow-map/render-pass")\ | |
uniform mat4 lightMatrix;\ | |
uniform sampler2D shadowMap;\ | |
varying vec4 fragmentPosition;\ | |
void main() {\ | |
gl_FragColor = getShadowValue(lightMatrix, shadowMap, fragmentPosition);\ | |
}') | |
var lightPos = [0, 0, 0] | |
var lightDir = [1, 0, 0] | |
var shadowShader, renderShader, shadowMap | |
shell.on('gl-init', function() { | |
shadowShader = createShadowShader(shell.gl) | |
renderShader = createRenderShader(shell.gl) | |
shadowMap = createShadowMap(gl, 1024, 1024, lightPos, lightDir) | |
}) | |
shell.on('gl-render', function() { | |
//First do shadow pass | |
shadowMap.startPass() | |
shadowShader.bind() | |
shadowShader.uniforms.lightMatrix = shadowMap.lightMatrix | |
//... draw all the geometry here .. | |
//Done, do whatever filtering/state clean up here | |
shadowMap.endPass() | |
//Draw forward pass | |
renderShader.bind() | |
renderShader.uniforms.lightMatrix = shadowMap.lightMatrix | |
renderShader.uniforms.shadowMap = shadowMap.texture | |
//... draw geometry to screen buffer .. | |
}) | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment