mirror of
https://github.com/billsonnn/nitro-renderer.git
synced 2024-11-30 03:00:51 +01:00
Update hit detection
This commit is contained in:
parent
d992214c10
commit
0a15fcd926
@ -1,6 +1,8 @@
|
|||||||
import { AlphaTolerance } from '@nitrots/api';
|
import { AlphaTolerance } from '@nitrots/api';
|
||||||
import { GetRenderer } from '@nitrots/utils';
|
import { GetRenderer } from '@nitrots/utils';
|
||||||
import { Point, Sprite, Texture, TextureSource } from 'pixi.js';
|
import { GlRenderTarget, Point, Sprite, Texture, TextureSource, WebGLRenderer } from 'pixi.js';
|
||||||
|
|
||||||
|
const BYTES_PER_PIXEL = 4;
|
||||||
|
|
||||||
export class ExtendedSprite extends Sprite
|
export class ExtendedSprite extends Sprite
|
||||||
{
|
{
|
||||||
@ -77,14 +79,31 @@ export class ExtendedSprite extends Sprite
|
|||||||
{
|
{
|
||||||
if(!textureSource) return false;
|
if(!textureSource) return false;
|
||||||
|
|
||||||
const texture = new Texture(textureSource);
|
const width = Math.max(Math.round(textureSource.width * textureSource.resolution), 1);
|
||||||
const canvas = GetRenderer().texture.generateCanvas(texture);
|
const height = Math.max(Math.round(textureSource.height * textureSource.resolution), 1);
|
||||||
const ctx = canvas.getContext('2d');
|
const pixels = new Uint8Array(BYTES_PER_PIXEL * width * height);
|
||||||
const imageData = ctx.getImageData(0, 0, canvas.width, canvas.height);
|
|
||||||
|
const renderer = GetRenderer() as WebGLRenderer;
|
||||||
|
|
||||||
|
const renderTarget = renderer.renderTarget.getRenderTarget(textureSource);
|
||||||
|
const glRenterTarget = renderer.renderTarget.getGpuRenderTarget(renderTarget) as GlRenderTarget;
|
||||||
|
|
||||||
|
const gl = renderer.gl;
|
||||||
|
|
||||||
|
gl.bindFramebuffer(gl.FRAMEBUFFER, glRenterTarget.resolveTargetFramebuffer);
|
||||||
|
|
||||||
|
gl.readPixels(
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
width,
|
||||||
|
height,
|
||||||
|
gl.RGBA,
|
||||||
|
gl.UNSIGNED_BYTE,
|
||||||
|
pixels
|
||||||
|
);
|
||||||
|
|
||||||
//@ts-ignore
|
//@ts-ignore
|
||||||
textureSource.hitMap = imageData.data;
|
textureSource.hitMap = pixels;
|
||||||
texture.destroy();
|
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user