From dddde49f73e44b6dff0e82acef4f9bdba96bde17 Mon Sep 17 00:00:00 2001 From: "Jasper St. Pierre" Date: Fri, 22 Nov 2024 19:18:18 -0800 Subject: [PATCH] Source Engine: Fixes for func_monitor in background01 --- src/Color.ts | 2 +- src/SourceEngine/EntitySystem.ts | 2 +- src/SourceEngine/Materials/MaterialBase.ts | 19 ++++++++++++++++++- src/SourceEngine/Materials/Material_Sky.ts | 5 ++--- .../Materials/Material_SpriteCard.ts | 2 +- .../Materials/Material_UnlitTwoTexture.ts | 2 +- src/SourceEngine/ParticleSystem.ts | 5 +---- 7 files changed, 25 insertions(+), 12 deletions(-) diff --git a/src/Color.ts b/src/Color.ts index b23aca47c..e4dc81cce 100644 --- a/src/Color.ts +++ b/src/Color.ts @@ -95,7 +95,7 @@ export function colorScale(dst: Color, a: Color, v: number) { dst.r = a.r * v; dst.g = a.g * v; dst.b = a.b * v; - dst.a = a.a * v; + dst.a = a.a; } export function colorMult(dst: Color, a: Color, b: Color): void { diff --git a/src/SourceEngine/EntitySystem.ts b/src/SourceEngine/EntitySystem.ts index 0b0f7ed74..d9eb77851 100644 --- a/src/SourceEngine/EntitySystem.ts +++ b/src/SourceEngine/EntitySystem.ts @@ -3938,7 +3938,7 @@ export class point_camera extends BaseEntity { super(entitySystem, renderContext, bspRenderer, entity); this.fovY = Number(this.entity.fov); - this.useScreenAspectRatio = fallbackUndefined(this.entity.usescreenaspectratio, '1') !== '0'; + this.useScreenAspectRatio = fallbackUndefined(this.entity.usescreenaspectratio, '0') !== '0'; this.viewRenderer.pvsFallback = false; this.viewRenderer.renderObjectMask &= ~(RenderObjectKind.DetailProps); diff --git a/src/SourceEngine/Materials/MaterialBase.ts b/src/SourceEngine/Materials/MaterialBase.ts index 9cf58b24e..9c0dca8cd 100644 --- a/src/SourceEngine/Materials/MaterialBase.ts +++ b/src/SourceEngine/Materials/MaterialBase.ts @@ -1,6 +1,6 @@ import { ReadonlyMat4, vec3, vec2, mat4 } from "gl-matrix"; -import { Color, TransparentBlack, White, colorCopy, colorNewCopy, colorNewFromRGBA } from "../../Color.js"; +import { Color, TransparentBlack, White, colorCopy, colorNewCopy, colorNewFromRGBA, colorScale } from "../../Color.js"; import { dfShow, dfRange } from "../../DebugFloaters.js"; import { AABB } from "../../Geometry.js"; import { scaleMatrix } from "../../MathHelpers.js"; @@ -543,6 +543,14 @@ export abstract class BaseMaterial { return fillGammaColor(d, offs, MaterialUtil.scratchColor); } + protected paramFillModulationColor(d: Float32Array, offs: number, gamma = true, scale = 1.0): number { + this.calcModulationColor(MaterialUtil.scratchColor, scale); + if (gamma) + return fillGammaColor(d, offs, MaterialUtil.scratchColor); + else + return fillColor(d, offs, MaterialUtil.scratchColor); + } + protected paramFillColor(d: Float32Array, offs: number, name: string, alpha: number = 1.0): number { this.paramGetVector(name).fillColor(MaterialUtil.scratchColor, alpha); return fillColor(d, offs, MaterialUtil.scratchColor); @@ -683,6 +691,7 @@ export abstract class BaseMaterial { p['$frame'] = new P.ParameterNumber(0); p['$color'] = new P.ParameterColor(1, 1, 1); p['$color2'] = new P.ParameterColor(1, 1, 1); + p['$srgbtint'] = new P.ParameterColor(1, 1, 1); p['$alpha'] = new P.ParameterNumber(1); // Data passed from entity system. @@ -756,6 +765,14 @@ export abstract class BaseMaterial { vec2.set(this.texCoord0Scale, 1 / w, 1 / h); } + protected calcModulationColor(dst: Color, scale: number): void { + this.paramGetVector('$color').fillColor(dst, 1.0); + this.paramGetVector('$color2').mulColor(dst); + this.paramGetVector('$srgbtint').mulColor(dst); + dst.a = this.paramGetNumber('$alpha'); + colorScale(dst, dst, scale) + } + protected initStatic(materialCache: MaterialCache) { if (this.representativeTexture === null) this.representativeTexture = this.calcRepresentativeTexture(); diff --git a/src/SourceEngine/Materials/Material_Sky.ts b/src/SourceEngine/Materials/Material_Sky.ts index 9a2a854d7..b94eb93c6 100644 --- a/src/SourceEngine/Materials/Material_Sky.ts +++ b/src/SourceEngine/Materials/Material_Sky.ts @@ -11,6 +11,7 @@ import { MaterialShaderTemplateBase, BaseMaterial, AlphaBlendMode, MaterialUtil import { UberShaderInstanceBasic } from "../UberShader.js"; import * as P from "./MaterialParameters.js"; import { MaterialCache } from "./MaterialCache.js"; +import { colorScale } from "../../Color.js"; //#region Sky export class ShaderTemplate_Sky extends MaterialShaderTemplateBase { @@ -193,9 +194,7 @@ export class Material_Sky extends BaseMaterial { offs += fillVec4v(d, offs, this.textureSizeInfo!); this.paramGetVector('$color').fillColor(MaterialUtil.scratchColor, 1.0); - MaterialUtil.scratchColor.r *= 8.0; - MaterialUtil.scratchColor.g *= 8.0; - MaterialUtil.scratchColor.b *= 8.0; + colorScale(MaterialUtil.scratchColor, MaterialUtil.scratchColor, 8.0); offs += fillColor(d, offs, MaterialUtil.scratchColor); } else if (this.type === Material_Sky_Type.Sky) { diff --git a/src/SourceEngine/Materials/Material_SpriteCard.ts b/src/SourceEngine/Materials/Material_SpriteCard.ts index 9fae9c032..2a937a325 100644 --- a/src/SourceEngine/Materials/Material_SpriteCard.ts +++ b/src/SourceEngine/Materials/Material_SpriteCard.ts @@ -238,7 +238,7 @@ export class Material_SpriteCard extends BaseMaterial { offs += this.paramFillVector4(d, offs, '_b10'); offs += this.paramFillVector4(d, offs, '_b11'); offs += this.paramFillVector4(d, offs, '_b2'); - offs += this.paramFillGammaColor(d, offs, '$color', this.paramGetNumber('$alpha')); + offs += this.paramFillModulationColor(d, offs); offs += fillVec4(d, offs, this.paramGetNumber('_blend0'), this.paramGetNumber('_blend1'), this.paramGetNumber(`$addbasetexture2`)); renderInst.setSamplerBindingsFromTextureMappings(MaterialUtil.textureMappings); diff --git a/src/SourceEngine/Materials/Material_UnlitTwoTexture.ts b/src/SourceEngine/Materials/Material_UnlitTwoTexture.ts index eb321fa5e..7837f5ced 100644 --- a/src/SourceEngine/Materials/Material_UnlitTwoTexture.ts +++ b/src/SourceEngine/Materials/Material_UnlitTwoTexture.ts @@ -110,7 +110,7 @@ export class Material_UnlitTwoTexture extends BaseMaterial { const d = renderInst.mapUniformBufferF32(ShaderTemplate_UnlitTwoTexture.ub_ObjectParams); offs += this.paramFillTextureMatrix(d, offs, '$basetexturetransform', this.paramGetFlipY(renderContext, '$basetexture')); offs += this.paramFillTextureMatrix(d, offs, '$texture2transform'); - offs += this.paramFillColor(d, offs, '$color', this.paramGetNumber('$alpha')); + offs += this.paramFillModulationColor(d, offs); renderInst.setSamplerBindingsFromTextureMappings(MaterialUtil.textureMappings); renderInst.setGfxProgram(this.gfxProgram); diff --git a/src/SourceEngine/ParticleSystem.ts b/src/SourceEngine/ParticleSystem.ts index d092b2bb3..c9e98abd5 100644 --- a/src/SourceEngine/ParticleSystem.ts +++ b/src/SourceEngine/ParticleSystem.ts @@ -1363,10 +1363,7 @@ class Renderer_AnimatedSprites extends ModuleBase { p[2].value = data[colorOffs + 2]; colorOffs += stride; } else { - const p = (materialInstance.param['$color'] as any).internal; - p[0].value = system.constColor.r; - p[1].value = system.constColor.g; - p[2].value = system.constColor.b; + materialInstance.paramSetColor('$color', system.constColor); } if (alphaOffs !== null) {