Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Push voxel.js terrain generation to the GPU using a GLSL shader
JavaScript
branch: master
Failed to load latest commit information.
demo Nicening up the demo
.gitignore
README.md Update README.md
index.js
package.json

README.md

voxel-glslgen

Push voxel terrain generation to the GPU using a GLSL shader. This is just a WIP and an experiment with offloading computation to a shader, so no guarantees that it is actually faster than vanilla JavaScript - but feel free to submit a Pull Request with performance/API improvements.

Note: this currently only works on the master branches for voxel and voxel-engine

Installation

npm install voxel-glslgen

Usage

glslgen(shader, [options], [setup])

Takes a string fragment shader and returns a generate function.

var createGame = require('voxel-engine')
  , glslgen = require('voxel-glslgen')

var game({
  generate: glslgen([
    'void main() {'
    , 'vec3 pos = voxelPosition();'
    , 'voxelBlock(pos.y < 0.0 ? 1.0 : 0.0);'
  , '}'
  ].join('\n'))
})

The module exposes two GLSL functions:

  • vec3 voxelPosition() - returns the x,y,z coordinates of the current voxel.
  • void voxelBlock(n) - set the voxel block index.

You can also pass the following parameters to the options object:

  • cacheSize: Amount of chunks to store at any one time. Defaults to 4.
  • chunkSize: The size of each chunk in voxels - defaults to game.chunkSize and limited to a maximum of 32.

The setup argument is a callback which supplies the shader used by the generator. You can use this if you want to extend the shader somehow.

Something went wrong with that request. Please try again.