Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 6 additions & 0 deletions .travis.yml
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,8 @@ jobs:
email: "[email protected]"
api_key:
secure: "VNkn7xYuSLkgJ0VmvzxFaI6Nx+uzheiMjW3V7nT/lMKOMNvLbCkWgAxZ+qZWgVKHhJZlEFGdhJUtbkr5ATQNZW5cZ+ehyx9eoJjEYicvt/r9nqRb7mGuAM+WHEe7oRIn7A+vgYnYr4hITz03+rSbkOQO4uGW5K1Yf3fhBrR5f1mVFiWL0/4Ad8C19C2Xa2q8U3qmppGGA1MIr+iMCOgryoGLriNFbSm7nqMU2HOdZRTRpcbAzSiQGOi5mTu9jieBBJxScDAuHkL2S4MZQZAEYL02C1YpmZ1ktsMZwWuU0/BXSXroSU9HTBuPvcrLpZB82dzcs2Hxd4JaDH6BnbZy0cjh0xAeDDWsdR3CuksOF8ag33mkRReJBNbxLhlouCLClFEf8EcHkbgDhasZYDUGOikzF49+xZIh0vo/wlzO1MH0oPXWiD5IetOSfFNiS7uAsQStkl3pANvAGGFtdEUFaGknqQKInlgqaTm559HYhQK9otisGh0Upn7o+DGtepnFpM5EmzstiuQG9J/WyaYZnr2Z4y9Zf8YW+7hNTeS9ELyY4EeTFhK/3rvc39/oGM7gMHffT12qFZORw+ynCoDJDvBckY5ysRRDd2pw/A3K54N2kHc4KN9sQKKqohrr/B23WGl4mT0RngxgopP1Ho2wg+gc1owU12ZB5PC/qB4KMzg="
on:
tags: true
- stage: deploy stardust-webgl
if: branch =~ /^stardust-webgl-.*$/
before_deploy: cd packages/stardust-webgl
Expand All @@ -49,6 +51,8 @@ jobs:
email: "[email protected]"
api_key:
secure: "VNkn7xYuSLkgJ0VmvzxFaI6Nx+uzheiMjW3V7nT/lMKOMNvLbCkWgAxZ+qZWgVKHhJZlEFGdhJUtbkr5ATQNZW5cZ+ehyx9eoJjEYicvt/r9nqRb7mGuAM+WHEe7oRIn7A+vgYnYr4hITz03+rSbkOQO4uGW5K1Yf3fhBrR5f1mVFiWL0/4Ad8C19C2Xa2q8U3qmppGGA1MIr+iMCOgryoGLriNFbSm7nqMU2HOdZRTRpcbAzSiQGOi5mTu9jieBBJxScDAuHkL2S4MZQZAEYL02C1YpmZ1ktsMZwWuU0/BXSXroSU9HTBuPvcrLpZB82dzcs2Hxd4JaDH6BnbZy0cjh0xAeDDWsdR3CuksOF8ag33mkRReJBNbxLhlouCLClFEf8EcHkbgDhasZYDUGOikzF49+xZIh0vo/wlzO1MH0oPXWiD5IetOSfFNiS7uAsQStkl3pANvAGGFtdEUFaGknqQKInlgqaTm559HYhQK9otisGh0Upn7o+DGtepnFpM5EmzstiuQG9J/WyaYZnr2Z4y9Zf8YW+7hNTeS9ELyY4EeTFhK/3rvc39/oGM7gMHffT12qFZORw+ynCoDJDvBckY5ysRRDd2pw/A3K54N2kHc4KN9sQKKqohrr/B23WGl4mT0RngxgopP1Ho2wg+gc1owU12ZB5PC/qB4KMzg="
on:
tags: true
- stage: deploy stardust-isotype
if: branch =~ /^stardust-isotype-.*$/
before_deploy: cd packages/stardust-isotype
Expand All @@ -58,3 +62,5 @@ jobs:
email: "[email protected]"
api_key:
secure: "VNkn7xYuSLkgJ0VmvzxFaI6Nx+uzheiMjW3V7nT/lMKOMNvLbCkWgAxZ+qZWgVKHhJZlEFGdhJUtbkr5ATQNZW5cZ+ehyx9eoJjEYicvt/r9nqRb7mGuAM+WHEe7oRIn7A+vgYnYr4hITz03+rSbkOQO4uGW5K1Yf3fhBrR5f1mVFiWL0/4Ad8C19C2Xa2q8U3qmppGGA1MIr+iMCOgryoGLriNFbSm7nqMU2HOdZRTRpcbAzSiQGOi5mTu9jieBBJxScDAuHkL2S4MZQZAEYL02C1YpmZ1ktsMZwWuU0/BXSXroSU9HTBuPvcrLpZB82dzcs2Hxd4JaDH6BnbZy0cjh0xAeDDWsdR3CuksOF8ag33mkRReJBNbxLhlouCLClFEf8EcHkbgDhasZYDUGOikzF49+xZIh0vo/wlzO1MH0oPXWiD5IetOSfFNiS7uAsQStkl3pANvAGGFtdEUFaGknqQKInlgqaTm559HYhQK9otisGh0Upn7o+DGtepnFpM5EmzstiuQG9J/WyaYZnr2Z4y9Zf8YW+7hNTeS9ELyY4EeTFhK/3rvc39/oGM7gMHffT12qFZORw+ynCoDJDvBckY5ysRRDd2pw/A3K54N2kHc4KN9sQKKqohrr/B23WGl4mT0RngxgopP1Ho2wg+gc1owU12ZB5PC/qB4KMzg="
on:
tags: true
49 changes: 34 additions & 15 deletions packages/stardust-core/src/binding/array.ts
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ export interface TextureData {

/** Texture data binding */
export abstract class TextureBinding {
public abstract getTextureData(): TextureData;
public abstract getTextureData(GL: WebGLRenderingContext): TextureData;
}

export type ArrayBindingFunction = (
Expand All @@ -34,35 +34,54 @@ export class ArrayBinding extends TextureBinding {
private _dirty = false;
private _textureData: TextureData = null;

public getTextureData(): TextureData {
public getTextureData(GL: WebGLRenderingContext): TextureData {
if (this._dirty) {
const MAX_TEXTURE_SIZE = GL.getParameter(GL.MAX_TEXTURE_SIZE);
const values = this._data.map(this._valueFunction).map(getBindingValue);
let width = values.length;
let height = 1;
let length = width * height;
if (values.length == 0) {
this._textureData = null;
} else {
if (width > MAX_TEXTURE_SIZE) {
height = Math.ceil(width / MAX_TEXTURE_SIZE);
width = MAX_TEXTURE_SIZE;
length = height * width;
}
let array: Float32Array;
let numberComponents: number;
if (typeof values[0] == "number") {
numberComponents = 1;
array = new Float32Array(values.length * 4);
for (let i = 0; i < values.length; i++) {
array[i * 4] = values[i] as number;
array = new Float32Array(length * 4);
for (let i = 0; i < length; i++) {
if (i < values.length) {
array[i * 4] = values[i] as number;
} else {
array[i * 4] = 0;
}
}
} else {
numberComponents = (values[0] as number[]).length;
array = new Float32Array(values.length * 4);
array = new Float32Array(length * 4);
let offset = 0;
for (let i = 0; i < values.length; i++) {
const v = values[i] as number[];
for (let j = 0; j < numberComponents; j++) {
array[offset++] = v[j];
}
offset += 4 - numberComponents;
for (let i = 0; i < length; i++) {
if (i < values.length) {
const v = values[i] as number[];
for (let j = 0; j < numberComponents; j++) {
array[offset++] = v[j];
}
offset += 4 - numberComponents;
} else {
for (let j = 0; j < 4; j++) {
array[offset++] = 0;
}
}
}
}
this._textureData = {
width: this._data.length,
height: 1,
width,
height,
dimensions: 1,
type: "f32",
numberComponents,
Expand Down Expand Up @@ -117,7 +136,7 @@ export class Image extends TextureBinding {
};
}

public getTextureData() {
public getTextureData(GL: WebGLRenderingContext) {
return this._data;
}
}
Expand Down
2 changes: 1 addition & 1 deletion packages/stardust-webgl/src/webgl/webgl.ts
Original file line number Diff line number Diff line change
Expand Up @@ -121,7 +121,7 @@ class WebGLPlatformMarkProgram {
this.setUniform(name, types.int, unit);
}
const cache = this._textures.get(name);
const newData = texture.getTextureData();
const newData = texture.getTextureData(GL);
if (cache.data == newData) {
return;
} else {
Expand Down