used newly VKBufferMap in PrimitiveCreater

This commit is contained in:
2024-06-02 12:16:33 +08:00
parent 16ae849809
commit 66ef3160e1
7 changed files with 203 additions and 160 deletions

View File

@@ -1,4 +1,4 @@
// Gizmo 3D Move
// Gizmo 3D Move
#include"VulkanAppFramework.h"
#include<hgl/filesystem/FileSystem.h>
@@ -31,7 +31,7 @@ private:
Material * mtl_vtx_color =nullptr;
MaterialInstance * mi_line =nullptr;
Pipeline * pipeline_vtx_color =nullptr;
Primitive * ro_line =nullptr;
Primitive * prim_line =nullptr;
private:
@@ -103,12 +103,12 @@ private:
}
/**
* д<EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.
* 写入一个坐标轴的线条数据.
*
* \param pos Ҫд<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݵ<EFBFBD>ָ<EFBFBD><EFBFBD>
* \param max_line <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* \param oa1 <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>1<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* \param oa2 <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>2<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* \param pos 要写入数据的指针
* \param max_line 主线条方向
* \param oa1 其它轴1方向
* \param oa2 其它轴2方向
*/
void WriteAxisPosition(Vector3f *pos,const Vector3f &max_line,const Vector3f &oa1,const Vector3f &oa2)
{
@@ -116,15 +116,15 @@ private:
constexpr const float AXIS_MIN_STEP =1;
constexpr const float AXIS_ARROW_SIZE=0.25;
const Vector3f end_pos =max_line*AXIS_LENGTH; ///<<EFBFBD><EFBFBD><EFBFBD>յ<EFBFBD>λ<EFBFBD><EFBFBD>
const Vector3f cross_pos=max_line*AXIS_MIN_STEP; ///<<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>β<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>λ<EFBFBD><EFBFBD>
const Vector3f arrow_pos=max_line*(AXIS_LENGTH-AXIS_MIN_STEP); ///<<EFBFBD><EFBFBD>ͷĩ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ϵ<EFBFBD>λ<EFBFBD><EFBFBD>
const Vector3f end_pos =max_line*AXIS_LENGTH; ///<最终点位置
const Vector3f cross_pos=max_line*AXIS_MIN_STEP; ///<坐标轴尾部交叉线位置
const Vector3f arrow_pos=max_line*(AXIS_LENGTH-AXIS_MIN_STEP); ///<箭头末端在主线上的位置
//<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//主线
pos[0]=Vector3f(0, 0, 0);
pos[1]=end_pos;
//<EFBFBD>ĸ<EFBFBD><EFBFBD><EFBFBD>ͷ<EFBFBD><EFBFBD>
//四根箭头线
pos[2]=end_pos;
pos[3]=arrow_pos-oa1*AXIS_ARROW_SIZE;
@@ -137,7 +137,7 @@ private:
pos[8]=end_pos;
pos[9]=arrow_pos+oa2*AXIS_ARROW_SIZE;
//<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//侧边连接其它轴线
pos[10]=cross_pos;
pos[11]=cross_pos+oa1*AXIS_MIN_STEP;
pos[12]=cross_pos;
@@ -165,8 +165,8 @@ private:
constexpr const uint AXIS_MAX_LINES =7;
constexpr const uint AXIS_MAX_VERTICES =AXIS_MAX_LINES*2*3;
ro_line=db->CreatePrimitive("Line",AXIS_MAX_VERTICES);
if(!ro_line)return(false);
prim_line=db->CreatePrimitive("Line",AXIS_MAX_VERTICES);
if(!prim_line)return(false);
Vector3f position_data[3][AXIS_MAX_LINES*2];
@@ -180,8 +180,8 @@ private:
for(Color4f &c:color_data[1])c=Color4f(0,1,0,1);
for(Color4f &c:color_data[2])c=Color4f(0,0,1,1);
if(!ro_line->Set(VAN::Position, db->CreateVAB(VF_V3F,AXIS_MAX_VERTICES,position_data)))return(false);
if(!ro_line->Set(VAN::Color, db->CreateVAB(VF_V4F,AXIS_MAX_VERTICES,color_data )))return(false);
if(!prim_line->Set(VAN::Position, db->CreateVAB(VF_V3F,AXIS_MAX_VERTICES,position_data)))return(false);
if(!prim_line->Set(VAN::Color, db->CreateVAB(VF_V4F,AXIS_MAX_VERTICES,color_data )))return(false);
}
return(true);
@@ -190,7 +190,7 @@ private:
bool InitScene()
{
Add(prim_plane_grid,mi_plane_grid,pipeline_vtx_lum);
Add(ro_line,mi_line,pipeline_vtx_color);
Add(prim_line,mi_line,pipeline_vtx_color);
camera->pos=Vector3f(32,32,32);
camera_control->SetTarget(Vector3f(0,0,0));

View File

@@ -9,6 +9,7 @@
#include<hgl/graph/Ray.h>
#include<hgl/graph/VKVertexAttribBuffer.h>
#include<hgl/graph/mtl/Material3DCreateConfig.h>
#include<hgl/graph/VertexDataManager.h>
using namespace hgl;
using namespace hgl::graph;
@@ -38,9 +39,12 @@ private:
Pipeline * pipeline =nullptr;
VertexDataManager * vdm =nullptr;
PrimitiveCreater * prim_creater =nullptr;
Primitive * prim_plane_grid =nullptr;
Primitive * ro_line =nullptr;
Primitive * prim_line =nullptr;
VAB * vab_pos =nullptr;
@@ -71,6 +75,24 @@ private:
return(true);
}
bool InitVDMAndPC()
{
vdm=new VertexDataManager(device,material->GetDefaultVIL());
if(!vdm->Init( 1024*1024, //VAB最大容量
1024*1024, //索引最大容量
IndexType::U16)) //索引类型
{
delete vdm;
vdm=nullptr;
return(false);
}
prim_creater=new PrimitiveCreater(vdm);
return(true);
}
Renderable *Add(Primitive *r,MaterialInstance *mi)
{
Renderable *ri=db->CreateRenderable(r,mi,pipeline);
@@ -99,15 +121,19 @@ private:
pgci.lum=0.5;
pgci.sub_lum=0.75;
prim_plane_grid=CreatePlaneGrid(db,material->GetDefaultVIL(),&pgci);
prim_plane_grid=CreatePlaneGrid(prim_creater,&pgci);
}
{
ro_line=db->CreatePrimitive("Line",2);
if(!ro_line)return(false);
if(!prim_creater->Init("Line",2))
return(false);
if(!ro_line->Set(VAN::Position, vab_pos= db->CreateVAB(VF_V3F,2,position_data )))return(false);
if(!ro_line->Set(VAN::Luminance, db->CreateVAB(VF_V1F,2,lumiance_data )))return(false);
if(!prim_creater->WriteVAB(VAN::Position, VF_V3F,position_data))return(false);
if(!prim_creater->WriteVAB(VAN::Luminance,VF_V1F,lumiance_data))return(false);
prim_line=prim_creater->Create();
prim_line->Getv
}
return(true);
@@ -116,7 +142,7 @@ private:
bool InitScene()
{
Add(prim_plane_grid,mi_plane_grid);
Add(ro_line,mi_line);
Add(prim_line,mi_line);
camera->pos=Vector3f(32,32,32);
camera_control->SetTarget(Vector3f(0,0,0));
@@ -130,6 +156,12 @@ private:
public:
~TestApp()
{
SAFE_CLEAR(prim_creater)
SAFE_CLEAR(vdm)
}
bool Init(uint w,uint h)
{
if(!SceneAppFramework::Init(w,h))
@@ -138,6 +170,9 @@ public:
if(!InitMaterialAndPipeline())
return(false);
if(!InitVDMAndPC())
return(false);
if(!CreateRenderObject())
return(false);