@footgun/cobalt 0.6.0 → 0.6.2
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.
package/CHANGELOG.md
CHANGED
|
@@ -1,3 +1,9 @@
|
|
|
1
|
+
# 0.6.2
|
|
2
|
+
* use preferred canvas format in more places
|
|
3
|
+
|
|
4
|
+
# 0.6.1
|
|
5
|
+
* use preferred canvas format in more places
|
|
6
|
+
|
|
1
7
|
# 0.6.0
|
|
2
8
|
* use preferred canvas format in various places instead of hardcoding to bgra8unorm, which doesn't seem to work on linux
|
|
3
9
|
because that defaults to bgra8unorm-srgb
|
package/bundle.js
CHANGED
|
@@ -7269,10 +7269,19 @@ function createTexture(device, label, width, height, mip_count, format, usage) {
|
|
|
7269
7269
|
};
|
|
7270
7270
|
}
|
|
7271
7271
|
|
|
7272
|
+
// src/get-preferred-format.js
|
|
7273
|
+
function getPreferredFormat(cobalt) {
|
|
7274
|
+
if (cobalt.canvas)
|
|
7275
|
+
return navigator.gpu?.getPreferredCanvasFormat();
|
|
7276
|
+
else
|
|
7277
|
+
return cobalt.context.getPreferredFormat();
|
|
7278
|
+
}
|
|
7279
|
+
|
|
7272
7280
|
// src/create-texture-from-url.js
|
|
7273
|
-
async function createTextureFromUrl(c, label, url, format
|
|
7281
|
+
async function createTextureFromUrl(c, label, url, format) {
|
|
7274
7282
|
const response = await fetch(url);
|
|
7275
7283
|
const blob = await response.blob();
|
|
7284
|
+
format = format || getPreferredFormat(c);
|
|
7276
7285
|
const imageData = await createImageBitmap(
|
|
7277
7286
|
blob
|
|
7278
7287
|
/*, { premultiplyAlpha: 'none', resizeQuality: 'pixelated' }*/
|
|
@@ -7303,7 +7312,8 @@ async function createTextureFromUrl(c, label, url, format = "rgba8unorm") {
|
|
|
7303
7312
|
}
|
|
7304
7313
|
|
|
7305
7314
|
// src/create-texture-from-buffer.js
|
|
7306
|
-
function createTextureFromBuffer(c, label, image, format
|
|
7315
|
+
function createTextureFromBuffer(c, label, image, format) {
|
|
7316
|
+
format = format || getPreferredFormat(c);
|
|
7307
7317
|
const usage = GPUTextureUsage.TEXTURE_BINDING | GPUTextureUsage.COPY_DST | GPUTextureUsage.RENDER_ATTACHMENT;
|
|
7308
7318
|
const mip_count = 1;
|
|
7309
7319
|
const t = createTexture(c.device, label, image.width, image.height, mip_count, format, usage);
|
|
@@ -7687,14 +7697,6 @@ function destroy(bloom_mat) {
|
|
|
7687
7697
|
bloom_mat.bind_groups_textures.length = 0;
|
|
7688
7698
|
}
|
|
7689
7699
|
|
|
7690
|
-
// src/get-preferred-format.js
|
|
7691
|
-
function getPreferredFormat(cobalt) {
|
|
7692
|
-
if (cobalt.canvas)
|
|
7693
|
-
return navigator.gpu?.getPreferredCanvasFormat();
|
|
7694
|
-
else
|
|
7695
|
-
return cobalt.context.getPreferredFormat();
|
|
7696
|
-
}
|
|
7697
|
-
|
|
7698
7700
|
// src/scene-composite/scene-composite.wgsl
|
|
7699
7701
|
var scene_composite_default = `struct BloomComposite{bloom_intensity:f32,bloom_combine_constant:f32,}@group(0)@binding(0)var mySampler:sampler;@group(0)@binding(1)var colorTexture:texture_2d<f32>;@group(0)@binding(2)var emissiveTexture:texture_2d<f32>;@group(0)@binding(3)var<uniform> composite_parameter:BloomComposite;struct VertexOutput{@builtin(position)Position:vec4<f32>,@location(0)fragUV:vec2<f32>,}const positions=array<vec2<f32>,3>(vec2<f32>(-1.0,-3.0),vec2<f32>(3.0,1.0),vec2<f32>(-1.0,1.0));const uvs=array<vec2<f32>,3>(vec2<f32>(0.0,2.0),vec2<f32>(2.0,0.0),vec2<f32>(0.0,0.0));@vertex fn vert_main(@builtin(vertex_index)VertexIndex:u32)->VertexOutput{var output:VertexOutput;output.Position=vec4<f32>(positions[VertexIndex],0.0,1.0);output.fragUV=vec2<f32>(uvs[VertexIndex]);return output;}fn GTTonemap_point(x:f32)->f32{let m:f32=0.22;let a:f32=1.0;let c:f32=1.33;let P:f32=1.0;let l:f32=0.4;let l0:f32=((P-m)*l)/a;let S0:f32=m+l0;let S1:f32=m+a*l0;let C2:f32=(a*P)/(P-S1);let L:f32=m+a*(x-m);let T:f32=m*pow(x/m,c);let S:f32=P-(P-S1)*exp(-C2*(x-S0)/P);let w0:f32=1.0-smoothstep(0.0,m,x);var w2:f32=1.0;if(x<m+l){w2=0.0;}let w1:f32=1.0-w0-w2;return f32(T*w0+L*w1+S*w2);}fn GTTonemap(x:vec3<f32>)->vec3<f32>{return vec3<f32>(GTTonemap_point(x.r),GTTonemap_point(x.g),GTTonemap_point(x.b));}fn aces(x:vec3<f32>)->vec3<f32>{let a:f32=2.51;let b:f32=0.03;let c:f32=2.43;let d:f32=0.59;let e:f32=0.14;return clamp((x*(a*x+b))/(x*(c*x+d)+e),vec3<f32>(0.0),vec3<f32>(1.0));}@fragment fn frag_main(@location(0)fragUV:vec2<f32>)->@location(0)vec4<f32>{let hdr_color=textureSample(colorTexture,mySampler,fragUV);let bloom_color=textureSample(emissiveTexture,mySampler,fragUV);let combined_color=((bloom_color*composite_parameter.bloom_intensity)*composite_parameter.bloom_combine_constant);let mapped_color=GTTonemap(combined_color.rgb);let gamma_corrected_color=pow(mapped_color,vec3<f32>(1.0/2.2));return vec4<f32>(gamma_corrected_color+hdr_color.rgb,1.0);}`;
|
|
7700
7702
|
|
|
@@ -13802,7 +13804,7 @@ var LightsTexture = class {
|
|
|
13802
13804
|
width: gridSize.x * lightsTextureProperties.resolutionPerLight,
|
|
13803
13805
|
height: gridSize.y * lightsTextureProperties.resolutionPerLight
|
|
13804
13806
|
};
|
|
13805
|
-
const format =
|
|
13807
|
+
const format = lightsTextureProperties.textureFormat;
|
|
13806
13808
|
this.texture = device.createTexture({
|
|
13807
13809
|
label: "LightsTextureMask texture",
|
|
13808
13810
|
size: [lightTextureSize.width, lightTextureSize.height],
|
|
@@ -14147,7 +14149,8 @@ async function init9(cobalt, node) {
|
|
|
14147
14149
|
resolutionPerLight: MAX_LIGHT_SIZE,
|
|
14148
14150
|
maxLightSize: MAX_LIGHT_SIZE,
|
|
14149
14151
|
antialiased: false,
|
|
14150
|
-
filtering: "nearest"
|
|
14152
|
+
filtering: "nearest",
|
|
14153
|
+
textureFormat: getPreferredFormat(cobalt)
|
|
14151
14154
|
}
|
|
14152
14155
|
});
|
|
14153
14156
|
return {
|
|
@@ -14435,16 +14438,17 @@ var spritesheet_default = {
|
|
|
14435
14438
|
async function init11(cobalt, node) {
|
|
14436
14439
|
const { canvas, device } = cobalt;
|
|
14437
14440
|
let spritesheet, colorTexture, emissiveTexture;
|
|
14441
|
+
const format = getPreferredFormat(cobalt);
|
|
14438
14442
|
if (canvas) {
|
|
14439
14443
|
spritesheet = await fetchJson(node.options.spriteSheetJsonUrl);
|
|
14440
14444
|
spritesheet = readSpriteSheet(spritesheet);
|
|
14441
|
-
colorTexture = await createTextureFromUrl(cobalt, "sprite", node.options.colorTextureUrl,
|
|
14442
|
-
emissiveTexture = await createTextureFromUrl(cobalt, "emissive sprite", node.options.emissiveTextureUrl,
|
|
14445
|
+
colorTexture = await createTextureFromUrl(cobalt, "sprite", node.options.colorTextureUrl, format);
|
|
14446
|
+
emissiveTexture = await createTextureFromUrl(cobalt, "emissive sprite", node.options.emissiveTextureUrl, format);
|
|
14443
14447
|
canvas.style.imageRendering = "pixelated";
|
|
14444
14448
|
} else {
|
|
14445
14449
|
spritesheet = readSpriteSheet(node.options.spriteSheetJson);
|
|
14446
|
-
colorTexture = await createTextureFromBuffer(cobalt, "sprite", node.options.colorTexture,
|
|
14447
|
-
emissiveTexture = await createTextureFromBuffer(cobalt, "emissive sprite", node.options.emissiveTexture,
|
|
14450
|
+
colorTexture = await createTextureFromBuffer(cobalt, "sprite", node.options.colorTexture, format);
|
|
14451
|
+
emissiveTexture = await createTextureFromBuffer(cobalt, "emissive sprite", node.options.emissiveTexture, format);
|
|
14448
14452
|
}
|
|
14449
14453
|
const quads = createSpriteQuads(device, spritesheet);
|
|
14450
14454
|
const uniformBuffer = device.createBuffer({
|
package/package.json
CHANGED
|
@@ -1,7 +1,10 @@
|
|
|
1
|
-
import createTexture
|
|
1
|
+
import createTexture from './create-texture.js'
|
|
2
|
+
import getPreferredFormat from './get-preferred-format.js'
|
|
2
3
|
|
|
3
4
|
|
|
4
|
-
export default function createTextureFromBuffer (c, label, image, format
|
|
5
|
+
export default function createTextureFromBuffer (c, label, image, format) {
|
|
6
|
+
|
|
7
|
+
format = format || getPreferredFormat(c)
|
|
5
8
|
|
|
6
9
|
const usage = GPUTextureUsage.TEXTURE_BINDING | GPUTextureUsage.COPY_DST | GPUTextureUsage.RENDER_ATTACHMENT
|
|
7
10
|
const mip_count = 1
|
|
@@ -1,10 +1,13 @@
|
|
|
1
|
-
import createTexture
|
|
1
|
+
import createTexture from './create-texture.js'
|
|
2
|
+
import getPreferredFormat from './get-preferred-format.js'
|
|
2
3
|
|
|
3
4
|
|
|
4
|
-
export default async function createTextureFromUrl (c, label, url, format
|
|
5
|
+
export default async function createTextureFromUrl (c, label, url, format) {
|
|
5
6
|
const response = await fetch(url)
|
|
6
7
|
const blob = await response.blob()
|
|
7
8
|
|
|
9
|
+
format = format || getPreferredFormat(c)
|
|
10
|
+
|
|
8
11
|
const imageData = await createImageBitmap(blob/*, { premultiplyAlpha: 'none', resizeQuality: 'pixelated' }*/)
|
|
9
12
|
|
|
10
13
|
const usage = GPUTextureUsage.TEXTURE_BINDING | GPUTextureUsage.COPY_DST | GPUTextureUsage.RENDER_ATTACHMENT
|
package/src/light/light.js
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import getPreferredFormat from "../get-preferred-format.js";
|
|
1
2
|
import * as publicAPI from './public-api.js'
|
|
2
3
|
import { Viewport } from "./viewport";
|
|
3
4
|
import { LightsRenderer } from './lights-renderer.js';
|
|
@@ -83,6 +84,7 @@ async function init(cobalt, node) {
|
|
|
83
84
|
maxLightSize: MAX_LIGHT_SIZE,
|
|
84
85
|
antialiased: false,
|
|
85
86
|
filtering: "nearest",
|
|
87
|
+
textureFormat: getPreferredFormat(cobalt),
|
|
86
88
|
},
|
|
87
89
|
});
|
|
88
90
|
|
|
@@ -45,7 +45,7 @@ class LightsTexture {
|
|
|
45
45
|
height: gridSize.y * lightsTextureProperties.resolutionPerLight,
|
|
46
46
|
};
|
|
47
47
|
|
|
48
|
-
const format =
|
|
48
|
+
const format = lightsTextureProperties.textureFormat;
|
|
49
49
|
this.texture = device.createTexture({
|
|
50
50
|
label: "LightsTextureMask texture",
|
|
51
51
|
size: [lightTextureSize.width, lightTextureSize.height],
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import createSpriteQuads from './create-sprite-quads.js'
|
|
2
2
|
import createTextureFromBuffer from '../create-texture-from-buffer.js'
|
|
3
3
|
import createTextureFromUrl from '../create-texture-from-url.js'
|
|
4
|
+
import getPreferredFormat from '../get-preferred-format.js'
|
|
4
5
|
import readSpriteSheet from './read-spritesheet.js'
|
|
5
6
|
import spriteWGSL from './sprite.wgsl'
|
|
6
7
|
import round from 'round-half-up-symmetric'
|
|
@@ -50,13 +51,15 @@ async function init (cobalt, node) {
|
|
|
50
51
|
|
|
51
52
|
let spritesheet, colorTexture, emissiveTexture
|
|
52
53
|
|
|
54
|
+
const format = getPreferredFormat(cobalt)
|
|
55
|
+
|
|
53
56
|
if (canvas) {
|
|
54
57
|
// browser (canvas) path
|
|
55
58
|
spritesheet = await fetchJson(node.options.spriteSheetJsonUrl)
|
|
56
59
|
spritesheet = readSpriteSheet(spritesheet)
|
|
57
60
|
|
|
58
|
-
colorTexture = await createTextureFromUrl(cobalt, 'sprite', node.options.colorTextureUrl,
|
|
59
|
-
emissiveTexture = await createTextureFromUrl(cobalt, 'emissive sprite', node.options.emissiveTextureUrl,
|
|
61
|
+
colorTexture = await createTextureFromUrl(cobalt, 'sprite', node.options.colorTextureUrl, format)
|
|
62
|
+
emissiveTexture = await createTextureFromUrl(cobalt, 'emissive sprite', node.options.emissiveTextureUrl, format)
|
|
60
63
|
|
|
61
64
|
// for some reason this needs to be done _after_ creating the material, or the rendering will be blurry
|
|
62
65
|
canvas.style.imageRendering = 'pixelated'
|
|
@@ -65,8 +68,8 @@ async function init (cobalt, node) {
|
|
|
65
68
|
// sdl + gpu path
|
|
66
69
|
spritesheet = readSpriteSheet(node.options.spriteSheetJson)
|
|
67
70
|
|
|
68
|
-
colorTexture = await createTextureFromBuffer(cobalt, 'sprite', node.options.colorTexture,
|
|
69
|
-
emissiveTexture = await createTextureFromBuffer(cobalt, 'emissive sprite', node.options.emissiveTexture,
|
|
71
|
+
colorTexture = await createTextureFromBuffer(cobalt, 'sprite', node.options.colorTexture, format)
|
|
72
|
+
emissiveTexture = await createTextureFromBuffer(cobalt, 'emissive sprite', node.options.emissiveTexture, format)
|
|
70
73
|
}
|
|
71
74
|
|
|
72
75
|
const quads = createSpriteQuads(device, spritesheet)
|