mirror of
https://github.com/ghostty-org/ghostty.git
synced 2025-07-14 07:46:12 +03:00
renderer/metal: setup sampler state
This commit is contained in:
@ -103,7 +103,6 @@ fn buildGlslang(
|
||||
"SPIRV/SpvBuilder.cpp",
|
||||
"SPIRV/SpvPostProcess.cpp",
|
||||
"SPIRV/doc.cpp",
|
||||
"SPIRV/SpvTools.cpp",
|
||||
"SPIRV/disassemble.cpp",
|
||||
"SPIRV/CInterface/spirv_c_interface.cpp",
|
||||
},
|
||||
|
@ -27,6 +27,7 @@ const Terminal = terminal.Terminal;
|
||||
const mtl = @import("metal/api.zig");
|
||||
const mtl_buffer = @import("metal/buffer.zig");
|
||||
const mtl_image = @import("metal/image.zig");
|
||||
const mtl_sampler = @import("metal/sampler.zig");
|
||||
const mtl_shaders = @import("metal/shaders.zig");
|
||||
const Image = mtl_image.Image;
|
||||
const ImageMap = mtl_image.ImageMap;
|
||||
@ -282,12 +283,10 @@ pub fn init(alloc: Allocator, options: renderer.Options) !Metal {
|
||||
log.warn("error loading custom shaders err={}", .{err});
|
||||
break :err &.{};
|
||||
};
|
||||
_ = custom_shaders;
|
||||
|
||||
// Initialize our shaders
|
||||
var shaders = try Shaders.init(alloc, device, &.{
|
||||
@embedFile("shaders/temp3.metal"),
|
||||
});
|
||||
var shaders = try Shaders.init(alloc, device, custom_shaders);
|
||||
//var shaders = try Shaders.init(alloc, device, &.{@embedFile("shaders/temp3.metal")});
|
||||
errdefer shaders.deinit(alloc);
|
||||
|
||||
// Font atlas textures
|
||||
@ -779,23 +778,9 @@ fn drawPostShader(
|
||||
encoder: objc.Object,
|
||||
texture: objc.c.id,
|
||||
) !void {
|
||||
// Use our image shader pipeline
|
||||
encoder.msgSend(
|
||||
void,
|
||||
objc.sel("setRenderPipelineState:"),
|
||||
.{self.shaders.post_pipelines[0].value},
|
||||
);
|
||||
|
||||
// Set our uniform, which is the only shared buffer
|
||||
encoder.msgSend(
|
||||
void,
|
||||
objc.sel("setVertexBytes:length:atIndex:"),
|
||||
.{
|
||||
@as(*const anyopaque, @ptrCast(&self.uniforms)),
|
||||
@as(c_ulong, @sizeOf(@TypeOf(self.uniforms))),
|
||||
@as(c_ulong, 1),
|
||||
},
|
||||
);
|
||||
// Build our sampler for our texture
|
||||
var sampler = try mtl_sampler.Sampler.init(self.device);
|
||||
defer sampler.deinit();
|
||||
|
||||
const Buffer = mtl_buffer.Buffer(mtl_shaders.PostUniforms);
|
||||
var buf = try Buffer.initFill(self.device, &.{.{
|
||||
@ -817,6 +802,20 @@ fn drawPostShader(
|
||||
defer buf.deinit();
|
||||
post_time += 1;
|
||||
|
||||
// Use our custom shader pipeline
|
||||
encoder.msgSend(
|
||||
void,
|
||||
objc.sel("setRenderPipelineState:"),
|
||||
.{self.shaders.post_pipelines[0].value},
|
||||
);
|
||||
|
||||
// Set our sampler
|
||||
encoder.msgSend(
|
||||
void,
|
||||
objc.sel("setFragmentSamplerState:atIndex:"),
|
||||
.{ sampler.sampler.value, @as(c_ulong, 0) },
|
||||
);
|
||||
|
||||
// Set our buffer
|
||||
encoder.msgSend(
|
||||
void,
|
||||
|
31
src/renderer/metal/sampler.zig
Normal file
31
src/renderer/metal/sampler.zig
Normal file
@ -0,0 +1,31 @@
|
||||
const std = @import("std");
|
||||
const Allocator = std.mem.Allocator;
|
||||
const assert = std.debug.assert;
|
||||
const objc = @import("objc");
|
||||
|
||||
pub const Sampler = struct {
|
||||
sampler: objc.Object,
|
||||
|
||||
pub fn init(device: objc.Object) !Sampler {
|
||||
const desc = init: {
|
||||
const Class = objc.getClass("MTLSamplerDescriptor").?;
|
||||
const id_alloc = Class.msgSend(objc.Object, objc.sel("alloc"), .{});
|
||||
const id_init = id_alloc.msgSend(objc.Object, objc.sel("init"), .{});
|
||||
break :init id_init;
|
||||
};
|
||||
defer desc.msgSend(void, objc.sel("release"), .{});
|
||||
|
||||
const sampler = device.msgSend(
|
||||
objc.Object,
|
||||
objc.sel("newSamplerStateWithDescriptor:"),
|
||||
.{desc},
|
||||
);
|
||||
errdefer sampler.msgSend(void, objc.sel("release"), .{});
|
||||
|
||||
return .{ .sampler = sampler };
|
||||
}
|
||||
|
||||
pub fn deinit(self: *Sampler) void {
|
||||
self.sampler.msgSend(void, objc.sel("release"), .{});
|
||||
}
|
||||
};
|
@ -102,7 +102,7 @@ void mainImage(thread float4& fragColor, thread const float2& fragCoord, constan
|
||||
fragColor = float4(col, 1.0);
|
||||
}
|
||||
|
||||
fragment main0_out main0(constant Globals& _89 [[buffer(0)]], texture2d<float> iChannel0 [[texture(0)]], float4 gl_FragCoord [[position]])
|
||||
fragment main0_out main0(constant Globals& _89 [[buffer(0)]], texture2d<float> iChannel0 [[texture(0)]], sampler iChannel0Smplr [[sampler(0)]], float4 gl_FragCoord [[position]])
|
||||
{
|
||||
constexpr sampler iChannel0Smplr(address::clamp_to_edge, filter::linear);
|
||||
|
||||
|
Reference in New Issue
Block a user