Added KRMesh::isReady

Vulkan test code now uses KRMesh and asset ingestion pipeline for vertex and index data.
Updated Vulkan test shader to match KRMesh attribute layout.
This commit is contained in:
2022-07-07 00:23:14 -07:00
parent e976e94da1
commit 88a1ca186b
4 changed files with 26 additions and 17 deletions

View File

@@ -219,22 +219,20 @@ void KRCamera::renderFrame(VkCommandBuffer& commandBuffer, KRSurface& compositeS
GL_POP_GROUP_MARKER; GL_POP_GROUP_MARKER;
// ---------- Start: Vulkan Debug Code ---------- // ---------- Start: Vulkan Debug Code ----------
KRMeshManager::KRVBOData& testVertices = getContext().getMeshManager()->KRENGINE_VBO_DATA_2D_SQUARE_VERTICES;
bool haveMesh = testVertices.isVBOReady();
if (haveMesh) { KRMesh* sphereMesh = getContext().getMeshManager()->getMaxLODModel("__sphere");
if (sphereMesh && sphereMesh->isReady()) {
PipelineInfo info{}; PipelineInfo info{};
std::string shader_name("vulkan_test"); std::string shader_name("vulkan_test");
info.shader_name = &shader_name; info.shader_name = &shader_name;
info.pCamera = this; info.pCamera = this;
info.renderPass = KRNode::RENDER_PASS_FORWARD_TRANSPARENT; info.renderPass = KRNode::RENDER_PASS_FORWARD_TRANSPARENT;
info.rasterMode = PipelineInfo::RasterMode::kAlphaBlend; info.rasterMode = PipelineInfo::RasterMode::kAlphaBlend;
info.vertexAttributes = testVertices.getVertexAttributes(); info.vertexAttributes = sphereMesh->getVertexAttributes();
info.modelFormat = KRMesh::model_format_t::KRENGINE_MODEL_FORMAT_STRIP; info.modelFormat = sphereMesh->getModelFormat();
KRPipeline* testPipeline = m_pContext->getPipelineManager()->getPipeline(compositeSurface, info); KRPipeline* testPipeline = m_pContext->getPipelineManager()->getPipeline(compositeSurface, info);
testPipeline->bind(commandBuffer); testPipeline->bind(commandBuffer);
testVertices.bind(commandBuffer); sphereMesh->renderNoMaterials(commandBuffer, info.renderPass, "Vulkan Test", "vulkan_test", 1.0);
vkCmdDraw(commandBuffer, 4, 1, 0, 0);
} }
// ---------- End: Vulkan Debug Code ---------- // ---------- End: Vulkan Debug Code ----------

View File

@@ -435,6 +435,21 @@ void KRMesh::renderNoMaterials(VkCommandBuffer& commandBuffer, KRNode::RenderPas
} }
} }
bool KRMesh::isReady() const
{
// TODO - This should be cached...
int submesh_count = getSubmeshCount();
for (int i = 0; i < submesh_count; i++) {
for (int j = 0; j < m_submeshes[i]->vbo_data_blocks.size(); j++) {
KRMeshManager::KRVBOData* vbo_data_block = m_submeshes[i]->vbo_data_blocks[j];
if (!vbo_data_block->isVBOReady()) {
return false;
}
}
}
return true;
}
void KRMesh::renderSubmesh(VkCommandBuffer& commandBuffer, int iSubmesh, KRNode::RenderPass renderPass, const std::string &object_name, const std::string &material_name, float lodCoverage) { void KRMesh::renderSubmesh(VkCommandBuffer& commandBuffer, int iSubmesh, KRNode::RenderPass renderPass, const std::string &object_name, const std::string &material_name, float lodCoverage) {
getSubmeshes(); getSubmeshes();
@@ -460,7 +475,8 @@ void KRMesh::renderSubmesh(VkCommandBuffer& commandBuffer, int iSubmesh, KRNode:
int vertex_draw_count = cVertexes; int vertex_draw_count = cVertexes;
if(vertex_draw_count > index_count - index_group_offset) vertex_draw_count = index_count - index_group_offset; if(vertex_draw_count > index_count - index_group_offset) vertex_draw_count = index_count - index_group_offset;
glDrawElements(GL_TRIANGLES, vertex_draw_count, GL_UNSIGNED_SHORT, BUFFER_OFFSET(index_group_offset * 2)); //glDrawElements(GL_TRIANGLES, vertex_draw_count, GL_UNSIGNED_SHORT, BUFFER_OFFSET(index_group_offset * 2));
vkCmdDrawIndexed(commandBuffer, vertex_draw_count, 1, index_group_offset, 0, 0);
m_pContext->getMeshManager()->log_draw_call(renderPass, object_name, material_name, vertex_draw_count); m_pContext->getMeshManager()->log_draw_call(renderPass, object_name, material_name, vertex_draw_count);
cVertexes -= vertex_draw_count; cVertexes -= vertex_draw_count;
index_group_offset = 0; index_group_offset = 0;

View File

@@ -128,6 +128,7 @@ public:
void optimizeIndexes(); void optimizeIndexes();
void renderNoMaterials(VkCommandBuffer& commandBuffer, KRNode::RenderPass renderPass, const std::string& object_name, const std::string& material_name, float lodCoverage); void renderNoMaterials(VkCommandBuffer& commandBuffer, KRNode::RenderPass renderPass, const std::string& object_name, const std::string& material_name, float lodCoverage);
bool isReady() const;
float getMaxDimension(); float getMaxDimension();

View File

@@ -5,17 +5,11 @@
layout(location = 0) out vec3 fragColor; layout(location = 0) out vec3 fragColor;
layout(location = 0) in vec3 vertex_position; layout(location = 0) in vec3 vertex_position;
layout(location = 1) in vec3 vertex_uv; layout(location = 1) in vec3 vertex_normal;
layout(location = 2) in vec3 vertex_tangent;
layout(constant_id = 0) const int QUALITY_LEVEL = 64; // Specialization constant test layout(constant_id = 0) const int QUALITY_LEVEL = 64; // Specialization constant test
vec3 colors[4] = vec3[](
vec3(1.0, 0.0, 0.0),
vec3(0.0, 1.0, 0.0),
vec3(0.0, 0.0, 1.0),
vec3(1.0, 0.0, 1.0)
);
void main() { void main() {
gl_Position = vec4(vertex_position * 0.5, 1.0); gl_Position = vec4(vertex_position * 0.5, 1.0);
fragColor = colors[gl_VertexIndex]; fragColor = vertex_normal * 0.25 + vec3(0.5, 0.5, 0.5);
} }