monaco-editor
Version:
A browser based code editor
69 lines (57 loc) • 1.81 kB
JavaScript
/*---------------------------------------------------------------------------------------------
* Copyright (c) Microsoft Corporation. All rights reserved.
* Licensed under the MIT License. See License.txt in the project root for license information.
*--------------------------------------------------------------------------------------------*/
const rectangleRendererWgsl = /*wgsl*/ `
struct Vertex {
position: vec2f,
};
struct LayoutInfo {
canvasDims: vec2f,
viewportOffset: vec2f,
viewportDims: vec2f,
}
struct ScrollOffset {
offset: vec2f,
}
struct Shape {
position: vec2f,
size: vec2f,
color: vec4f,
};
struct VSOutput {
position: vec4f,
color: vec4f,
};
// Uniforms
var<uniform> layoutInfo: LayoutInfo;
// Storage buffers
var<storage, read> shapes: array<Shape>;
var<uniform> scrollOffset: ScrollOffset;
fn vs(
vert: Vertex,
instanceIndex: u32,
vertexIndex : u32
) -> VSOutput {
let shape = shapes[instanceIndex];
var vsOut: VSOutput;
vsOut.position = vec4f(
(
// Top left corner
vec2f(-1, 1) +
// Convert pixel position to clipspace
vec2f( 2, -2) / layoutInfo.canvasDims *
// Shape position and size
(layoutInfo.viewportOffset - scrollOffset.offset + shape.position + vert.position * shape.size)
),
0.0,
1.0
);
vsOut.color = shape.color;
return vsOut;
}
fn fs(vsOut: VSOutput) -> vec4f {
return vsOut.color;
}
`;
export { rectangleRendererWgsl };