From db91730e136c395eb9449c475894f65c6a6b9fd2 Mon Sep 17 00:00:00 2001 From: Kbz-8 Date: Sat, 25 Nov 2023 10:31:06 +0100 Subject: [PATCH] transparency management added --- src/core/bridge.cpp | 6 +++--- src/core/graphics.cpp | 2 +- src/core/graphics.h | 4 ++-- src/core/graphics.inl | 14 +++++++++++++- src/renderer/images/texture.h | 3 ++- src/renderer/pipeline/pipeline.cpp | 20 +++++++++++++------- test/main.c | 6 +++--- 7 files changed, 37 insertions(+), 18 deletions(-) diff --git a/src/core/bridge.cpp b/src/core/bridge.cpp index 37a67ba..9b1fb36 100644 --- a/src/core/bridge.cpp +++ b/src/core/bridge.cpp @@ -6,7 +6,7 @@ /* By: maldavid +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2022/10/04 17:35:20 by maldavid #+# #+# */ -/* Updated: 2023/11/23 14:32:41 by maldavid ### ########.fr */ +/* Updated: 2023/11/25 10:12:36 by maldavid ### ########.fr */ /* */ /* ************************************************************************** */ @@ -100,8 +100,8 @@ extern "C" unsigned char color_bits[4]; color_bits[0] = (color & 0x00FF0000) >> 16; color_bits[1] = (color & 0x0000FF00) >> 8; - color_bits[2] = color & 0x000000FF; - color_bits[3] = 0xFF; + color_bits[2] = (color & 0x000000FF); + color_bits[3] = (color & 0xFF000000) >> 24; mlx->setTexturePixel(img, x, y, *reinterpret_cast(color_bits)); } diff --git a/src/core/graphics.cpp b/src/core/graphics.cpp index 01d2ed4..0ef2dba 100644 --- a/src/core/graphics.cpp +++ b/src/core/graphics.cpp @@ -6,7 +6,7 @@ /* By: maldavid +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2023/04/02 15:13:55 by maldavid #+# #+# */ -/* Updated: 2023/11/24 19:19:25 by maldavid ### ########.fr */ +/* Updated: 2023/11/24 20:42:15 by maldavid ### ########.fr */ /* */ /* ************************************************************************** */ diff --git a/src/core/graphics.h b/src/core/graphics.h index 0f2860f..6c19aaa 100644 --- a/src/core/graphics.h +++ b/src/core/graphics.h @@ -6,7 +6,7 @@ /* By: maldavid +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2023/04/02 14:49:49 by maldavid #+# #+# */ -/* Updated: 2023/11/23 14:26:06 by maldavid ### ########.fr */ +/* Updated: 2023/11/25 09:59:39 by maldavid ### ########.fr */ /* */ /* ************************************************************************** */ @@ -49,7 +49,7 @@ namespace mlx ~GraphicsSupport(); private: - std::unordered_set _textures_to_render; + std::vector _textures_to_render; PixelPutPipeline _pixel_put_pipeline; glm::mat4 _proj = glm::mat4(1.0); std::shared_ptr _window; diff --git a/src/core/graphics.inl b/src/core/graphics.inl index c205af9..0a472c3 100644 --- a/src/core/graphics.inl +++ b/src/core/graphics.inl @@ -10,7 +10,9 @@ /* */ /* ************************************************************************** */ +#include "renderer/images/texture.h" #include +#include namespace mlx { @@ -44,7 +46,17 @@ namespace mlx void GraphicsSupport::texturePut(Texture* texture, int x, int y) { - _textures_to_render.emplace(texture, x, y); + _textures_to_render.emplace_back(texture, x, y); + std::size_t hash = std::hash{}(_textures_to_render.back()); + _textures_to_render.back().hash = hash; + + auto it = std::find_if(_textures_to_render.begin(), _textures_to_render.end() - 1, [=](const TextureRenderData& rhs) + { + return rhs.hash == hash; + }); + + if(it != _textures_to_render.end() - 1) + _textures_to_render.erase(it); } void GraphicsSupport::loadFont(const std::filesystem::path& filepath, float scale) diff --git a/src/renderer/images/texture.h b/src/renderer/images/texture.h index d02ad6c..c324dd6 100644 --- a/src/renderer/images/texture.h +++ b/src/renderer/images/texture.h @@ -6,7 +6,7 @@ /* By: maldavid +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2023/03/08 02:24:58 by maldavid #+# #+# */ -/* Updated: 2023/11/16 14:01:05 by maldavid ### ########.fr */ +/* Updated: 2023/11/25 10:01:35 by maldavid ### ########.fr */ /* */ /* ************************************************************************** */ @@ -66,6 +66,7 @@ namespace mlx struct TextureRenderData { Texture* texture; + std::size_t hash = 0; int x; int y; diff --git a/src/renderer/pipeline/pipeline.cpp b/src/renderer/pipeline/pipeline.cpp index 02dcdb8..cc02741 100644 --- a/src/renderer/pipeline/pipeline.cpp +++ b/src/renderer/pipeline/pipeline.cpp @@ -6,7 +6,7 @@ /* By: maldavid +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2022/12/18 21:27:38 by maldavid #+# #+# */ -/* Updated: 2023/11/20 07:24:09 by maldavid ### ########.fr */ +/* Updated: 2023/11/25 10:23:20 by maldavid ### ########.fr */ /* */ /* ************************************************************************** */ @@ -194,7 +194,7 @@ namespace mlx fragShaderStageInfo.module = fshader; fragShaderStageInfo.pName = "main"; - std::vector stages = {vertShaderStageInfo, fragShaderStageInfo}; + std::array stages = {vertShaderStageInfo, fragShaderStageInfo}; auto bindingDescription = Vertex::getBindingDescription(); auto attributeDescriptions = Vertex::getAttributeDescriptions(); @@ -255,7 +255,13 @@ namespace mlx VkPipelineColorBlendAttachmentState colorBlendAttachment{}; 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_FALSE; + 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_SRC_ALPHA; + colorBlendAttachment.dstAlphaBlendFactor = VK_BLEND_FACTOR_ONE_MINUS_SRC_ALPHA; + colorBlendAttachment.alphaBlendOp = VK_BLEND_OP_ADD; VkPipelineColorBlendStateCreateInfo colorBlending{}; colorBlending.sType = VK_STRUCTURE_TYPE_PIPELINE_COLOR_BLEND_STATE_CREATE_INFO; @@ -263,10 +269,10 @@ namespace mlx colorBlending.logicOp = VK_LOGIC_OP_COPY; colorBlending.attachmentCount = 1; colorBlending.pAttachments = &colorBlendAttachment; - colorBlending.blendConstants[0] = 0.0f; - colorBlending.blendConstants[1] = 0.0f; - colorBlending.blendConstants[2] = 0.0f; - colorBlending.blendConstants[3] = 0.0f; + colorBlending.blendConstants[0] = 1.0f; + colorBlending.blendConstants[1] = 1.0f; + colorBlending.blendConstants[2] = 1.0f; + colorBlending.blendConstants[3] = 1.0f; VkDescriptorSetLayout layouts[] = { renderer.getVertDescriptorSetLayout().get(), diff --git a/test/main.c b/test/main.c index 41309ed..f00d81a 100644 --- a/test/main.c +++ b/test/main.c @@ -6,7 +6,7 @@ /* By: maldavid +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2022/10/04 17:55:21 by maldavid #+# #+# */ -/* Updated: 2023/11/24 19:08:57 by maldavid ### ########.fr */ +/* Updated: 2023/11/25 10:29:56 by maldavid ### ########.fr */ /* */ /* ************************************************************************** */ @@ -29,7 +29,7 @@ int update(t_mlx *mlx) int k; mlx_put_image_to_window(mlx->mlx, mlx->win, mlx->logo, 100, 100); - mlx_put_image_to_window(mlx->mlx, mlx->win, mlx->img, 220, 20); + mlx_put_image_to_window(mlx->mlx, mlx->win, mlx->img, 150, 60); mlx_string_put(mlx->mlx, mlx->win, 20, 50, 0xFFFFFFFF, "that's a text"); j = 0; k = 0; @@ -65,7 +65,7 @@ void *create_image(t_mlx *mlx) pixel[0] = i[0]; pixel[1] = i[1]; pixel[2] = i[2]; - pixel[3] = 0xFF; + pixel[3] = 0x99; mlx_set_image_pixel(mlx->mlx, img, i[1], i[2], *((int *)pixel)); } i[0] += 4;