metal绘制
This commit is contained in:
parent
0d92c395dd
commit
266b124c5c
@ -2,6 +2,6 @@ project(mirage_example)
|
||||
set(CMAKE_CXX_STANDARD 23)
|
||||
|
||||
set(SRC_FILES "")
|
||||
retrieve_files(src SRC_FILES)
|
||||
retrieve_files(${CMAKE_CURRENT_SOURCE_DIR}/src SRC_FILES)
|
||||
add_executable(${PROJECT_NAME} ${SRC_FILES})
|
||||
target_link_libraries(${PROJECT_NAME} PRIVATE mirage_core)
|
||||
|
@ -6,6 +6,6 @@ int main(int argc, char* argv[]) {
|
||||
init.size = {800, 600};
|
||||
init.resizable = true;
|
||||
init.centered = true;
|
||||
init.api = mirage::renderer_api::opengl;
|
||||
// init.api = mirage::renderer_api::opengl;
|
||||
return run(init);
|
||||
}
|
||||
|
@ -35,6 +35,7 @@ SHADER_EXTENSIONS = {
|
||||
'dxil': 'dxil',
|
||||
'dxbc': 'dxbc',
|
||||
'metallib': 'metallib',
|
||||
'metal': 'metal',
|
||||
'wgsl': 'wgsl'
|
||||
}
|
||||
|
||||
@ -44,7 +45,8 @@ TARGET_PROFILES = {
|
||||
'spirv': ['-profile', 'spirv_1_6'],
|
||||
'dxbc': ['-profile', 'sm_5_0'],
|
||||
'dxil': ['-profile', 'sm_6_6'],
|
||||
'metallib': ['-capability', 'metallib_3_1']
|
||||
'metallib': ['-capability', 'metallib'],
|
||||
'metal': ['-capability', 'metal'],
|
||||
}
|
||||
|
||||
class ShaderEntry:
|
||||
@ -419,7 +421,7 @@ def main():
|
||||
parser = argparse.ArgumentParser(description="使用 slangc 编译着色器并生成 LLGL 渲染管线 C++ 头文件")
|
||||
parser.add_argument("--shader-list", 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("--opengl", action="store_true", help="编译 OpenGL 着色器")
|
||||
parser.add_argument("--vulkan", action="store_true", help="编译 Vulkan 着色器")
|
||||
@ -435,7 +437,8 @@ def main():
|
||||
['spirv', args.vulkan],
|
||||
['dxbc', args.d3d11],
|
||||
['dxil', args.d3d12],
|
||||
['Metal Library Bytecode assembly', args.metal],
|
||||
['metallib', args.metal],
|
||||
['metal', args.metal],
|
||||
]
|
||||
|
||||
output_dir = Path(args.output_dir or "shaders")
|
||||
|
@ -163,6 +163,7 @@ namespace mirage {
|
||||
vertex_buffer_descriptor.miscFlags = LLGL::MiscFlags::DynamicUsage;
|
||||
vertex_buffer_descriptor.cpuAccessFlags = LLGL::CPUAccessFlags::Write;
|
||||
vertex_buffer_descriptor.vertexAttribs = in_vertex_format.attributes;
|
||||
vertex_buffer_descriptor.stride = sizeof(T);
|
||||
|
||||
auto vertex_buffer = std::make_shared<render_buffer>();
|
||||
vertex_buffer->init(vertex_buffer_descriptor);
|
||||
|
@ -44,14 +44,19 @@ namespace mirage {
|
||||
param_buffer->set(param);
|
||||
|
||||
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(
|
||||
LLGL::ResourceType::Buffer,
|
||||
LLGL::BindFlags::ConstantBuffer,
|
||||
LLGL::StageFlags::VertexStage,
|
||||
0
|
||||
LLGL::StageFlags::VertexStage | LLGL::StageFlags::FragmentStage,
|
||||
1
|
||||
);
|
||||
pipeline = generated_pipelines::create_aorii_rect_pipeline(get_renderer(), swap_chain->GetRenderPass(),
|
||||
pipeline_layout_desc);
|
||||
pipeline = generated_pipelines::create_aorii_rect_pipeline(get_renderer(), swap_chain->GetRenderPass(), pipeline_layout_desc);
|
||||
|
||||
push_rectangle({0, 0}, {100, 100}, linear_color::white);
|
||||
return true;
|
||||
@ -75,16 +80,16 @@ namespace mirage {
|
||||
|
||||
command_buffer->Begin(); {
|
||||
command_buffer->SetViewport(swap_chain->GetResolution());
|
||||
command_buffer->SetVertexBuffer(vertex_buffer->get_raw());
|
||||
|
||||
command_buffer->SetIndexBuffer(index_buffer->get_raw());
|
||||
command_buffer->SetVertexBuffer(vertex_buffer->get_raw());
|
||||
|
||||
command_buffer->BeginRenderPass(*swap_chain); {
|
||||
command_buffer->Clear(LLGL::ClearFlags::Color, {0.1f, 0.1f, 0.2f, 1.0f});
|
||||
|
||||
command_buffer->SetPipelineState(*pipeline.pipeline_state);
|
||||
|
||||
command_buffer->SetResource(0, param_buffer->get_raw());
|
||||
|
||||
|
||||
|
||||
command_buffer->DrawIndexed(index_buffer->get_size() / sizeof(uint32_t), 0);
|
||||
}
|
||||
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();
|
||||
}
|
||||
};
|
||||
}
|
||||
}
|
||||
|
@ -4,7 +4,7 @@ struct ParamBuffer
|
||||
{
|
||||
matrix transform;
|
||||
};
|
||||
ParameterBlock<ParamBuffer> param_buffer : register(b0);
|
||||
ParameterBlock<ParamBuffer> param_buffer : register(b1);
|
||||
|
||||
struct PSInput {
|
||||
float4 position : SV_POSITION; // 裁剪空间坐标
|
||||
|
Loading…
x
Reference in New Issue
Block a user