Moving projection to viewport

This commit is contained in:
Dynamitos
2022-11-30 10:19:45 +01:00
parent 1e04da963d
commit 3c7346cf7b
18 changed files with 87 additions and 86 deletions
@@ -43,6 +43,7 @@ struct WindowCreateInfo
struct ViewportCreateInfo
{
Math::URect dimensions;
float fieldOfView = 1.222f; // 70 deg
};
// doesnt own the data, only proxy it
struct BulkResourceData
+13
View File
@@ -506,6 +506,7 @@ Viewport::Viewport(PWindow owner, const ViewportCreateInfo &viewportInfo)
, sizeY(viewportInfo.dimensions.size.y)
, offsetX(viewportInfo.dimensions.offset.x)
, offsetY(viewportInfo.dimensions.offset.y)
, fieldOfView(viewportInfo.fieldOfView)
, owner(owner)
{
}
@@ -514,3 +515,15 @@ Viewport::~Viewport()
{
}
Math::Matrix4 Viewport::getProjectionMatrix() const
{
if(fieldOfView > 0.0f)
{
return glm::perspective(fieldOfView, sizeX / static_cast<float>(sizeY), 0.1f, 1000.0f);
}
else
{
return glm::ortho(0.0f, (float)sizeX, (float)sizeY, 0.0f);
}
}
+7 -5
View File
@@ -650,16 +650,18 @@ public:
virtual ~Viewport();
virtual void resize(uint32 newX, uint32 newY) = 0;
virtual void move(uint32 newOffsetX, uint32 newOffsetY) = 0;
inline PWindow getOwner() const {return owner;}
inline uint32 getSizeX() const {return sizeX;}
inline uint32 getSizeY() const {return sizeY;}
inline uint32 getOffsetX() const {return offsetX;}
inline uint32 getOffsetY() const {return offsetY;}
constexpr PWindow getOwner() const {return owner;}
constexpr uint32 getSizeX() const {return sizeX;}
constexpr uint32 getSizeY() const {return sizeY;}
constexpr uint32 getOffsetX() const {return offsetX;}
constexpr uint32 getOffsetY() const {return offsetY;}
Math::Matrix4 getProjectionMatrix() const;
protected:
uint32 sizeX;
uint32 sizeY;
uint32 offsetX;
uint32 offsetY;
float fieldOfView;
PWindow owner;
};
DEFINE_REF(Viewport)
+1 -1
View File
@@ -120,7 +120,7 @@ void BasePass::beginFrame(const Component::Camera& cam)
BulkResourceData uniformUpdate;
viewParams.viewMatrix = cam.getViewMatrix();
viewParams.projectionMatrix = cam.getProjectionMatrix();
viewParams.projectionMatrix = viewport->getProjectionMatrix();
viewParams.cameraPosition = Math::Vector4(cam.getCameraPosition(), 0);
viewParams.screenDimensions = Math::Vector2(static_cast<float>(viewport->getSizeX()), static_cast<float>(viewport->getSizeY()));
uniformUpdate.size = sizeof(ViewParameter);
@@ -103,7 +103,7 @@ void DepthPrepass::beginFrame(const Component::Camera& cam)
BulkResourceData uniformUpdate;
viewParams.viewMatrix = cam.getViewMatrix();
viewParams.projectionMatrix = cam.getProjectionMatrix();
viewParams.projectionMatrix = viewport->getProjectionMatrix();
viewParams.cameraPosition = Math::Vector4(cam.getCameraPosition(), 0);
viewParams.screenDimensions = Math::Vector2(static_cast<float>(viewport->getSizeX()), static_cast<float>(viewport->getSizeY()));
uniformUpdate.size = sizeof(ViewParameter);
@@ -24,7 +24,7 @@ void LightCullingPass::beginFrame(const Component::Camera& cam)
BulkResourceData uniformUpdate;
viewParams.viewMatrix = cam.getViewMatrix();
viewParams.projectionMatrix = cam.getProjectionMatrix();
viewParams.projectionMatrix = viewport->getProjectionMatrix();
viewParams.cameraPosition = Math::Vector4(cam.getCameraPosition(), 0);
viewParams.screenDimensions = Math::Vector2(static_cast<float>(viewportWidth), static_cast<float>(viewportHeight));
uniformUpdate.size = sizeof(ViewParameter);
+3 -2
View File
@@ -15,7 +15,7 @@ TextPass::~TextPass()
}
void TextPass::beginFrame(const Component::Camera& cam)
void TextPass::beginFrame(const Component::Camera&)
{
for(TextRender& render : passData.texts)
{
@@ -59,9 +59,10 @@ void TextPass::beginFrame(const Component::Camera& cam)
.scale = render.scale,
};
}
auto proj = viewport->getProjectionMatrix();
BulkResourceData projectionUpdate = {
.size = sizeof(Math::Matrix4),
.data = (uint8*)&cam.projectionMatrix,
.data = (uint8*)&proj,
};
projectionBuffer->updateContents(projectionUpdate);
generalSet->updateBuffer(1, projectionBuffer);
@@ -8,7 +8,7 @@
using namespace Seele;
using namespace Seele::Vulkan;
void glfwKeyCallback(GLFWwindow* handle, int key, int action, int, int modifier)
void glfwKeyCallback(GLFWwindow* handle, int key, int, int action, int modifier)
{
Window* window = (Window*)glfwGetWindowUserPointer(handle);
window->keyCallback((KeyCode)key, (InputAction)action, (KeyModifier)modifier);