diff --git a/example/Gizmo/PlaneGrid3D.cpp b/example/Gizmo/PlaneGrid3D.cpp index 8c45f22a..5560be70 100644 --- a/example/Gizmo/PlaneGrid3D.cpp +++ b/example/Gizmo/PlaneGrid3D.cpp @@ -28,8 +28,9 @@ private: mtl::Material3DCreateConfig cfg(device->GetDeviceAttribute(),"VertexLuminance3D",Prim::Lines); cfg.local_to_world=true; + cfg.position_format=VAT_VEC2; - material=db->LoadMaterial("Std3D/VertexLum3D",&cfg); + material=db->LoadMaterial("Std3D/VertexLum2D",&cfg); if(!material)return(false); Color4f GridColor; diff --git a/inc/hgl/graph/PrimitiveCreater.h b/inc/hgl/graph/PrimitiveCreater.h index 9946141d..145a9587 100644 --- a/inc/hgl/graph/PrimitiveCreater.h +++ b/inc/hgl/graph/PrimitiveCreater.h @@ -155,7 +155,7 @@ public: } } - const bool IsValid()const{ return map_ptr?map_ptr:false; } + const bool IsValid()const{ return map_ptr; } void Restart() { diff --git a/src/SceneGraph/InlineGeometry.cpp b/src/SceneGraph/InlineGeometry.cpp index ea0f7cc8..dce02482 100644 --- a/src/SceneGraph/InlineGeometry.cpp +++ b/src/SceneGraph/InlineGeometry.cpp @@ -169,7 +169,10 @@ namespace hgl if(!pc->Init("PlaneGrid",((pgci->grid_size.Width()+1)+(pgci->grid_size.Height()+1))*2,0)) return(nullptr); - VABMap3f vertex(pc,VAN::Position); + VABMap2f vertex(pc,VAN::Position); + + if(!vertex.IsValid()) + return(nullptr); const float right=float(pgci->grid_size.Width())/2.0f; const float left =-right; @@ -179,14 +182,14 @@ namespace hgl for(uint row=0;row<=pgci->grid_size.Height();row++) { - vertex->WriteLine( Vector3f(left ,top+row,0), - Vector3f(right,top+row,0)); + vertex->WriteLine( Vector2f(left ,top+row), + Vector2f(right,top+row)); } for(uint col=0;col<=pgci->grid_size.Width();col++) { - vertex->WriteLine(Vector3f(left+col,top, 0), - Vector3f(left+col,bottom,0)); + vertex->WriteLine(Vector2f(left+col,top ), + Vector2f(left+col,bottom)); } VABMap1f lum(pc,VAN::Luminance); diff --git a/src/ShaderGen/3d/Std3DMaterial.cpp b/src/ShaderGen/3d/Std3DMaterial.cpp index a8d9d926..88455bd5 100644 --- a/src/ShaderGen/3d/Std3DMaterial.cpp +++ b/src/ShaderGen/3d/Std3DMaterial.cpp @@ -33,10 +33,20 @@ bool Std3DMaterial::CustomVertexShader(ShaderCreateInfoVertex *vsc) { mci->SetLocalToWorld(VK_SHADER_STAGE_ALL_GRAPHICS); - vsc->AddFunction(cfg->camera?func::GetPosition3DL2WCamera:func::GetPosition3DL2W); + if(cfg->position_format.vec_size==3) + vsc->AddFunction(cfg->camera?func::GetPosition3DL2WCamera:func::GetPosition3DL2W); + else + if(cfg->position_format.vec_size==2) + vsc->AddFunction(cfg->camera?func::GetPosition3DL2WCameraBy2D:func::GetPosition3DL2WBy2D); } else - vsc->AddFunction(cfg->camera?func::GetPosition3DCamera:func::GetPosition3D); + { + if(cfg->position_format.vec_size==3) + vsc->AddFunction(cfg->camera?func::GetPosition3DCamera:func::GetPosition3D); + else + if(cfg->position_format.vec_size==2) + vsc->AddFunction(cfg->camera?func::GetPosition3DCameraBy2D:func::GetPosition3DBy2D); + } if(cfg->camera &&cfg->local_to_world) diff --git a/src/ShaderGen/common/MFGetPosition.h b/src/ShaderGen/common/MFGetPosition.h index 55cbb5f6..aa45db40 100644 --- a/src/ShaderGen/common/MFGetPosition.h +++ b/src/ShaderGen/common/MFGetPosition.h @@ -1,4 +1,4 @@ -#pragma once +#pragma once #include #include @@ -7,78 +7,26 @@ namespace func { constexpr const char *GetPosition2D[size_t(CoordinateSystem2D::RANGE_SIZE)]= { - R"( -vec4 GetPosition2D() -{ - return vec4(Position,0,1); -} -)", - -R"( -vec4 GetPosition2D() -{ - return vec4(Position.xy*2-1,0,1); -} -)", - -R"( -vec4 GetPosition2D() -{ - return viewport.ortho_matrix*vec4(Position,0,1); -} -)" + "vec4 GetPosition2D(){return vec4(Position,0,1);}", //NDC + "vec4 GetPosition2D(){return vec4(Position.xy*2-1,0,1);}", //ZeroToOne + "vec4 GetPosition2D(){return viewport.ortho_matrix*vec4(Position,0,1);}" //Ortho }; constexpr const char *GetPosition2DL2W[size_t(CoordinateSystem2D::RANGE_SIZE)]= { - R"( -vec4 GetPosition2D() -{ - return GetLocalToWorld()*vec4(Position,0,1); -} -)", - -R"( -vec4 GetPosition2D() -{ - return GetLocalToWorld()*vec4(Position.xy*2-1,0,1); -} -)", - -R"( -vec4 GetPosition2D() -{ - return GetLocalToWorld()*viewport.ortho_matrix*vec4(Position,0,1); -} -)" + "vec4 GetPosition2D(){return GetLocalToWorld()*vec4(Position,0,1);}", //NDC + "vec4 GetPosition2D(){return GetLocalToWorld()*vec4(Position.xy*2-1,0,1);}", //ZeroToOne + "vec4 GetPosition2D(){return GetLocalToWorld()*viewport.ortho_matrix*vec4(Position,0,1);}" //Ortho }; - constexpr const char *GetPosition3D=R"( -vec4 GetPosition3D() -{ - return vec4(Position,1); -} -)"; + constexpr const char *GetPosition3D ="vec4 GetPosition3D(){return vec4(Position,1);}"; + constexpr const char *GetPosition3DL2W ="vec4 GetPosition3D(){return GetLocalToWorld()*vec4(Position,1);}"; + constexpr const char *GetPosition3DCamera ="vec4 GetPosition3D(){return camera.vp*vec4(Position,1);}"; + constexpr const char *GetPosition3DL2WCamera ="vec4 GetPosition3D(){return camera.vp*GetLocalToWorld()*vec4(Position,1);}"; - constexpr const char *GetPosition3DL2W=R"( -vec4 GetPosition3D() -{ - return GetLocalToWorld()*vec4(Position,1); -} -)"; - -constexpr const char *GetPosition3DCamera=R"( -vec4 GetPosition3D() -{ - return camera.vp*vec4(Position,1); -} -)"; - - constexpr const char *GetPosition3DL2WCamera=R"( -vec4 GetPosition3D() -{ - return camera.vp*GetLocalToWorld()*vec4(Position,1); -} -)"; + constexpr const char *GetPosition3DBy2D ="vec4 GetPosition3D(){return vec4(Position,0,1);}"; + constexpr const char *GetPosition3DL2WBy2D ="vec4 GetPosition3D(){return GetLocalToWorld()*vec4(Position,0,1);}"; + constexpr const char *GetPosition3DCameraBy2D ="vec4 GetPosition3D(){return camera.vp*vec4(Position,0,1);}"; + constexpr const char *GetPosition3DL2WCameraBy2D="vec4 GetPosition3D(){return camera.vp*GetLocalToWorld()*vec4(Position,0,1);}"; }//namespace func STD_MTL_NAMESPACE_END