mirror of
https://github.com/scratchfoundation/scratch-render.git
synced 2025-07-28 23:21:22 -04:00
Move Drawable.NONE
into new RenderConstants
This constant will soon be shared with another class.
This commit is contained in:
parent
71ad4a8a80
commit
4730a057ff
3 changed files with 28 additions and 23 deletions
|
@ -2,6 +2,7 @@ const twgl = require('twgl.js');
|
|||
const xhr = require('xhr');
|
||||
|
||||
const Rectangle = require('./Rectangle');
|
||||
const RenderConstants = require('./RenderConstants');
|
||||
const SvgRenderer = require('./svg-quirks-mode/svg-renderer');
|
||||
const ShaderManager = require('./ShaderManager');
|
||||
|
||||
|
@ -86,14 +87,6 @@ class Drawable {
|
|||
this.setSkin(Drawable._DEFAULT_SKIN);
|
||||
}
|
||||
|
||||
/**
|
||||
* An invalid Drawable ID which can be used to signify absence, etc.
|
||||
* @type {int}
|
||||
*/
|
||||
static get NONE () {
|
||||
return -1;
|
||||
}
|
||||
|
||||
/**
|
||||
* Fetch a Drawable by its ID number.
|
||||
* @param {int} drawableID The ID of the Drawable to fetch.
|
||||
|
@ -496,12 +489,12 @@ class Drawable {
|
|||
|
||||
/**
|
||||
* Calculate a color to represent the given ID number. At least one component of
|
||||
* the resulting color will be non-zero if the ID is not Drawable.NONE.
|
||||
* the resulting color will be non-zero if the ID is not RenderConstants.ID_NONE.
|
||||
* @param {int} id The ID to convert.
|
||||
* @returns {number[]} An array of [r,g,b,a], each component in the range [0,1].
|
||||
*/
|
||||
static color4fFromID (id) {
|
||||
id -= Drawable.NONE;
|
||||
id -= RenderConstants.ID_NONE;
|
||||
const r = ((id >> 0) & 255) / 255.0;
|
||||
const g = ((id >> 8) & 255) / 255.0;
|
||||
const b = ((id >> 16) & 255) / 255.0;
|
||||
|
@ -510,7 +503,7 @@ class Drawable {
|
|||
|
||||
/**
|
||||
* Calculate the ID number represented by the given color. If all components of
|
||||
* the color are zero, the result will be Drawable.NONE; otherwise the result
|
||||
* the color are zero, the result will be RenderConstants.ID_NONE; otherwise the result
|
||||
* will be a valid ID.
|
||||
* @param {int} r The red value of the color, in the range [0,255].
|
||||
* @param {int} g The green value of the color, in the range [0,255].
|
||||
|
@ -522,7 +515,7 @@ class Drawable {
|
|||
id = (r & 255) << 0;
|
||||
id |= (g & 255) << 8;
|
||||
id |= (b & 255) << 16;
|
||||
return id + Drawable.NONE;
|
||||
return id + RenderConstants.ID_NONE;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
11
src/RenderConstants.js
Normal file
11
src/RenderConstants.js
Normal file
|
@ -0,0 +1,11 @@
|
|||
/**
|
||||
* Various constants meant for use throughout the renderer.
|
||||
* @type {object}
|
||||
*/
|
||||
module.exports = {
|
||||
/**
|
||||
* The ID value to use for "no item" or when an object has been disposed.
|
||||
* @type {int}
|
||||
*/
|
||||
ID_NONE: -1
|
||||
};
|
|
@ -2,6 +2,7 @@ const hull = require('hull.js');
|
|||
const twgl = require('twgl.js');
|
||||
|
||||
const Drawable = require('./Drawable');
|
||||
const RenderConstants = require('./RenderConstants');
|
||||
const ShaderManager = require('./ShaderManager');
|
||||
|
||||
/**
|
||||
|
@ -341,7 +342,7 @@ class RenderWebGL {
|
|||
gl.viewport(0, 0, bounds.width, bounds.height);
|
||||
const projection = twgl.m4.ortho(bounds.left, bounds.right, bounds.bottom, bounds.top, -1, 1);
|
||||
|
||||
const noneColor = Drawable.color4fFromID(Drawable.NONE);
|
||||
const noneColor = Drawable.color4fFromID(RenderConstants.ID_NONE);
|
||||
gl.clearColor.apply(gl, noneColor);
|
||||
gl.clear(gl.COLOR_BUFFER_BIT | gl.STENCIL_BUFFER_BIT);
|
||||
|
||||
|
@ -383,7 +384,7 @@ class RenderWebGL {
|
|||
pixels[pixelBase],
|
||||
pixels[pixelBase + 1],
|
||||
pixels[pixelBase + 2]);
|
||||
if (pixelID > Drawable.NONE) {
|
||||
if (pixelID > RenderConstants.ID_NONE) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
@ -399,7 +400,7 @@ class RenderWebGL {
|
|||
* @param {int} touchHeight The client height of the touch event (optional).
|
||||
* @param {int[]} candidateIDs The Drawable IDs to pick from, otherwise all.
|
||||
* @returns {int} The ID of the topmost Drawable under the picking location, or
|
||||
* Drawable.NONE if there is no Drawable at that location.
|
||||
* RenderConstants.ID_NONE if there is no Drawable at that location.
|
||||
*/
|
||||
pick (centerX, centerY, touchWidth, touchHeight, candidateIDs) {
|
||||
const gl = this._gl;
|
||||
|
@ -427,7 +428,7 @@ class RenderWebGL {
|
|||
twgl.bindFramebufferInfo(gl, this._pickBufferInfo);
|
||||
gl.viewport(0, 0, touchWidth, touchHeight);
|
||||
|
||||
const noneColor = Drawable.color4fFromID(Drawable.NONE);
|
||||
const noneColor = Drawable.color4fFromID(RenderConstants.ID_NONE);
|
||||
gl.clearColor.apply(gl, noneColor);
|
||||
gl.clear(gl.COLOR_BUFFER_BIT);
|
||||
|
||||
|
@ -467,9 +468,9 @@ class RenderWebGL {
|
|||
}
|
||||
|
||||
// Bias toward selecting anything over nothing
|
||||
hits[Drawable.NONE] = 0;
|
||||
hits[RenderConstants.ID_NONE] = 0;
|
||||
|
||||
let hit = Drawable.NONE;
|
||||
let hit = RenderConstants.ID_NONE;
|
||||
for (const hitID in hits) {
|
||||
if (hits.hasOwnProperty(hitID) && (hits[hitID] > hits[hit])) {
|
||||
hit = hitID;
|
||||
|
@ -663,8 +664,8 @@ class RenderWebGL {
|
|||
twgl.bindFramebufferInfo(gl, this._queryBufferInfo);
|
||||
gl.viewport(0, 0, width, height);
|
||||
|
||||
// Clear the canvas with Drawable.NONE.
|
||||
const noneColor = Drawable.color4fFromID(Drawable.NONE);
|
||||
// Clear the canvas with RenderConstants.ID_NONE.
|
||||
const noneColor = Drawable.color4fFromID(RenderConstants.ID_NONE);
|
||||
gl.clearColor.apply(gl, noneColor);
|
||||
gl.clear(gl.COLOR_BUFFER_BIT);
|
||||
|
||||
|
@ -692,7 +693,7 @@ class RenderWebGL {
|
|||
* Helper method to look up a pixel.
|
||||
* @param {int} x X coordinate of the pixel in `pixels`.
|
||||
* @param {int} y Y coordinate of the pixel in `pixels`.
|
||||
* @return {int} Known ID at that pixel, or Drawable.NONE.
|
||||
* @return {int} Known ID at that pixel, or RenderConstants.ID_NONE.
|
||||
*/
|
||||
const _getPixel = (x, y) => {
|
||||
const pixelBase = ((width * y) + x) * 4;
|
||||
|
@ -704,14 +705,14 @@ class RenderWebGL {
|
|||
for (let y = 0; y <= height; y++) {
|
||||
// Scan from left.
|
||||
for (let x = 0; x < width; x++) {
|
||||
if (_getPixel(x, y) > Drawable.NONE) {
|
||||
if (_getPixel(x, y) > RenderConstants.ID_NONE) {
|
||||
boundaryPoints.push([x, y]);
|
||||
break;
|
||||
}
|
||||
}
|
||||
// Scan from right.
|
||||
for (let x = width - 1; x >= 0; x--) {
|
||||
if (_getPixel(x, y) > Drawable.NONE) {
|
||||
if (_getPixel(x, y) > RenderConstants.ID_NONE) {
|
||||
boundaryPoints.push([x, y]);
|
||||
break;
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue