diff --git a/example/Vulkan/InlineGeometryScene.cpp b/example/Vulkan/InlineGeometryScene.cpp index df1b5c4f..537b1675 100644 --- a/example/Vulkan/InlineGeometryScene.cpp +++ b/example/Vulkan/InlineGeometryScene.cpp @@ -26,25 +26,37 @@ private: Material * material =nullptr; MaterialInstance * material_instance =nullptr; + Material * axis_material =nullptr; + MaterialInstance * axis_mi =nullptr; + PipelineData * pipeline_data =nullptr; - Pipeline * pipeline_line =nullptr; + Pipeline * axis_pipeline =nullptr; Pipeline * pipeline_solid =nullptr; - GPUBuffer * ubo_color =nullptr; + GPUBuffer * ubo_color =nullptr; - Renderable *ro_plane_grid, - *ro_cube, - *ro_sphere, - *ro_dome, - *ro_torus, - *ro_cylinder, - *ro_cone; + Renderable *ro_axis, + *ro_cube, + *ro_sphere, + *ro_dome, + *ro_torus, + *ro_cylinder, + *ro_cone; private: bool InitMaterial() { - material=db->CreateMaterial(OS_TEXT("res/material/VertexColor3D")); + axis_material=db->CreateMaterial(OS_TEXT("res/material/VertexColor3D")); + if(!axis_material)return(false); + + axis_mi=db->CreateMaterialInstance(axis_material); + if(!axis_mi)return(false); + + axis_pipeline=CreatePipeline(axis_material,InlinePipeline::Solid3D,Prim::Lines); + if(!axis_pipeline)return(false); + + material=db->CreateMaterial(OS_TEXT("res/material/DebugVertexNormal")); if(!material)return(false); material_instance=db->CreateMaterialInstance(material); @@ -53,8 +65,6 @@ private: pipeline_data=GetPipelineData(InlinePipeline::Solid3D); if(!pipeline_data)return(false); - pipeline_line=CreatePipeline(material,pipeline_data,Prim::Lines); - if(!pipeline_line)return(false); pipeline_solid=CreatePipeline(material,pipeline_data,Prim::Triangles); if(!pipeline_solid)return(false); @@ -65,23 +75,11 @@ private: void CreateRenderObject() { { - struct PlaneGridCreateInfo pgci; + struct AxisCreateInfo aci; - pgci.coord[0].Set(-100,-100,0); - pgci.coord[1].Set( 100,-100,0); - pgci.coord[2].Set( 100, 100,0); - pgci.coord[3].Set(-100, 100,0); + aci.size=200; - pgci.step.u=20; - pgci.step.v=20; - - pgci.side_step.u=10; - pgci.side_step.v=10; - - pgci.color.Set(0.5,0,0,1); - pgci.side_color.Set(1,0,0,1); - - ro_plane_grid=CreateRenderablePlaneGrid(db,material,&pgci); + ro_axis=CreateRenderableAxis(db,axis_material,&aci); } { @@ -152,6 +150,11 @@ private: return(false); material_instance->Update(); + + if(!axis_mi->BindUBO("world",GetCameraMatrixBuffer())) + return(false); + + axis_mi->Update(); return(true); } @@ -171,7 +174,7 @@ private: bool InitScene() { - Add(ro_plane_grid,pipeline_line); + render_root.Add(db->CreateRenderableInstance(ro_axis,axis_mi,axis_pipeline)); // Add(ro_dome,pipeline_solid); Add(ro_torus ,pipeline_solid); Add(ro_cube ,pipeline_solid,translate(-10, 0, 5)*scale(10,10,10)); diff --git a/example/Vulkan/OffscreenRender.cpp b/example/Vulkan/OffscreenRender.cpp index 4af8c8ce..e69cd41a 100644 --- a/example/Vulkan/OffscreenRender.cpp +++ b/example/Vulkan/OffscreenRender.cpp @@ -29,7 +29,7 @@ class TestApp:public CameraAppFramework struct:public RenderObject { - Sampler * sampler =nullptr; + Sampler * sampler =nullptr; Pipeline * pipeline =nullptr; RenderableInstance *renderable_instance =nullptr; diff --git a/inc/hgl/graph/InlineGeometry.h b/inc/hgl/graph/InlineGeometry.h index b433111e..686482c2 100644 --- a/inc/hgl/graph/InlineGeometry.h +++ b/inc/hgl/graph/InlineGeometry.h @@ -193,37 +193,18 @@ namespace hgl struct AxisCreateInfo { - Vector3f root; - Vector3f size; + float size; Color4f color[3]; public: - void RestartColor() + AxisCreateInfo() { + size=1.0f; color[0].Set(1,0,0,1); color[1].Set(0,1,0,1); color[2].Set(0,0,1,1); } - - void Set(const AABB &box) - { - root=box.CenterPoint().xyz(); - size=box.HalfSize().xyz(); - } - - AxisCreateInfo() - { - root.Set(0,0,0); - size.Set(1,1,1); - RestartColor(); - } - - AxisCreateInfo(const AABB &box) - { - Set(box); - RestartColor(); - } };//struct AxisCreateInfo /** diff --git a/src/SceneGraph/InlineGeometry.cpp b/src/SceneGraph/InlineGeometry.cpp index b76cf5fe..7c54db6f 100644 --- a/src/SceneGraph/InlineGeometry.cpp +++ b/src/SceneGraph/InlineGeometry.cpp @@ -1125,6 +1125,8 @@ namespace hgl Renderable *CreateRenderableAxis(RenderResource *db,Material *mtl,const AxisCreateInfo *aci) { + if(!db||!mtl||!aci)return(nullptr); + RenderableCreater rc(db,mtl); if(!rc.Init(6)) @@ -1136,14 +1138,14 @@ namespace hgl if(!vertex||!color) return(nullptr); - vertex->Write(aci->root);color->Write(aci->color[0]); - vertex->Write(aci->root.x+aci->size[0],aci->root.y,aci->root.z);color->Write(aci->color[0]); + const float s=aci->size; - vertex->Write(aci->root);color->Write(aci->color[1]); - vertex->Write(aci->root.x,aci->root.y+aci->size[1],aci->root.z);color->Write(aci->color[1]); - - vertex->Write(aci->root);color->Write(aci->color[2]); - vertex->Write(aci->root.x,aci->root.y,aci->root.z+aci->size[2]);color->Write(aci->color[2]); + vertex->Write(0,0,0);color->Write(aci->color[0]); + vertex->Write(s,0,0);color->Write(aci->color[0]); + vertex->Write(0,0,0);color->Write(aci->color[1]); + vertex->Write(0,s,0);color->Write(aci->color[1]); + vertex->Write(0,0,0);color->Write(aci->color[2]); + vertex->Write(0,0,s);color->Write(aci->color[2]); return rc.Finish(); }