Add renderer resource factory contract
This commit is contained in:
@@ -2211,22 +2211,22 @@ int record_render(int argc, char** argv)
|
||||
}
|
||||
|
||||
pp::renderer::RecordingRenderDevice device;
|
||||
pp::renderer::RecordingTexture2D texture(pp::renderer::TextureDesc {
|
||||
const auto texture = device.create_texture(pp::renderer::TextureDesc {
|
||||
.extent = pp::renderer::Extent2D { .width = args.width, .height = args.height },
|
||||
.format = pp::renderer::TextureFormat::rgba8,
|
||||
.render_target = true,
|
||||
});
|
||||
pp::renderer::RecordingRenderTarget target(pp::renderer::TextureDesc {
|
||||
const auto target = device.create_render_target(pp::renderer::TextureDesc {
|
||||
.extent = pp::renderer::Extent2D { .width = args.width, .height = args.height },
|
||||
.format = pp::renderer::TextureFormat::rgba8,
|
||||
.render_target = true,
|
||||
});
|
||||
pp::renderer::RecordingRenderTarget blit_target(pp::renderer::TextureDesc {
|
||||
const auto blit_target = device.create_render_target(pp::renderer::TextureDesc {
|
||||
.extent = pp::renderer::Extent2D { .width = args.width, .height = args.height },
|
||||
.format = pp::renderer::TextureFormat::rgba8,
|
||||
.render_target = true,
|
||||
});
|
||||
pp::renderer::RecordingReadbackBuffer readback_buffer(
|
||||
const auto readback_buffer = device.create_readback_buffer(
|
||||
static_cast<std::uint64_t>(args.width) * args.height * 4U);
|
||||
const std::array<std::byte, 4> upload_pixel {
|
||||
std::byte { 0xff },
|
||||
@@ -2234,17 +2234,54 @@ int record_render(int argc, char** argv)
|
||||
std::byte { 0xff },
|
||||
std::byte { 0xff },
|
||||
};
|
||||
pp::renderer::RecordingShaderProgram shader("pano-cli-record-render");
|
||||
pp::renderer::RecordingMesh mesh(pp::renderer::MeshDesc {
|
||||
static constexpr char shader_source[] = "void main() {}";
|
||||
const auto shader = device.create_shader_program(pp::renderer::ShaderProgramDesc {
|
||||
.debug_name = "pano-cli-record-render",
|
||||
.vertex = pp::renderer::ShaderStageSource {
|
||||
.source = shader_source,
|
||||
.source_size = sizeof(shader_source) - 1U,
|
||||
},
|
||||
.fragment = pp::renderer::ShaderStageSource {
|
||||
.source = shader_source,
|
||||
.source_size = sizeof(shader_source) - 1U,
|
||||
},
|
||||
});
|
||||
const auto mesh = device.create_mesh(pp::renderer::MeshDesc {
|
||||
.vertex_count = 3,
|
||||
.index_count = 3,
|
||||
.topology = pp::renderer::PrimitiveTopology::triangles,
|
||||
});
|
||||
|
||||
if (!texture.ok()) {
|
||||
print_error("record-render", texture.status().message);
|
||||
return 2;
|
||||
}
|
||||
if (!target.ok()) {
|
||||
print_error("record-render", target.status().message);
|
||||
return 2;
|
||||
}
|
||||
if (!blit_target.ok()) {
|
||||
print_error("record-render", blit_target.status().message);
|
||||
return 2;
|
||||
}
|
||||
if (!readback_buffer.ok()) {
|
||||
print_error("record-render", readback_buffer.status().message);
|
||||
return 2;
|
||||
}
|
||||
if (!shader.ok()) {
|
||||
print_error("record-render", shader.status().message);
|
||||
return 2;
|
||||
}
|
||||
if (!mesh.ok()) {
|
||||
print_error("record-render", mesh.status().message);
|
||||
return 2;
|
||||
}
|
||||
constexpr std::size_t created_resources = 6;
|
||||
|
||||
device.trace()->marker("renderer", "pano_cli_record_render");
|
||||
auto& context = device.immediate_context();
|
||||
const auto upload_status = context.upload_texture(
|
||||
texture,
|
||||
*texture.value(),
|
||||
pp::renderer::ReadbackRegion {
|
||||
.x = 0,
|
||||
.y = 0,
|
||||
@@ -2258,7 +2295,7 @@ int record_render(int argc, char** argv)
|
||||
}
|
||||
|
||||
const auto begin_status = context.begin_render_pass(
|
||||
target,
|
||||
*target.value(),
|
||||
pp::renderer::ClearColor { .r = 0.0F, .g = 0.0F, .b = 0.0F, .a = 1.0F });
|
||||
if (!begin_status.ok()) {
|
||||
print_error("record-render", begin_status.message);
|
||||
@@ -2284,7 +2321,7 @@ int record_render(int argc, char** argv)
|
||||
return 2;
|
||||
}
|
||||
|
||||
const auto shader_status = context.bind_shader(shader);
|
||||
const auto shader_status = context.bind_shader(*shader.value());
|
||||
const auto blend_status = context.set_blend_state(pp::renderer::BlendState {
|
||||
.enabled = true,
|
||||
.source_color = pp::renderer::BlendFactor::source_alpha,
|
||||
@@ -2297,7 +2334,7 @@ int record_render(int argc, char** argv)
|
||||
.write_enabled = true,
|
||||
.compare = pp::renderer::CompareOp::less_or_equal,
|
||||
});
|
||||
const auto bind_texture_status = context.bind_texture(0, texture);
|
||||
const auto bind_texture_status = context.bind_texture(0, *texture.value());
|
||||
const auto bind_sampler_status = context.bind_sampler(0, pp::renderer::SamplerDesc {
|
||||
.min_filter = pp::renderer::SamplerFilter::linear,
|
||||
.mag_filter = pp::renderer::SamplerFilter::linear,
|
||||
@@ -2306,7 +2343,7 @@ int record_render(int argc, char** argv)
|
||||
.address_v = pp::renderer::SamplerAddressMode::clamp_to_edge,
|
||||
.address_w = pp::renderer::SamplerAddressMode::clamp_to_edge,
|
||||
});
|
||||
const auto mesh_status = context.bind_mesh(mesh);
|
||||
const auto mesh_status = context.bind_mesh(*mesh.value());
|
||||
const auto draw_status = context.draw();
|
||||
context.end_render_pass();
|
||||
|
||||
@@ -2340,34 +2377,34 @@ int record_render(int argc, char** argv)
|
||||
}
|
||||
|
||||
const auto readback_status = context.read_texture(
|
||||
texture,
|
||||
*texture.value(),
|
||||
pp::renderer::ReadbackRegion {
|
||||
.x = 0,
|
||||
.y = 0,
|
||||
.width = args.width,
|
||||
.height = args.height,
|
||||
},
|
||||
readback_buffer);
|
||||
*readback_buffer.value());
|
||||
if (!readback_status.ok()) {
|
||||
print_error("record-render", readback_status.message);
|
||||
return 2;
|
||||
}
|
||||
|
||||
const auto capture_status = context.capture_frame(target, readback_buffer);
|
||||
const auto capture_status = context.capture_frame(*target.value(), *readback_buffer.value());
|
||||
if (!capture_status.ok()) {
|
||||
print_error("record-render", capture_status.message);
|
||||
return 2;
|
||||
}
|
||||
|
||||
const auto blit_status = context.blit_render_target(
|
||||
target,
|
||||
*target.value(),
|
||||
pp::renderer::ReadbackRegion {
|
||||
.x = 0,
|
||||
.y = 0,
|
||||
.width = args.width,
|
||||
.height = args.height,
|
||||
},
|
||||
blit_target,
|
||||
*blit_target.value(),
|
||||
pp::renderer::ReadbackRegion {
|
||||
.x = 0,
|
||||
.y = 0,
|
||||
@@ -2442,6 +2479,7 @@ int record_render(int argc, char** argv)
|
||||
<< ",\"target\":{\"width\":" << args.width
|
||||
<< ",\"height\":" << args.height
|
||||
<< ",\"format\":\"rgba8\"}"
|
||||
<< ",\"createdResources\":" << created_resources
|
||||
<< ",\"commands\":" << commands.size()
|
||||
<< ",\"drawCommands\":" << draw_commands
|
||||
<< ",\"drawVertices\":" << draw_vertices
|
||||
|
||||
Reference in New Issue
Block a user