@luma.gl/effects
Version:
Rendering and post-processing effects library for luma.gl
1,629 lines (1,370 loc) • 125 kB
JavaScript
(function webpackUniversalModuleDefinition(root, factory) {
if(typeof exports === 'object' && typeof module === 'object')
module.exports = factory(require("luma"));
else if(typeof define === 'function' && define.amd)
define(["luma"], factory);
else {
var a = typeof exports === 'object' ? factory(require("luma")) : factory(root["luma"]);
for(var i in a) (typeof exports === 'object' ? exports : root)[i] = a[i];
}
})(window, function(__WEBPACK_EXTERNAL_MODULE__luma_gl_core__) {
return /******/ (function(modules) { // webpackBootstrap
/******/ // The module cache
/******/ var installedModules = {};
/******/
/******/ // The require function
/******/ function __webpack_require__(moduleId) {
/******/
/******/ // Check if module is in cache
/******/ if(installedModules[moduleId]) {
/******/ return installedModules[moduleId].exports;
/******/ }
/******/ // Create a new module (and put it into the cache)
/******/ var module = installedModules[moduleId] = {
/******/ i: moduleId,
/******/ l: false,
/******/ exports: {}
/******/ };
/******/
/******/ // Execute the module function
/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
/******/
/******/ // Flag the module as loaded
/******/ module.l = true;
/******/
/******/ // Return the exports of the module
/******/ return module.exports;
/******/ }
/******/
/******/
/******/ // expose the modules object (__webpack_modules__)
/******/ __webpack_require__.m = modules;
/******/
/******/ // expose the module cache
/******/ __webpack_require__.c = installedModules;
/******/
/******/ // define getter function for harmony exports
/******/ __webpack_require__.d = function(exports, name, getter) {
/******/ if(!__webpack_require__.o(exports, name)) {
/******/ Object.defineProperty(exports, name, { enumerable: true, get: getter });
/******/ }
/******/ };
/******/
/******/ // define __esModule on exports
/******/ __webpack_require__.r = function(exports) {
/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
/******/ }
/******/ Object.defineProperty(exports, '__esModule', { value: true });
/******/ };
/******/
/******/ // create a fake namespace object
/******/ // mode & 1: value is a module id, require it
/******/ // mode & 2: merge all properties of value into the ns
/******/ // mode & 4: return value when already ns object
/******/ // mode & 8|1: behave like require
/******/ __webpack_require__.t = function(value, mode) {
/******/ if(mode & 1) value = __webpack_require__(value);
/******/ if(mode & 8) return value;
/******/ if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;
/******/ var ns = Object.create(null);
/******/ __webpack_require__.r(ns);
/******/ Object.defineProperty(ns, 'default', { enumerable: true, value: value });
/******/ if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));
/******/ return ns;
/******/ };
/******/
/******/ // getDefaultExport function for compatibility with non-harmony modules
/******/ __webpack_require__.n = function(module) {
/******/ var getter = module && module.__esModule ?
/******/ function getDefault() { return module['default']; } :
/******/ function getModuleExports() { return module; };
/******/ __webpack_require__.d(getter, 'a', getter);
/******/ return getter;
/******/ };
/******/
/******/ // Object.prototype.hasOwnProperty.call
/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
/******/
/******/ // __webpack_public_path__
/******/ __webpack_require__.p = "";
/******/
/******/
/******/ // Load entry module and return exports
/******/ return __webpack_require__(__webpack_require__.s = "./bundle.js");
/******/ })
/************************************************************************/
/******/ ({
/***/ "../../node_modules/webpack/buildin/global.js":
/*!***********************************!*\
!*** (webpack)/buildin/global.js ***!
\***********************************/
/*! no static exports found */
/***/ (function(module, exports) {
var g;
// This works in non-strict mode
g = (function() {
return this;
})();
try {
// This works if eval is allowed (see CSP)
g = g || new Function("return this")();
} catch (e) {
// This works if the window reference is available
if (typeof window === "object") g = window;
}
// g can still be undefined, but nothing to do about it...
// We return undefined, instead of nothing here, so it's
// easier to handle this case. if(!global) { ...}
module.exports = g;
/***/ }),
/***/ "../constants/src/index.js":
/*!*********************************!*\
!*** ../constants/src/index.js ***!
\*********************************/
/*! no static exports found */
/***/ (function(module, exports) {
// GL constants, copied from Mozilla documentation
// https://developer.mozilla.org/en-US/docs/Web/API/WebGL_API/Constants
// Standard WebGL 1 constants
// These constants are defined on the WebGLRenderingContext interface.
/* eslint-disable key-spacing, max-len, no-inline-comments, camelcase */
// eslint-disable-next-line
module.exports = {
// Clearing buffers
// Constants passed to clear() to clear buffer masks.
DEPTH_BUFFER_BIT: 0x00000100,
STENCIL_BUFFER_BIT: 0x00000400,
COLOR_BUFFER_BIT: 0x00004000,
// Rendering primitives
// Constants passed to drawElements() or drawArrays() to specify what kind of primitive to render.
POINTS: 0x0000,
LINES: 0x0001,
LINE_LOOP: 0x0002,
LINE_STRIP: 0x0003,
TRIANGLES: 0x0004,
TRIANGLE_STRIP: 0x0005,
TRIANGLE_FAN: 0x0006,
// Blending modes
// Constants passed to blendFunc() or blendFuncSeparate() to specify the blending mode (for both, RBG and alpha, or separately).
ZERO: 0,
ONE: 1,
SRC_COLOR: 0x0300,
ONE_MINUS_SRC_COLOR: 0x0301,
SRC_ALPHA: 0x0302,
ONE_MINUS_SRC_ALPHA: 0x0303,
DST_ALPHA: 0x0304,
ONE_MINUS_DST_ALPHA: 0x0305,
DST_COLOR: 0x0306,
ONE_MINUS_DST_COLOR: 0x0307,
SRC_ALPHA_SATURATE: 0x0308,
CONSTANT_COLOR: 0x8001,
ONE_MINUS_CONSTANT_COLOR: 0x8002,
CONSTANT_ALPHA: 0x8003,
ONE_MINUS_CONSTANT_ALPHA: 0x8004,
// Blending equations
// Constants passed to blendEquation() or blendEquationSeparate() to control
// how the blending is calculated (for both, RBG and alpha, or separately).
FUNC_ADD: 0x8006,
FUNC_SUBTRACT: 0x800a,
FUNC_REVERSE_SUBTRACT: 0x800b,
// Getting GL parameter information
// Constants passed to getParameter() to specify what information to return.
BLEND_EQUATION: 0x8009,
BLEND_EQUATION_RGB: 0x8009,
BLEND_EQUATION_ALPHA: 0x883d,
BLEND_DST_RGB: 0x80c8,
BLEND_SRC_RGB: 0x80c9,
BLEND_DST_ALPHA: 0x80ca,
BLEND_SRC_ALPHA: 0x80cb,
BLEND_COLOR: 0x8005,
ARRAY_BUFFER_BINDING: 0x8894,
ELEMENT_ARRAY_BUFFER_BINDING: 0x8895,
LINE_WIDTH: 0x0b21,
ALIASED_POINT_SIZE_RANGE: 0x846d,
ALIASED_LINE_WIDTH_RANGE: 0x846e,
CULL_FACE_MODE: 0x0b45,
FRONT_FACE: 0x0b46,
DEPTH_RANGE: 0x0b70,
DEPTH_WRITEMASK: 0x0b72,
DEPTH_CLEAR_VALUE: 0x0b73,
DEPTH_FUNC: 0x0b74,
STENCIL_CLEAR_VALUE: 0x0b91,
STENCIL_FUNC: 0x0b92,
STENCIL_FAIL: 0x0b94,
STENCIL_PASS_DEPTH_FAIL: 0x0b95,
STENCIL_PASS_DEPTH_PASS: 0x0b96,
STENCIL_REF: 0x0b97,
STENCIL_VALUE_MASK: 0x0b93,
STENCIL_WRITEMASK: 0x0b98,
STENCIL_BACK_FUNC: 0x8800,
STENCIL_BACK_FAIL: 0x8801,
STENCIL_BACK_PASS_DEPTH_FAIL: 0x8802,
STENCIL_BACK_PASS_DEPTH_PASS: 0x8803,
STENCIL_BACK_REF: 0x8ca3,
STENCIL_BACK_VALUE_MASK: 0x8ca4,
STENCIL_BACK_WRITEMASK: 0x8ca5,
VIEWPORT: 0x0ba2,
SCISSOR_BOX: 0x0c10,
COLOR_CLEAR_VALUE: 0x0c22,
COLOR_WRITEMASK: 0x0c23,
UNPACK_ALIGNMENT: 0x0cf5,
PACK_ALIGNMENT: 0x0d05,
MAX_TEXTURE_SIZE: 0x0d33,
MAX_VIEWPORT_DIMS: 0x0d3a,
SUBPIXEL_BITS: 0x0d50,
RED_BITS: 0x0d52,
GREEN_BITS: 0x0d53,
BLUE_BITS: 0x0d54,
ALPHA_BITS: 0x0d55,
DEPTH_BITS: 0x0d56,
STENCIL_BITS: 0x0d57,
POLYGON_OFFSET_UNITS: 0x2a00,
POLYGON_OFFSET_FACTOR: 0x8038,
TEXTURE_BINDING_2D: 0x8069,
SAMPLE_BUFFERS: 0x80a8,
SAMPLES: 0x80a9,
SAMPLE_COVERAGE_VALUE: 0x80aa,
SAMPLE_COVERAGE_INVERT: 0x80ab,
COMPRESSED_TEXTURE_FORMATS: 0x86a3,
VENDOR: 0x1f00,
RENDERER: 0x1f01,
VERSION: 0x1f02,
IMPLEMENTATION_COLOR_READ_TYPE: 0x8b9a,
IMPLEMENTATION_COLOR_READ_FORMAT: 0x8b9b,
BROWSER_DEFAULT_WEBGL: 0x9244,
// Buffers
// Constants passed to bufferData(), bufferSubData(), bindBuffer(), or
// getBufferParameter().
STATIC_DRAW: 0x88e4,
STREAM_DRAW: 0x88e0,
DYNAMIC_DRAW: 0x88e8,
ARRAY_BUFFER: 0x8892,
ELEMENT_ARRAY_BUFFER: 0x8893,
BUFFER_SIZE: 0x8764,
BUFFER_USAGE: 0x8765,
// Vertex attributes
// Constants passed to getVertexAttrib().
CURRENT_VERTEX_ATTRIB: 0x8626,
VERTEX_ATTRIB_ARRAY_ENABLED: 0x8622,
VERTEX_ATTRIB_ARRAY_SIZE: 0x8623,
VERTEX_ATTRIB_ARRAY_STRIDE: 0x8624,
VERTEX_ATTRIB_ARRAY_TYPE: 0x8625,
VERTEX_ATTRIB_ARRAY_NORMALIZED: 0x886a,
VERTEX_ATTRIB_ARRAY_POINTER: 0x8645,
VERTEX_ATTRIB_ARRAY_BUFFER_BINDING: 0x889f,
// Culling
// Constants passed to cullFace().
CULL_FACE: 0x0b44,
FRONT: 0x0404,
BACK: 0x0405,
FRONT_AND_BACK: 0x0408,
// Enabling and disabling
// Constants passed to enable() or disable().
BLEND: 0x0be2,
DEPTH_TEST: 0x0b71,
DITHER: 0x0bd0,
POLYGON_OFFSET_FILL: 0x8037,
SAMPLE_ALPHA_TO_COVERAGE: 0x809e,
SAMPLE_COVERAGE: 0x80a0,
SCISSOR_TEST: 0x0c11,
STENCIL_TEST: 0x0b90,
// Errors
// Constants returned from getError().
NO_ERROR: 0,
INVALID_ENUM: 0x0500,
INVALID_VALUE: 0x0501,
INVALID_OPERATION: 0x0502,
OUT_OF_MEMORY: 0x0505,
CONTEXT_LOST_WEBGL: 0x9242,
// Front face directions
// Constants passed to frontFace().
CW: 0x0900,
CCW: 0x0901,
// Hints
// Constants passed to hint()
DONT_CARE: 0x1100,
FASTEST: 0x1101,
NICEST: 0x1102,
GENERATE_MIPMAP_HINT: 0x8192,
// Data types
BYTE: 0x1400,
UNSIGNED_BYTE: 0x1401,
SHORT: 0x1402,
UNSIGNED_SHORT: 0x1403,
INT: 0x1404,
UNSIGNED_INT: 0x1405,
FLOAT: 0x1406,
DOUBLE: 0x140a,
// Pixel formats
DEPTH_COMPONENT: 0x1902,
ALPHA: 0x1906,
RGB: 0x1907,
RGBA: 0x1908,
LUMINANCE: 0x1909,
LUMINANCE_ALPHA: 0x190a,
// Pixel types
// UNSIGNED_BYTE: 0x1401,
UNSIGNED_SHORT_4_4_4_4: 0x8033,
UNSIGNED_SHORT_5_5_5_1: 0x8034,
UNSIGNED_SHORT_5_6_5: 0x8363,
// Shaders
// Constants passed to createShader() or getShaderParameter()
FRAGMENT_SHADER: 0x8b30,
VERTEX_SHADER: 0x8b31,
COMPILE_STATUS: 0x8b81,
DELETE_STATUS: 0x8b80,
LINK_STATUS: 0x8b82,
VALIDATE_STATUS: 0x8b83,
ATTACHED_SHADERS: 0x8b85,
ACTIVE_ATTRIBUTES: 0x8b89,
ACTIVE_UNIFORMS: 0x8b86,
MAX_VERTEX_ATTRIBS: 0x8869,
MAX_VERTEX_UNIFORM_VECTORS: 0x8dfb,
MAX_VARYING_VECTORS: 0x8dfc,
MAX_COMBINED_TEXTURE_IMAGE_UNITS: 0x8b4d,
MAX_VERTEX_TEXTURE_IMAGE_UNITS: 0x8b4c,
MAX_TEXTURE_IMAGE_UNITS: 0x8872,
MAX_FRAGMENT_UNIFORM_VECTORS: 0x8dfd,
SHADER_TYPE: 0x8b4f,
SHADING_LANGUAGE_VERSION: 0x8b8c,
CURRENT_PROGRAM: 0x8b8d,
// Depth or stencil tests
// Constants passed to depthFunc() or stencilFunc().
NEVER: 0x0200,
ALWAYS: 0x0207,
LESS: 0x0201,
EQUAL: 0x0202,
LEQUAL: 0x0203,
GREATER: 0x0204,
GEQUAL: 0x0206,
NOTEQUAL: 0x0205,
// Stencil actions
// Constants passed to stencilOp().
KEEP: 0x1e00,
REPLACE: 0x1e01,
INCR: 0x1e02,
DECR: 0x1e03,
INVERT: 0x150a,
INCR_WRAP: 0x8507,
DECR_WRAP: 0x8508,
// Textures
// Constants passed to texParameteri(),
// texParameterf(), bindTexture(), texImage2D(), and others.
NEAREST: 0x2600,
LINEAR: 0x2601,
NEAREST_MIPMAP_NEAREST: 0x2700,
LINEAR_MIPMAP_NEAREST: 0x2701,
NEAREST_MIPMAP_LINEAR: 0x2702,
LINEAR_MIPMAP_LINEAR: 0x2703,
TEXTURE_MAG_FILTER: 0x2800,
TEXTURE_MIN_FILTER: 0x2801,
TEXTURE_WRAP_S: 0x2802,
TEXTURE_WRAP_T: 0x2803,
TEXTURE_2D: 0x0de1,
TEXTURE: 0x1702,
TEXTURE_CUBE_MAP: 0x8513,
TEXTURE_BINDING_CUBE_MAP: 0x8514,
TEXTURE_CUBE_MAP_POSITIVE_X: 0x8515,
TEXTURE_CUBE_MAP_NEGATIVE_X: 0x8516,
TEXTURE_CUBE_MAP_POSITIVE_Y: 0x8517,
TEXTURE_CUBE_MAP_NEGATIVE_Y: 0x8518,
TEXTURE_CUBE_MAP_POSITIVE_Z: 0x8519,
TEXTURE_CUBE_MAP_NEGATIVE_Z: 0x851a,
MAX_CUBE_MAP_TEXTURE_SIZE: 0x851c,
// TEXTURE0 - 31 0x84C0 - 0x84DF A texture unit.
TEXTURE0: 0x84c0,
ACTIVE_TEXTURE: 0x84e0,
REPEAT: 0x2901,
CLAMP_TO_EDGE: 0x812f,
MIRRORED_REPEAT: 0x8370,
// Emulation
TEXTURE_WIDTH: 0x1000,
TEXTURE_HEIGHT: 0x1001,
// Uniform types
FLOAT_VEC2: 0x8b50,
FLOAT_VEC3: 0x8b51,
FLOAT_VEC4: 0x8b52,
INT_VEC2: 0x8b53,
INT_VEC3: 0x8b54,
INT_VEC4: 0x8b55,
BOOL: 0x8b56,
BOOL_VEC2: 0x8b57,
BOOL_VEC3: 0x8b58,
BOOL_VEC4: 0x8b59,
FLOAT_MAT2: 0x8b5a,
FLOAT_MAT3: 0x8b5b,
FLOAT_MAT4: 0x8b5c,
SAMPLER_2D: 0x8b5e,
SAMPLER_CUBE: 0x8b60,
// Shader precision-specified types
LOW_FLOAT: 0x8df0,
MEDIUM_FLOAT: 0x8df1,
HIGH_FLOAT: 0x8df2,
LOW_INT: 0x8df3,
MEDIUM_INT: 0x8df4,
HIGH_INT: 0x8df5,
// Framebuffers and renderbuffers
FRAMEBUFFER: 0x8d40,
RENDERBUFFER: 0x8d41,
RGBA4: 0x8056,
RGB5_A1: 0x8057,
RGB565: 0x8d62,
DEPTH_COMPONENT16: 0x81a5,
STENCIL_INDEX: 0x1901,
STENCIL_INDEX8: 0x8d48,
DEPTH_STENCIL: 0x84f9,
RENDERBUFFER_WIDTH: 0x8d42,
RENDERBUFFER_HEIGHT: 0x8d43,
RENDERBUFFER_INTERNAL_FORMAT: 0x8d44,
RENDERBUFFER_RED_SIZE: 0x8d50,
RENDERBUFFER_GREEN_SIZE: 0x8d51,
RENDERBUFFER_BLUE_SIZE: 0x8d52,
RENDERBUFFER_ALPHA_SIZE: 0x8d53,
RENDERBUFFER_DEPTH_SIZE: 0x8d54,
RENDERBUFFER_STENCIL_SIZE: 0x8d55,
FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE: 0x8cd0,
FRAMEBUFFER_ATTACHMENT_OBJECT_NAME: 0x8cd1,
FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL: 0x8cd2,
FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE: 0x8cd3,
COLOR_ATTACHMENT0: 0x8ce0,
DEPTH_ATTACHMENT: 0x8d00,
STENCIL_ATTACHMENT: 0x8d20,
DEPTH_STENCIL_ATTACHMENT: 0x821a,
NONE: 0,
FRAMEBUFFER_COMPLETE: 0x8cd5,
FRAMEBUFFER_INCOMPLETE_ATTACHMENT: 0x8cd6,
FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT: 0x8cd7,
FRAMEBUFFER_INCOMPLETE_DIMENSIONS: 0x8cd9,
FRAMEBUFFER_UNSUPPORTED: 0x8cdd,
FRAMEBUFFER_BINDING: 0x8ca6,
RENDERBUFFER_BINDING: 0x8ca7,
READ_FRAMEBUFFER: 0x8ca8,
DRAW_FRAMEBUFFER: 0x8ca9,
MAX_RENDERBUFFER_SIZE: 0x84e8,
INVALID_FRAMEBUFFER_OPERATION: 0x0506,
// Pixel storage modes
// Constants passed to pixelStorei().
UNPACK_FLIP_Y_WEBGL: 0x9240,
UNPACK_PREMULTIPLY_ALPHA_WEBGL: 0x9241,
UNPACK_COLORSPACE_CONVERSION_WEBGL: 0x9243,
// /////////////////////////////////////////////////////
// Additional constants defined WebGL 2
// These constants are defined on the WebGL2RenderingContext interface.
// All WebGL 1 constants are also available in a WebGL 2 context.
// /////////////////////////////////////////////////////
// Getting GL parameter information
// Constants passed to getParameter()
// to specify what information to return.
READ_BUFFER: 0x0c02,
UNPACK_ROW_LENGTH: 0x0cf2,
UNPACK_SKIP_ROWS: 0x0cf3,
UNPACK_SKIP_PIXELS: 0x0cf4,
PACK_ROW_LENGTH: 0x0d02,
PACK_SKIP_ROWS: 0x0d03,
PACK_SKIP_PIXELS: 0x0d04,
TEXTURE_BINDING_3D: 0x806a,
UNPACK_SKIP_IMAGES: 0x806d,
UNPACK_IMAGE_HEIGHT: 0x806e,
MAX_3D_TEXTURE_SIZE: 0x8073,
MAX_ELEMENTS_VERTICES: 0x80e8,
MAX_ELEMENTS_INDICES: 0x80e9,
MAX_TEXTURE_LOD_BIAS: 0x84fd,
MAX_FRAGMENT_UNIFORM_COMPONENTS: 0x8b49,
MAX_VERTEX_UNIFORM_COMPONENTS: 0x8b4a,
MAX_ARRAY_TEXTURE_LAYERS: 0x88ff,
MIN_PROGRAM_TEXEL_OFFSET: 0x8904,
MAX_PROGRAM_TEXEL_OFFSET: 0x8905,
MAX_VARYING_COMPONENTS: 0x8b4b,
FRAGMENT_SHADER_DERIVATIVE_HINT: 0x8b8b,
RASTERIZER_DISCARD: 0x8c89,
VERTEX_ARRAY_BINDING: 0x85b5,
MAX_VERTEX_OUTPUT_COMPONENTS: 0x9122,
MAX_FRAGMENT_INPUT_COMPONENTS: 0x9125,
MAX_SERVER_WAIT_TIMEOUT: 0x9111,
MAX_ELEMENT_INDEX: 0x8d6b,
// Textures
// Constants passed to texParameteri(),
// texParameterf(), bindTexture(), texImage2D(), and others.
RED: 0x1903,
RGB8: 0x8051,
RGBA8: 0x8058,
RGB10_A2: 0x8059,
TEXTURE_3D: 0x806f,
TEXTURE_WRAP_R: 0x8072,
TEXTURE_MIN_LOD: 0x813a,
TEXTURE_MAX_LOD: 0x813b,
TEXTURE_BASE_LEVEL: 0x813c,
TEXTURE_MAX_LEVEL: 0x813d,
TEXTURE_COMPARE_MODE: 0x884c,
TEXTURE_COMPARE_FUNC: 0x884d,
SRGB: 0x8c40,
SRGB8: 0x8c41,
SRGB8_ALPHA8: 0x8c43,
COMPARE_REF_TO_TEXTURE: 0x884e,
RGBA32F: 0x8814,
RGB32F: 0x8815,
RGBA16F: 0x881a,
RGB16F: 0x881b,
TEXTURE_2D_ARRAY: 0x8c1a,
TEXTURE_BINDING_2D_ARRAY: 0x8c1d,
R11F_G11F_B10F: 0x8c3a,
RGB9_E5: 0x8c3d,
RGBA32UI: 0x8d70,
RGB32UI: 0x8d71,
RGBA16UI: 0x8d76,
RGB16UI: 0x8d77,
RGBA8UI: 0x8d7c,
RGB8UI: 0x8d7d,
RGBA32I: 0x8d82,
RGB32I: 0x8d83,
RGBA16I: 0x8d88,
RGB16I: 0x8d89,
RGBA8I: 0x8d8e,
RGB8I: 0x8d8f,
RED_INTEGER: 0x8d94,
RGB_INTEGER: 0x8d98,
RGBA_INTEGER: 0x8d99,
R8: 0x8229,
RG8: 0x822b,
R16F: 0x822d,
R32F: 0x822e,
RG16F: 0x822f,
RG32F: 0x8230,
R8I: 0x8231,
R8UI: 0x8232,
R16I: 0x8233,
R16UI: 0x8234,
R32I: 0x8235,
R32UI: 0x8236,
RG8I: 0x8237,
RG8UI: 0x8238,
RG16I: 0x8239,
RG16UI: 0x823a,
RG32I: 0x823b,
RG32UI: 0x823c,
R8_SNORM: 0x8f94,
RG8_SNORM: 0x8f95,
RGB8_SNORM: 0x8f96,
RGBA8_SNORM: 0x8f97,
RGB10_A2UI: 0x906f,
/* covered by extension
COMPRESSED_R11_EAC : 0x9270,
COMPRESSED_SIGNED_R11_EAC: 0x9271,
COMPRESSED_RG11_EAC: 0x9272,
COMPRESSED_SIGNED_RG11_EAC : 0x9273,
COMPRESSED_RGB8_ETC2 : 0x9274,
COMPRESSED_SRGB8_ETC2: 0x9275,
COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2 : 0x9276,
COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_ETC : 0x9277,
COMPRESSED_RGBA8_ETC2_EAC: 0x9278,
COMPRESSED_SRGB8_ALPHA8_ETC2_EAC : 0x9279,
*/
TEXTURE_IMMUTABLE_FORMAT: 0x912f,
TEXTURE_IMMUTABLE_LEVELS: 0x82df,
// Pixel types
UNSIGNED_INT_2_10_10_10_REV: 0x8368,
UNSIGNED_INT_10F_11F_11F_REV: 0x8c3b,
UNSIGNED_INT_5_9_9_9_REV: 0x8c3e,
FLOAT_32_UNSIGNED_INT_24_8_REV: 0x8dad,
UNSIGNED_INT_24_8: 0x84fa,
HALF_FLOAT: 0x140b,
RG: 0x8227,
RG_INTEGER: 0x8228,
INT_2_10_10_10_REV: 0x8d9f,
// Queries
CURRENT_QUERY: 0x8865,
QUERY_RESULT: 0x8866,
QUERY_RESULT_AVAILABLE: 0x8867,
ANY_SAMPLES_PASSED: 0x8c2f,
ANY_SAMPLES_PASSED_CONSERVATIVE: 0x8d6a,
// Draw buffers
MAX_DRAW_BUFFERS: 0x8824,
DRAW_BUFFER0: 0x8825,
DRAW_BUFFER1: 0x8826,
DRAW_BUFFER2: 0x8827,
DRAW_BUFFER3: 0x8828,
DRAW_BUFFER4: 0x8829,
DRAW_BUFFER5: 0x882a,
DRAW_BUFFER6: 0x882b,
DRAW_BUFFER7: 0x882c,
DRAW_BUFFER8: 0x882d,
DRAW_BUFFER9: 0x882e,
DRAW_BUFFER10: 0x882f,
DRAW_BUFFER11: 0x8830,
DRAW_BUFFER12: 0x8831,
DRAW_BUFFER13: 0x8832,
DRAW_BUFFER14: 0x8833,
DRAW_BUFFER15: 0x8834,
MAX_COLOR_ATTACHMENTS: 0x8cdf,
COLOR_ATTACHMENT1: 0x8ce1,
COLOR_ATTACHMENT2: 0x8ce2,
COLOR_ATTACHMENT3: 0x8ce3,
COLOR_ATTACHMENT4: 0x8ce4,
COLOR_ATTACHMENT5: 0x8ce5,
COLOR_ATTACHMENT6: 0x8ce6,
COLOR_ATTACHMENT7: 0x8ce7,
COLOR_ATTACHMENT8: 0x8ce8,
COLOR_ATTACHMENT9: 0x8ce9,
COLOR_ATTACHMENT10: 0x8cea,
COLOR_ATTACHMENT11: 0x8ceb,
COLOR_ATTACHMENT12: 0x8cec,
COLOR_ATTACHMENT13: 0x8ced,
COLOR_ATTACHMENT14: 0x8cee,
COLOR_ATTACHMENT15: 0x8cef,
// Samplers
SAMPLER_3D: 0x8b5f,
SAMPLER_2D_SHADOW: 0x8b62,
SAMPLER_2D_ARRAY: 0x8dc1,
SAMPLER_2D_ARRAY_SHADOW: 0x8dc4,
SAMPLER_CUBE_SHADOW: 0x8dc5,
INT_SAMPLER_2D: 0x8dca,
INT_SAMPLER_3D: 0x8dcb,
INT_SAMPLER_CUBE: 0x8dcc,
INT_SAMPLER_2D_ARRAY: 0x8dcf,
UNSIGNED_INT_SAMPLER_2D: 0x8dd2,
UNSIGNED_INT_SAMPLER_3D: 0x8dd3,
UNSIGNED_INT_SAMPLER_CUBE: 0x8dd4,
UNSIGNED_INT_SAMPLER_2D_ARRAY: 0x8dd7,
MAX_SAMPLES: 0x8d57,
SAMPLER_BINDING: 0x8919,
// Buffers
PIXEL_PACK_BUFFER: 0x88eb,
PIXEL_UNPACK_BUFFER: 0x88ec,
PIXEL_PACK_BUFFER_BINDING: 0x88ed,
PIXEL_UNPACK_BUFFER_BINDING: 0x88ef,
COPY_READ_BUFFER: 0x8f36,
COPY_WRITE_BUFFER: 0x8f37,
COPY_READ_BUFFER_BINDING: 0x8f36,
COPY_WRITE_BUFFER_BINDING: 0x8f37,
// Data types
FLOAT_MAT2x3: 0x8b65,
FLOAT_MAT2x4: 0x8b66,
FLOAT_MAT3x2: 0x8b67,
FLOAT_MAT3x4: 0x8b68,
FLOAT_MAT4x2: 0x8b69,
FLOAT_MAT4x3: 0x8b6a,
UNSIGNED_INT_VEC2: 0x8dc6,
UNSIGNED_INT_VEC3: 0x8dc7,
UNSIGNED_INT_VEC4: 0x8dc8,
UNSIGNED_NORMALIZED: 0x8c17,
SIGNED_NORMALIZED: 0x8f9c,
// Vertex attributes
VERTEX_ATTRIB_ARRAY_INTEGER: 0x88fd,
VERTEX_ATTRIB_ARRAY_DIVISOR: 0x88fe,
// Transform feedback
TRANSFORM_FEEDBACK_BUFFER_MODE: 0x8c7f,
MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS: 0x8c80,
TRANSFORM_FEEDBACK_VARYINGS: 0x8c83,
TRANSFORM_FEEDBACK_BUFFER_START: 0x8c84,
TRANSFORM_FEEDBACK_BUFFER_SIZE: 0x8c85,
TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN: 0x8c88,
MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS: 0x8c8a,
MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS: 0x8c8b,
INTERLEAVED_ATTRIBS: 0x8c8c,
SEPARATE_ATTRIBS: 0x8c8d,
TRANSFORM_FEEDBACK_BUFFER: 0x8c8e,
TRANSFORM_FEEDBACK_BUFFER_BINDING: 0x8c8f,
TRANSFORM_FEEDBACK: 0x8e22,
TRANSFORM_FEEDBACK_PAUSED: 0x8e23,
TRANSFORM_FEEDBACK_ACTIVE: 0x8e24,
TRANSFORM_FEEDBACK_BINDING: 0x8e25,
// Framebuffers and renderbuffers
FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING: 0x8210,
FRAMEBUFFER_ATTACHMENT_COMPONENT_TYPE: 0x8211,
FRAMEBUFFER_ATTACHMENT_RED_SIZE: 0x8212,
FRAMEBUFFER_ATTACHMENT_GREEN_SIZE: 0x8213,
FRAMEBUFFER_ATTACHMENT_BLUE_SIZE: 0x8214,
FRAMEBUFFER_ATTACHMENT_ALPHA_SIZE: 0x8215,
FRAMEBUFFER_ATTACHMENT_DEPTH_SIZE: 0x8216,
FRAMEBUFFER_ATTACHMENT_STENCIL_SIZE: 0x8217,
FRAMEBUFFER_DEFAULT: 0x8218,
// DEPTH_STENCIL_ATTACHMENT : 0x821A,
// DEPTH_STENCIL: 0x84F9,
DEPTH24_STENCIL8: 0x88f0,
DRAW_FRAMEBUFFER_BINDING: 0x8ca6,
READ_FRAMEBUFFER_BINDING: 0x8caa,
RENDERBUFFER_SAMPLES: 0x8cab,
FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER: 0x8cd4,
FRAMEBUFFER_INCOMPLETE_MULTISAMPLE: 0x8d56,
// Uniforms
UNIFORM_BUFFER: 0x8a11,
UNIFORM_BUFFER_BINDING: 0x8a28,
UNIFORM_BUFFER_START: 0x8a29,
UNIFORM_BUFFER_SIZE: 0x8a2a,
MAX_VERTEX_UNIFORM_BLOCKS: 0x8a2b,
MAX_FRAGMENT_UNIFORM_BLOCKS: 0x8a2d,
MAX_COMBINED_UNIFORM_BLOCKS: 0x8a2e,
MAX_UNIFORM_BUFFER_BINDINGS: 0x8a2f,
MAX_UNIFORM_BLOCK_SIZE: 0x8a30,
MAX_COMBINED_VERTEX_UNIFORM_COMPONENTS: 0x8a31,
MAX_COMBINED_FRAGMENT_UNIFORM_COMPONENTS: 0x8a33,
UNIFORM_BUFFER_OFFSET_ALIGNMENT: 0x8a34,
ACTIVE_UNIFORM_BLOCKS: 0x8a36,
UNIFORM_TYPE: 0x8a37,
UNIFORM_SIZE: 0x8a38,
UNIFORM_BLOCK_INDEX: 0x8a3a,
UNIFORM_OFFSET: 0x8a3b,
UNIFORM_ARRAY_STRIDE: 0x8a3c,
UNIFORM_MATRIX_STRIDE: 0x8a3d,
UNIFORM_IS_ROW_MAJOR: 0x8a3e,
UNIFORM_BLOCK_BINDING: 0x8a3f,
UNIFORM_BLOCK_DATA_SIZE: 0x8a40,
UNIFORM_BLOCK_ACTIVE_UNIFORMS: 0x8a42,
UNIFORM_BLOCK_ACTIVE_UNIFORM_INDICES: 0x8a43,
UNIFORM_BLOCK_REFERENCED_BY_VERTEX_SHADER: 0x8a44,
UNIFORM_BLOCK_REFERENCED_BY_FRAGMENT_SHADER: 0x8a46,
// Sync objects
OBJECT_TYPE: 0x9112,
SYNC_CONDITION: 0x9113,
SYNC_STATUS: 0x9114,
SYNC_FLAGS: 0x9115,
SYNC_FENCE: 0x9116,
SYNC_GPU_COMMANDS_COMPLETE: 0x9117,
UNSIGNALED: 0x9118,
SIGNALED: 0x9119,
ALREADY_SIGNALED: 0x911a,
TIMEOUT_EXPIRED: 0x911b,
CONDITION_SATISFIED: 0x911c,
WAIT_FAILED: 0x911d,
SYNC_FLUSH_COMMANDS_BIT: 0x00000001,
// Miscellaneous constants
COLOR: 0x1800,
DEPTH: 0x1801,
STENCIL: 0x1802,
MIN: 0x8007,
MAX: 0x8008,
DEPTH_COMPONENT24: 0x81a6,
STREAM_READ: 0x88e1,
STREAM_COPY: 0x88e2,
STATIC_READ: 0x88e5,
STATIC_COPY: 0x88e6,
DYNAMIC_READ: 0x88e9,
DYNAMIC_COPY: 0x88ea,
DEPTH_COMPONENT32F: 0x8cac,
DEPTH32F_STENCIL8: 0x8cad,
INVALID_INDEX: 0xffffffff,
TIMEOUT_IGNORED: -1,
MAX_CLIENT_WAIT_TIMEOUT_WEBGL: 0x9247,
// Constants defined in WebGL extensions
// ANGLE_instanced_arrays
VERTEX_ATTRIB_ARRAY_DIVISOR_ANGLE: 0x88fe,
// WEBGL_debug_renderer_info
UNMASKED_VENDOR_WEBGL: 0x9245,
UNMASKED_RENDERER_WEBGL: 0x9246,
// EXT_texture_filter_anisotropic
MAX_TEXTURE_MAX_ANISOTROPY_EXT: 0x84ff,
TEXTURE_MAX_ANISOTROPY_EXT: 0x84fe,
// WEBGL_compressed_texture_s3tc
COMPRESSED_RGB_S3TC_DXT1_EXT: 0x83f0,
COMPRESSED_RGBA_S3TC_DXT1_EXT: 0x83f1,
COMPRESSED_RGBA_S3TC_DXT3_EXT: 0x83f2,
COMPRESSED_RGBA_S3TC_DXT5_EXT: 0x83f3,
// WEBGL_compressed_texture_es3
COMPRESSED_R11_EAC: 0x9270,
COMPRESSED_SIGNED_R11_EAC: 0x9271,
COMPRESSED_RG11_EAC: 0x9272,
COMPRESSED_SIGNED_RG11_EAC: 0x9273,
COMPRESSED_RGB8_ETC2: 0x9274,
COMPRESSED_RGBA8_ETC2_EAC: 0x9275,
COMPRESSED_SRGB8_ETC2: 0x9276,
COMPRESSED_SRGB8_ALPHA8_ETC2_EAC: 0x9277,
COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2: 0x9278,
COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2: 0x9279,
// WEBGL_compressed_texture_pvrtc
COMPRESSED_RGB_PVRTC_4BPPV1_IMG: 0x8c00,
COMPRESSED_RGBA_PVRTC_4BPPV1_IMG: 0x8c02,
COMPRESSED_RGB_PVRTC_2BPPV1_IMG: 0x8c01,
COMPRESSED_RGBA_PVRTC_2BPPV1_IMG: 0x8c03,
// WEBGL_compressed_texture_etc1
COMPRESSED_RGB_ETC1_WEBGL: 0x8d64,
// WEBGL_compressed_texture_atc
COMPRESSED_RGB_ATC_WEBGL: 0x8c92,
COMPRESSED_RGBA_ATC_EXPLICIT_ALPHA_WEBGL: 0x8c92,
COMPRESSED_RGBA_ATC_INTERPOLATED_ALPHA_WEBGL: 0x87ee,
// WEBGL_depth_texture
UNSIGNED_INT_24_8_WEBGL: 0x84fa,
// OES_texture_half_float
HALF_FLOAT_OES: 0x8d61,
// WEBGL_color_buffer_float
RGBA32F_EXT: 0x8814,
RGB32F_EXT: 0x8815,
FRAMEBUFFER_ATTACHMENT_COMPONENT_TYPE_EXT: 0x8211,
UNSIGNED_NORMALIZED_EXT: 0x8c17,
// EXT_blend_minmax
MIN_EXT: 0x8007,
MAX_EXT: 0x8008,
// EXT_sRGB
SRGB_EXT: 0x8c40,
SRGB_ALPHA_EXT: 0x8c42,
SRGB8_ALPHA8_EXT: 0x8c43,
FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING_EXT: 0x8210,
// OES_standard_derivatives
FRAGMENT_SHADER_DERIVATIVE_HINT_OES: 0x8b8b,
// WEBGL_draw_buffers
COLOR_ATTACHMENT0_WEBGL: 0x8ce0,
COLOR_ATTACHMENT1_WEBGL: 0x8ce1,
COLOR_ATTACHMENT2_WEBGL: 0x8ce2,
COLOR_ATTACHMENT3_WEBGL: 0x8ce3,
COLOR_ATTACHMENT4_WEBGL: 0x8ce4,
COLOR_ATTACHMENT5_WEBGL: 0x8ce5,
COLOR_ATTACHMENT6_WEBGL: 0x8ce6,
COLOR_ATTACHMENT7_WEBGL: 0x8ce7,
COLOR_ATTACHMENT8_WEBGL: 0x8ce8,
COLOR_ATTACHMENT9_WEBGL: 0x8ce9,
COLOR_ATTACHMENT10_WEBGL: 0x8cea,
COLOR_ATTACHMENT11_WEBGL: 0x8ceb,
COLOR_ATTACHMENT12_WEBGL: 0x8cec,
COLOR_ATTACHMENT13_WEBGL: 0x8ced,
COLOR_ATTACHMENT14_WEBGL: 0x8cee,
COLOR_ATTACHMENT15_WEBGL: 0x8cef,
DRAW_BUFFER0_WEBGL: 0x8825,
DRAW_BUFFER1_WEBGL: 0x8826,
DRAW_BUFFER2_WEBGL: 0x8827,
DRAW_BUFFER3_WEBGL: 0x8828,
DRAW_BUFFER4_WEBGL: 0x8829,
DRAW_BUFFER5_WEBGL: 0x882a,
DRAW_BUFFER6_WEBGL: 0x882b,
DRAW_BUFFER7_WEBGL: 0x882c,
DRAW_BUFFER8_WEBGL: 0x882d,
DRAW_BUFFER9_WEBGL: 0x882e,
DRAW_BUFFER10_WEBGL: 0x882f,
DRAW_BUFFER11_WEBGL: 0x8830,
DRAW_BUFFER12_WEBGL: 0x8831,
DRAW_BUFFER13_WEBGL: 0x8832,
DRAW_BUFFER14_WEBGL: 0x8833,
DRAW_BUFFER15_WEBGL: 0x8834,
MAX_COLOR_ATTACHMENTS_WEBGL: 0x8cdf,
MAX_DRAW_BUFFERS_WEBGL: 0x8824,
// OES_vertex_array_object
VERTEX_ARRAY_BINDING_OES: 0x85b5,
// EXT_disjoint_timer_query
QUERY_COUNTER_BITS_EXT: 0x8864,
CURRENT_QUERY_EXT: 0x8865,
QUERY_RESULT_EXT: 0x8866,
QUERY_RESULT_AVAILABLE_EXT: 0x8867,
TIME_ELAPSED_EXT: 0x88bf,
TIMESTAMP_EXT: 0x8e28,
GPU_DISJOINT_EXT: 0x8fbb // A Boolean indicating whether or not the GPU performed any disjoint operation.
};
/***/ }),
/***/ "./bundle.js":
/*!*******************!*\
!*** ./bundle.js ***!
\*******************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
/* WEBPACK VAR INJECTION */(function(global) {/* global window, global */
const moduleExports = __webpack_require__(/*! ./src */ "./src/index.js");
const _global = typeof window === 'undefined' ? global : window;
_global.loaders = _global.luma || {};
module.exports = Object.assign(_global.luma, moduleExports);
/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../node_modules/webpack/buildin/global.js */ "../../node_modules/webpack/buildin/global.js")))
/***/ }),
/***/ "./src/experimental/passes/outline-pass.js":
/*!*************************************************!*\
!*** ./src/experimental/passes/outline-pass.js ***!
\*************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return OutlinePass; });
/* harmony import */ var _luma_gl_constants__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @luma.gl/constants */ "../constants/src/index.js");
/* harmony import */ var _luma_gl_constants__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_luma_gl_constants__WEBPACK_IMPORTED_MODULE_0__);
/* harmony import */ var _luma_gl_core__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @luma.gl/core */ "@luma.gl/core");
/* harmony import */ var _luma_gl_core__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_luma_gl_core__WEBPACK_IMPORTED_MODULE_1__);
/**
* A traditional stencil buffer based outline pass.
*/
class OutlinePass extends _luma_gl_core__WEBPACK_IMPORTED_MODULE_1__["_Pass"] {
constructor(gl, props = {}) {
super(gl, Object.assign({id: 'simple-outline-pass'}, props));
this.setProps(props);
}
setProps(props) {
this.props = Object.assign(this.props, props);
// this.clipspace.setUniforms(pixelation.getUniforms(this.props));
}
_renderPass({gl, animationProps}) {
Object(_luma_gl_core__WEBPACK_IMPORTED_MODULE_1__["withParameters"])(
gl,
{
stencilTest: true, // turn on stencil buffers
stencilOp: [_luma_gl_constants__WEBPACK_IMPORTED_MODULE_0___default.a.KEEP, _luma_gl_constants__WEBPACK_IMPORTED_MODULE_0___default.a.KEEP, _luma_gl_constants__WEBPACK_IMPORTED_MODULE_0___default.a.REPLACE] // update stencil if both stencil+depth tests pass
},
() => {
// Enable writing to stencil buffer plane 0
Object(_luma_gl_core__WEBPACK_IMPORTED_MODULE_1__["setParameters"])(gl, {
stencilFunc: [_luma_gl_constants__WEBPACK_IMPORTED_MODULE_0___default.a.ALWAYS, 1, 0xff], // update stencil buffer, regardless of current value
stencilMask: 0x01
});
gl.clear(_luma_gl_constants__WEBPACK_IMPORTED_MODULE_0___default.a.STENCIL_BUFFER_BIT);
// draw
for (const model of this.props.models) {
model.setUniforms(this.props.normalUniforms);
model.draw(this.props.drawParams);
}
// Disable stencil writing, mask to stencil plane 0
Object(_luma_gl_core__WEBPACK_IMPORTED_MODULE_1__["setParameters"])(gl, {
stencilFunc: [_luma_gl_constants__WEBPACK_IMPORTED_MODULE_0___default.a.NOTEQUAL, 1, 0x01],
stencilMask: 0x00, // disable writing to the stencil buffer
depthTest: false
});
for (const model of this.props.models) {
model.setUniforms(this.props.outlineUniforms);
model.draw(this.props.drawParams);
model.setUniforms(this.props.normalUniforms);
}
// All GL settings will reset here...
}
);
}
}
/***/ }),
/***/ "./src/experimental/passes/ssao-pass.js":
/*!**********************************************!*\
!*** ./src/experimental/passes/ssao-pass.js ***!
\**********************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return SSAOPass; });
/* harmony import */ var _luma_gl_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @luma.gl/core */ "@luma.gl/core");
/* harmony import */ var _luma_gl_core__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_luma_gl_core__WEBPACK_IMPORTED_MODULE_0__);
/* harmony import */ var _shader_modules_ssao__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../shader-modules/ssao */ "./src/experimental/shader-modules/ssao.js");
/**
* Screen-space ambient occlusion pass.
*
* Ported to luma.gl from THREE.js (MIT license).
* Attributions (per comments in original THREE.js files):
* @author alteredq / http://alteredqualia.com/
* @author tentone
*/
/* eslint-disable camelcase */
class SSAOPass extends _luma_gl_core__WEBPACK_IMPORTED_MODULE_0__["_Pass"] {
constructor(gl, props) {
super(gl, Object.assign({id: 'ssao-pass', swap: true}, _shader_modules_ssao__WEBPACK_IMPORTED_MODULE_1__["default"].DEFAULT_PROPS, props));
this.renderToScreen = false;
// Depth render target, for `depth` shader module
this.depthFramebuffer = new _luma_gl_core__WEBPACK_IMPORTED_MODULE_0__["Framebuffer"](gl, {id: 'ssao-pass-depth-map'});
this.clipspace = new _luma_gl_core__WEBPACK_IMPORTED_MODULE_0__["ClipSpace"](gl, {
id: 'ssao-pass',
modules: [_shader_modules_ssao__WEBPACK_IMPORTED_MODULE_1__["default"]],
fs: `
varying vec2 uv;
void main() {
gl_FragColor = ssao_getColor(uv);
}
`
});
this.setProps(props);
}
setProps(props) {
super.setProps(props);
const {width = 512, height = 512} = this.props;
this.depthFramebuffer.resize({width, height});
this.clipspace.setUniforms(this.props);
// Shader uniforms
// this.uniforms['cameraNear' ].value = this.camera2.near;
// this.uniforms[ 'cameraFar' ].value = this.camera2.far;
}
_renderPass({inputBuffer, outputBuffer, animationProps}) {
const {width, height} = inputBuffer;
this.depthFramebuffer.resize({width, height});
// Render depth into depthRenderTarget
Object(_luma_gl_core__WEBPACK_IMPORTED_MODULE_0__["withParameters"])(this.gl, {framebuffer: this.depthFramebuffer}, () => {
this.gl.clear(this.gl.COLOR_BUFFER_BIT | this.gl.DEPTH_BUFFER_BIT);
for (const model of this.props.models) {
model.setUniforms({depth_uEnabled: true});
model.draw(Object.assign({}, this.props.drawParams, {animationProps}));
model.setUniforms({depth_uEnabled: false});
}
});
this.gl.clear(this.gl.COLOR_BUFFER_BIT | this.gl.DEPTH_BUFFER_BIT);
this.clipspace.draw({
animationProps,
uniforms: {
tDepth: this.depthFramebuffer,
tDiffuse: inputBuffer,
size: [this.depthFramebuffer.width, this.depthFramebuffer.height]
}
});
}
}
/***/ }),
/***/ "./src/experimental/shader-modules/convolution.js":
/*!********************************************************!*\
!*** ./src/experimental/shader-modules/convolution.js ***!
\********************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
__webpack_require__.r(__webpack_exports__);
// A convolution shader
// Based on https://webglfundamentals.org/webgl/lessons/webgl-image-processing-continued.html
/*
# Copyright 2012, Gregg Tavares.
# All rights reserved.
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions are
# met:
#
# * Redistributions of source code must retain the above copyright
# notice, this list of conditions and the following disclaimer.
# * Redistributions in binary form must reproduce the above
# copyright notice, this list of conditions and the following disclaimer
# in the documentation and/or other materials provided with the
# distribution.
# * Neither the name of Gregg Tavares. nor the names of his
# contributors may be used to endorse or promote products derived from
# this software without specific prior written permission.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
// Pre-defined convolution kernels
/* eslint-disable */
const KERNEL = {
NORMAL: [0, 0, 0, 0, 1, 0, 0, 0, 0],
GAUSSIAN_BLUR: [0.045, 0.122, 0.045, 0.122, 0.332, 0.122, 0.045, 0.122, 0.045],
GAUSSIAN_BLUR_2: [1, 2, 1, 2, 4, 2, 1, 2, 1],
GAUSSIAN_BLUR_3: [0, 1, 0, 1, 1, 1, 0, 1, 0],
UNSHARPEN: [-1, -1, -1, -1, 9, -1, -1, -1, -1],
SHARPNESS: [0, -1, 0, -1, 5, -1, 0, -1, 0],
SHARPEN: [-1, -1, -1, -1, 16, -1, -1, -1, -1],
EDGE_DETECT: [-0.125, -0.125, -0.125, -0.125, 1, -0.125, -0.125, -0.125, -0.125],
EDGE_DETECT_2: [-1, -1, -1, -1, 8, -1, -1, -1, -1],
EDGE_DETECT_3: [-5, 0, 0, 0, 0, 0, 0, 0, 5],
EDGE_DETECT_4: [-1, -1, -1, 0, 0, 0, 1, 1, 1],
EDGE_DETECT_5: [-1, -1, -1, 2, 2, 2, -1, -1, -1],
EDGE_DETECT_6: [-5, -5, -5, -5, 39, -5, -5, -5, -5],
SOBEL_HORIZONTAL: [1, 2, 1, 0, 0, 0, -1, -2, -1],
SOBEL_VERTICAL: [1, 0, -1, 2, 0, -2, 1, 0, -1],
PREVIT_HORIZONTAL: [1, 1, 1, 0, 0, 0, -1, -1, -1],
PREVIT_VERTICAL: [1, 0, -1, 1, 0, -1, 1, 0, -1],
BOX_BLUR: [0.111, 0.111, 0.111, 0.111, 0.111, 0.111, 0.111, 0.111, 0.111],
TRIANGLE_BLUR: [0.0625, 0.125, 0.0625, 0.125, 0.25, 0.125, 0.0625, 0.125, 0.0625],
EMBOSS: [-2, -1, 0, -1, 1, 1, 0, 1, 2]
};
/* eslint-enable */
const fs = `
precision highp float;
uniform float kernel[9];
uniform float kernelWeight;
vec4 convolution_sampleColor(sampler2D texture, vec2 texSize, vec2 texCoords) {
vec2 onePixel = vec2(1.0, 1.0) / texSize;
vec4 colorSum =
texture2D(texture, texCoords + onePixel * vec2(-1, -1)) * kernel[0] +
texture2D(texture, texCoords + onePixel * vec2( 0, -1)) * kernel[1] +
texture2D(texture, texCoords + onePixel * vec2( 1, -1)) * kernel[2] +
texture2D(texture, texCoords + onePixel * vec2(-1, 0)) * kernel[3] +
texture2D(texture, texCoords + onePixel * vec2( 0, 0)) * kernel[4] +
texture2D(texture, texCoords + onePixel * vec2( 1, 0)) * kernel[5] +
texture2D(texture, texCoords + onePixel * vec2(-1, 1)) * kernel[6] +
texture2D(texture, texCoords + onePixel * vec2( 0, 1)) * kernel[7] +
texture2D(texture, texCoords + onePixel * vec2( 1, 1)) * kernel[8] ;
// Divide the sum by the weight but just use rgb, set alpha to 1.0
return vec4((colorSum / kernelWeight).rgb, colorSum.a);
}
`;
const uniforms = {
kernel: KERNEL.NORMAL,
kernelWeight: KERNEL.NORMAL.reduce((sum, x) => sum + x, 0)
};
/* harmony default export */ __webpack_exports__["default"] = ({
name: 'convolution',
uniforms,
fs,
KERNEL,
passes: [{sampler: true}]
});
/***/ }),
/***/ "./src/experimental/shader-modules/depth.js":
/*!**************************************************!*\
!*** ./src/experimental/shader-modules/depth.js ***!
\**************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony import */ var _pack__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./pack */ "./src/experimental/shader-modules/pack.js");
// depth buffer utilities
// initial version ported from THREE.js
/* eslint-disable camelcase */
const fs = `\
#define DEPTH_PACKING 3201
uniform bool depth_uEnabled;
#ifdef USE_LOGDEPTHBUF
uniform float logDepthBufFC;
#endif
#if DEPTH_PACKING == 3200
uniform float opacity;
#endif
// NOTE: viewZ/eyeZ is < 0 when in front of the camera per OpenGL conventions
float depth_viewZToOrthographicDepth(
const in float viewZ, const in float near, const in float far
) {
return ( viewZ + near ) / ( near - far );
}
float depth_orthographicDepthToViewZ(
const in float linearClipZ, const in float near, const in float far
) {
return linearClipZ * ( near - far ) - near;
}
float depth_viewZToPerspectiveDepth(
const in float viewZ, const in float near, const in float far
) {
return (( near + viewZ ) * far ) / (( far - near ) * viewZ );
}
float depth_perspectiveDepthToViewZ(
const in float invClipZ, const in float near, const in float far
) {
return ( near * far ) / ( ( far - near ) * invClipZ - far );
}
// Sample depth buffer and convert to float
float depth_getDepth(sampler2D tDepth, vec2 coord) {
float depthValue = pack_RGBA8ToFloat(texture2D(tDepth, coord));
#ifdef USE_LOGDEPTHBUF
float logz = depthValue;
float w = pow(2.0, (logz / logDepthBufFC)) - 1.0;
float z = (logz / w) + 1.0;
#else
float z = depthValue;
#endif
return z;
}
//
vec4 depth_getColor() {
#if DEPTH_PACKING == 3200
return vec4( vec3( 1.0 - gl_FragCoord.z ), opacity );
#elif DEPTH_PACKING == 3201
return pack_floatToRGBA8( gl_FragCoord.z );
#endif
}
vec4 depth_filterColor(vec4 color) {
return depth_uEnabled ? depth_getColor() : color;
}
`;
const DEFAULT_PROPS = {
depth_uEnabled: false
};
/* harmony default export */ __webpack_exports__["default"] = ({
name: 'depth',
dependencies: [_pack__WEBPACK_IMPORTED_MODULE_0__["default"]],
fs,
DEFAULT_PROPS,
getUniforms: (props = DEFAULT_PROPS) => props
});
/***/ }),
/***/ "./src/experimental/shader-modules/pack.js":
/*!*************************************************!*\
!*** ./src/experimental/shader-modules/pack.js ***!
\*************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
__webpack_require__.r(__webpack_exports__);
// Packing of floats into RGBA8
/* eslint-disable camelcase */
const fs = `\
const float PackUpscale = 256. / 255.; // fraction -> 0..1 (including 1)
const vec3 PackFactors = vec3( 256. * 256. * 256., 256. * 256., 256. );
const float UnpackDownscale = 255. / 256.; // 0..1 -> fraction (excluding 1)
const vec4 UnpackFactors = UnpackDownscale / vec4( PackFactors, 1. );
const float ShiftRight8 = 1. / 256.;
vec4 pack_floatToRGBA8( const in float v ) {
vec4 r = vec4( fract( v * PackFactors ), v );
r.yzw -= r.xyz * ShiftRight8; // tidy overflow
return r * PackUpscale;
}
float pack_RGBA8ToFloat( const in vec4 v ) {
return dot(v, UnpackFactors);
}
`;
const DEFAULT_PROPS = {};
/* harmony default export */ __webpack_exports__["default"] = ({
name: 'pack',
fs,
vs: fs,
DEFAULT_PROPS,
getUniforms: props => props
});
/***/ }),
/***/ "./src/experimental/shader-modules/ssao.js":
/*!*************************************************!*\
!*** ./src/experimental/shader-modules/ssao.js ***!
\*************************************************/
/*! exports provided: default */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony import */ var _depth__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./depth */ "./src/experimental/shader-modules/depth.js");
/**
* Screen-space ambient occlusion shader
*
* Ported to luma.gl from THREE.js
*
* Attributions: (per comments in original THREE.js files)
* - ported to THREE.js from SSAO GLSL shader v1.2 by alteredq / http://alteredqualia.com/
* assembled by Martins Upitis (martinsh) (http://devlog-martinsh.blogspot.com)
* - original technique by ArKano22 http://www.gamedev.net/topic/550699-ssao-no-halo-artifacts/
* - modifications
* - modified to use RGBA packed depth texture (use clear color 1,1,1,1 for depth pass)
* - refactoring and optimizations
*/
/* eslint-disable camelcase */
const DEFAULT_PROPS = {
ssao_uEnabled: true,
tDiffuse: null,
tDepth: null,
size: [512, 512],
cameraNear: 1,
cameraFar: 100,
radius: 32, // 4
onlyAO: false,
aoClamp: 0.25,
lumInfluence: 0.7
};
const fsSSAO = `\
// Inputs
uniform sampler2D tDiffuse;
uniform sampler2D tDepth;
uniform vec2 size; // texture width, height
// TODO - move to 'camera' module?
uniform float cameraNear;
uniform float cameraFar;
// SSAO
uniform bool ssao_uEnabled;
uniform float radius; // ao radius
uniform float aoClamp; // depth clamp - reduces haloing at screen edges
uniform float lumInfluence; // how much luminance affects occlusion
uniform bool onlyAO; // use only ambient occlusion pass?
#define DL 2.399963229728653 // PI * ( 3.0 - sqrt( 5.0 ) )
#define EULER 2.718281828459045
const int samples = 64; // ao sample count
const bool useNoise = true; // use noise instead of pattern for sample dithering
const float noiseAmount = 0.0004; // dithering amount
const float diffArea = 0.4; // self-shadowing reduction
const float gDisplace = 0.4; // gauss bell center
// Random noise generating: pattern texture for dithering
vec2 rand( const vec2 coord ) {
vec2 noise;
if ( useNoise ) {
float nx = dot ( coord, vec2( 12.9898, 78.233 ) );
float ny = dot ( coord, vec2( 12.9898, 78.233 ) * 2.0 );
noise = clamp( fract ( 43758.5453 * sin( vec2( nx, ny ) ) ), 0.0, 1.0 );
} else {
float ff = fract( 1.0 - coord.s * ( size.x / 2.0 ) );
float gg = fract( coord.t * ( size.y / 2.0 ) );
noise = vec2( 0.25, 0.75 ) * vec2( ff ) + vec2( 0.75, 0.25 ) * gg;
}
return ( noise * 2.0 - 1.0 ) * noiseAmount;
}
// RGBA depth
float readDepth( const in vec2 coord ) {
float z = depth_getDepth(tDepth, coord);
float cameraFarPlusNear = cameraFar + cameraNear;
float cameraFarMinusNear = cameraFar - cameraNear;
float cameraCoef = 2.0 * cameraNear;
return cameraCoef / ( cameraFarPlusNear - z * cameraFarMinusNear );
}
float compareDepths( const in float depth1, const in float depth2, inout int far ) {
float garea = 8.0; // gauss bell width
float diff = ( depth1 - depth2 ) * 100.0; // depth difference (0-100)
// reduce left bell width to avoid self-shadowing
if ( diff < gDisplace ) {
garea = diffArea;
} else {
far = 1;
}
float dd = diff - gDisplace;
float gauss = pow( EULER, -2.0 * ( dd * dd ) / ( garea * garea ) );
return gauss;
}
float calcAO( float depth, float dw, float dh, vec2 uv ) {
vec2 vv = vec2( dw, dh );
vec2 coord1 = uv + radius * vv;
vec2 coord2 = uv - radius * vv;
float temp1 = 0.0;
float temp2 = 0.0;
int far = 0;
temp1 = compareDepths( depth, readDepth( coord1 ), far );
// DEPTH EXTRAPOLATION
if ( far > 0 ) {
temp2 = compareDepths( readDepth( coord2 ), depth, far );
temp1 += ( 1.0 - temp1 ) * temp2;
}
return temp1;
}
vec4 ssao_filterColor(vec4 color4, vec2 uv) {
vec2 noise = rand( uv );
float depth = readDepth( uv );
float tt = clamp( depth, aoClamp, 1.0 );
float w = ( 1.0 / size.x ) / tt + ( noise.x * ( 1.0 - noise.x ) );
float h = ( 1.0 / size.y ) / tt + ( noise.y * ( 1.0 - noise.y ) );
float ao = 0.0;
float dz = 1.0 / float( samples );
float l = 0.0;
float z = 1.0 - dz / 2.0;
for ( int i = 0; i <= samples; i ++ ) {
float r = sqrt( 1.0 - z );
float pw = cos( l ) * r;
float ph = sin( l ) * r;
ao += calcAO( depth, pw * w, ph * h, uv );
z = z - dz;
l = l + DL;
}
ao /= float( samples );
ao = 1.0 - ao;
vec3 color = color4.rgb;
vec3 final = color;
vec3 lumcoeff = vec3( 0.299, 0.587, 0.114 );
float lum = dot( color.rgb, lumcoeff );
vec3 luminance = vec3( lum );
// mix( color * ao, white, luminance )
final = vec3( color * mix( vec3( ao ), vec3( 1.0 ), luminance * lumInfluence ) );
if ( onlyAO ) {
// ambient occlusion only
final = vec3( mix( vec3( ao ), vec3( 1.0 ), luminance * lumInfluence ) );
}
return vec4( final, 1.0 );
}
vec4 ssao_getColor(vec2 uv) {
vec4 color = texture2D( tDiffuse, uv );
return ssao_uEnabled ? ssao_filterColor(color, uv) : color;
}
`;
/* harmony default export */ __webpack_exports__["default"] = ({
name: 'ssao',
dependencies: [_depth__WEBPACK_IMPORTED_MODULE_0__["default"]],
DEFAULT_PROPS,
fs: fsSSAO
});
/***/ }),
/***/ "./src/index.js":
/*!**********************!*\
!*** ./src/index.js ***!
\**********************/
/*! exports provided: brightnessContrast, denoise, hueSaturation, noise, sepia, vibrance, vignette, tiltShift, triangleBlur, zoomBlur, colorHalftone, dotScreen, edgeWork, hexagonalPixelate, ink, bulgePinch, swirl, fxaa, _depth, _convolution, _OutlinePass, _SSAOPass */
/***/ (function(module, __webpack_exports__, __webpack_require__) {
"use strict";
__webpack_require__.r(__webpack_exports__);
/* harmony import */ var _shader_modules_adjust_filters_brightnesscontrast__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./shader-modules/adjust-filters/brightnesscontrast */ "./src/shader-modules/adjust-filters/brightnesscontrast.js");
/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "brightnessContrast", function() { return _shader_modules_adjust_filters_brightnesscontrast__WEBPACK_IMPORTED_MODULE_0__["default"]; });
/* harmony import */ var _shader_modules_adjust_filters_denoise__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./shader-modules/adjust-filters/denoise */ "./src/shader-modules/adjust-filters/denoise.js");
/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "denoise", function() { return _shader_modules_adjust_filters_denoise__WEBPACK_IMPORTED_MODULE_1__["default"]; });
/* harmony import */ var _shader_modules_adjust_filters_huesaturation__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./shader-modules/adjust-filters/huesaturation */ "./src/shader-modules/adjust-filters/huesaturation.js");
/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "hueSaturation", function() { return _shader_modules_adjust_filters_huesaturation__WEBPACK_IMPORTED_MODULE_2__["default"]; });
/* harmony import */ var _shader_modules_adjust_filters_noise__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./shade