metal绘制

This commit is contained in:
2025-02-24 04:43:48 +08:00
parent 0d92c395dd
commit 266b124c5c
7 changed files with 24 additions and 15 deletions

View File

@@ -2,6 +2,6 @@ project(mirage_example)
set(CMAKE_CXX_STANDARD 23) set(CMAKE_CXX_STANDARD 23)
set(SRC_FILES "") set(SRC_FILES "")
retrieve_files(src SRC_FILES) retrieve_files(${CMAKE_CURRENT_SOURCE_DIR}/src SRC_FILES)
add_executable(${PROJECT_NAME} ${SRC_FILES}) add_executable(${PROJECT_NAME} ${SRC_FILES})
target_link_libraries(${PROJECT_NAME} PRIVATE mirage_core) target_link_libraries(${PROJECT_NAME} PRIVATE mirage_core)

View File

@@ -6,6 +6,6 @@ int main(int argc, char* argv[]) {
init.size = {800, 600}; init.size = {800, 600};
init.resizable = true; init.resizable = true;
init.centered = true; init.centered = true;
init.api = mirage::renderer_api::opengl; // init.api = mirage::renderer_api::opengl;
return run(init); return run(init);
} }

View File

@@ -35,6 +35,7 @@ SHADER_EXTENSIONS = {
'dxil': 'dxil', 'dxil': 'dxil',
'dxbc': 'dxbc', 'dxbc': 'dxbc',
'metallib': 'metallib', 'metallib': 'metallib',
'metal': 'metal',
'wgsl': 'wgsl' 'wgsl': 'wgsl'
} }
@@ -44,7 +45,8 @@ TARGET_PROFILES = {
'spirv': ['-profile', 'spirv_1_6'], 'spirv': ['-profile', 'spirv_1_6'],
'dxbc': ['-profile', 'sm_5_0'], 'dxbc': ['-profile', 'sm_5_0'],
'dxil': ['-profile', 'sm_6_6'], 'dxil': ['-profile', 'sm_6_6'],
'metallib': ['-capability', 'metallib_3_1'] 'metallib': ['-capability', 'metallib'],
'metal': ['-capability', 'metal'],
} }
class ShaderEntry: class ShaderEntry:
@@ -419,7 +421,7 @@ def main():
parser = argparse.ArgumentParser(description="使用 slangc 编译着色器并生成 LLGL 渲染管线 C++ 头文件") parser = argparse.ArgumentParser(description="使用 slangc 编译着色器并生成 LLGL 渲染管线 C++ 头文件")
parser.add_argument("--shader-list", help="着色器列表文件路径") parser.add_argument("--shader-list", help="着色器列表文件路径")
parser.add_argument("--output-dir", help="输出目录") parser.add_argument("--output-dir", help="输出目录")
parser.add_argument("--slangc", default="slangc", help="slangc 编译器路径") parser.add_argument("--slangc", default="/Users/nanako/Documents/Slang/bin/slangc", help="slangc 编译器路径")
parser.add_argument("--debug", action="store_true", help="启用调试模式编译") parser.add_argument("--debug", action="store_true", help="启用调试模式编译")
parser.add_argument("--opengl", action="store_true", help="编译 OpenGL 着色器") parser.add_argument("--opengl", action="store_true", help="编译 OpenGL 着色器")
parser.add_argument("--vulkan", action="store_true", help="编译 Vulkan 着色器") parser.add_argument("--vulkan", action="store_true", help="编译 Vulkan 着色器")
@@ -435,7 +437,8 @@ def main():
['spirv', args.vulkan], ['spirv', args.vulkan],
['dxbc', args.d3d11], ['dxbc', args.d3d11],
['dxil', args.d3d12], ['dxil', args.d3d12],
['Metal Library Bytecode assembly', args.metal], ['metallib', args.metal],
['metal', args.metal],
] ]
output_dir = Path(args.output_dir or "shaders") output_dir = Path(args.output_dir or "shaders")

View File

@@ -163,6 +163,7 @@ namespace mirage {
vertex_buffer_descriptor.miscFlags = LLGL::MiscFlags::DynamicUsage; vertex_buffer_descriptor.miscFlags = LLGL::MiscFlags::DynamicUsage;
vertex_buffer_descriptor.cpuAccessFlags = LLGL::CPUAccessFlags::Write; vertex_buffer_descriptor.cpuAccessFlags = LLGL::CPUAccessFlags::Write;
vertex_buffer_descriptor.vertexAttribs = in_vertex_format.attributes; vertex_buffer_descriptor.vertexAttribs = in_vertex_format.attributes;
vertex_buffer_descriptor.stride = sizeof(T);
auto vertex_buffer = std::make_shared<render_buffer>(); auto vertex_buffer = std::make_shared<render_buffer>();
vertex_buffer->init(vertex_buffer_descriptor); vertex_buffer->init(vertex_buffer_descriptor);

View File

@@ -44,14 +44,19 @@ namespace mirage {
param_buffer->set(param); param_buffer->set(param);
LLGL::PipelineLayoutDescriptor pipeline_layout_desc; LLGL::PipelineLayoutDescriptor pipeline_layout_desc;
// pipeline_layout_desc.bindings.emplace_back(
// LLGL::ResourceType::Buffer,
// LLGL::BindFlags::VertexBuffer,
// LLGL::StageFlags::VertexStage,
// 0
// );
pipeline_layout_desc.bindings.emplace_back( pipeline_layout_desc.bindings.emplace_back(
LLGL::ResourceType::Buffer, LLGL::ResourceType::Buffer,
LLGL::BindFlags::ConstantBuffer, LLGL::BindFlags::ConstantBuffer,
LLGL::StageFlags::VertexStage, LLGL::StageFlags::VertexStage | LLGL::StageFlags::FragmentStage,
0 1
); );
pipeline = generated_pipelines::create_aorii_rect_pipeline(get_renderer(), swap_chain->GetRenderPass(), pipeline = generated_pipelines::create_aorii_rect_pipeline(get_renderer(), swap_chain->GetRenderPass(), pipeline_layout_desc);
pipeline_layout_desc);
push_rectangle({0, 0}, {100, 100}, linear_color::white); push_rectangle({0, 0}, {100, 100}, linear_color::white);
return true; return true;
@@ -75,16 +80,16 @@ namespace mirage {
command_buffer->Begin(); { command_buffer->Begin(); {
command_buffer->SetViewport(swap_chain->GetResolution()); command_buffer->SetViewport(swap_chain->GetResolution());
command_buffer->SetVertexBuffer(vertex_buffer->get_raw());
command_buffer->SetIndexBuffer(index_buffer->get_raw()); command_buffer->SetIndexBuffer(index_buffer->get_raw());
command_buffer->SetVertexBuffer(vertex_buffer->get_raw());
command_buffer->BeginRenderPass(*swap_chain); { command_buffer->BeginRenderPass(*swap_chain); {
command_buffer->Clear(LLGL::ClearFlags::Color, {0.1f, 0.1f, 0.2f, 1.0f}); command_buffer->Clear(LLGL::ClearFlags::Color, {0.1f, 0.1f, 0.2f, 1.0f});
command_buffer->SetPipelineState(*pipeline.pipeline_state); command_buffer->SetPipelineState(*pipeline.pipeline_state);
command_buffer->SetResource(0, param_buffer->get_raw()); command_buffer->SetResource(0, param_buffer->get_raw());
command_buffer->DrawIndexed(index_buffer->get_size() / sizeof(uint32_t), 0); command_buffer->DrawIndexed(index_buffer->get_size() / sizeof(uint32_t), 0);
} }
command_buffer->EndRenderPass(); command_buffer->EndRenderPass();

View File

@@ -79,4 +79,4 @@ namespace mirage {
return in_point.x() >= pos.x() && in_point.x() <= pos.x() + size.x() && in_point.y() >= pos.y() && in_point.y() <= pos.y() + size.y(); return in_point.x() >= pos.x() && in_point.x() <= pos.x() + size.x() && in_point.y() >= pos.y() && in_point.y() <= pos.y() + size.y();
} }
}; };
} }

View File

@@ -4,7 +4,7 @@ struct ParamBuffer
{ {
matrix transform; matrix transform;
}; };
ParameterBlock<ParamBuffer> param_buffer : register(b0); ParameterBlock<ParamBuffer> param_buffer : register(b1);
struct PSInput { struct PSInput {
float4 position : SV_POSITION; // 裁剪空间坐标 float4 position : SV_POSITION; // 裁剪空间坐标