Skip to content

Instantly share code, notes, and snippets.

@mikolalysenko
Last active August 29, 2015 13:56
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save mikolalysenko/8792059 to your computer and use it in GitHub Desktop.
Save mikolalysenko/8792059 to your computer and use it in GitHub Desktop.
Sketch of glsl inlining
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