From cb96eaf6bdf6198305f191d5514b1949b2436b26 Mon Sep 17 00:00:00 2001 From: saschawillems Date: Sat, 14 May 2016 15:54:20 +0200 Subject: [PATCH] Updated texture example using different texture and lighting (diffuse + specular) --- android/texture/build.bat | 7 ++- data/shaders/texture.frag | 16 ------- data/shaders/texture.frag.spv | Bin 736 -> 0 bytes data/shaders/texture.vert | 24 ---------- data/shaders/texture.vert.spv | Bin 1836 -> 0 bytes .../generate-spirv.bat} | 0 data/shaders/texture/texture.frag | 28 +++++++++++ data/shaders/texture/texture.frag.spv | Bin 0 -> 2076 bytes data/shaders/texture/texture.vert | 44 ++++++++++++++++++ data/shaders/texture/texture.vert.spv | Bin 0 -> 3552 bytes texture/texture.cpp | 41 ++++++++++------ 11 files changed, 101 insertions(+), 59 deletions(-) delete mode 100644 data/shaders/texture.frag delete mode 100644 data/shaders/texture.frag.spv delete mode 100644 data/shaders/texture.vert delete mode 100644 data/shaders/texture.vert.spv rename data/shaders/{spirv-texture.bat => texture/generate-spirv.bat} (100%) create mode 100644 data/shaders/texture/texture.frag create mode 100644 data/shaders/texture/texture.frag.spv create mode 100644 data/shaders/texture/texture.vert create mode 100644 data/shaders/texture/texture.vert.spv diff --git a/android/texture/build.bat b/android/texture/build.bat index bf0d1b98..543e2834 100644 --- a/android/texture/build.bat +++ b/android/texture/build.bat @@ -4,12 +4,11 @@ if %ERRORLEVEL% EQU 0 ( echo ndk-build has failed, build cancelled cd.. - mkdir "assets\shaders" - xcopy "..\..\data\shaders\texture.vert.spv" "assets\shaders" /Y - xcopy "..\..\data\shaders\texture.frag.spv" "assets\shaders" /Y + mkdir "assets\shaders\texture" + xcopy "..\..\data\shaders\texture\*.spv" "assets\shaders\texture" /Y mkdir "assets\textures" - xcopy "..\..\data\textures\igor_and_pal_bc3.ktx" "assets\textures" /Y + xcopy "..\..\data\textures\pattern_02_bc2.ktx" "assets\textures" /Y mkdir "res\drawable" xcopy "..\..\android\images\icon.png" "res\drawable" /Y diff --git a/data/shaders/texture.frag b/data/shaders/texture.frag deleted file mode 100644 index 8e704216..00000000 --- a/data/shaders/texture.frag +++ /dev/null @@ -1,16 +0,0 @@ -#version 450 - -#extension GL_ARB_separate_shader_objects : enable -#extension GL_ARB_shading_language_420pack : enable - -layout (binding = 1) uniform sampler2D samplerColor; - -layout (location = 0) in vec2 inUV; -layout (location = 1) in float inLodBias; - -layout (location = 0) out vec4 outFragColor; - -void main() -{ - outFragColor = texture(samplerColor, inUV, inLodBias); -} \ No newline at end of file diff --git a/data/shaders/texture.frag.spv b/data/shaders/texture.frag.spv deleted file mode 100644 index 13e9c036c6412ff27bfe92808cc68aee48c9da1f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 736 zcmY+BTT22_6opUTvMeuIN(783Fo`iiD$mZxSi;>MIr!P&v^ao9=c<4*6qi=u3@PKc(WcR5)wwP8eH zOQ;F^LRDH~MIoy%Bm1d`IjIIi@AjeZrT)w&cJ6!Wn;rX!7r(yyqj~yYqfi(H-o!@1 z!Un$AJL}Hu=)>fdX}xw{JySnk%RT`Q=AamJ~oozMYi_ANkdqVDaAqccq3x50Svd6kB~M=VT3&i63)F{GV^1JIoSX*&`ChaEcGD1e SgN_=+ZIy%g3c4rgg6MsQ} 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 literal 0 HcmV?d00001 diff --git a/texture/texture.cpp b/texture/texture.cpp index 82010ecc..7d83d46b 100644 --- a/texture/texture.cpp +++ b/texture/texture.cpp @@ -27,6 +27,7 @@ struct Vertex { float pos[3]; float uv[2]; + float normal[3]; }; class VulkanExample : public VulkanExampleBase @@ -65,6 +66,7 @@ public: struct { glm::mat4 projection; glm::mat4 model; + glm::vec4 viewPos; float lodBias = 0.0f; } uboVS; @@ -79,7 +81,7 @@ public: VulkanExample() : VulkanExampleBase(ENABLE_VALIDATION) { zoom = -2.5f; - rotation = { 45.0f, 0.0f, 0.0f }; + rotation = { 0.0f, 15.0f, 0.0f }; title = "Vulkan Example - Texturing"; } @@ -537,15 +539,17 @@ public: void generateQuad() { // Setup vertices for a single uv-mapped quad -#define dim 1.0f +#define DIM 1.0f +#define NORMAL { 0.0f, 0.0f, 1.0f } std::vector vertexBuffer = { - { { dim, dim, 0.0f },{ 1.0f, 1.0f } }, - { { -dim, dim, 0.0f },{ 0.0f, 1.0f } }, - { { -dim, -dim, 0.0f },{ 0.0f, 0.0f } }, - { { dim, -dim, 0.0f },{ 1.0f, 0.0f } } + { { DIM, DIM, 0.0f }, { 1.0f, 1.0f }, NORMAL }, + { { -DIM, DIM, 0.0f }, { 0.0f, 1.0f }, NORMAL }, + { { -DIM, -DIM, 0.0f }, { 0.0f, 0.0f }, NORMAL }, + { { DIM, -DIM, 0.0f }, { 1.0f, 0.0f }, NORMAL } }; #undef dim +#undef normal createBuffer( VK_BUFFER_USAGE_VERTEX_BUFFER_BIT, vertexBuffer.size() * sizeof(Vertex), @@ -577,7 +581,7 @@ public: // Attribute descriptions // Describes memory layout and shader positions - vertices.attributeDescriptions.resize(2); + vertices.attributeDescriptions.resize(3); // Location 0 : Position vertices.attributeDescriptions[0] = vkTools::initializers::vertexInputAttributeDescription( @@ -592,6 +596,13 @@ public: 1, VK_FORMAT_R32G32_SFLOAT, sizeof(float) * 3); + // Location 1 : Vertex normal + vertices.attributeDescriptions[2] = + vkTools::initializers::vertexInputAttributeDescription( + VERTEX_BUFFER_BIND_ID, + 2, + VK_FORMAT_R32G32B32_SFLOAT, + sizeof(float) * 5); vertices.inputState = vkTools::initializers::pipelineVertexInputStateCreateInfo(); vertices.inputState.vertexBindingDescriptionCount = vertices.bindingDescriptions.size(); @@ -737,8 +748,8 @@ public: // Load shaders std::array shaderStages; - shaderStages[0] = loadShader(getAssetPath() + "shaders/texture.vert.spv", VK_SHADER_STAGE_VERTEX_BIT); - shaderStages[1] = loadShader(getAssetPath() + "shaders/texture.frag.spv", VK_SHADER_STAGE_FRAGMENT_BIT); + shaderStages[0] = loadShader(getAssetPath() + "shaders/texture/texture.vert.spv", VK_SHADER_STAGE_VERTEX_BIT); + shaderStages[1] = loadShader(getAssetPath() + "shaders/texture/texture.frag.spv", VK_SHADER_STAGE_FRAGMENT_BIT); VkGraphicsPipelineCreateInfo pipelineCreateInfo = vkTools::initializers::pipelineCreateInfo( @@ -778,16 +789,16 @@ public: void updateUniformBuffers() { // Vertex shader - glm::mat4 viewMatrix = glm::mat4(); uboVS.projection = glm::perspective(glm::radians(60.0f), (float)width / (float)height, 0.001f, 256.0f); - viewMatrix = glm::translate(viewMatrix, glm::vec3(0.0f, 0.0f, zoom)); + glm::mat4 viewMatrix = glm::translate(glm::mat4(), glm::vec3(0.0f, 0.0f, zoom)); - uboVS.model = glm::mat4(); - uboVS.model = viewMatrix * glm::translate(uboVS.model, glm::vec3(0, 0, 0)); + uboVS.model = viewMatrix * glm::translate(glm::mat4(), cameraPos); uboVS.model = glm::rotate(uboVS.model, glm::radians(rotation.x), glm::vec3(1.0f, 0.0f, 0.0f)); uboVS.model = glm::rotate(uboVS.model, glm::radians(rotation.y), glm::vec3(0.0f, 1.0f, 0.0f)); uboVS.model = glm::rotate(uboVS.model, glm::radians(rotation.z), glm::vec3(0.0f, 0.0f, 1.0f)); + uboVS.viewPos = glm::vec4(0.0f, 0.0f, -zoom, 0.0f); + uint8_t *pData; VK_CHECK_RESULT(vkMapMemory(device, uniformDataVS.memory, 0, sizeof(uboVS), 0, (void **)&pData)); memcpy(pData, &uboVS, sizeof(uboVS)); @@ -801,8 +812,8 @@ public: setupVertexDescriptions(); prepareUniformBuffers(); loadTexture( - getAssetPath() + "textures/igor_and_pal_bc3.ktx", - VK_FORMAT_BC3_UNORM_BLOCK, + getAssetPath() + "textures/pattern_02_bc2.ktx", + VK_FORMAT_BC2_UNORM_BLOCK, false); setupDescriptorSetLayout(); preparePipelines();