This commit is contained in:
Bailey Harrison 2022-11-07 11:10:29 +00:00
parent 99b287309d
commit ef518089cf
9 changed files with 21 additions and 31 deletions

View File

@ -21,7 +21,7 @@ public:
~Camera(); ~Camera();
// called every frame, don't call manually // called every frame, don't call manually
void updateCam(glm::mat4 transform); void updateCam(glm::mat4 transform, glm::mat4* viewMatrix);
void makeActive(); void makeActive();
bool isActive(); bool isActive();

View File

@ -21,7 +21,7 @@ public:
~Renderer() override; ~Renderer() override;
// called every frame, do not call manually // called every frame, do not call manually
void render(glm::mat4 model); void render(glm::mat4 model, glm::mat4 view);
void setMesh(const std::string& name); void setMesh(const std::string& name);
void setTexture(const std::string& name); void setTexture(const std::string& name);

View File

@ -23,7 +23,7 @@ namespace engine {
// adds a draw call to the queue // adds a draw call to the queue
// vertexBuffer is required, indexBuffer can be NULL, uniformData is required // vertexBuffer is required, indexBuffer can be NULL, uniformData is required
void draw(const gfx::Pipeline* pipeline, const gfx::Buffer* vertexBuffer, const gfx::Buffer* indexBuffer, uint32_t count, const void* pushConstantData); void draw(const gfx::Pipeline* pipeline, const gfx::Buffer* vertexBuffer, const gfx::Buffer* indexBuffer, uint32_t count, const void* pushConstantData, size_t pushConstantSize);
// Call once per frame. Executes all queued draw calls and renders to the screen. // Call once per frame. Executes all queued draw calls and renders to the screen.
void renderFrame(); void renderFrame();

View File

@ -25,7 +25,7 @@ Camera::~Camera()
parent.root.deactivateCam(getID()); parent.root.deactivateCam(getID());
} }
void Camera::updateCam(glm::mat4 transform) void Camera::updateCam(glm::mat4 transform, glm::mat4* viewMatOut)
{ {
if (parent.win.getWindowResized()) { if (parent.win.getWindowResized()) {
@ -57,6 +57,8 @@ void Camera::updateCam(glm::mat4 transform)
gfxdev->updateUniformBuffer(shader->getPipeline(), &uniformData); gfxdev->updateUniformBuffer(shader->getPipeline(), &uniformData);
} }
*viewMatOut = viewMatrix;
} }
static glm::vec2 getViewportSize() static glm::vec2 getViewportSize()

View File

@ -23,9 +23,10 @@ Renderer::~Renderer()
} }
void Renderer::render(glm::mat4 transform) void Renderer::render(glm::mat4 transform, glm::mat4 view)
{ {
gfxdev->draw(m_shader->getPipeline(), m_mesh->vb, m_mesh->ib, m_mesh->m_vertices.size(), &transform); glm::mat4 pushConsts[] = { transform, view };
gfxdev->draw(m_shader->getPipeline(), m_mesh->vb, m_mesh->ib, m_mesh->m_vertices.size(), pushConsts, sizeof(glm::mat4) * 2);
} }
void Renderer::setMesh(const std::string& name) void Renderer::setMesh(const std::string& name)

View File

@ -258,7 +258,7 @@ namespace engine {
ERROR ERROR
}; };
constexpr MessageSeverity MESSAGE_LEVEL = MessageSeverity::WARNING; constexpr MessageSeverity MESSAGE_LEVEL = MessageSeverity::INFO;
switch (MESSAGE_LEVEL) { switch (MESSAGE_LEVEL) {
case MessageSeverity::VERBOSE: case MessageSeverity::VERBOSE:
debugMessengerInfo.messageSeverity |= VK_DEBUG_UTILS_MESSAGE_SEVERITY_VERBOSE_BIT_EXT; debugMessengerInfo.messageSeverity |= VK_DEBUG_UTILS_MESSAGE_SEVERITY_VERBOSE_BIT_EXT;
@ -419,7 +419,7 @@ namespace engine {
for (const auto& presMode : presentModes) { for (const auto& presMode : presentModes) {
if (presMode == VK_PRESENT_MODE_MAILBOX_KHR) { if (presMode == VK_PRESENT_MODE_MAILBOX_KHR) {
swapchain->presentMode = presMode; // this mode allows uncapped FPS while also avoiding screen tearing // swapchain->presentMode = presMode; // this mode allows uncapped FPS while also avoiding screen tearing
} }
} }
@ -1179,11 +1179,12 @@ namespace engine {
*h = pimpl->swapchain.extent.height; *h = pimpl->swapchain.extent.height;
} }
void GFXDevice::draw(const gfx::Pipeline* pipeline, const gfx::Buffer* vertexBuffer, const gfx::Buffer* indexBuffer, uint32_t count, const void* pushConstantData) void GFXDevice::draw(const gfx::Pipeline* pipeline, const gfx::Buffer* vertexBuffer, const gfx::Buffer* indexBuffer, uint32_t count, const void* pushConstantData, size_t pushConstantSize)
{ {
assert(vertexBuffer->type == gfx::BufferType::VERTEX); assert(vertexBuffer->type == gfx::BufferType::VERTEX);
assert(vertexBuffer != nullptr); assert(vertexBuffer != nullptr);
assert(indexBuffer == nullptr || indexBuffer->type == gfx::BufferType::INDEX); assert(indexBuffer == nullptr || indexBuffer->type == gfx::BufferType::INDEX);
assert(pushConstantSize <= PUSH_CONSTANT_MAX_SIZE);
DrawCall call{ DrawCall call{
.vertexBuffer = vertexBuffer, .vertexBuffer = vertexBuffer,
@ -1191,7 +1192,7 @@ namespace engine {
.count = count, .count = count,
}; };
memcpy(call.pushConstantData, pushConstantData, PUSH_CONSTANT_MAX_SIZE); memcpy(call.pushConstantData, pushConstantData, pushConstantSize);
pimpl->drawQueues[pipeline].push(call); pimpl->drawQueues[pipeline].push(call);
@ -1275,9 +1276,10 @@ namespace engine {
vkCmdBindVertexBuffers(pimpl->commandBuffers[frameIndex], 0, 1, &call.vertexBuffer->buffer, offsets); vkCmdBindVertexBuffers(pimpl->commandBuffers[frameIndex], 0, 1, &call.vertexBuffer->buffer, offsets);
if (call.indexBuffer == nullptr) { if (call.indexBuffer == nullptr) {
// do a simple draw call // no index buffer
vkCmdDraw(pimpl->commandBuffers[frameIndex], call.count, 1, 0, 0); vkCmdDraw(pimpl->commandBuffers[frameIndex], call.count, 1, 0, 0);
} else { } else {
// use index buffer
vkCmdBindIndexBuffer(pimpl->commandBuffers[frameIndex], call.indexBuffer->buffer, 0, VK_INDEX_TYPE_UINT32); vkCmdBindIndexBuffer(pimpl->commandBuffers[frameIndex], call.indexBuffer->buffer, 0, VK_INDEX_TYPE_UINT32);
vkCmdDrawIndexed(pimpl->commandBuffers[frameIndex], call.count, 1, 0, 0, 0); vkCmdDrawIndexed(pimpl->commandBuffers[frameIndex], call.count, 1, 0, 0, 0);
} }

View File

@ -35,8 +35,6 @@ namespace engine {
if (std::filesystem::is_directory(m_resourcesPath) == false) { if (std::filesystem::is_directory(m_resourcesPath) == false) {
throw std::runtime_error("Unable to determine resources location. CWD: " + cwd.string()); throw std::runtime_error("Unable to determine resources location. CWD: " + cwd.string());
} }
m_resourcesPath = "C:/Users/Bailey/source/repos/game/res";
} }
std::unique_ptr<std::string> ResourceManager::getResourcesListString() std::unique_ptr<std::string> ResourceManager::getResourcesListString()

View File

@ -40,20 +40,6 @@ void Mesh::initMesh()
{ {
vb = gfxdev->createBuffer(gfx::BufferType::VERTEX, m_vertices.size() * sizeof(Vertex), m_vertices.data()); vb = gfxdev->createBuffer(gfx::BufferType::VERTEX, m_vertices.size() * sizeof(Vertex), m_vertices.data());
ib = gfxdev->createBuffer(gfx::BufferType::INDEX, m_indices.size() * sizeof(uint32_t), m_indices.data()); ib = gfxdev->createBuffer(gfx::BufferType::INDEX, m_indices.size() * sizeof(uint32_t), m_indices.data());
TRACE("VB PTR in mesh: {}", (void*)vb);
TRACE("Vertices:");
for (const auto& v : m_vertices) {
TRACE("pos: {}, {}, {}", v.pos.x, v.pos.y, v.pos.z);
}
TRACE("Indices:");
for (const uint32_t i : m_indices) {
TRACE("\t{}", i);
}
} }
Mesh::Mesh(const std::vector<Vertex>& vertices) : Resource("", "mesh") Mesh::Mesh(const std::vector<Vertex>& vertices) : Resource("", "mesh")

View File

@ -51,9 +51,10 @@ namespace engine {
for (const auto& [c, camt] : compList.cameras) { for (const auto& [c, camt] : compList.cameras) {
for (int id : m_activeCameras) { for (int id : m_activeCameras) {
if (c->getID() == id) { if (c->getID() == id) {
c->updateCam(camt); glm::mat4 view{};
c->updateCam(camt, &view);
for (const auto& [ren, ren_t] : compList.renderers) { for (const auto& [ren, ren_t] : compList.renderers) {
ren->render(ren_t); ren->render(ren_t, view);
} }
break; break;