@flighthq/texture 0.3.0-next.1463.b454aa8 → 0.3.0-next.1473.098a860

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -4,4 +4,5 @@ export * from './sampler';
4
4
  export * from './texture';
5
5
  export * from './videoTexture';
6
6
  export * from './voxelGrid';
7
+ export { getTextureSampleColorSpace, shouldDecodeTextureOnSample, shouldPremultiplyTextureOnUpload, } from './textureColorSpace';
7
8
  //# sourceMappingURL=contract.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"contract.d.ts","sourceRoot":"","sources":["../src/contract.ts"],"names":[],"mappings":"AAAA,cAAc,eAAe,CAAC;AAC9B,cAAc,iBAAiB,CAAC;AAChC,cAAc,WAAW,CAAC;AAC1B,cAAc,WAAW,CAAC;AAC1B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,aAAa,CAAC"}
1
+ {"version":3,"file":"contract.d.ts","sourceRoot":"","sources":["../src/contract.ts"],"names":[],"mappings":"AAAA,cAAc,eAAe,CAAC;AAC9B,cAAc,iBAAiB,CAAC;AAChC,cAAc,WAAW,CAAC;AAC1B,cAAc,WAAW,CAAC;AAC1B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,aAAa,CAAC;AAC5B,OAAO,EACL,0BAA0B,EAC1B,2BAA2B,EAC3B,gCAAgC,GACjC,MAAM,qBAAqB,CAAC"}
package/dist/contract.js CHANGED
@@ -4,4 +4,5 @@ export * from './sampler';
4
4
  export * from './texture';
5
5
  export * from './videoTexture';
6
6
  export * from './voxelGrid';
7
+ export { getTextureSampleColorSpace, shouldDecodeTextureOnSample, shouldPremultiplyTextureOnUpload, } from './textureColorSpace';
7
8
  //# sourceMappingURL=contract.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"contract.js","sourceRoot":"","sources":["../src/contract.ts"],"names":[],"mappings":"AAAA,cAAc,eAAe,CAAC;AAC9B,cAAc,iBAAiB,CAAC;AAChC,cAAc,WAAW,CAAC;AAC1B,cAAc,WAAW,CAAC;AAC1B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,aAAa,CAAC"}
1
+ {"version":3,"file":"contract.js","sourceRoot":"","sources":["../src/contract.ts"],"names":[],"mappings":"AAAA,cAAc,eAAe,CAAC;AAC9B,cAAc,iBAAiB,CAAC;AAChC,cAAc,WAAW,CAAC;AAC1B,cAAc,WAAW,CAAC;AAC1B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,aAAa,CAAC;AAC5B,OAAO,EACL,0BAA0B,EAC1B,2BAA2B,EAC3B,gCAAgC,GACjC,MAAM,qBAAqB,CAAC"}
package/dist/index.d.ts CHANGED
@@ -1,2 +1,3 @@
1
1
  export { advanceVideoTexture, cloneCubeTexture, cloneSampler, cloneTexture, cloneVideoTexture, copyCubeTexture, copySampler, copyTexture, copyVideoTexture, createAnisotropicSampler, createClampLinearSampler, createCubeTexture, createPixelArtSampler, createRenderTexture, createSampler, createTexture, createTilingSampler, createVideoTexture, equalsCubeTexture, equalsSampler, equalsTexture, getCubeTextureFaceSize, getTextureSourceKind, getTextureSource, getTextureHeight, getTextureInverseUvMatrix, getTextureUvMatrix, getTextureWidth, getVideoTextureHeight, getVideoTextureInverseUvMatrix, getVideoTextureUvMatrix, getVideoTextureWidth, hasTextureSource, hasTextureUvTransform, isCubeTextureComplete, isTextureReady, isVideoTextureFrameReady, invalidateVoxelGrid, resetTextureUvTransform, resetVideoTextureFrame, setCubeTextureFace, setTextureFlip, setTextureSource, setTextureUvOffset, setTextureUvFromPixelRect, setTextureUvRotation, setTextureUvScale, setVideoTextureSource, transformTextureUv, } from './contract';
2
+ export { getTextureSampleColorSpace, shouldDecodeTextureOnSample, shouldPremultiplyTextureOnUpload, } from './textureColorSpace';
2
3
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,mBAAmB,EACnB,gBAAgB,EAChB,YAAY,EACZ,YAAY,EACZ,iBAAiB,EACjB,eAAe,EACf,WAAW,EACX,WAAW,EACX,gBAAgB,EAChB,wBAAwB,EACxB,wBAAwB,EACxB,iBAAiB,EACjB,qBAAqB,EACrB,mBAAmB,EACnB,aAAa,EACb,aAAa,EACb,mBAAmB,EACnB,kBAAkB,EAClB,iBAAiB,EACjB,aAAa,EACb,aAAa,EACb,sBAAsB,EACtB,oBAAoB,EACpB,gBAAgB,EAChB,gBAAgB,EAChB,yBAAyB,EACzB,kBAAkB,EAClB,eAAe,EACf,qBAAqB,EACrB,8BAA8B,EAC9B,uBAAuB,EACvB,oBAAoB,EACpB,gBAAgB,EAChB,qBAAqB,EACrB,qBAAqB,EACrB,cAAc,EACd,wBAAwB,EACxB,mBAAmB,EACnB,uBAAuB,EACvB,sBAAsB,EACtB,kBAAkB,EAClB,cAAc,EACd,gBAAgB,EAChB,kBAAkB,EAClB,yBAAyB,EACzB,oBAAoB,EACpB,iBAAiB,EACjB,qBAAqB,EACrB,kBAAkB,GACnB,MAAM,YAAY,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,mBAAmB,EACnB,gBAAgB,EAChB,YAAY,EACZ,YAAY,EACZ,iBAAiB,EACjB,eAAe,EACf,WAAW,EACX,WAAW,EACX,gBAAgB,EAChB,wBAAwB,EACxB,wBAAwB,EACxB,iBAAiB,EACjB,qBAAqB,EACrB,mBAAmB,EACnB,aAAa,EACb,aAAa,EACb,mBAAmB,EACnB,kBAAkB,EAClB,iBAAiB,EACjB,aAAa,EACb,aAAa,EACb,sBAAsB,EACtB,oBAAoB,EACpB,gBAAgB,EAChB,gBAAgB,EAChB,yBAAyB,EACzB,kBAAkB,EAClB,eAAe,EACf,qBAAqB,EACrB,8BAA8B,EAC9B,uBAAuB,EACvB,oBAAoB,EACpB,gBAAgB,EAChB,qBAAqB,EACrB,qBAAqB,EACrB,cAAc,EACd,wBAAwB,EACxB,mBAAmB,EACnB,uBAAuB,EACvB,sBAAsB,EACtB,kBAAkB,EAClB,cAAc,EACd,gBAAgB,EAChB,kBAAkB,EAClB,yBAAyB,EACzB,oBAAoB,EACpB,iBAAiB,EACjB,qBAAqB,EACrB,kBAAkB,GACnB,MAAM,YAAY,CAAC;AACpB,OAAO,EACL,0BAA0B,EAC1B,2BAA2B,EAC3B,gCAAgC,GACjC,MAAM,qBAAqB,CAAC"}
package/dist/index.js CHANGED
@@ -1,2 +1,3 @@
1
1
  export { advanceVideoTexture, cloneCubeTexture, cloneSampler, cloneTexture, cloneVideoTexture, copyCubeTexture, copySampler, copyTexture, copyVideoTexture, createAnisotropicSampler, createClampLinearSampler, createCubeTexture, createPixelArtSampler, createRenderTexture, createSampler, createTexture, createTilingSampler, createVideoTexture, equalsCubeTexture, equalsSampler, equalsTexture, getCubeTextureFaceSize, getTextureSourceKind, getTextureSource, getTextureHeight, getTextureInverseUvMatrix, getTextureUvMatrix, getTextureWidth, getVideoTextureHeight, getVideoTextureInverseUvMatrix, getVideoTextureUvMatrix, getVideoTextureWidth, hasTextureSource, hasTextureUvTransform, isCubeTextureComplete, isTextureReady, isVideoTextureFrameReady, invalidateVoxelGrid, resetTextureUvTransform, resetVideoTextureFrame, setCubeTextureFace, setTextureFlip, setTextureSource, setTextureUvOffset, setTextureUvFromPixelRect, setTextureUvRotation, setTextureUvScale, setVideoTextureSource, transformTextureUv, } from './contract';
2
+ export { getTextureSampleColorSpace, shouldDecodeTextureOnSample, shouldPremultiplyTextureOnUpload, } from './textureColorSpace';
2
3
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,mBAAmB,EACnB,gBAAgB,EAChB,YAAY,EACZ,YAAY,EACZ,iBAAiB,EACjB,eAAe,EACf,WAAW,EACX,WAAW,EACX,gBAAgB,EAChB,wBAAwB,EACxB,wBAAwB,EACxB,iBAAiB,EACjB,qBAAqB,EACrB,mBAAmB,EACnB,aAAa,EACb,aAAa,EACb,mBAAmB,EACnB,kBAAkB,EAClB,iBAAiB,EACjB,aAAa,EACb,aAAa,EACb,sBAAsB,EACtB,oBAAoB,EACpB,gBAAgB,EAChB,gBAAgB,EAChB,yBAAyB,EACzB,kBAAkB,EAClB,eAAe,EACf,qBAAqB,EACrB,8BAA8B,EAC9B,uBAAuB,EACvB,oBAAoB,EACpB,gBAAgB,EAChB,qBAAqB,EACrB,qBAAqB,EACrB,cAAc,EACd,wBAAwB,EACxB,mBAAmB,EACnB,uBAAuB,EACvB,sBAAsB,EACtB,kBAAkB,EAClB,cAAc,EACd,gBAAgB,EAChB,kBAAkB,EAClB,yBAAyB,EACzB,oBAAoB,EACpB,iBAAiB,EACjB,qBAAqB,EACrB,kBAAkB,GACnB,MAAM,YAAY,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,mBAAmB,EACnB,gBAAgB,EAChB,YAAY,EACZ,YAAY,EACZ,iBAAiB,EACjB,eAAe,EACf,WAAW,EACX,WAAW,EACX,gBAAgB,EAChB,wBAAwB,EACxB,wBAAwB,EACxB,iBAAiB,EACjB,qBAAqB,EACrB,mBAAmB,EACnB,aAAa,EACb,aAAa,EACb,mBAAmB,EACnB,kBAAkB,EAClB,iBAAiB,EACjB,aAAa,EACb,aAAa,EACb,sBAAsB,EACtB,oBAAoB,EACpB,gBAAgB,EAChB,gBAAgB,EAChB,yBAAyB,EACzB,kBAAkB,EAClB,eAAe,EACf,qBAAqB,EACrB,8BAA8B,EAC9B,uBAAuB,EACvB,oBAAoB,EACpB,gBAAgB,EAChB,qBAAqB,EACrB,qBAAqB,EACrB,cAAc,EACd,wBAAwB,EACxB,mBAAmB,EACnB,uBAAuB,EACvB,sBAAsB,EACtB,kBAAkB,EAClB,cAAc,EACd,gBAAgB,EAChB,kBAAkB,EAClB,yBAAyB,EACzB,oBAAoB,EACpB,iBAAiB,EACjB,qBAAqB,EACrB,kBAAkB,GACnB,MAAM,YAAY,CAAC;AACpB,OAAO,EACL,0BAA0B,EAC1B,2BAA2B,EAC3B,gCAAgC,GACjC,MAAM,qBAAqB,CAAC"}
@@ -0,0 +1,5 @@
1
+ import type { RenderTargetColorSpace, TextureColorSpace } from '@flighthq/types/contract';
2
+ export declare function getTextureSampleColorSpace(source: TextureColorSpace, working: RenderTargetColorSpace): TextureColorSpace;
3
+ export declare function shouldDecodeTextureOnSample(source: TextureColorSpace, working: RenderTargetColorSpace): boolean;
4
+ export declare function shouldPremultiplyTextureOnUpload(source: TextureColorSpace, working: RenderTargetColorSpace): boolean;
5
+ //# sourceMappingURL=textureColorSpace.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"textureColorSpace.d.ts","sourceRoot":"","sources":["../src/textureColorSpace.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,sBAAsB,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAM1F,wBAAgB,0BAA0B,CACxC,MAAM,EAAE,iBAAiB,EACzB,OAAO,EAAE,sBAAsB,GAC9B,iBAAiB,CAEnB;AAwBD,wBAAgB,2BAA2B,CAAC,MAAM,EAAE,iBAAiB,EAAE,OAAO,EAAE,sBAAsB,GAAG,OAAO,CAE/G;AAMD,wBAAgB,gCAAgC,CAAC,MAAM,EAAE,iBAAiB,EAAE,OAAO,EAAE,sBAAsB,GAAG,OAAO,CAEpH"}
@@ -0,0 +1,40 @@
1
+ // The colour space a GPU sample FORMAT should apply, derived from the pair. Unlike `Texture.colorSpace`
2
+ // this is not a claim about the content — it is the transfer function the sampler applies, so 'linear'
3
+ // here means "apply none". Backends map it straight onto SRGB8_ALPHA8 / rgba8unorm-srgb vs the plain
4
+ // 8-bit format.
5
+ export function getTextureSampleColorSpace(source, working) {
6
+ return shouldDecodeTextureOnSample(source, working) ? 'srgb' : 'linear';
7
+ }
8
+ // The one predicate that decides whether a texture is decoded on sample, and with it — because the two
9
+ // cannot disagree — where its alpha is premultiplied.
10
+ //
11
+ // Two spaces meet at every sample. `source` is what the texture's pixels ARE (`Texture.colorSpace`, a
12
+ // property of the data). `working` is the space the destination composites in (`RenderTarget.colorSpace`,
13
+ // a policy of the render path). A transfer function is applied only when they disagree in the one
14
+ // direction hardware can serve: sRGB-encoded content read into a linear working space, which the GPU does
15
+ // for free by sampling an SRGB8_ALPHA8 / rgba8unorm-srgb view. Every other pairing is byte-through —
16
+ // including linear content read into an sRGB working space, which would need an encode-on-sample no GPU
17
+ // offers and which no built-in path asks for.
18
+ //
19
+ // This replaced a callsite override that let 2D declare its sRGB sprites `'linear'` purely to select the
20
+ // no-decode format. That claim was false about the data and broke this field's stated invariant (that a
21
+ // shader receives linear values), and it made the two cases indistinguishable: "linear because nobody
22
+ // decodes here" and "genuinely linear content" looked identical. Deriving the format from the pair keeps
23
+ // every texture's declared space truthful and leaves the working space as the single thing a path flips.
24
+ //
25
+ // THE COUPLING TO PREMULTIPLY. An upload-time premultiply runs on raw stored bytes, so it happens BEFORE
26
+ // any decode — yielding decode(c·a) where a linear compositor needs decode(c)·a, which is 2–4× too dark
27
+ // at partial coverage. So a path that decodes must premultiply in its shader instead, and a path that
28
+ // does not decode may premultiply on upload (the cheaper option, and 2D's default). Same predicate, both
29
+ // decisions: see shouldPremultiplyTextureOnUpload.
30
+ export function shouldDecodeTextureOnSample(source, working) {
31
+ return source === 'srgb' && working === 'linear';
32
+ }
33
+ // Whether a path may take its premultiply at upload rather than in the shader. The inverse of
34
+ // shouldDecodeTextureOnSample, named separately because it is the decision a caller actually makes and
35
+ // because stating it as its own rule is what keeps the two from drifting apart. See that function for why
36
+ // an upload multiply is only valid when nothing decodes afterward.
37
+ export function shouldPremultiplyTextureOnUpload(source, working) {
38
+ return !shouldDecodeTextureOnSample(source, working);
39
+ }
40
+ //# sourceMappingURL=textureColorSpace.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"textureColorSpace.js","sourceRoot":"","sources":["../src/textureColorSpace.ts"],"names":[],"mappings":"AAEA,wGAAwG;AACxG,uGAAuG;AACvG,qGAAqG;AACrG,gBAAgB;AAChB,MAAM,UAAU,0BAA0B,CACxC,MAAyB,EACzB,OAA+B;IAE/B,OAAO,2BAA2B,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC;AAC1E,CAAC;AAED,uGAAuG;AACvG,sDAAsD;AACtD,EAAE;AACF,sGAAsG;AACtG,0GAA0G;AAC1G,kGAAkG;AAClG,0GAA0G;AAC1G,qGAAqG;AACrG,wGAAwG;AACxG,8CAA8C;AAC9C,EAAE;AACF,yGAAyG;AACzG,wGAAwG;AACxG,sGAAsG;AACtG,yGAAyG;AACzG,yGAAyG;AACzG,EAAE;AACF,yGAAyG;AACzG,wGAAwG;AACxG,sGAAsG;AACtG,yGAAyG;AACzG,mDAAmD;AACnD,MAAM,UAAU,2BAA2B,CAAC,MAAyB,EAAE,OAA+B;IACpG,OAAO,MAAM,KAAK,MAAM,IAAI,OAAO,KAAK,QAAQ,CAAC;AACnD,CAAC;AAED,8FAA8F;AAC9F,uGAAuG;AACvG,0GAA0G;AAC1G,mEAAmE;AACnE,MAAM,UAAU,gCAAgC,CAAC,MAAyB,EAAE,OAA+B;IACzG,OAAO,CAAC,2BAA2B,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AACvD,CAAC"}
@@ -77,6 +77,8 @@ function createVideoImageResource(source) {
77
77
  return null;
78
78
  const image = createEntity({
79
79
  height: 0,
80
+ alphaType: 'straight',
81
+ gamut: 'srgb',
80
82
  kind: ImageTextureSourceKind,
81
83
  source: source.element,
82
84
  version: INITIAL_VIDEO_VERSION,
@@ -1 +1 @@
1
- {"version":3,"file":"videoTexture.js","sourceRoot":"","sources":["../src/videoTexture.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"videoTexture.js","sourceRoot":"","sources":["../src/videoTexture.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AACzD,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAE7D,OAAO,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AAElE,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,aAAa,EAAE,kBAAkB,EAAE,MAAM,WAAW,CAAC;AAEzF,mGAAmG;AACnG,8FAA8F;AAC9F,MAAM,UAAU,mBAAmB,CAAC,OAAoB;IACtD,MAAM,KAAK,GAAG,aAAa,CAAC,OAAO,CAAC,CAAC;IACrC,IAAI,KAAK,IAAI,IAAI;QAAE,OAAO,OAAO,CAAC,OAAO,CAAC;IAC1C,oBAAoB,CAAC,KAAK,CAAC,CAAC;IAC5B,KAAK,CAAC,OAAO,GAAG,CAAC,KAAK,CAAC,OAAO,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC;IAC1C,OAAO,CAAC,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC;IAChC,OAAO,OAAO,CAAC,OAAO,CAAC;AACzB,CAAC;AAED,4FAA4F;AAC5F,MAAM,UAAU,iBAAiB,CAAC,MAA6B;IAC7D,OAAO,YAAY,CAAC,MAAM,CAAC,CAAC;AAC9B,CAAC;AAED,4EAA4E;AAC5E,MAAM,UAAU,gBAAgB,CAAC,GAAgB,EAAE,MAA6B;IAC9E,WAAW,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;AAC3B,CAAC;AAED,wFAAwF;AACxF,gGAAgG;AAChG,6EAA6E;AAC7E,MAAM,UAAU,kBAAkB,CAAC,MAAqB,EAAE,IAAqC;IAC7F,MAAM,KAAK,GAAG,wBAAwB,CAAC,MAAM,CAAC,CAAC;IAC/C,OAAO,aAAa,CAAC;QACnB,GAAG,IAAI;QACP,SAAS,EAAE,IAAI;QACf,MAAM,EAAE,KAAK;QACb,OAAO,EAAE,KAAK,EAAE,OAAO,IAAI,qBAAqB;KACjD,CAAC,CAAC;AACL,CAAC;AAED,6FAA6F;AAC7F,MAAM,UAAU,qBAAqB,CAAC,OAA8B;IAClE,MAAM,OAAO,GAAG,eAAe,CAAC,OAAO,CAAC,CAAC;IACzC,OAAO,OAAO,KAAK,IAAI,IAAI,OAAO,CAAC,WAAW,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAChF,CAAC;AAED,2EAA2E;AAC3E,MAAM,UAAU,8BAA8B,CAAC,GAAgB,EAAE,OAA8B;IAC7F,uBAAuB,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;IACtC,cAAc,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;AAC3B,CAAC;AAED,2EAA2E;AAC3E,MAAM,UAAU,uBAAuB,CAAC,GAAgB,EAAE,OAA8B;IACtF,kBAAkB,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;AACnC,CAAC;AAED,4FAA4F;AAC5F,MAAM,UAAU,oBAAoB,CAAC,OAA8B;IACjE,MAAM,OAAO,GAAG,eAAe,CAAC,OAAO,CAAC,CAAC;IACzC,OAAO,OAAO,KAAK,IAAI,IAAI,OAAO,CAAC,UAAU,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC9E,CAAC;AAED,+FAA+F;AAC/F,MAAM,UAAU,wBAAwB,CAAC,OAA8B;IACrE,MAAM,OAAO,GAAG,eAAe,CAAC,OAAO,CAAC,CAAC;IACzC,OAAO,CACL,OAAO,KAAK,IAAI,IAAI,OAAO,CAAC,UAAU,IAAI,iBAAiB,IAAI,OAAO,CAAC,UAAU,GAAG,CAAC,IAAI,OAAO,CAAC,WAAW,GAAG,CAAC,CACjH,CAAC;AACJ,CAAC;AAED,+FAA+F;AAC/F,MAAM,UAAU,sBAAsB,CAAC,OAAoB;IACzD,MAAM,KAAK,GAAG,aAAa,CAAC,OAAO,CAAC,CAAC;IACrC,IAAI,KAAK,IAAI,IAAI;QAAE,KAAK,CAAC,OAAO,GAAG,qBAAqB,CAAC;IACzD,OAAO,CAAC,OAAO,GAAG,qBAAqB,CAAC;AAC1C,CAAC;AAED,gGAAgG;AAChG,oFAAoF;AACpF,MAAM,UAAU,qBAAqB,CAAC,OAAoB,EAAE,MAAqB;IAC/E,IAAI,OAAO,CAAC,SAAS,KAAK,IAAI;QAAE,MAAM,IAAI,KAAK,CAAC,4CAA4C,CAAC,CAAC;IAC9F,OAAO,CAAC,MAAM,GAAG,wBAAwB,CAAC,MAAM,CAAC,CAAC;IAClD,OAAO,CAAC,OAAO,GAAG,qBAAqB,CAAC;AAC1C,CAAC;AAED,SAAS,wBAAwB,CAAC,MAA+B;IAC/D,IAAI,MAAM,CAAC,OAAO,KAAK,IAAI;QAAE,OAAO,IAAI,CAAC;IACzC,MAAM,KAAK,GAAG,YAAY,CAAC;QACzB,MAAM,EAAE,CAAC;QACT,SAAS,EAAE,UAAU;QACrB,KAAK,EAAE,MAAM;QACb,IAAI,EAAE,sBAAsB;QAC5B,MAAM,EAAE,MAAM,CAAC,OAAO;QACtB,OAAO,EAAE,qBAAqB;QAC9B,KAAK,EAAE,CAAC;KACT,CAAU,CAAC;IACZ,oBAAoB,CAAC,KAAK,CAAC,CAAC;IAC5B,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,eAAe,CAAC,OAA8B;IACrD,OAAQ,aAAa,CAAC,OAAO,CAAC,EAAE,MAA8C,IAAI,IAAI,CAAC;AACzF,CAAC;AAED,SAAS,aAAa,CAAC,OAA8B;IACnD,OAAO,OAAO,CAAC,SAAS,KAAK,IAAI,CAAC,CAAC,CAAE,OAAO,CAAC,MAAuB,CAAC,CAAC,CAAC,IAAI,CAAC;AAC9E,CAAC;AAED,SAAS,oBAAoB,CAAC,KAAY;IACxC,MAAM,OAAO,GAAG,KAAK,CAAC,MAA0B,CAAC;IACjD,KAAK,CAAC,KAAK,GAAG,OAAO,CAAC,UAAU,IAAI,CAAC,CAAC;IACtC,KAAK,CAAC,MAAM,GAAG,OAAO,CAAC,WAAW,IAAI,CAAC,CAAC;AAC1C,CAAC;AAED,iGAAiG;AACjG,MAAM,iBAAiB,GAAG,CAAC,CAAC;AAC5B,MAAM,qBAAqB,GAAG,UAAU,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@flighthq/texture",
3
- "version": "0.3.0-next.1463.b454aa8",
3
+ "version": "0.3.0-next.1473.098a860",
4
4
  "repository": {
5
5
  "type": "git",
6
6
  "url": "https://github.com/flighthq/flight.git",
@@ -36,9 +36,9 @@
36
36
  "clean:dist": "tsx ../../scripts/clean-package-dist.ts"
37
37
  },
38
38
  "dependencies": {
39
- "@flighthq/entity": "0.3.0-next.1463.b454aa8",
40
- "@flighthq/geometry": "0.3.0-next.1463.b454aa8",
41
- "@flighthq/types": "0.3.0-next.1463.b454aa8"
39
+ "@flighthq/entity": "0.3.0-next.1473.098a860",
40
+ "@flighthq/geometry": "0.3.0-next.1473.098a860",
41
+ "@flighthq/types": "0.3.0-next.1473.098a860"
42
42
  },
43
43
  "devDependencies": {
44
44
  "typescript": "^5.3.0"
@@ -0,0 +1,46 @@
1
+ import { describe, expect, it } from 'vitest';
2
+
3
+ import {
4
+ getTextureSampleColorSpace,
5
+ shouldDecodeTextureOnSample,
6
+ shouldPremultiplyTextureOnUpload,
7
+ } from './textureColorSpace';
8
+
9
+ describe('getTextureSampleColorSpace', () => {
10
+ it('selects the decoding format only for sRGB content in a linear working space', () => {
11
+ expect(getTextureSampleColorSpace('srgb', 'linear')).toBe('srgb');
12
+ expect(getTextureSampleColorSpace('srgb', 'srgb')).toBe('linear');
13
+ expect(getTextureSampleColorSpace('linear', 'linear')).toBe('linear');
14
+ expect(getTextureSampleColorSpace('linear', 'srgb')).toBe('linear');
15
+ });
16
+ });
17
+
18
+ describe('shouldDecodeTextureOnSample', () => {
19
+ it('decodes only sRGB content read into a linear working space', () => {
20
+ expect(shouldDecodeTextureOnSample('srgb', 'linear')).toBe(true);
21
+ expect(shouldDecodeTextureOnSample('srgb', 'srgb')).toBe(false);
22
+ expect(shouldDecodeTextureOnSample('linear', 'linear')).toBe(false);
23
+ });
24
+
25
+ // Linear content sampled by an sRGB-space path would need an encode-on-sample no GPU offers; it stays
26
+ // byte-through rather than silently pretending otherwise.
27
+ it('leaves linear content byte-through in an sRGB working space', () => {
28
+ expect(shouldDecodeTextureOnSample('linear', 'srgb')).toBe(false);
29
+ });
30
+ });
31
+
32
+ describe('shouldPremultiplyTextureOnUpload', () => {
33
+ // An upload multiply runs on stored bytes, before any decode — valid only when nothing decodes after.
34
+ it('is the exact inverse of decoding on sample', () => {
35
+ for (const source of ['srgb', 'linear'] as const) {
36
+ for (const working of ['srgb', 'linear'] as const) {
37
+ expect(shouldPremultiplyTextureOnUpload(source, working)).toBe(!shouldDecodeTextureOnSample(source, working));
38
+ }
39
+ }
40
+ });
41
+
42
+ it('keeps the upload multiply for the byte-through 2D default', () => {
43
+ expect(shouldPremultiplyTextureOnUpload('srgb', 'srgb')).toBe(true);
44
+ expect(shouldPremultiplyTextureOnUpload('srgb', 'linear')).toBe(false);
45
+ });
46
+ });