Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[BETA] ESM Grid Renderer #7273

Closed
wants to merge 41 commits into from
Closed
Changes from 1 commit
Commits
Show all changes
41 commits
Select commit Hold shift + click to select a range
49e69c8
WIP: Ported grid from supersplat
kpal81xd Oct 30, 2024
9882d09
Converted grid to script and added to gizmo examples
kpal81xd Oct 30, 2024
03d688a
Updated thumbnails
kpal81xd Oct 30, 2024
800a797
Added ability to change color of grid axis lines
kpal81xd Oct 30, 2024
ffcad5d
Added attribute flag
kpal81xd Oct 30, 2024
c0860ca
Updated grid to use attach/detach methods
kpal81xd Oct 31, 2024
0d7afb6
Removed adding grid to camera
kpal81xd Oct 31, 2024
ad1da2e
Added grid to root entity
kpal81xd Oct 31, 2024
57f655b
Added half extents to grid
kpal81xd Oct 31, 2024
3493c6a
Renamed infinite grid to grid
kpal81xd Oct 31, 2024
fe77d48
Added grid color and size to controls
kpal81xd Oct 31, 2024
0fb5f87
Merge branch 'main' into grid
kpal81xd Nov 11, 2024
c23fccd
Moved everything inside camera pre render layer
kpal81xd Nov 11, 2024
9975da6
Renamed grid to mjs
kpal81xd Nov 11, 2024
3442794
WIP: added new layer for grid
kpal81xd Nov 11, 2024
d613c7c
Added resolution option to grid
kpal81xd Nov 12, 2024
f4af3e7
Updated resolution type
kpal81xd Nov 12, 2024
e958145
minor refactor
kpal81xd Nov 12, 2024
c570f6b
Added grid at correct layer index
kpal81xd Nov 13, 2024
1621d09
fixes for webgpu
slimbuck Nov 13, 2024
64ef6a1
Merge remote-tracking branch 'upstream/grid' into grid
slimbuck Nov 13, 2024
d7c601d
Merge branch 'main' into grid
kpal81xd Nov 13, 2024
34c2753
Merge branch 'main' into grid
kpal81xd Nov 21, 2024
d339eca
Fixed linting and import of grid
kpal81xd Nov 21, 2024
242fcfb
Updated grid name and script attachment back to camera
kpal81xd Nov 21, 2024
8f4f93a
Merge branch 'main' into grid
kpal81xd Nov 21, 2024
601f4b8
Merge branch 'main' into grid
kpal81xd Nov 27, 2024
5aa2f60
Updated grid sizing so when set to 0 scale is infinite
kpal81xd Nov 27, 2024
fa0cf62
Merge branch 'main' into grid
kpal81xd Dec 2, 2024
3d64e3b
Moved grid to ESM scripts folder
kpal81xd Dec 2, 2024
fd190a1
Fixed lint issue
kpal81xd Dec 9, 2024
a6ce7cd
Removed grid dependency being on entity with camera
kpal81xd Dec 9, 2024
c6dcde5
Merge branch 'main' into grid
kpal81xd Dec 9, 2024
59c78bf
Removed extra log
kpal81xd Dec 9, 2024
da1198b
Merge branch 'grid' of https://github.com/playcanvas/engine into grid
kpal81xd Dec 9, 2024
7729782
Fixed broken observer data
kpal81xd Dec 9, 2024
54d2ebd
Added a grid transform based on entity transform
kpal81xd Dec 9, 2024
8f49c95
refactor
kpal81xd Dec 9, 2024
5f608db
Set camera layer in update loop
kpal81xd Dec 9, 2024
53ebcf9
Merge branch 'main' into grid
kpal81xd Dec 17, 2024
59c70e4
Merge branch 'main' into grid
kpal81xd Jan 13, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
Removed grid dependency being on entity with camera
kpal81xd committed Dec 9, 2024

Verified

This commit was signed with the committer’s verified signature.
frostming Frost Ming
commit a6ce7cd9d1f84a6b819af3e3f5ff8bf65d440441
9 changes: 6 additions & 3 deletions examples/src/examples/gizmos/transform-rotate.example.mjs
Original file line number Diff line number Diff line change
@@ -2,7 +2,7 @@ import { data } from 'examples/observer';
import { deviceType, fileImport, rootPath } from 'examples/utils';
import * as pc from 'playcanvas';

const { GridRenderer } = await fileImport(`${rootPath}/static/scripts/grid-renderer.mjs`);
const { GridRenderer } = await fileImport(`${rootPath}/static/scripts/esm/grid-renderer.mjs`);

const canvas = /** @type {HTMLCanvasElement} */ (document.getElementById('application-canvas'));
window.focus();
@@ -84,12 +84,15 @@ data.set('camera', {
fov: camera.camera.fov
});

// attach grid renderer
camera.script.create(GridRenderer, {
// create grid
const gridEntity = new pc.Entity('grid');
gridEntity.addComponent('script');
gridEntity.script.create(GridRenderer, {
attributes: {
halfExtents: new pc.Vec2(2, 2)
}
});
app.root.addChild(gridEntity);

// create light entity
const light = new pc.Entity('light');
9 changes: 6 additions & 3 deletions examples/src/examples/gizmos/transform-scale.example.mjs
Original file line number Diff line number Diff line change
@@ -2,7 +2,7 @@ import { data } from 'examples/observer';
import { deviceType, fileImport, rootPath } from 'examples/utils';
import * as pc from 'playcanvas';

const { GridRenderer } = await fileImport(`${rootPath}/static/scripts/grid-renderer.mjs`);
const { GridRenderer } = await fileImport(`${rootPath}/static/scripts/esm/grid-renderer.mjs`);

const canvas = /** @type {HTMLCanvasElement} */ (document.getElementById('application-canvas'));
window.focus();
@@ -84,12 +84,15 @@ data.set('camera', {
fov: camera.camera.fov
});

// attach grid renderer
camera.script.create(GridRenderer, {
// create grid
const gridEntity = new pc.Entity('grid');
gridEntity.addComponent('script');
gridEntity.script.create(GridRenderer, {
attributes: {
halfExtents: new pc.Vec2(2, 2)
}
});
app.root.addChild(gridEntity);

// create light entity
const light = new pc.Entity('light');
9 changes: 6 additions & 3 deletions examples/src/examples/gizmos/transform-translate.example.mjs
Original file line number Diff line number Diff line change
@@ -2,7 +2,7 @@ import { data } from 'examples/observer';
import { deviceType, rootPath, fileImport } from 'examples/utils';
import * as pc from 'playcanvas';

const { GridRenderer } = await fileImport(`${rootPath}/static/scripts/grid-renderer.mjs`);
const { GridRenderer } = await fileImport(`${rootPath}/static/scripts/esm/grid-renderer.mjs`);

const canvas = /** @type {HTMLCanvasElement} */ (document.getElementById('application-canvas'));
window.focus();
@@ -84,12 +84,15 @@ data.set('camera', {
fov: camera.camera.fov
});

// attach grid renderer
camera.script.create(GridRenderer, {
// create grid
const gridEntity = new pc.Entity('grid');
gridEntity.addComponent('script');
gridEntity.script.create(GridRenderer, {
attributes: {
halfExtents: new pc.Vec2(2, 2)
}
});
app.root.addChild(gridEntity);

// create light entity
const light = new pc.Entity('light');
16 changes: 10 additions & 6 deletions examples/src/examples/misc/editor.example.mjs
Original file line number Diff line number Diff line change
@@ -3,7 +3,7 @@ import { data } from 'examples/observer';
import { deviceType, rootPath, localImport, fileImport } from 'examples/utils';
import * as pc from 'playcanvas';

const { GridRenderer } = await fileImport(`${rootPath}/static/scripts/grid-renderer.mjs`);
const { GridRenderer } = await fileImport(`${rootPath}/static/scripts/esm/grid-renderer.mjs`);

const canvas = /** @type {HTMLCanvasElement} */ (document.getElementById('application-canvas'));
window.focus();
@@ -129,11 +129,15 @@ app.root.addChild(camera);
orbitCamera.distance = 5 * camera.camera?.aspectRatio;

// attach grid renderer
const grid = /** @type {GridRenderer} */ (camera.script.create(GridRenderer, {
// create grid
const gridEntity = new pc.Entity('grid');
gridEntity.addComponent('script');
const grid = /** @type {GridRenderer} */ (gridEntity.script.create(GridRenderer, {
attributes: {
halfExtents: new pc.Vec2(4, 4)
}
}));
app.root.addChild(gridEntity);
data.set('grid', {
resolution: grid.resolution + 1,
size: grid.halfExtents.x,
@@ -249,16 +253,16 @@ data.on('*:set', (/** @type {string} */ path, /** @type {any} */ value) => {
case 'grid': {
switch (key) {
case 'resolution':
grid.resolution = value - 1;
gridEntity.resolution = value - 1;
break;
case 'size':
grid.halfExtents = tmpVa.set(value, value);
gridEntity.halfExtents = tmpVa.set(value, value);
break;
case 'colorX':
grid.colorX = tmpC1.set(value[0], value[1], value[2]);
gridEntity.colorX = tmpC1.set(value[0], value[1], value[2]);
break;
case 'colorZ':
grid.colorZ = tmpC1.set(value[0], value[1], value[2]);
gridEntity.colorZ = tmpC1.set(value[0], value[1], value[2]);
break;
}
break;
14 changes: 5 additions & 9 deletions scripts/esm/grid-renderer.mjs
Original file line number Diff line number Diff line change
@@ -309,14 +309,11 @@ class GridRenderer extends Script {

const targetLayer = layer ?? GridRenderer.createLayer(this.app, undefined, 1);

const camera = this.entity.camera;
if (!camera) {
throw new Error('GridRenderer script must be attached to a camera entity.');
}
this.app.scene.on('prerender:layer', (camera, layer, transparent) => {
if (!camera.layers.includes(targetLayer.id)) {
camera.layers = camera.layers.concat(targetLayer.id);
}

// attach to camera
camera.layers = camera.layers.concat(targetLayer.id);
camera.onPreRenderLayer = (layer, transparent) => {
if (layer !== targetLayer || transparent) {
return;
}
@@ -369,7 +366,7 @@ class GridRenderer extends Script {
this._set('depthMode', true);
this._device.setBlendState(BlendState.NOWRITE);
this._quadRender.render();
};
});
}

/**
@@ -456,7 +453,6 @@ class GridRenderer extends Script {
}

destroy() {
this.detach();
this._quadRender.destroy();
}
}