├── demos
├── .vscode
│ └── settings.json
├── common
│ ├── math-common.glsl
│ └── blobby.glsl
├── horizon.jpg
├── outfoxing.mp3
├── cubemap
│ ├── yokohama_d.jpg
│ ├── yokohama_e.jpg
│ ├── yokohama_n.jpg
│ ├── yokohama_s.jpg
│ ├── yokohama_u.jpg
│ ├── yokohama_w.jpg
│ └── readme.txt
├── raymarcher_88.glsl
├── glslify.glsl
├── uv-warp.glsl
├── multipass.glsl
├── duck.glsl
├── blending.glsl
├── swirl_spin.glsl
├── bouncing.glsl
├── frame.glsl
├── plasma1.glsl
├── mouse.glsl
├── volume_points_0.glsl
├── blobby.glsl
├── feedback.glsl
├── buffer_a.glsl
├── audio.glsl
├── digital.glsl
├── volume_points_1.glsl
├── volume_points_common.glsl
├── cubemap.glsl
├── keyboard.glsl
├── fly_controls.glsl
└── metaballs.glsl
├── .gitignore
├── images
├── example.png
├── example2.png
└── example3.png
├── resources
├── play.png
├── pause.png
├── record.png
├── reload.png
├── screen.png
├── thumb.png
├── stop_rec.png
└── stats.min.js
├── .vscode
├── .browse.VC.db
├── .browse.VC.db-wal
├── extensions.json
├── tasks.json
├── settings.json
└── launch.json
├── src
├── extensions
│ ├── webview_extension.ts
│ ├── textures
│ │ ├── texture_extension_extension.ts
│ │ └── textures_init_extension.ts
│ ├── audio
│ │ ├── audio_pause_extension.ts
│ │ ├── audio_resume_extension.ts
│ │ ├── no_audio_extension.ts
│ │ ├── audio_update_extension.ts
│ │ └── audio_init_extension.ts
│ ├── pause_whole_render_extension.ts
│ ├── user_interface
│ │ ├── reload_button_extension.ts
│ │ ├── record_button_extension.ts
│ │ ├── screenshot_button_extension.ts
│ │ ├── pause_button_extension.ts
│ │ ├── record_video_codec_extension.ts
│ │ ├── record_max_duration_extension.ts
│ │ ├── record_target_framerate_extension.ts
│ │ ├── record_video_bit_rate_extension.ts
│ │ ├── record_offline_format_extension.ts
│ │ ├── record_offline_quality_extension.ts
│ │ ├── record_video_container_extension.ts
│ │ ├── screenshot_button_style_extension.ts
│ │ ├── error_display
│ │ │ ├── glslify_errors_extension.ts
│ │ │ ├── default_errors_extension.ts
│ │ │ └── diagnostics_errors_extension.ts
│ │ ├── reload_button_style_extension.ts
│ │ ├── record_button_style_extension.ts
│ │ └── pause_button_style_extension.ts
│ ├── initial_time_extension.ts
│ ├── initial_paused_extension.ts
│ ├── forced_aspect_extension.ts
│ ├── advance_time_extension.ts
│ ├── buffers
│ │ ├── includes_test_compile_extension.ts
│ │ ├── includes_init_extension.ts
│ │ ├── includes_extension.ts
│ │ ├── shaders_extension.ts
│ │ └── buffers_init_extension.ts
│ ├── initial_fly_control_position_extension.ts
│ ├── initial_fly_control_rotation_extension.ts
│ ├── forced_screenshot_resolution_extension.ts
│ ├── initial_normalized_mouse_extension.ts
│ ├── initial_mouse_extension.ts
│ ├── advance_time_if_not_paused_extension.ts
│ ├── packages
│ │ ├── three_extension.ts
│ │ ├── jquery_extension.ts
│ │ ├── dat_gui_extension.ts
│ │ ├── ccapture_extension.ts
│ │ ├── stats_extension.ts
│ │ └── three_flycontrols.ts
│ ├── keyboard
│ │ ├── keyboard_update_extension.ts
│ │ ├── keyboard_init_extension.ts
│ │ ├── keyboard_callbacks_extension.ts
│ │ └── keyboard_shader_extension.ts
│ ├── uniforms
│ │ ├── uniforms_preamble_extension.ts
│ │ ├── uniforms_update_extension.ts
│ │ └── uniforms_init_extension.ts
│ └── preamble_extension.ts
├── utility.ts
├── webviewcontent.ts
├── typenames.ts
├── webviewcontentassembler.ts
├── shaderstream.ts
├── extension.ts
├── context.ts
├── shaderlexer.ts
└── shadertoymanager.ts
├── .vscodeignore
├── test
├── run_tests.ts
└── index.ts
├── tsconfig.json
├── .eslintrc.json
├── webpack.config.js
├── .github
└── workflows
│ ├── Publish.yml
│ └── BuildAndTest.yml
├── LICENSE.md
├── CONTRIBUTING.md
├── CODE_OF_CONDUCT.md
└── package.json
/demos/.vscode/settings.json:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/demos/common/math-common.glsl:
--------------------------------------------------------------------------------
1 | const float PI = 3.14159;
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | out
2 | node_modules
3 | *.browse.VC.db*
4 | .vscode-test
5 | dist
6 | *.vsix
7 |
--------------------------------------------------------------------------------
/demos/horizon.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/stevensona/shader-toy/HEAD/demos/horizon.jpg
--------------------------------------------------------------------------------
/images/example.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/stevensona/shader-toy/HEAD/images/example.png
--------------------------------------------------------------------------------
/resources/play.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/stevensona/shader-toy/HEAD/resources/play.png
--------------------------------------------------------------------------------
/demos/outfoxing.mp3:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/stevensona/shader-toy/HEAD/demos/outfoxing.mp3
--------------------------------------------------------------------------------
/images/example2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/stevensona/shader-toy/HEAD/images/example2.png
--------------------------------------------------------------------------------
/images/example3.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/stevensona/shader-toy/HEAD/images/example3.png
--------------------------------------------------------------------------------
/resources/pause.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/stevensona/shader-toy/HEAD/resources/pause.png
--------------------------------------------------------------------------------
/resources/record.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/stevensona/shader-toy/HEAD/resources/record.png
--------------------------------------------------------------------------------
/resources/reload.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/stevensona/shader-toy/HEAD/resources/reload.png
--------------------------------------------------------------------------------
/resources/screen.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/stevensona/shader-toy/HEAD/resources/screen.png
--------------------------------------------------------------------------------
/resources/thumb.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/stevensona/shader-toy/HEAD/resources/thumb.png
--------------------------------------------------------------------------------
/.vscode/.browse.VC.db:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/stevensona/shader-toy/HEAD/.vscode/.browse.VC.db
--------------------------------------------------------------------------------
/resources/stop_rec.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/stevensona/shader-toy/HEAD/resources/stop_rec.png
--------------------------------------------------------------------------------
/.vscode/.browse.VC.db-wal:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/stevensona/shader-toy/HEAD/.vscode/.browse.VC.db-wal
--------------------------------------------------------------------------------
/demos/cubemap/yokohama_d.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/stevensona/shader-toy/HEAD/demos/cubemap/yokohama_d.jpg
--------------------------------------------------------------------------------
/demos/cubemap/yokohama_e.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/stevensona/shader-toy/HEAD/demos/cubemap/yokohama_e.jpg
--------------------------------------------------------------------------------
/demos/cubemap/yokohama_n.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/stevensona/shader-toy/HEAD/demos/cubemap/yokohama_n.jpg
--------------------------------------------------------------------------------
/demos/cubemap/yokohama_s.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/stevensona/shader-toy/HEAD/demos/cubemap/yokohama_s.jpg
--------------------------------------------------------------------------------
/demos/cubemap/yokohama_u.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/stevensona/shader-toy/HEAD/demos/cubemap/yokohama_u.jpg
--------------------------------------------------------------------------------
/demos/cubemap/yokohama_w.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/stevensona/shader-toy/HEAD/demos/cubemap/yokohama_w.jpg
--------------------------------------------------------------------------------
/src/extensions/webview_extension.ts:
--------------------------------------------------------------------------------
1 | 'use strict';
2 |
3 | export interface WebviewExtension {
4 | generateContent(): string;
5 | }
6 |
--------------------------------------------------------------------------------
/src/extensions/textures/texture_extension_extension.ts:
--------------------------------------------------------------------------------
1 | 'use strict';
2 |
3 | export interface TextureExtensionExtension {
4 | generateTextureContent(): string;
5 | }
6 |
--------------------------------------------------------------------------------
/.vscodeignore:
--------------------------------------------------------------------------------
1 | .vscode
2 | typings
3 | out
4 | test
5 | src
6 | node_modules
7 | images
8 | **/*.map
9 | .gitignore
10 | tsconfig.json
11 | tslint.json
12 | webpack.config.js
13 |
--------------------------------------------------------------------------------
/.vscode/extensions.json:
--------------------------------------------------------------------------------
1 | {
2 | // See http://go.microsoft.com/fwlink/?LinkId=827846
3 | // for the documentation about the extensions.json format
4 | "recommendations": [
5 | "ms-vscode.vscode-typescript-tslint-plugin"
6 | ]
7 | }
--------------------------------------------------------------------------------
/demos/common/blobby.glsl:
--------------------------------------------------------------------------------
1 | #include "math-common.glsl"
2 |
3 | #ifndef saturate
4 | #define saturate(x) (clamp(x, 0., 1.))
5 | #endif
6 |
7 | vec2 rotate(vec2 p, float t)
8 | {
9 | return mat2(cos(t), -sin(t), sin(t), cos(t)) * p;
10 | }
--------------------------------------------------------------------------------
/demos/cubemap/readme.txt:
--------------------------------------------------------------------------------
1 | Author
2 | ======
3 |
4 | This is the work of Emil Persson, aka Humus.
5 | http://www.humus.name
6 |
7 |
8 |
9 | License
10 | =======
11 |
12 | This work is licensed under a Creative Commons Attribution 3.0 Unported License.
13 | http://creativecommons.org/licenses/by/3.0/
14 |
--------------------------------------------------------------------------------
/src/extensions/audio/audio_pause_extension.ts:
--------------------------------------------------------------------------------
1 | 'use strict';
2 |
3 | import { WebviewExtension } from '../webview_extension';
4 |
5 | export class AudioPauseExtension implements WebviewExtension {
6 | public generateContent(): string {
7 | return 'audioContext.suspend();';
8 | }
9 | }
10 |
--------------------------------------------------------------------------------
/src/extensions/audio/audio_resume_extension.ts:
--------------------------------------------------------------------------------
1 | 'use strict';
2 |
3 | import { WebviewExtension } from '../webview_extension';
4 |
5 | export class AudioResumeExtension implements WebviewExtension {
6 | public generateContent(): string {
7 | return 'audioContext.resume();';
8 | }
9 | }
10 |
--------------------------------------------------------------------------------
/src/extensions/pause_whole_render_extension.ts:
--------------------------------------------------------------------------------
1 | 'use strict';
2 |
3 | import { WebviewExtension } from './webview_extension';
4 |
5 | export class PauseWholeRenderExtension implements WebviewExtension {
6 | public generateContent(): string {
7 | return 'if (paused) return;';
8 | }
9 | }
10 |
--------------------------------------------------------------------------------
/src/extensions/user_interface/reload_button_extension.ts:
--------------------------------------------------------------------------------
1 | 'use strict';
2 |
3 | import { WebviewExtension } from '../webview_extension';
4 |
5 | export class ReloadButtonExtension implements WebviewExtension {
6 | public generateContent(): string {
7 | return '';
8 | }
9 | }
10 |
--------------------------------------------------------------------------------
/src/extensions/audio/no_audio_extension.ts:
--------------------------------------------------------------------------------
1 | 'use strict';
2 |
3 | import { WebviewExtension } from '../webview_extension';
4 |
5 | export class NoAudioExtension implements WebviewExtension {
6 | public generateContent(): string {
7 | return `\
8 | const audioContext = {
9 | sampleRate: 0
10 | };`;
11 | }
12 | }
13 |
--------------------------------------------------------------------------------
/src/extensions/user_interface/record_button_extension.ts:
--------------------------------------------------------------------------------
1 | 'use strict';
2 |
3 | import { WebviewExtension } from '../webview_extension';
4 |
5 | export class RecordButtonExtension implements WebviewExtension {
6 | public generateContent(): string {
7 | return '';
8 | }
9 | }
10 |
--------------------------------------------------------------------------------
/src/extensions/user_interface/screenshot_button_extension.ts:
--------------------------------------------------------------------------------
1 | 'use strict';
2 |
3 | import { WebviewExtension } from '../webview_extension';
4 |
5 | export class ScreenshotButtonExtension implements WebviewExtension {
6 | public generateContent(): string {
7 | return '';
8 | }
9 | }
10 |
--------------------------------------------------------------------------------
/src/utility.ts:
--------------------------------------------------------------------------------
1 | 'use strict';
2 |
3 | export function removeDuplicates(array: T[]): T[] {
4 | const map = new Map();
5 | const newArray: T[] = [];
6 | for (const value of array) {
7 | if (map.get(value) === undefined) {
8 | newArray.push(value);
9 | map.set(value);
10 | }
11 | }
12 | return newArray;
13 | }
14 |
--------------------------------------------------------------------------------
/src/extensions/user_interface/pause_button_extension.ts:
--------------------------------------------------------------------------------
1 | 'use strict';
2 |
3 | import { WebviewExtension } from '../webview_extension';
4 |
5 | export class PauseButtonExtension implements WebviewExtension {
6 | public generateContent(): string {
7 | return `\
8 |