in web/src/app/timeline/canvas/shared_gl_resource.ts [226:334]
private initColorPaletteTextures() {
// event color palette
const [eventColorPaletteCanvas, ctx2dForEvent] =
this.generateCanvasForTextureSource(logTypes.length * 2, 1, false);
eventColorPaletteCanvas.style.imageRendering = 'pixelated';
for (let i = 0; i < logTypes.length; i++) {
ctx2dForEvent.fillStyle = logTypeColors[logTypes[i]];
ctx2dForEvent.fillRect(i * 2 + 0, 0, 1, 1);
ctx2dForEvent.fillStyle = logTypeDarkColors[logTypes[i]];
ctx2dForEvent.fillRect(i * 2 + 1, 0, 1, 1);
}
this.logTypeColorPaletteTexture = this.glMust(this.gl.createTexture());
this.gl.activeTexture(this.gl.TEXTURE1);
this.gl.bindTexture(this.gl.TEXTURE_2D, this.logTypeColorPaletteTexture);
this.gl.texImage2D(
this.gl.TEXTURE_2D,
0,
this.gl.RGBA,
this.gl.RGBA,
this.gl.UNSIGNED_BYTE,
eventColorPaletteCanvas,
);
this.gl.texParameteri(
this.gl.TEXTURE_2D,
this.gl.TEXTURE_MIN_FILTER,
this.gl.NEAREST,
);
this.gl.texParameteri(
this.gl.TEXTURE_2D,
this.gl.TEXTURE_MAG_FILTER,
this.gl.NEAREST,
);
// revison state color palette
const [revisionColorPaletteCanvas, ctx2dForRevision] =
this.generateCanvasForTextureSource(revisionStates.length * 2, 1, false);
revisionColorPaletteCanvas.style.imageRendering = 'pixelated';
for (let i = 0; i < revisionStates.length; i++) {
ctx2dForRevision.fillStyle = revisionStatecolors[revisionStates[i]];
ctx2dForRevision.fillRect(i * 2 + 0, 0, 1, 1);
ctx2dForRevision.fillStyle = revisionStateDarkColors[revisionStates[i]];
ctx2dForRevision.fillRect(i * 2 + 1, 0, 1, 1);
}
this.revisionStateColorPaletteTexture = this.glMust(
this.gl.createTexture(),
);
this.gl.activeTexture(this.gl.TEXTURE2);
this.gl.bindTexture(
this.gl.TEXTURE_2D,
this.revisionStateColorPaletteTexture,
);
this.gl.texImage2D(
this.gl.TEXTURE_2D,
0,
this.gl.RGBA,
this.gl.RGBA,
this.gl.UNSIGNED_BYTE,
revisionColorPaletteCanvas,
);
this.gl.texParameteri(
this.gl.TEXTURE_2D,
this.gl.TEXTURE_MIN_FILTER,
this.gl.NEAREST,
);
this.gl.texParameteri(
this.gl.TEXTURE_2D,
this.gl.TEXTURE_MAG_FILTER,
this.gl.NEAREST,
);
// log severity color palette
const [logSeverityColorPaletteCanvas, ctx2dForLogSeverity] =
this.generateCanvasForTextureSource(severities.length, 2, false);
logSeverityColorPaletteCanvas.style.imageRendering = 'pixelated';
for (let i = 0; i < severities.length; i++) {
ctx2dForLogSeverity.fillStyle = severityColors[severities[i]];
ctx2dForLogSeverity.fillRect(i, 0, 1, 1);
ctx2dForLogSeverity.fillStyle = severityBorderColors[severities[i]];
ctx2dForLogSeverity.fillRect(i, 1, 1, 1);
}
this.logSeverityColorPaletteTexture = this.glMust(this.gl.createTexture());
this.gl.activeTexture(this.gl.TEXTURE3);
this.gl.bindTexture(
this.gl.TEXTURE_2D,
this.logSeverityColorPaletteTexture,
);
this.gl.texImage2D(
this.gl.TEXTURE_2D,
0,
this.gl.RGBA,
this.gl.RGBA,
this.gl.UNSIGNED_BYTE,
logSeverityColorPaletteCanvas,
);
this.gl.texParameteri(
this.gl.TEXTURE_2D,
this.gl.TEXTURE_MIN_FILTER,
this.gl.NEAREST,
);
this.gl.texParameteri(
this.gl.TEXTURE_2D,
this.gl.TEXTURE_MAG_FILTER,
this.gl.NEAREST,
);
}