封装render_context
This commit is contained in:
@@ -1,17 +1,12 @@
|
||||
#include "render_context.h"
|
||||
|
||||
#include "LLGL/Utils/VertexFormat.h"
|
||||
#include "mirage.h"
|
||||
|
||||
namespace mirage {
|
||||
render_context::~render_context() {
|
||||
if (main_command_buffer) {
|
||||
get_renderer()->Release(*main_command_buffer);
|
||||
}
|
||||
if (vertex_buffer) {
|
||||
get_renderer()->Release(*vertex_buffer);
|
||||
}
|
||||
if (swap_chain) {
|
||||
get_renderer()->Release(*swap_chain);
|
||||
if (command_buffer) {
|
||||
get_renderer()->Release(*command_buffer);
|
||||
}
|
||||
}
|
||||
bool render_context::init(const swap_chain_descriptor& in_desc, const std::shared_ptr<LLGL::Surface>& in_surface) {
|
||||
@@ -22,30 +17,30 @@ namespace mirage {
|
||||
spdlog::error("无法创建交换链");
|
||||
return false;
|
||||
}
|
||||
main_command_buffer = get_renderer()->CreateCommandBuffer(LLGL::CommandBufferFlags::ImmediateSubmit);
|
||||
if (main_command_buffer == nullptr) {
|
||||
command_buffer = get_renderer()->CreateCommandBuffer(LLGL::CommandBufferFlags::ImmediateSubmit);
|
||||
if (command_buffer == nullptr) {
|
||||
spdlog::error("无法创建命令缓冲区");
|
||||
return false;
|
||||
}
|
||||
set_vsync(in_desc.vsync);
|
||||
// LLGL::BufferDescriptor vertex_buffer_descriptor{};
|
||||
// vertex_buffer = get_renderer()->CreateBuffer(vertex_buffer_descriptor);
|
||||
create_vertex_buffer();
|
||||
create_index_buffer();
|
||||
return true;
|
||||
}
|
||||
render_context::update_status render_context::update(const duration_type& in_delta_time) {
|
||||
if (!main_command_buffer || !swap_chain) {
|
||||
if (!command_buffer || !swap_chain) {
|
||||
return update_status::fail;
|
||||
}
|
||||
if (!swap_chain->IsPresentable()) {
|
||||
return update_status::wait_for_present;
|
||||
}
|
||||
main_command_buffer->Begin();
|
||||
command_buffer->Begin();
|
||||
{
|
||||
main_command_buffer->BeginRenderPass(*swap_chain);
|
||||
main_command_buffer->Clear(LLGL::ClearFlags::Color, {0.1f, 0.1f, 0.2f, 1.0f});
|
||||
main_command_buffer->EndRenderPass();
|
||||
command_buffer->BeginRenderPass(*swap_chain);
|
||||
command_buffer->Clear(LLGL::ClearFlags::Color, {0.1f, 0.1f, 0.2f, 1.0f});
|
||||
command_buffer->EndRenderPass();
|
||||
}
|
||||
main_command_buffer->End();
|
||||
command_buffer->End();
|
||||
swap_chain->Present();
|
||||
return update_status::success;
|
||||
}
|
||||
@@ -62,4 +57,29 @@ namespace mirage {
|
||||
spdlog::info("垂直同步: {}", vsync);
|
||||
}
|
||||
}
|
||||
|
||||
void render_context::create_vertex_buffer() {
|
||||
// 创建顶点格式布局
|
||||
LLGL::VertexFormat vertexFormat;
|
||||
|
||||
// 添加顶点属性
|
||||
vertexFormat.AppendAttribute({"position", LLGL::Format::RGB32Float}); // float3 position
|
||||
vertexFormat.AppendAttribute({"texCoord0", LLGL::Format::RG32Float}); // float2 uv
|
||||
vertexFormat.AppendAttribute({"color", LLGL::Format::RGBA32Float}); // float4 color
|
||||
vertexFormat.AppendAttribute({"texCoord1", LLGL::Format::RGBA32Float}); // float4 param_a
|
||||
vertexFormat.AppendAttribute({"texCoord2", LLGL::Format::RGBA32Float}); // float4 param_b
|
||||
vertexFormat.AppendAttribute({"texCoord3", LLGL::Format::RGBA32Float}); // float4 param_c
|
||||
|
||||
LLGL::BufferDescriptor vertex_buffer_descriptor{};
|
||||
vertex_buffer_descriptor.size = sizeof(vertex_t) * 512;
|
||||
vertex_buffer_descriptor.bindFlags = LLGL::BindFlags::VertexBuffer;
|
||||
vertex_buffer_descriptor.vertexAttribs = vertexFormat.attributes;
|
||||
vertex_buffer.init(vertex_buffer_descriptor);
|
||||
}
|
||||
void render_context::create_index_buffer() {
|
||||
LLGL::BufferDescriptor index_buffer_descriptor{};
|
||||
index_buffer_descriptor.size = sizeof(triangle_index_t) * 512;
|
||||
index_buffer_descriptor.bindFlags = LLGL::BindFlags::IndexBuffer;
|
||||
index_buffer.init(index_buffer_descriptor);
|
||||
}
|
||||
} // namespace mirage
|
||||
|
||||
Reference in New Issue
Block a user