Fixed pipeline and shaders.
Can now view 3D objects
This commit is contained in:
parent
15dc595753
commit
c4c796c98e
@ -21,15 +21,16 @@ Buffer::Buffer(vk::PhysicalDevice phys_dev, vk::Device dev, vk::DeviceSize sz, v
|
|||||||
memory = dev.allocateMemory(alloc_info);
|
memory = dev.allocateMemory(alloc_info);
|
||||||
|
|
||||||
dev.bindBufferMemory(buffer, memory, 0);
|
dev.bindBufferMemory(buffer, memory, 0);
|
||||||
|
|
||||||
|
p = dev.mapMemory(memory, 0, size);
|
||||||
}
|
}
|
||||||
|
|
||||||
void Buffer::upload(const uint8_t* data, vk::DeviceSize size) {
|
void Buffer::upload(const uint8_t* data, vk::DeviceSize size) {
|
||||||
auto p = dev.mapMemory(memory, 0, size);
|
|
||||||
std::memcpy(p, data, size);
|
std::memcpy(p, data, size);
|
||||||
dev.unmapMemory(memory);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
Buffer::~Buffer() {
|
Buffer::~Buffer() {
|
||||||
|
dev.unmapMemory(memory);
|
||||||
dev.freeMemory(memory);
|
dev.freeMemory(memory);
|
||||||
dev.destroyBuffer(buffer);
|
dev.destroyBuffer(buffer);
|
||||||
}
|
}
|
||||||
|
|||||||
@ -10,6 +10,8 @@ struct Buffer {
|
|||||||
vk::DeviceSize size;
|
vk::DeviceSize size;
|
||||||
vk::DeviceMemory memory;
|
vk::DeviceMemory memory;
|
||||||
vk::Buffer buffer;
|
vk::Buffer buffer;
|
||||||
|
/* mapped memory */
|
||||||
|
void* p;
|
||||||
|
|
||||||
void upload(const uint8_t* data, vk::DeviceSize size);
|
void upload(const uint8_t* data, vk::DeviceSize size);
|
||||||
inline void upload(const uint8_t* data) {
|
inline void upload(const uint8_t* data) {
|
||||||
|
|||||||
@ -12,6 +12,8 @@
|
|||||||
#include <Renderer/UniformBuffer.hpp>
|
#include <Renderer/UniformBuffer.hpp>
|
||||||
#include <Renderer/VertexBuffer.hpp>
|
#include <Renderer/VertexBuffer.hpp>
|
||||||
|
|
||||||
|
#include <glm/gtc/matrix_transform.hpp>
|
||||||
|
|
||||||
using namespace std::string_literals;
|
using namespace std::string_literals;
|
||||||
|
|
||||||
Renderer::Renderer(Window& win) : win(win) {
|
Renderer::Renderer(Window& win) : win(win) {
|
||||||
@ -169,10 +171,10 @@ Renderer::Renderer(Window& win) : win(win) {
|
|||||||
|
|
||||||
|
|
||||||
/* basic triangle */
|
/* basic triangle */
|
||||||
std::vector<Vertex> triangle = {
|
const std::vector<Vertex> triangle = {
|
||||||
{{ 1.0, 1.0, 0.0 }},
|
{{ 1.0, 1.0, -50.0 }, {1.0, 0.0}},
|
||||||
{{-1.0, 1.0, 0.0 }},
|
{{-1.0, 1.0, -50.0 }, {0.0, 0.0}},
|
||||||
{{ 0.0,-1.0, 0.0 }},
|
{{ 0.0,-1.0, -50.0 }, {0.0, 1.0}},
|
||||||
};
|
};
|
||||||
|
|
||||||
vertex_buffer = std::make_unique<VertexBuffer>(phys_dev, dev, triangle.size());
|
vertex_buffer = std::make_unique<VertexBuffer>(phys_dev, dev, triangle.size());
|
||||||
@ -191,6 +193,8 @@ Renderer::Renderer(Window& win) : win(win) {
|
|||||||
|
|
||||||
pipeline = std::make_unique<GraphicsPipeline>(dev, shaders, swapchain->extent, *render_pass, bindings, *vertex_buffer);
|
pipeline = std::make_unique<GraphicsPipeline>(dev, shaders, swapchain->extent, *render_pass, bindings, *vertex_buffer);
|
||||||
|
|
||||||
|
pipeline->update(0, *uniform_buffer);
|
||||||
|
|
||||||
shaders[0].cleanup();
|
shaders[0].cleanup();
|
||||||
shaders[1].cleanup();
|
shaders[1].cleanup();
|
||||||
}
|
}
|
||||||
@ -216,7 +220,7 @@ void Renderer::draw() {
|
|||||||
command_buffer->begin();
|
command_buffer->begin();
|
||||||
|
|
||||||
vk::ClearValue clear_values[] = {
|
vk::ClearValue clear_values[] = {
|
||||||
vk::ClearColorValue(1.0f, 0.0f, 1.0f, 1.0f),
|
vk::ClearColorValue(0.0f, 0.0f, 0.0f, 1.0f),
|
||||||
vk::ClearDepthStencilValue {.depth = 1.0f}
|
vk::ClearDepthStencilValue {.depth = 1.0f}
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -235,7 +239,6 @@ void Renderer::draw() {
|
|||||||
/* flip viewport */
|
/* flip viewport */
|
||||||
auto viewport = vk::Viewport{
|
auto viewport = vk::Viewport{
|
||||||
.x = 0.0f,
|
.x = 0.0f,
|
||||||
// .y = 0.0f,
|
|
||||||
.y = static_cast<float>(swapchain->extent.height),
|
.y = static_cast<float>(swapchain->extent.height),
|
||||||
.width = static_cast<float>(swapchain->extent.width),
|
.width = static_cast<float>(swapchain->extent.width),
|
||||||
.height = -static_cast<float>(swapchain->extent.height),
|
.height = -static_cast<float>(swapchain->extent.height),
|
||||||
@ -260,11 +263,13 @@ void Renderer::draw() {
|
|||||||
command_buffer->bind(*vertex_buffer);
|
command_buffer->bind(*vertex_buffer);
|
||||||
command_buffer->bind(pipeline->layout, pipeline->desc_set);
|
command_buffer->bind(pipeline->layout, pipeline->desc_set);
|
||||||
|
|
||||||
|
const auto p = glm::perspective(glm::radians(90.0f), static_cast<float>(swapchain->extent.width) / static_cast<float>(swapchain->extent.height), 0.01f, 50.0f);
|
||||||
|
|
||||||
uniform_buffer->upload(UniformData{
|
uniform_buffer->upload(UniformData{
|
||||||
.time = static_cast<float>(frame) * 0.0167f,
|
.mvp = p * glm::rotate(glm::mat4(1.0), glm::radians(static_cast<float>(frame)), glm::vec3(1.0, 1.0, 1.0)),
|
||||||
|
.time = static_cast<float>(frame),
|
||||||
});
|
});
|
||||||
|
|
||||||
pipeline->update(0, *uniform_buffer);
|
|
||||||
|
|
||||||
command_buffer->draw(9, 1, 0, 0);
|
command_buffer->draw(9, 1, 0, 0);
|
||||||
|
|
||||||
|
|||||||
@ -6,6 +6,7 @@
|
|||||||
|
|
||||||
struct Vertex {
|
struct Vertex {
|
||||||
glm::vec3 coord;
|
glm::vec3 coord;
|
||||||
|
glm::vec2 tex_coord;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct VertexBuffer {
|
struct VertexBuffer {
|
||||||
@ -25,11 +26,16 @@ struct VertexBuffer {
|
|||||||
|
|
||||||
inline std::vector<vk::VertexInputAttributeDescription> attrs(uint32_t binding) const {
|
inline std::vector<vk::VertexInputAttributeDescription> attrs(uint32_t binding) const {
|
||||||
return std::vector<vk::VertexInputAttributeDescription> {
|
return std::vector<vk::VertexInputAttributeDescription> {
|
||||||
vk::VertexInputAttributeDescription {
|
{
|
||||||
.location = 0,
|
.location = 0,
|
||||||
.binding = binding,
|
.binding = binding,
|
||||||
.format = vk::Format::eR32G32B32Sfloat,
|
.format = vk::Format::eR32G32B32Sfloat,
|
||||||
.offset = offsetof(Vertex, coord),
|
.offset = offsetof(Vertex, coord),
|
||||||
|
}, {
|
||||||
|
.location = 1,
|
||||||
|
.binding = binding,
|
||||||
|
.format = vk::Format::eR32G32Sfloat,
|
||||||
|
.offset = offsetof(Vertex, tex_coord),
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,4 +1,6 @@
|
|||||||
#version 460 core
|
#version 460 core
|
||||||
|
|
||||||
|
layout (location = 0) in vec2 texCoord;
|
||||||
layout (location = 0) out vec4 FragColor;
|
layout (location = 0) out vec4 FragColor;
|
||||||
|
|
||||||
layout (set = 0, binding = 0) uniform Matrices {
|
layout (set = 0, binding = 0) uniform Matrices {
|
||||||
@ -7,6 +9,5 @@ layout (set = 0, binding = 0) uniform Matrices {
|
|||||||
};
|
};
|
||||||
|
|
||||||
void main() {
|
void main() {
|
||||||
// FragColor = vec4(abs(cos(time)), 0.5, 1.0, 1.0);
|
FragColor = vec4(cos(time), 1.0, 0.0, 1.0);
|
||||||
FragColor = vec4(1.0);
|
|
||||||
}
|
}
|
||||||
Binary file not shown.
@ -1,6 +1,15 @@
|
|||||||
#version 460 core
|
#version 460 core
|
||||||
layout (location = 0) in vec3 aPos;
|
layout (location = 0) in vec3 aPos;
|
||||||
|
layout (location = 1) in vec2 aTexCoord;
|
||||||
|
|
||||||
|
layout (location = 0) out vec2 texCoord;
|
||||||
|
|
||||||
|
layout (set = 0, binding = 0) uniform Matrices {
|
||||||
|
mat4 mpv;
|
||||||
|
float time;
|
||||||
|
};
|
||||||
|
|
||||||
void main() {
|
void main() {
|
||||||
gl_Position = vec4(aPos, 1.0);
|
gl_Position = mpv*vec4(aPos, 1.0);
|
||||||
|
texCoord = aTexCoord;
|
||||||
}
|
}
|
||||||
Binary file not shown.
Loading…
x
Reference in New Issue
Block a user