mirror of
https://github.com/TomHarte/CLK.git
synced 2024-09-08 18:55:14 +00:00
Does just enough to get the correct (aspect ratio aside) output of scan outlines.
So, up next, can I start streaming these things?
This commit is contained in:
parent
c575aa0640
commit
fbda7aab23
@ -42,10 +42,10 @@ constexpr size_t NumBufferedScans = 2048;
|
|||||||
|
|
||||||
// Install the standard quad.
|
// Install the standard quad.
|
||||||
constexpr float vertices[] = {
|
constexpr float vertices[] = {
|
||||||
-0.9f, -0.9f,
|
0.0f, 0.0f,
|
||||||
-0.9f, 0.9f,
|
0.0f, 1.0f,
|
||||||
0.9f, -0.9f,
|
1.0f, 0.0f,
|
||||||
0.9f, 0.9f,
|
1.0f, 1.0f,
|
||||||
};
|
};
|
||||||
_quadBuffer = [view.device newBufferWithBytes:vertices length:sizeof(vertices) options:MTLResourceCPUCacheModeDefaultCache];
|
_quadBuffer = [view.device newBufferWithBytes:vertices length:sizeof(vertices) options:MTLResourceCPUCacheModeDefaultCache];
|
||||||
|
|
||||||
@ -53,7 +53,7 @@ constexpr size_t NumBufferedScans = 2048;
|
|||||||
_uniformsBuffer = [view.device newBufferWithLength:16 options:MTLResourceCPUCacheModeWriteCombined];
|
_uniformsBuffer = [view.device newBufferWithLength:16 options:MTLResourceCPUCacheModeWriteCombined];
|
||||||
const Uniforms testUniforms = {
|
const Uniforms testUniforms = {
|
||||||
.scale = {1024, 1024},
|
.scale = {1024, 1024},
|
||||||
.lineWidth = 0.1f
|
.lineWidth = 1.0f / 312.0f
|
||||||
};
|
};
|
||||||
[self setUniforms:testUniforms];
|
[self setUniforms:testUniforms];
|
||||||
|
|
||||||
@ -99,7 +99,7 @@ constexpr size_t NumBufferedScans = 2048;
|
|||||||
scans[1].scan.end_points[0].x = 0;
|
scans[1].scan.end_points[0].x = 0;
|
||||||
scans[1].scan.end_points[0].y = 768;
|
scans[1].scan.end_points[0].y = 768;
|
||||||
scans[1].scan.end_points[1].x = 512;
|
scans[1].scan.end_points[1].x = 512;
|
||||||
scans[1].scan.end_points[1].y = 128;
|
scans[1].scan.end_points[1].y = 512;
|
||||||
|
|
||||||
memcpy(_scansBuffer.contents, scans, sizeof(scans));
|
memcpy(_scansBuffer.contents, scans, sizeof(scans));
|
||||||
}
|
}
|
||||||
|
@ -53,8 +53,27 @@ vertex ColouredVertex scanVertexMain( QuadInputVertex vert [[stage_in]],
|
|||||||
constant Uniforms &uniforms [[buffer(1)]],
|
constant Uniforms &uniforms [[buffer(1)]],
|
||||||
constant Scan *scans [[buffer(2)]],
|
constant Scan *scans [[buffer(2)]],
|
||||||
ushort instance [[instance_id]]) {
|
ushort instance [[instance_id]]) {
|
||||||
|
// Unpack start and end vertices.
|
||||||
|
const float2 start = float2(
|
||||||
|
float(scans[instance].startPosition & 0xffff) / float(uniforms.scale.x),
|
||||||
|
float(scans[instance].startPosition >> 16) / float(uniforms.scale.y)
|
||||||
|
);
|
||||||
|
const float2 end = float2(
|
||||||
|
float(scans[instance].endPosition & 0xffff) / float(uniforms.scale.x),
|
||||||
|
float(scans[instance].endPosition >> 16) / float(uniforms.scale.y)
|
||||||
|
);
|
||||||
|
|
||||||
|
// Calculate the tangent and normal.
|
||||||
|
const float2 tangent = end - start;
|
||||||
|
const float2 normal = float2(-tangent.y, tangent.x) / length(tangent);
|
||||||
|
|
||||||
|
// Hence determine this quad's real shape.
|
||||||
ColouredVertex output;
|
ColouredVertex output;
|
||||||
output.position = float4(vert.position * uniforms.lineWidth, 0.0, 1.0);
|
output.position = float4(
|
||||||
|
(start + vert.position.x * tangent + vert.position.y * normal * uniforms.lineWidth) * float2(2.0, -2.0) + float2(-1.0, 1.0),
|
||||||
|
0.0,
|
||||||
|
1.0
|
||||||
|
);
|
||||||
return output;
|
return output;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user