Refactor rendering

This commit is contained in:
schmelczerandras 2020-08-18 15:49:15 +02:00
commit 76282a4cf7
5 changed files with 239 additions and 213 deletions

View file

@ -2,6 +2,7 @@ import { IDrawable } from './i-drawable';
import { IDrawableDescriptor } from './i-drawable-descriptor';
import { settings } from '../settings';
import { Blob } from '../../shapes/types/blob';
import { vec2, mat2d } from 'gl-matrix';
export class DrawableBlob extends Blob implements IDrawable {
public static descriptor: IDrawableDescriptor = {
@ -10,17 +11,37 @@ export class DrawableBlob extends Blob implements IDrawable {
shaderCombinationSteps: settings.shaderCombinations.blobSteps,
};
public serializeToUniforms(uniforms: any): void {
public serializeToUniforms(
uniforms: any,
scale: number,
transform: mat2d
): void {
const uniformName = DrawableBlob.descriptor.uniformName;
if (!uniforms.hasOwnProperty(uniformName)) {
uniforms[uniformName] = [];
}
uniforms[uniformName].push({
headCenter: this.head.center,
torsoCenter: this.torso.center,
leftFootCenter: this.leftFoot.center,
rightFootCenter: this.rightFoot.center,
headCenter: vec2.transformMat2d(
vec2.create(),
this.head.center,
transform
),
torsoCenter: vec2.transformMat2d(
vec2.create(),
this.torso.center,
transform
),
leftFootCenter: vec2.transformMat2d(
vec2.create(),
this.leftFoot.center,
transform
),
rightFootCenter: vec2.transformMat2d(
vec2.create(),
this.rightFoot.center,
transform
),
});
}
}

View file

@ -2,6 +2,7 @@ import { IDrawable } from './i-drawable';
import { TunnelShape } from '../../shapes/types/tunnel-shape';
import { IDrawableDescriptor } from './i-drawable-descriptor';
import { settings } from '../settings';
import { mat2d, vec2 } from 'gl-matrix';
export class DrawableTunnel extends TunnelShape implements IDrawable {
public static descriptor: IDrawableDescriptor = {
@ -10,17 +11,25 @@ export class DrawableTunnel extends TunnelShape implements IDrawable {
shaderCombinationSteps: settings.shaderCombinations.lineSteps,
};
public serializeToUniforms(uniforms: any): void {
public serializeToUniforms(
uniforms: any,
scale: number,
transform: mat2d
): void {
const uniformName = DrawableTunnel.descriptor.uniformName;
if (!uniforms.hasOwnProperty(uniformName)) {
uniforms[uniformName] = [];
}
uniforms[uniformName].push({
from: this.from,
toFromDelta: this.toFromDelta,
fromRadius: this.fromRadius,
toRadius: this.toRadius,
from: vec2.transformMat2d(vec2.create(), this.from, transform),
toFromDelta: vec2.transformMat2d(
vec2.create(),
this.toFromDelta,
transform
),
fromRadius: this.fromRadius * scale,
toRadius: this.toRadius * scale,
});
}
}

View file

@ -1,6 +1,6 @@
import { vec2 } from 'gl-matrix';
import { vec2, mat2d } from 'gl-matrix';
export interface IDrawable {
distance(target: vec2): number;
serializeToUniforms(uniforms: any): void;
serializeToUniforms(uniforms: any, scale: number, transform: mat2d): void;
}

View file

@ -1,4 +1,4 @@
import { vec2, vec3 } from 'gl-matrix';
import { vec2, vec3, mat2d } from 'gl-matrix';
import { GameObject } from '../../../objects/game-object';
import { settings } from '../../settings';
import { IDrawableDescriptor } from '../i-drawable-descriptor';
@ -12,7 +12,6 @@ export class CircleLight implements ILight {
};
constructor(
public readonly owner: GameObject,
public center: vec2,
public radius: number,
public color: vec3,
@ -23,7 +22,11 @@ export class CircleLight implements ILight {
return 0;
}
public serializeToUniforms(uniforms: any): void {
public serializeToUniforms(
uniforms: any,
scale: number,
transform: mat2d
): void {
const uniformName = CircleLight.descriptor.uniformName;
if (!uniforms.hasOwnProperty(uniformName)) {
@ -31,8 +34,8 @@ export class CircleLight implements ILight {
}
uniforms[uniformName].push({
center: this.center,
radius: this.radius,
center: vec2.transformMat2d(vec2.create(), this.center, transform),
radius: this.radius * scale,
value: this.value,
});
}

View file

@ -1,5 +1,5 @@
import { ILight } from './i-light';
import { vec2, vec3 } from 'gl-matrix';
import { vec2, vec3, mat2d } from 'gl-matrix';
import { IDrawableDescriptor } from '../i-drawable-descriptor';
import { settings } from '../../settings';
import { GameObject } from '../../../objects/game-object';
@ -12,7 +12,6 @@ export class PointLight implements ILight {
};
public constructor(
public readonly owner: GameObject,
public center: vec2,
public radius: number,
public color: vec3,
@ -23,7 +22,11 @@ export class PointLight implements ILight {
return vec2.distance(this.center, target) - this.radius;
}
public serializeToUniforms(uniforms: any): void {
public serializeToUniforms(
uniforms: any,
scale: number,
transform: mat2d
): void {
const listName = PointLight.descriptor.uniformName;
if (!uniforms.hasOwnProperty(listName)) {
@ -31,8 +34,8 @@ export class PointLight implements ILight {
}
uniforms[listName].push({
center: this.center,
radius: this.radius,
center: vec2.transformMat2d(vec2.create(), this.center, transform),
radius: this.radius * scale,
value: this.value,
});
}