metal绘制
This commit is contained in:
@@ -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)
|
||||||
|
|||||||
@@ -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);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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")
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|||||||
@@ -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();
|
||||||
|
|||||||
@@ -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();
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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; // 裁剪空间坐标
|
||||||
|
|||||||
Reference in New Issue
Block a user