mirror of
https://github.com/dyuri/repa-shader.git
synced 2025-12-19 04:34:01 +00:00
ts/jsdoc experiment
This commit is contained in:
parent
e31e7e39c3
commit
73e88916e9
@ -1,3 +1,10 @@
|
|||||||
|
// @ts-check
|
||||||
|
|
||||||
|
/**
|
||||||
|
* createLogger - creates a logger function
|
||||||
|
*
|
||||||
|
* @param {string[]} pfx - logger prefix
|
||||||
|
*/
|
||||||
const createLogger = pfx => {
|
const createLogger = pfx => {
|
||||||
return {
|
return {
|
||||||
info: (...args) => console.info(...pfx, ...args),
|
info: (...args) => console.info(...pfx, ...args),
|
||||||
@ -56,6 +63,9 @@ class RepaShader extends HTMLElement {
|
|||||||
this.attachShadow({ mode: 'open' });
|
this.attachShadow({ mode: 'open' });
|
||||||
this.logger = createLogger(["%c[repa-shader]", "background: #282828; color: #b8bb26"]);
|
this.logger = createLogger(["%c[repa-shader]", "background: #282828; color: #b8bb26"]);
|
||||||
this._snippets = {};
|
this._snippets = {};
|
||||||
|
this._postProgram = null;
|
||||||
|
/** @type {WebGL2RenderingContext} */
|
||||||
|
this._gl = null;
|
||||||
}
|
}
|
||||||
|
|
||||||
connectedCallback() {
|
connectedCallback() {
|
||||||
@ -67,7 +77,7 @@ class RepaShader extends HTMLElement {
|
|||||||
|
|
||||||
if (!this._gl) {
|
if (!this._gl) {
|
||||||
const glopts = {alpha: this.hasAttribute('alpha'), preserveDrawingBuffer: true};
|
const glopts = {alpha: this.hasAttribute('alpha'), preserveDrawingBuffer: true};
|
||||||
this._gl = this._target.getContext('webgl2', glopts);
|
this._gl = this._target.getContext('webgl2', glopts); // @ts-ignore
|
||||||
if (!this._gl) {
|
if (!this._gl) {
|
||||||
this.logger.error("WebGL2 not supported");
|
this.logger.error("WebGL2 not supported");
|
||||||
return;
|
return;
|
||||||
@ -101,6 +111,12 @@ class RepaShader extends HTMLElement {
|
|||||||
// TODO stop animation
|
// TODO stop animation
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* render - loads the source if not provided and renders the shader
|
||||||
|
*
|
||||||
|
* @param {string} [source] - fragment shader source
|
||||||
|
* @param {Number} [time] - timestamp to render for
|
||||||
|
*/
|
||||||
async render(source, time) {
|
async render(source, time) {
|
||||||
if (!source) {
|
if (!source) {
|
||||||
source = await this.getFragmentShaderSource();
|
source = await this.getFragmentShaderSource();
|
||||||
@ -109,6 +125,9 @@ class RepaShader extends HTMLElement {
|
|||||||
this.reset(time);
|
this.reset(time);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return {string}
|
||||||
|
*/
|
||||||
get snippetPrefix() {
|
get snippetPrefix() {
|
||||||
if (this.hasAttribute('snippet-prefix')) {
|
if (this.hasAttribute('snippet-prefix')) {
|
||||||
return this.getAttribute('snippet-prefix');
|
return this.getAttribute('snippet-prefix');
|
||||||
@ -124,6 +143,11 @@ class RepaShader extends HTMLElement {
|
|||||||
return path + '/snippets';
|
return path + '/snippets';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* loadSnippet - loads a snippet (prepending `snippetPrefix`)
|
||||||
|
*
|
||||||
|
* @param {string} name - snippet script name
|
||||||
|
*/
|
||||||
async loadSnippet(name) {
|
async loadSnippet(name) {
|
||||||
let url = name;
|
let url = name;
|
||||||
if (!url.startsWith('http')) {
|
if (!url.startsWith('http')) {
|
||||||
@ -139,6 +163,12 @@ class RepaShader extends HTMLElement {
|
|||||||
this._snippets[name] = text;
|
this._snippets[name] = text;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* getSnippet - returns a snippet (loading it if necessary)
|
||||||
|
*
|
||||||
|
* @param {string} name
|
||||||
|
* @return {string} - snippet source
|
||||||
|
*/
|
||||||
async getSnippet(name) {
|
async getSnippet(name) {
|
||||||
if (!this._snippets[name]) {
|
if (!this._snippets[name]) {
|
||||||
await this.loadSnippet(name);
|
await this.loadSnippet(name);
|
||||||
@ -147,6 +177,11 @@ class RepaShader extends HTMLElement {
|
|||||||
return this._snippets[name];
|
return this._snippets[name];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* _getSnippets - load all the snippets from the `snippets` attribute
|
||||||
|
*
|
||||||
|
* @return {<Promise>} - resolves when all snippets are loaded
|
||||||
|
*/
|
||||||
async _getSnippets() {
|
async _getSnippets() {
|
||||||
if (!this.hasAttribute('snippets')) {
|
if (!this.hasAttribute('snippets')) {
|
||||||
return '';
|
return '';
|
||||||
@ -158,6 +193,9 @@ class RepaShader extends HTMLElement {
|
|||||||
return await Promise.all(promises).then(snippets => snippets.join('\n'));
|
return await Promise.all(promises).then(snippets => snippets.join('\n'));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* _resizeTarget - resizes the current target (and the GL viewport) canvas based on its current size
|
||||||
|
*/
|
||||||
_resizeTarget() {
|
_resizeTarget() {
|
||||||
const {width, height} = this._target.getBoundingClientRect();
|
const {width, height} = this._target.getBoundingClientRect();
|
||||||
this._target.width = width;
|
this._target.width = width;
|
||||||
@ -165,6 +203,11 @@ class RepaShader extends HTMLElement {
|
|||||||
this._gl.viewport(0, 0, width, height);
|
this._gl.viewport(0, 0, width, height);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* _onOrientationEvent - handles orientation events
|
||||||
|
*
|
||||||
|
* @param {Event} e
|
||||||
|
*/
|
||||||
_onOrientationEvent(e) {
|
_onOrientationEvent(e) {
|
||||||
this._orientation = [e.alpha, e.beta, e.gamma];
|
this._orientation = [e.alpha, e.beta, e.gamma];
|
||||||
}
|
}
|
||||||
|
|||||||
13
tsconfig.json
Normal file
13
tsconfig.json
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
{
|
||||||
|
"include": ["src/**/*"],
|
||||||
|
|
||||||
|
"compilerOptions": {
|
||||||
|
"allowJs": true,
|
||||||
|
"declaration": true,
|
||||||
|
"emitDeclarationOnly": true,
|
||||||
|
"outDir": "dist",
|
||||||
|
"declarationMap": true,
|
||||||
|
"module": "ES2020",
|
||||||
|
"lib": ["ES2020", "DOM"]
|
||||||
|
}
|
||||||
|
}
|
||||||
Loading…
Reference in New Issue
Block a user