mirror of
https://github.com/TomHarte/CLK.git
synced 2024-11-26 23:52:26 +00:00
Enables blending; attempts to enable frame preservation.
The latter seems to be evidencing a double buffer at play. More investigation required. On the plus side, the direct route is still well within GPU budget at 4k on my Core M. So a huge improvement there.
This commit is contained in:
parent
a136a00a2f
commit
27ca782cac
@ -27,7 +27,7 @@
|
||||
<rect key="frame" x="0.0" y="0.0" width="600" height="450"/>
|
||||
<autoresizingMask key="autoresizingMask"/>
|
||||
<subviews>
|
||||
<openGLView hidden="YES" wantsLayer="YES" useAuxiliaryDepthBufferStencil="NO" allowOffline="YES" wantsBestResolutionOpenGLSurface="YES" translatesAutoresizingMaskIntoConstraints="NO" id="DEG-fq-cjd" customClass="CSScanTargetView">
|
||||
<openGLView hidden="YES" wantsLayer="YES" stencilSize="8bit" useAuxiliaryDepthBufferStencil="NO" allowOffline="YES" wantsBestResolutionOpenGLSurface="YES" translatesAutoresizingMaskIntoConstraints="NO" id="DEG-fq-cjd" customClass="CSScanTargetView">
|
||||
<rect key="frame" x="0.0" y="0.0" width="600" height="450"/>
|
||||
</openGLView>
|
||||
<box hidden="YES" boxType="custom" cornerRadius="4" title="Box" titlePosition="noTitle" translatesAutoresizingMaskIntoConstraints="NO" id="4ap-Gi-2AO">
|
||||
|
@ -112,7 +112,7 @@ using BufferingScanTarget = Outputs::Display::BufferingScanTarget;
|
||||
//
|
||||
uniforms()->scale[0] = modals.output_scale.x;
|
||||
uniforms()->scale[1] = modals.output_scale.y;
|
||||
uniforms()->lineWidth = 1.0f / modals.expected_vertical_lines;
|
||||
uniforms()->lineWidth = 0.75f / modals.expected_vertical_lines; // TODO: return to 1.0 (or slightly more), once happy.
|
||||
|
||||
const auto toRGB = to_rgb_matrix(modals.composite_colour_space);
|
||||
uniforms()->toRGB = simd::float3x3(
|
||||
@ -205,6 +205,11 @@ using BufferingScanTarget = Outputs::Display::BufferingScanTarget;
|
||||
break;
|
||||
}
|
||||
|
||||
// Enable blending.
|
||||
pipelineDescriptor.colorAttachments[0].blendingEnabled = YES;
|
||||
pipelineDescriptor.colorAttachments[0].sourceRGBBlendFactor = MTLBlendFactorSourceAlpha;
|
||||
pipelineDescriptor.colorAttachments[0].destinationRGBBlendFactor = MTLBlendFactorOneMinusSourceAlpha;
|
||||
|
||||
_scanPipeline = [view.device newRenderPipelineStateWithDescriptor:pipelineDescriptor error:nil];
|
||||
}
|
||||
|
||||
@ -219,9 +224,15 @@ using BufferingScanTarget = Outputs::Display::BufferingScanTarget;
|
||||
[self setModals:*newModals view:view];
|
||||
}
|
||||
|
||||
// Buy into framebuffer preservation.
|
||||
// TODO: do I really need to do this on every draw?
|
||||
MTLRenderPassDescriptor *const descriptor = view.currentRenderPassDescriptor;
|
||||
descriptor.colorAttachments[0].loadAction = MTLLoadActionLoad;
|
||||
descriptor.colorAttachments[0].storeAction = MTLStoreActionStore;
|
||||
descriptor.colorAttachments[0].clearColor = MTLClearColorMake(1.0, 1.0, 0.0, 1.0);
|
||||
|
||||
// Generate a command encoder for the view.
|
||||
id <MTLCommandBuffer> commandBuffer = [_commandQueue commandBuffer];
|
||||
MTLRenderPassDescriptor *const descriptor = view.currentRenderPassDescriptor;
|
||||
id <MTLRenderCommandEncoder> encoder = [commandBuffer renderCommandEncoderWithDescriptor:descriptor];
|
||||
|
||||
// Drawing. Just scans.
|
||||
|
@ -171,9 +171,10 @@ float3 convertRed1Green1Blue1(SourceInterpolator vert, texture2d<ushort> texture
|
||||
return float3(sample&4, sample&2, sample&1);
|
||||
}
|
||||
|
||||
// TODO: don't hard code the 0.64 in sample##name.
|
||||
#define DeclareShaders(name, pixelType) \
|
||||
fragment float4 sample##name(SourceInterpolator vert [[stage_in]], texture2d<pixelType> texture [[texture(0)]]) { \
|
||||
return float4(convert##name(vert, texture), 1.0); \
|
||||
return float4(convert##name(vert, texture), 0.64); \
|
||||
} \
|
||||
\
|
||||
fragment float4 svideoSample##name(SourceInterpolator vert [[stage_in]], texture2d<pixelType> texture [[texture(0)]], constant Uniforms &uniforms [[buffer(0)]]) { \
|
||||
|
Loading…
Reference in New Issue
Block a user