Finished chapter 3

This commit is contained in:
Alexandre 2026-09-28 15:51:31 +02:00
parent 53a1a73bfc
commit 0dfbf9011a
3 changed files with 52 additions and 8 deletions

View File

@ -1,3 +1,8 @@
/*
Todo:
The timestamp is not in localtime,
fix or disclaim
*/
#ifndef LOGGER_H
#define LOGGER_H
@ -134,7 +139,8 @@ void Logger::logRAM(
std::string_view message,
Args&&... args
) {
auto now = std::chrono::system_clock::now();
auto now { std::chrono::system_clock::now() };
now = std::chrono::zoned_time{ std::chrono::current_zone(), now };
auto timestamp = std::format("{:%Y-%m-%d %H:%M}", now);
auto start = logBuffer.size();

View File

@ -568,7 +568,7 @@ void Engine::run() {
int currentID = currentBackgroundEffect;
if (prevID != currentID) {
//_logger.logRAM(ENGINE, EINFO, "Background shader changed");
_logger.logFatal(ENGINE, "Background shader changed !");
//_logger.logFatal(ENGINE, "Background shader changed !");
}
prevID = currentID;
@ -1489,8 +1489,9 @@ void Engine::initMeshPipeline() {
pipelineBuilder.setCullMode(VK_CULL_MODE_NONE, VK_FRONT_FACE_CLOCKWISE);
// No multisampling
pipelineBuilder.setMultisamplingNone();
// No blending
pipelineBuilder.disableBlending();
// Blending
//pipelineBuilder.disableBlending();
pipelineBuilder.enableBlendingAdditive();
pipelineBuilder.enableDepthtest(
true,
@ -1862,6 +1863,7 @@ void Engine::buildImgui() {
}
ImGui::End();
#ifdef DEBUG
// Stats
if(ImGui::Begin("Stats")) {
// Todo:
@ -1870,15 +1872,20 @@ void Engine::buildImgui() {
// Etc...
ImGui::TextWrapped("GPU memory usage : %.2f KiB", _gpuMemusage/1024.0f);
ImGui::TextWrapped("Swapchain dimensions : %ix%i", _swapchainExtent.width, _swapchainExtent.height);
if(ImGui::Button("Crash (debug)")) {
_logger.logFatal(ENGINE, "Crash ! (debug)");
}
}
ImGui::End();
#endif
#ifdef DEBUG
// Memory editor
if(ImGui::Begin("Memory")) {
_memEdit.DrawContents(this, sizeof(*this), (size_t)this);
}
ImGui::End();
#endif
// Finish everything
ImGui::Render();
@ -2040,11 +2047,18 @@ void Engine::drawGeometry(
// Draw the rectangle
vkCmdDrawIndexed(cmd, 6, 1, 0, 0, 0);
// Makes it turn
static auto startTime = std::chrono::high_resolution_clock::now();
auto currentTime = std::chrono::high_resolution_clock::now();
float time = std::chrono::duration<float, std::chrono::seconds::period>(currentTime - startTime).count();
// Model
glm::mat4 model = rotate(glm::mat4(1.0f), time/10 * glm::radians(90.0f), glm::vec3(0.0f, 0.0f, 1.0f)); // turn
// Correct the matrix
glm::mat4 view = glm::translate(glm::vec3{ 0, 0, -5});
// Camera projection
glm::mat4 projection = glm::perspective(
glm::radians(70.0f),
(float)_drawExtent.width / (float)_drawExtent.height,
@ -2053,7 +2067,7 @@ void Engine::drawGeometry(
);
// Invert the Y direction
projection[1][1] *= -1;
pushConstants.worldMatrix = projection * view;
pushConstants.worldMatrix = projection * view * model;
pushConstants.vertexBuffer = testMeshes[2]->meshBuffers.vertexBufferAddress;
vkCmdPushConstants(

View File

@ -63,7 +63,9 @@ class PipelineBuilder {
void setMultisamplingNone();
void disableBlending ();
void enableBlendingAdditive();
void enableBlendingAlphaBlend();
void disableBlending();
void setColorAttachmentFormat(
VkFormat format
@ -333,6 +335,28 @@ void PipelineBuilder::setMultisamplingNone() {
_multisampling.alphaToOneEnable = VK_FALSE;
}
void PipelineBuilder::enableBlendingAdditive() {
_colorBlendAttachment.colorWriteMask = VK_COLOR_COMPONENT_R_BIT | VK_COLOR_COMPONENT_G_BIT | VK_COLOR_COMPONENT_B_BIT | VK_COLOR_COMPONENT_A_BIT;
_colorBlendAttachment.blendEnable = VK_TRUE;
_colorBlendAttachment.srcColorBlendFactor = VK_BLEND_FACTOR_SRC_ALPHA;
_colorBlendAttachment.dstColorBlendFactor = VK_BLEND_FACTOR_ONE;
_colorBlendAttachment.colorBlendOp = VK_BLEND_OP_ADD;
_colorBlendAttachment.srcAlphaBlendFactor = VK_BLEND_FACTOR_ONE;
_colorBlendAttachment.dstAlphaBlendFactor = VK_BLEND_FACTOR_ZERO;
_colorBlendAttachment.alphaBlendOp = VK_BLEND_OP_ADD;
}
void PipelineBuilder::enableBlendingAlphaBlend() {
_colorBlendAttachment.colorWriteMask = VK_COLOR_COMPONENT_R_BIT | VK_COLOR_COMPONENT_G_BIT | VK_COLOR_COMPONENT_B_BIT | VK_COLOR_COMPONENT_A_BIT;
_colorBlendAttachment.blendEnable = VK_TRUE;
_colorBlendAttachment.srcColorBlendFactor = VK_BLEND_FACTOR_SRC_ALPHA;
_colorBlendAttachment.dstColorBlendFactor = VK_BLEND_FACTOR_ONE_MINUS_SRC_ALPHA;
_colorBlendAttachment.colorBlendOp = VK_BLEND_OP_ADD;
_colorBlendAttachment.srcAlphaBlendFactor = VK_BLEND_FACTOR_ONE;
_colorBlendAttachment.dstAlphaBlendFactor = VK_BLEND_FACTOR_ZERO;
_colorBlendAttachment.alphaBlendOp = VK_BLEND_OP_ADD;
}
void PipelineBuilder::disableBlending() {
// Default write mask
_colorBlendAttachment.colorWriteMask = VK_COLOR_COMPONENT_R_BIT | VK_COLOR_COMPONENT_G_BIT | VK_COLOR_COMPONENT_B_BIT | VK_COLOR_COMPONENT_A_BIT;