Image is projected onto the sqaure now
This commit is contained in:
+5
-1
@@ -1,9 +1,13 @@
|
|||||||
#version 450
|
#version 450
|
||||||
|
|
||||||
layout(location = 0) in vec3 fragColor;
|
layout(location = 0) in vec3 fragColor;
|
||||||
|
layout(location = 1) in vec2 fragTexCoord;
|
||||||
|
|
||||||
layout(location = 0) out vec4 outColor;
|
layout(location = 0) out vec4 outColor;
|
||||||
|
|
||||||
|
layout(binding = 1) uniform sampler2D texSampler;
|
||||||
|
|
||||||
void main(){
|
void main(){
|
||||||
outColor = vec4(fragColor, 1.0);
|
// outColor = vec4(fragTexCoord, 0.0, 1.0);
|
||||||
|
outColor = texture(texSampler, fragTexCoord);
|
||||||
}
|
}
|
||||||
|
|||||||
+3
-14
@@ -8,22 +8,10 @@ layout(set = 0, binding = 0) uniform UniformBufferObject{
|
|||||||
|
|
||||||
layout(location = 0) in vec2 inPosition;
|
layout(location = 0) in vec2 inPosition;
|
||||||
layout(location = 1) in vec3 inColor;
|
layout(location = 1) in vec3 inColor;
|
||||||
|
layout(location = 2) in vec2 inTexCoord;
|
||||||
|
|
||||||
layout(location = 0) out vec3 fragColor;
|
layout(location = 0) out vec3 fragColor;
|
||||||
|
layout(location = 1) out vec2 fragTexCoord;
|
||||||
/*
|
|
||||||
vec2 positions[3] = vec2[](
|
|
||||||
vec2(0.0, -0.5),
|
|
||||||
vec2(0.5, 0.5),
|
|
||||||
vec2(-0.5, 0.5)
|
|
||||||
);
|
|
||||||
|
|
||||||
vec3 colors[3] = vec3[](
|
|
||||||
vec3(0.0, 1.0, 1.0),
|
|
||||||
vec3(0.0, 1.0, 0.0),
|
|
||||||
vec3(0.0, 0.0, 1.0)
|
|
||||||
);
|
|
||||||
*/
|
|
||||||
|
|
||||||
void main(){
|
void main(){
|
||||||
// gl_Position = vec4(positions[gl_VertexIndex], 0.0, 1.0);
|
// gl_Position = vec4(positions[gl_VertexIndex], 0.0, 1.0);
|
||||||
@@ -31,4 +19,5 @@ void main(){
|
|||||||
// gl_Position = vec4(inPosition, 0.0, 1.0);
|
// gl_Position = vec4(inPosition, 0.0, 1.0);
|
||||||
gl_Position = ubo.proj * ubo.view * ubo.model * vec4(inPosition, 0.0, 1.0);
|
gl_Position = ubo.proj * ubo.view * ubo.model * vec4(inPosition, 0.0, 1.0);
|
||||||
fragColor = inColor;
|
fragColor = inColor;
|
||||||
|
fragTexCoord = inTexCoord;
|
||||||
}
|
}
|
||||||
|
|||||||
+38
-16
@@ -419,10 +419,19 @@ namespace vapp{
|
|||||||
uboLayoutBinding.descriptorCount = 1;
|
uboLayoutBinding.descriptorCount = 1;
|
||||||
uboLayoutBinding.stageFlags = VK_SHADER_STAGE_VERTEX_BIT;
|
uboLayoutBinding.stageFlags = VK_SHADER_STAGE_VERTEX_BIT;
|
||||||
|
|
||||||
|
VkDescriptorSetLayoutBinding samplerLayoutBinding{};
|
||||||
|
samplerLayoutBinding.binding = 1;
|
||||||
|
samplerLayoutBinding.descriptorCount = 1;
|
||||||
|
samplerLayoutBinding.descriptorType = VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER;
|
||||||
|
samplerLayoutBinding.pImmutableSamplers = nullptr;
|
||||||
|
samplerLayoutBinding.stageFlags = VK_SHADER_STAGE_FRAGMENT_BIT;
|
||||||
|
|
||||||
|
std::array<VkDescriptorSetLayoutBinding, 2> bindings = { uboLayoutBinding, samplerLayoutBinding };
|
||||||
|
|
||||||
VkDescriptorSetLayoutCreateInfo layoutInfo{};
|
VkDescriptorSetLayoutCreateInfo layoutInfo{};
|
||||||
layoutInfo.sType = VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_CREATE_INFO;
|
layoutInfo.sType = VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_CREATE_INFO;
|
||||||
layoutInfo.bindingCount = 1;
|
layoutInfo.bindingCount = static_cast<uint32_t>(bindings.size());
|
||||||
layoutInfo.pBindings = &uboLayoutBinding;
|
layoutInfo.pBindings = bindings.data();
|
||||||
|
|
||||||
if(vkCreateDescriptorSetLayout(device, &layoutInfo, nullptr, &descriptorSetLayout) != VK_SUCCESS){
|
if(vkCreateDescriptorSetLayout(device, &layoutInfo, nullptr, &descriptorSetLayout) != VK_SUCCESS){
|
||||||
throw std::runtime_error("Func: createDescriptorSetLayout\nError: Failed to create Descriptor Set Layout!\n");
|
throw std::runtime_error("Func: createDescriptorSetLayout\nError: Failed to create Descriptor Set Layout!\n");
|
||||||
@@ -1026,14 +1035,16 @@ namespace vapp{
|
|||||||
}
|
}
|
||||||
|
|
||||||
void Vulkan::createDescriptorPool(){
|
void Vulkan::createDescriptorPool(){
|
||||||
VkDescriptorPoolSize poolSize{};
|
std::array<VkDescriptorPoolSize, 2> poolSizes{};
|
||||||
poolSize.type = VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER;
|
poolSizes[0].type = VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER;
|
||||||
poolSize.descriptorCount = static_cast<uint32_t>(MAX_FRAMES_IN_FLIGHT);
|
poolSizes[0].descriptorCount = static_cast<uint32_t>(MAX_FRAMES_IN_FLIGHT);
|
||||||
|
poolSizes[1].type = VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER;
|
||||||
|
poolSizes[1].descriptorCount = static_cast<uint32_t>(MAX_FRAMES_IN_FLIGHT);
|
||||||
|
|
||||||
VkDescriptorPoolCreateInfo poolInfo{};
|
VkDescriptorPoolCreateInfo poolInfo{};
|
||||||
poolInfo.sType = VK_STRUCTURE_TYPE_DESCRIPTOR_POOL_CREATE_INFO;
|
poolInfo.sType = VK_STRUCTURE_TYPE_DESCRIPTOR_POOL_CREATE_INFO;
|
||||||
poolInfo.poolSizeCount = 1;
|
poolInfo.poolSizeCount = static_cast<uint32_t>(poolSizes.size());
|
||||||
poolInfo.pPoolSizes = &poolSize;
|
poolInfo.pPoolSizes = poolSizes.data();
|
||||||
poolInfo.maxSets = static_cast<uint32_t>(MAX_FRAMES_IN_FLIGHT);
|
poolInfo.maxSets = static_cast<uint32_t>(MAX_FRAMES_IN_FLIGHT);
|
||||||
|
|
||||||
if(vkCreateDescriptorPool(device, &poolInfo, nullptr, &descriptorPool) != VK_SUCCESS){
|
if(vkCreateDescriptorPool(device, &poolInfo, nullptr, &descriptorPool) != VK_SUCCESS){
|
||||||
@@ -1062,18 +1073,29 @@ namespace vapp{
|
|||||||
bufferInfo.offset = 0;
|
bufferInfo.offset = 0;
|
||||||
bufferInfo.range = sizeof(UniformBufferObject);
|
bufferInfo.range = sizeof(UniformBufferObject);
|
||||||
|
|
||||||
VkWriteDescriptorSet descriptorWrite{};
|
VkDescriptorImageInfo imageInfo{};
|
||||||
descriptorWrite.sType = VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET;
|
imageInfo.imageLayout = VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL;
|
||||||
descriptorWrite.dstSet = descriptorSets[i];
|
imageInfo.imageView = textureImageView;
|
||||||
descriptorWrite.dstBinding = 0;
|
imageInfo.sampler = textureSampler;
|
||||||
descriptorWrite.dstArrayElement = 0;
|
|
||||||
|
|
||||||
descriptorWrite.descriptorType = VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER;
|
std::array<VkWriteDescriptorSet, 2> descriptorWrites{};
|
||||||
descriptorWrite.descriptorCount = 1;
|
descriptorWrites[0].sType = VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET;
|
||||||
|
descriptorWrites[0].dstSet = descriptorSets[i];
|
||||||
|
descriptorWrites[0].dstBinding = 0;
|
||||||
|
descriptorWrites[0].dstArrayElement = 0;
|
||||||
|
descriptorWrites[0].descriptorType = VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER;
|
||||||
|
descriptorWrites[0].descriptorCount = 1;
|
||||||
|
descriptorWrites[0].pBufferInfo = &bufferInfo;
|
||||||
|
|
||||||
descriptorWrite.pBufferInfo = &bufferInfo;
|
descriptorWrites[1].sType = VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET;
|
||||||
|
descriptorWrites[1].dstSet = descriptorSets[i];
|
||||||
|
descriptorWrites[1].dstBinding = 1;
|
||||||
|
descriptorWrites[1].dstArrayElement = 0;
|
||||||
|
descriptorWrites[1].descriptorType = VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER;
|
||||||
|
descriptorWrites[1].descriptorCount = 1;
|
||||||
|
descriptorWrites[1].pImageInfo = &imageInfo;
|
||||||
|
|
||||||
vkUpdateDescriptorSets(device, 1, &descriptorWrite, 0, nullptr);
|
vkUpdateDescriptorSets(device, static_cast<uint32_t>(descriptorWrites.size()), descriptorWrites.data(), 0, nullptr);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+14
-6
@@ -34,17 +34,20 @@ namespace vapp{
|
|||||||
struct Vertex{
|
struct Vertex{
|
||||||
glm::vec2 pos;
|
glm::vec2 pos;
|
||||||
glm::vec3 color;
|
glm::vec3 color;
|
||||||
|
glm::vec2 texCoord;
|
||||||
|
|
||||||
static VkVertexInputBindingDescription getBindingDescription(){
|
static VkVertexInputBindingDescription getBindingDescription(){
|
||||||
VkVertexInputBindingDescription bindingDescription{};
|
VkVertexInputBindingDescription bindingDescription{};
|
||||||
|
|
||||||
bindingDescription.binding = 0;
|
bindingDescription.binding = 0;
|
||||||
bindingDescription.stride = sizeof(Vertex);
|
bindingDescription.stride = sizeof(Vertex);
|
||||||
bindingDescription.inputRate = VK_VERTEX_INPUT_RATE_VERTEX;
|
bindingDescription.inputRate = VK_VERTEX_INPUT_RATE_VERTEX;
|
||||||
|
|
||||||
return bindingDescription;
|
return bindingDescription;
|
||||||
}
|
}
|
||||||
|
|
||||||
static std::array<VkVertexInputAttributeDescription, 2> getAttributeDescriptions(){
|
static std::array<VkVertexInputAttributeDescription, 3> getAttributeDescriptions(){
|
||||||
std::array<VkVertexInputAttributeDescription, 2> attributeDescriptions{};
|
std::array<VkVertexInputAttributeDescription, 3> attributeDescriptions{};
|
||||||
|
|
||||||
attributeDescriptions[0].binding = 0;
|
attributeDescriptions[0].binding = 0;
|
||||||
attributeDescriptions[0].location = 0;
|
attributeDescriptions[0].location = 0;
|
||||||
@@ -56,16 +59,21 @@ namespace vapp{
|
|||||||
attributeDescriptions[1].format = VK_FORMAT_R32G32B32_SFLOAT;
|
attributeDescriptions[1].format = VK_FORMAT_R32G32B32_SFLOAT;
|
||||||
attributeDescriptions[1].offset = offsetof(Vertex, color);
|
attributeDescriptions[1].offset = offsetof(Vertex, color);
|
||||||
|
|
||||||
|
attributeDescriptions[2].binding = 0;
|
||||||
|
attributeDescriptions[2].location = 2;
|
||||||
|
attributeDescriptions[2].format = VK_FORMAT_R32G32_SFLOAT;
|
||||||
|
attributeDescriptions[2].offset = offsetof(Vertex, texCoord);
|
||||||
|
|
||||||
return attributeDescriptions;
|
return attributeDescriptions;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
// TODO: Remove
|
// TODO: Remove
|
||||||
const std::vector<Vertex> vertices = {
|
const std::vector<Vertex> vertices = {
|
||||||
{{-0.5f, -0.5f}, {0.0f, 1.0f, 0.0f}},
|
{{-0.5f, -0.5f}, {0.0f, 1.0f, 0.0f}, {1.0f, 0.0f}},
|
||||||
{{0.5f, -0.5f}, {0.0f, 0.0f, 1.0f}},
|
{{0.5f, -0.5f}, {0.0f, 0.0f, 1.0f}, {0.0f, 0.0f}},
|
||||||
{{0.5f, 0.5f}, {0.0f, 1.0f, 0.0f}},
|
{{0.5f, 0.5f}, {0.0f, 1.0f, 0.0f}, {0.0f, 1.0f}},
|
||||||
{{-0.5f, 0.5f}, {1.0f, 0.0f, 0.0f}}
|
{{-0.5f, 0.5f}, {1.0f, 0.0f, 0.0f}, {1.0f, 1.0f}}
|
||||||
};
|
};
|
||||||
|
|
||||||
// uint16_t also possible -> change in vkCmdBindIndexBuffer also
|
// uint16_t also possible -> change in vkCmdBindIndexBuffer also
|
||||||
|
|||||||
Reference in New Issue
Block a user