diff --git a/src/platform/window.cpp b/src/platform/window.cpp index 3dc9787..8052e01 100644 --- a/src/platform/window.cpp +++ b/src/platform/window.cpp @@ -6,7 +6,7 @@ /* By: maldavid +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2022/10/04 17:36:44 by maldavid #+# #+# */ -/* Updated: 2023/03/31 20:30:14 by maldavid ### ########.fr */ +/* Updated: 2023/04/01 11:55:19 by maldavid ### ########.fr */ /* */ /* ************************************************************************** */ @@ -29,18 +29,6 @@ namespace mlx _renderer->setWindow(this); _renderer->init(); _renderer->getPixelPutPipeline().init(w, h, *_renderer); - - std::vector vertexData = { - {{0, 0}, {1.f, 0.f, 0.f}, {0.0f, 0.0f}}, - {{_width, 0}, {1.f, 0.f, 0.f}, {1.0f, 0.0f}}, - {{_width, _height}, {1.f, 0.f, 0.f}, {1.0f, 1.0f}}, - {{0, _height}, {1.f, 0.f, 0.}, {0.0f, 1.0f}} - }; - - std::vector indexData = { 0, 1, 2, 2, 3, 0 }; - - _vbo.create(sizeof(Vertex) * vertexData.size(), vertexData.data()); - _ibo.create(sizeof(uint16_t) * indexData.size(), indexData.data()); } bool MLX_Window::beginFrame() @@ -68,21 +56,15 @@ namespace mlx sets.push_back(_renderer->getPixelPutPipeline().getDescriptorSet()); vkCmdBindDescriptorSets(cmd_buff, VK_PIPELINE_BIND_POINT_GRAPHICS, _renderer->getPipeline().getPipelineLayout(), 0, sets.size(), sets.data(), 0, nullptr); + + _renderer->getPixelPutPipeline().render(*_renderer); - _vbo.bind(*_renderer); - _ibo.bind(*_renderer); - - vkCmdDrawIndexed(cmd_buff, static_cast(_ibo.getSize() / sizeof(uint16_t)), 1, 0, 0, 0); - _renderer->endFrame(); } MLX_Window::~MLX_Window() { _renderer->destroy(); - _staging_buffer.destroy(); - _vbo.destroy(); - _ibo.destroy(); if(_win) SDL_DestroyWindow(_win); } diff --git a/src/platform/window.h b/src/platform/window.h index 611e426..aa8fa1b 100644 --- a/src/platform/window.h +++ b/src/platform/window.h @@ -6,7 +6,7 @@ /* By: maldavid +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2022/10/04 21:53:12 by maldavid #+# #+# */ -/* Updated: 2023/03/31 22:16:01 by maldavid ### ########.fr */ +/* Updated: 2023/04/01 11:54:09 by maldavid ### ########.fr */ /* */ /* ************************************************************************** */ @@ -19,8 +19,6 @@ #include #include #include -#include -#include namespace mlx { @@ -40,8 +38,6 @@ namespace mlx ~MLX_Window(); private: - C_VBO _vbo; - C_IBO _ibo; glm::mat4 _proj = glm::mat4(1.0); std::unique_ptr _renderer; SDL_Window* _win = nullptr; diff --git a/src/renderer/pipeline/pipeline.cpp b/src/renderer/pipeline/pipeline.cpp index d230a92..69595ba 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/03/31 18:56:25 by maldavid ### ########.fr */ +/* Updated: 2023/04/01 12:53:28 by maldavid ### ########.fr */ /* */ /* ************************************************************************** */ @@ -41,60 +41,54 @@ namespace mlx { Out.Color = aColor; Out.UV = aUV; - vec4 position = vec4(aPos.x, aPos.y, 0.0, 1.0) * uProj.mat; - gl_Position = vec4(position.x, position.y, 0.0, 1.0); + gl_Position = uProj.mat * vec4(aPos.x, aPos.y, 0.0, 1.0); } */ const std::vector vertex_shader = { - 0x07230203,0x00010000,0x0008000b,0x0000003b,0x00000000,0x00020011,0x00000001,0x0006000b, + 0x07230203,0x00010000,0x0008000b,0x00000033,0x00000000,0x00020011,0x00000001,0x0006000b, 0x00000001,0x4c534c47,0x6474732e,0x3035342e,0x00000000,0x0003000e,0x00000000,0x00000001, 0x000a000f,0x00000000,0x00000004,0x6e69616d,0x00000000,0x0000000b,0x0000000f,0x00000015, - 0x0000001c,0x00000032,0x00030003,0x00000002,0x000001c2,0x00040005,0x00000004,0x6e69616d, + 0x0000001c,0x00000024,0x00030003,0x00000002,0x000001c2,0x00040005,0x00000004,0x6e69616d, 0x00000000,0x00030005,0x00000009,0x00000000,0x00050006,0x00000009,0x00000000,0x6f6c6f43, 0x00000072,0x00040006,0x00000009,0x00000001,0x00005655,0x00030005,0x0000000b,0x0074754f, - 0x00040005,0x0000000f,0x6c6f4361,0x0000726f,0x00030005,0x00000015,0x00565561,0x00050005, - 0x0000001b,0x69736f70,0x6e6f6974,0x00000000,0x00040005,0x0000001c,0x736f5061,0x00000000, - 0x00050005,0x00000029,0x6f725075,0x7463656a,0x006e6f69,0x00040006,0x00000029,0x00000000, - 0x0074616d,0x00040005,0x0000002b,0x6f725075,0x0000006a,0x00060005,0x00000030,0x505f6c67, - 0x65567265,0x78657472,0x00000000,0x00060006,0x00000030,0x00000000,0x505f6c67,0x7469736f, - 0x006e6f69,0x00030005,0x00000032,0x00000000,0x00040047,0x0000000b,0x0000001e,0x00000000, - 0x00040047,0x0000000f,0x0000001e,0x00000001,0x00040047,0x00000015,0x0000001e,0x00000002, - 0x00040047,0x0000001c,0x0000001e,0x00000000,0x00040048,0x00000029,0x00000000,0x00000005, - 0x00050048,0x00000029,0x00000000,0x00000023,0x00000000,0x00050048,0x00000029,0x00000000, - 0x00000007,0x00000010,0x00030047,0x00000029,0x00000002,0x00040047,0x0000002b,0x00000022, - 0x00000000,0x00040047,0x0000002b,0x00000021,0x00000000,0x00050048,0x00000030,0x00000000, - 0x0000000b,0x00000000,0x00030047,0x00000030,0x00000002,0x00020013,0x00000002,0x00030021, - 0x00000003,0x00000002,0x00030016,0x00000006,0x00000020,0x00040017,0x00000007,0x00000006, - 0x00000003,0x00040017,0x00000008,0x00000006,0x00000002,0x0004001e,0x00000009,0x00000007, - 0x00000008,0x00040020,0x0000000a,0x00000003,0x00000009,0x0004003b,0x0000000a,0x0000000b, - 0x00000003,0x00040015,0x0000000c,0x00000020,0x00000001,0x0004002b,0x0000000c,0x0000000d, - 0x00000000,0x00040020,0x0000000e,0x00000001,0x00000007,0x0004003b,0x0000000e,0x0000000f, - 0x00000001,0x00040020,0x00000011,0x00000003,0x00000007,0x0004002b,0x0000000c,0x00000013, - 0x00000001,0x00040020,0x00000014,0x00000001,0x00000008,0x0004003b,0x00000014,0x00000015, - 0x00000001,0x00040020,0x00000017,0x00000003,0x00000008,0x00040017,0x00000019,0x00000006, - 0x00000004,0x00040020,0x0000001a,0x00000007,0x00000019,0x0004003b,0x00000014,0x0000001c, - 0x00000001,0x00040015,0x0000001d,0x00000020,0x00000000,0x0004002b,0x0000001d,0x0000001e, - 0x00000000,0x00040020,0x0000001f,0x00000001,0x00000006,0x0004002b,0x0000001d,0x00000022, - 0x00000001,0x0004002b,0x00000006,0x00000025,0x00000000,0x0004002b,0x00000006,0x00000026, - 0x3f800000,0x00040018,0x00000028,0x00000019,0x00000004,0x0003001e,0x00000029,0x00000028, - 0x00040020,0x0000002a,0x00000002,0x00000029,0x0004003b,0x0000002a,0x0000002b,0x00000002, - 0x00040020,0x0000002c,0x00000002,0x00000028,0x0003001e,0x00000030,0x00000019,0x00040020, - 0x00000031,0x00000003,0x00000030,0x0004003b,0x00000031,0x00000032,0x00000003,0x00040020, - 0x00000033,0x00000007,0x00000006,0x00040020,0x00000039,0x00000003,0x00000019,0x00050036, - 0x00000002,0x00000004,0x00000000,0x00000003,0x000200f8,0x00000005,0x0004003b,0x0000001a, - 0x0000001b,0x00000007,0x0004003d,0x00000007,0x00000010,0x0000000f,0x00050041,0x00000011, - 0x00000012,0x0000000b,0x0000000d,0x0003003e,0x00000012,0x00000010,0x0004003d,0x00000008, - 0x00000016,0x00000015,0x00050041,0x00000017,0x00000018,0x0000000b,0x00000013,0x0003003e, - 0x00000018,0x00000016,0x00050041,0x0000001f,0x00000020,0x0000001c,0x0000001e,0x0004003d, - 0x00000006,0x00000021,0x00000020,0x00050041,0x0000001f,0x00000023,0x0000001c,0x00000022, - 0x0004003d,0x00000006,0x00000024,0x00000023,0x00070050,0x00000019,0x00000027,0x00000021, - 0x00000024,0x00000025,0x00000026,0x00050041,0x0000002c,0x0000002d,0x0000002b,0x0000000d, - 0x0004003d,0x00000028,0x0000002e,0x0000002d,0x00050090,0x00000019,0x0000002f,0x00000027, - 0x0000002e,0x0003003e,0x0000001b,0x0000002f,0x00050041,0x00000033,0x00000034,0x0000001b, - 0x0000001e,0x0004003d,0x00000006,0x00000035,0x00000034,0x00050041,0x00000033,0x00000036, - 0x0000001b,0x00000022,0x0004003d,0x00000006,0x00000037,0x00000036,0x00070050,0x00000019, - 0x00000038,0x00000035,0x00000037,0x00000025,0x00000026,0x00050041,0x00000039,0x0000003a, - 0x00000032,0x0000000d,0x0003003e,0x0000003a,0x00000038,0x000100fd,0x00010038 + 0x00040005,0x0000000f,0x6c6f4361,0x0000726f,0x00030005,0x00000015,0x00565561,0x00060005, + 0x0000001a,0x505f6c67,0x65567265,0x78657472,0x00000000,0x00060006,0x0000001a,0x00000000, + 0x505f6c67,0x7469736f,0x006e6f69,0x00030005,0x0000001c,0x00000000,0x00050005,0x0000001e, + 0x6f725075,0x7463656a,0x006e6f69,0x00040006,0x0000001e,0x00000000,0x0074616d,0x00040005, + 0x00000020,0x6f725075,0x0000006a,0x00040005,0x00000024,0x736f5061,0x00000000,0x00040047, + 0x0000000b,0x0000001e,0x00000000,0x00040047,0x0000000f,0x0000001e,0x00000001,0x00040047, + 0x00000015,0x0000001e,0x00000002,0x00050048,0x0000001a,0x00000000,0x0000000b,0x00000000, + 0x00030047,0x0000001a,0x00000002,0x00040048,0x0000001e,0x00000000,0x00000005,0x00050048, + 0x0000001e,0x00000000,0x00000023,0x00000000,0x00050048,0x0000001e,0x00000000,0x00000007, + 0x00000010,0x00030047,0x0000001e,0x00000002,0x00040047,0x00000020,0x00000022,0x00000000, + 0x00040047,0x00000020,0x00000021,0x00000000,0x00040047,0x00000024,0x0000001e,0x00000000, + 0x00020013,0x00000002,0x00030021,0x00000003,0x00000002,0x00030016,0x00000006,0x00000020, + 0x00040017,0x00000007,0x00000006,0x00000003,0x00040017,0x00000008,0x00000006,0x00000002, + 0x0004001e,0x00000009,0x00000007,0x00000008,0x00040020,0x0000000a,0x00000003,0x00000009, + 0x0004003b,0x0000000a,0x0000000b,0x00000003,0x00040015,0x0000000c,0x00000020,0x00000001, + 0x0004002b,0x0000000c,0x0000000d,0x00000000,0x00040020,0x0000000e,0x00000001,0x00000007, + 0x0004003b,0x0000000e,0x0000000f,0x00000001,0x00040020,0x00000011,0x00000003,0x00000007, + 0x0004002b,0x0000000c,0x00000013,0x00000001,0x00040020,0x00000014,0x00000001,0x00000008, + 0x0004003b,0x00000014,0x00000015,0x00000001,0x00040020,0x00000017,0x00000003,0x00000008, + 0x00040017,0x00000019,0x00000006,0x00000004,0x0003001e,0x0000001a,0x00000019,0x00040020, + 0x0000001b,0x00000003,0x0000001a,0x0004003b,0x0000001b,0x0000001c,0x00000003,0x00040018, + 0x0000001d,0x00000019,0x00000004,0x0003001e,0x0000001e,0x0000001d,0x00040020,0x0000001f, + 0x00000002,0x0000001e,0x0004003b,0x0000001f,0x00000020,0x00000002,0x00040020,0x00000021, + 0x00000002,0x0000001d,0x0004003b,0x00000014,0x00000024,0x00000001,0x00040015,0x00000025, + 0x00000020,0x00000000,0x0004002b,0x00000025,0x00000026,0x00000000,0x00040020,0x00000027, + 0x00000001,0x00000006,0x0004002b,0x00000025,0x0000002a,0x00000001,0x0004002b,0x00000006, + 0x0000002d,0x00000000,0x0004002b,0x00000006,0x0000002e,0x3f800000,0x00040020,0x00000031, + 0x00000003,0x00000019,0x00050036,0x00000002,0x00000004,0x00000000,0x00000003,0x000200f8, + 0x00000005,0x0004003d,0x00000007,0x00000010,0x0000000f,0x00050041,0x00000011,0x00000012, + 0x0000000b,0x0000000d,0x0003003e,0x00000012,0x00000010,0x0004003d,0x00000008,0x00000016, + 0x00000015,0x00050041,0x00000017,0x00000018,0x0000000b,0x00000013,0x0003003e,0x00000018, + 0x00000016,0x00050041,0x00000021,0x00000022,0x00000020,0x0000000d,0x0004003d,0x0000001d, + 0x00000023,0x00000022,0x00050041,0x00000027,0x00000028,0x00000024,0x00000026,0x0004003d, + 0x00000006,0x00000029,0x00000028,0x00050041,0x00000027,0x0000002b,0x00000024,0x0000002a, + 0x0004003d,0x00000006,0x0000002c,0x0000002b,0x00070050,0x00000019,0x0000002f,0x00000029, + 0x0000002c,0x0000002d,0x0000002e,0x00050091,0x00000019,0x00000030,0x00000023,0x0000002f, + 0x00050041,0x00000031,0x00000032,0x0000001c,0x0000000d,0x0003003e,0x00000032,0x00000030, + 0x000100fd,0x00010038 }; /** diff --git a/src/renderer/pixel_put.cpp b/src/renderer/pixel_put.cpp index 48cdd05..adc999e 100644 --- a/src/renderer/pixel_put.cpp +++ b/src/renderer/pixel_put.cpp @@ -6,51 +6,95 @@ /* By: maldavid +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2023/03/31 15:14:50 by maldavid #+# #+# */ -/* Updated: 2023/03/31 20:30:38 by maldavid ### ########.fr */ +/* Updated: 2023/04/01 12:57:32 by maldavid ### ########.fr */ /* */ /* ************************************************************************** */ +#include +#include +#include #include -#include #include namespace mlx { + struct PixelPutPipeline::_Pimpl + { + Image image; + C_VBO vbo; + C_IBO ibo; + Buffer buffer; + DescriptorSet image_set; + void* map = nullptr; + uint32_t width = 0; + uint32_t height = 0; + }; + + PixelPutPipeline::PixelPutPipeline() : _impl(std::make_unique<_Pimpl>()) {} + void PixelPutPipeline::init(uint32_t width, uint32_t height, Renderer& renderer) noexcept { - _image.create(width, height, VK_FORMAT_R8G8B8A8_UNORM, VK_IMAGE_TILING_OPTIMAL, + _impl->image.create(width, height, VK_FORMAT_R8G8B8A8_UNORM, VK_IMAGE_TILING_OPTIMAL, VK_IMAGE_USAGE_TRANSFER_DST_BIT | VK_IMAGE_USAGE_SAMPLED_BIT, VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT); - _image.createImageView(VK_IMAGE_VIEW_TYPE_2D, VK_IMAGE_ASPECT_COLOR_BIT); - _image.createSampler(); - _buffer.create(Buffer::kind::dynamic, sizeof(uint32_t) * (width * height), VK_BUFFER_USAGE_TRANSFER_SRC_BIT); - _image_set = renderer.getFragDescriptorSet().duplicate(); - _width = width; - _height = height; + _impl->image.createImageView(VK_IMAGE_VIEW_TYPE_2D, VK_IMAGE_ASPECT_COLOR_BIT); + _impl->image.createSampler(); + _impl->buffer.create(Buffer::kind::dynamic, sizeof(uint32_t) * (width * height), VK_BUFFER_USAGE_TRANSFER_SRC_BIT); + _impl->image_set = renderer.getFragDescriptorSet().duplicate(); + _impl->width = width; + _impl->height = height; + + std::vector vertexData = { + {{0, 0}, {1.f, 1.f, 1.f}, {0.0f, 0.0f}}, + {{_impl->width, 0}, {1.f, 1.f, 1.f}, {1.0f, 0.0f}}, + {{_impl->width, _impl->height}, {1.f, 1.f, 1.f}, {1.0f, 1.0f}}, + {{0, _impl->height}, {1.f, 1.f, 1.0}, {0.0f, 1.0f}} + }; + + std::vector indexData = { 0, 1, 2, 2, 3, 0 }; + + _impl->vbo.create(sizeof(Vertex) * vertexData.size(), vertexData.data()); + _impl->ibo.create(sizeof(uint16_t) * indexData.size(), indexData.data()); + } + + VkDescriptorSet& PixelPutPipeline::getDescriptorSet() noexcept + { + return _impl->image_set.get(); } void PixelPutPipeline::setPixel(uint32_t x, uint32_t y, int color) noexcept { - if(x < 0 || y < 0 || x > _width || y > _height) + if(x < 0 || y < 0 || x > _impl->width || y > _impl->height) return; - if(!_buffer.isMapped()) - _buffer.mapMem(&_map); + if(!_impl->buffer.isMapped()) + _impl->buffer.mapMem(&_impl->map); - unsigned char* mem = static_cast(_map) + y * _width + x * sizeof(uint32_t); + unsigned char* mem = static_cast(_impl->map) + (y * _impl->width * sizeof(uint32_t)) + (x * sizeof(uint32_t)); *reinterpret_cast(mem) = color; } void PixelPutPipeline::present() noexcept { - if(_buffer.isMapped()) - _buffer.unmapMem(); - _image.copyBuffer(_buffer); - _image_set.writeDescriptor(0, _image.getImageView(), _image.getSampler()); + if(_impl->buffer.isMapped()) + _impl->buffer.unmapMem(); + _impl->image.copyBuffer(_impl->buffer); + _impl->image_set.writeDescriptor(0, _impl->image.getImageView(), _impl->image.getSampler()); + } + + void PixelPutPipeline::render(Renderer& renderer) noexcept + { + _impl->vbo.bind(renderer); + _impl->ibo.bind(renderer); + vkCmdDrawIndexed(renderer.getActiveCmdBuffer().get(), static_cast(_impl->ibo.getSize() / sizeof(uint16_t)), 1, 0, 0, 0); } void PixelPutPipeline::destroy() noexcept { - _buffer.destroy(); - _image.destroy(); + _impl->vbo.destroy(); + _impl->ibo.destroy(); + _impl->buffer.destroy(); + _impl->image.destroy(); } + + PixelPutPipeline::~PixelPutPipeline() {} } diff --git a/src/renderer/pixel_put.h b/src/renderer/pixel_put.h index 3b5cc1b..13a1626 100644 --- a/src/renderer/pixel_put.h +++ b/src/renderer/pixel_put.h @@ -6,15 +6,13 @@ /* By: maldavid +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2023/03/31 13:18:50 by maldavid #+# #+# */ -/* Updated: 2023/03/31 20:30:25 by maldavid ### ########.fr */ +/* Updated: 2023/04/01 12:10:33 by maldavid ### ########.fr */ /* */ /* ************************************************************************** */ #ifndef __MLX_PIXEL_PUT__ #define __MLX_PIXEL_PUT__ -#include -#include #include namespace mlx @@ -22,25 +20,22 @@ namespace mlx class PixelPutPipeline { public: - PixelPutPipeline() = default; + PixelPutPipeline(); void init(uint32_t width, uint32_t height, class Renderer& renderer) noexcept; void setPixel(uint32_t x, uint32_t y, int color) noexcept; void present() noexcept; - inline VkDescriptorSet& getDescriptorSet() noexcept { return _image_set.get(); } + void render(class Renderer& renderer) noexcept; + VkDescriptorSet& getDescriptorSet() noexcept; void destroy() noexcept; - ~PixelPutPipeline() = default; + ~PixelPutPipeline(); private: - Image _image; - Buffer _buffer; - DescriptorSet _image_set; - void* _map = nullptr; - uint32_t _width = 0; - uint32_t _height = 0; + struct _Pimpl; + std::unique_ptr<_Pimpl> _impl; }; } diff --git a/test/42_logo.png b/test/42_logo.png index dcc60ae..833ae16 100644 Binary files a/test/42_logo.png and b/test/42_logo.png differ diff --git a/test/main.c b/test/main.c index f36f023..8d46ac0 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/03/31 20:26:59 by maldavid ### ########.fr */ +/* Updated: 2023/04/01 13:00:56 by maldavid ### ########.fr */ /* */ /* ************************************************************************** */ @@ -22,8 +22,15 @@ typedef struct int update(t_mlx *mlx) { static int i = 0; + int j; - mlx_pixel_put(mlx->mlx, mlx->win, 100, 0, 0xFFFFFFFF); + j = 0; + while (j < 400) + { + mlx_pixel_put(mlx->mlx, mlx->win, j, j, 0xFFFFFFFF); + mlx_pixel_put(mlx->mlx, mlx->win, 399 - j, j, 0xFFFFFFFF); + j++; + } i++; if (i > 10000) mlx_loop_end(mlx->mlx);