diff --git a/example/LightBasic/BlinnPhongDirectionLight.cpp b/example/LightBasic/BlinnPhongDirectionLight.cpp index a31cdc08..300dff56 100644 --- a/example/LightBasic/BlinnPhongDirectionLight.cpp +++ b/example/LightBasic/BlinnPhongDirectionLight.cpp @@ -64,7 +64,7 @@ private: bool InitVertexLumMP() { - mtl::Material3DCreateConfig cfg(device->GetDeviceAttribute(),"VertexLuminance3D",false,Prim::Lines); + mtl::Material3DCreateConfig cfg(device->GetDeviceAttribute(),"VertexLuminance3D",Prim::Lines); cfg.local_to_world=true; @@ -92,9 +92,10 @@ private: bool InitBlinnPhongSunLightMP() { - mtl::Material3DCreateConfig cfg(device->GetDeviceAttribute(),"BlinnPhong3D",true,Prim::Triangles); + mtl::Material3DCreateConfig cfg(device->GetDeviceAttribute(),"BlinnPhong3D",Prim::Triangles); cfg.local_to_world=true; + cfg.material_instance=true; mtl_blinnphong=db->LoadMaterial("Std3D/BlinnPhong/SunLightPureColor",&cfg); if(!mtl_blinnphong)return(false); diff --git a/inc/hgl/graph/VKCommandBuffer.h b/inc/hgl/graph/VKCommandBuffer.h index 3e33f6a5..61349832 100644 --- a/inc/hgl/graph/VKCommandBuffer.h +++ b/inc/hgl/graph/VKCommandBuffer.h @@ -191,6 +191,15 @@ public: //draw void DrawIndexed (const uint32_t index_count ) {vkCmdDrawIndexed(cmd_buf,index_count,1,0,0,0);} void Draw (const uint32_t vertex_count,const uint32_t instance_count) {vkCmdDraw(cmd_buf,vertex_count,instance_count,0,0);} void DrawIndexed (const uint32_t index_count ,const uint32_t instance_count) {vkCmdDrawIndexed(cmd_buf,index_count,instance_count,0,0,0);} + void DrawIndexed (const uint32_t index_count ,const uint32_t instance_count,const uint32_t firstIndex,const int32_t vertexOffset,const uint32_t firstInstance) + { + vkCmdDrawIndexed(cmd_buf, + index_count, + instance_count, + firstIndex, + vertexOffset, + firstInstance); + } // template void Draw (ARGS...args) {vkCmdDraw(cmd_buf,args...);} // template void DrawIndexed (ARGS...args) {vkCmdDrawIndexed(cmd_buf,args...);} diff --git a/src/SceneGraph/MaterialRenderList.cpp b/src/SceneGraph/MaterialRenderList.cpp index 6c905ed9..572fee45 100644 --- a/src/SceneGraph/MaterialRenderList.cpp +++ b/src/SceneGraph/MaterialRenderList.cpp @@ -164,7 +164,7 @@ bool MaterialRenderList::BindVAB(const VertexInputData *vid,const DrawData *dd,c } if(assign_buffer) //L2W/MI分发组 - vbo_list->Add(assign_buffer->GetVAB(),ASSIGN_VAB_STRIDE_BYTES*ri_index); + vbo_list->Add(assign_buffer->GetVAB(),0);//ASSIGN_VAB_STRIDE_BYTES*ri_index); //if(!vbo_list.IsFull()) //Joint组,暂未支持 //{ @@ -222,19 +222,18 @@ void MaterialRenderList::Render(RenderItem *ri) { last_vid=ri->vid; last_dd=nullptr; - } - if(!ri->dd->Comp(last_dd)) - { BindVAB(ri->vid,ri->dd,ri->first); - last_dd=ri->dd; + cmd_buf->BindIBO(ri->vid->ibo,0); } if(last_vid->ibo) { - cmd_buf->BindIBO(ri->vid->ibo,ri->dd->index_start); cmd_buf->DrawIndexed(ri->dd->index_count, - ri->count); + ri->count, + ri->dd->index_start, + ri->dd->vab_offset[0], + ri->first); } else { diff --git a/src/SceneGraph/Vulkan/VKRenderable.cpp b/src/SceneGraph/Vulkan/VKRenderable.cpp index 280fd100..261a3e68 100644 --- a/src/SceneGraph/Vulkan/VKRenderable.cpp +++ b/src/SceneGraph/Vulkan/VKRenderable.cpp @@ -145,7 +145,7 @@ Renderable *CreateRenderable(Primitive *prim,MaterialInstance *mi,Pipeline *p) return(nullptr); } - dd->vab_offset[i]=vab_access->start*vif->stride; + dd->vab_offset[i]=vab_access->start; vid->vab_list[i]=vab_access->vab->GetBuffer(); ++vif; } diff --git a/src/ShaderGen/2d/Std2DMaterialLoader.cpp b/src/ShaderGen/2d/Std2DMaterialLoader.cpp index e538ffcb..a90d1fd2 100644 --- a/src/ShaderGen/2d/Std2DMaterialLoader.cpp +++ b/src/ShaderGen/2d/Std2DMaterialLoader.cpp @@ -113,6 +113,9 @@ MaterialCreateInfo *LoadMaterialFromFile(const AnsiString &name,Material2DCreate if(!mfd) return nullptr; + if(mfd->mi.mi_bytes>0) + cfg->material_instance=true; + cfg->shader_stage_flag_bit=mfd->shader_stage_flag_bit; Std2DMaterialLoader mtl(mfd,cfg); diff --git a/src/ShaderGen/3d/Std3DMaterialLoader.cpp b/src/ShaderGen/3d/Std3DMaterialLoader.cpp index f72008d0..eb7f80a5 100644 --- a/src/ShaderGen/3d/Std3DMaterialLoader.cpp +++ b/src/ShaderGen/3d/Std3DMaterialLoader.cpp @@ -114,6 +114,9 @@ MaterialCreateInfo *LoadMaterialFromFile(const AnsiString &name,Material3DCreate if(!mfd) return nullptr; + if(mfd->mi.mi_bytes>0) + cfg->material_instance=true; + cfg->shader_stage_flag_bit=mfd->shader_stage_flag_bit; Std3DMaterialLoader mtl(mfd,cfg);