From 76b7e64ae686db23a18995a6a4cce92d253d73bf Mon Sep 17 00:00:00 2001 From: Kearwood Gilbert Date: Wed, 30 Dec 2020 18:24:36 -0800 Subject: [PATCH] Fixed KRDatablock::Append where the data was not expanded correctly to concatenate a std::String. Converted sprite shader. Adjusted Spirv compile logging. --- kraken/KRDataBlock.cpp | 2 +- kraken/KRShaderManager.cpp | 19 +++++++---- standard_assets/shaders/CMakeLists.txt | 2 ++ standard_assets/shaders/simple_blit.frag | 2 +- standard_assets/shaders/simple_blit.vert | 8 ++--- .../shaders/{sprite_osx.fsh => sprite.frag} | 33 +++++++++++-------- .../shaders/{sprite_osx.vsh => sprite.vert} | 31 ++++++++--------- tools/convert/main.cpp | 2 +- 8 files changed, 57 insertions(+), 42 deletions(-) rename standard_assets/shaders/{sprite_osx.fsh => sprite.frag} (79%) rename standard_assets/shaders/{sprite_osx.vsh => sprite.vert} (71%) diff --git a/kraken/KRDataBlock.cpp b/kraken/KRDataBlock.cpp index df3a8b9..1bd604f 100755 --- a/kraken/KRDataBlock.cpp +++ b/kraken/KRDataBlock.cpp @@ -329,7 +329,7 @@ void KRDataBlock::append(const std::string &s) append((void*)szText, text_length + 1); } else { // prev_size includes a null terminating character, don't need to add two. - expand(prev_size + text_length); + expand(text_length); lock(); // Copy new string, overwriting prior null terminating character and // including new terminating character diff --git a/kraken/KRShaderManager.cpp b/kraken/KRShaderManager.cpp index 3808dd7..0964bae 100644 --- a/kraken/KRShaderManager.cpp +++ b/kraken/KRShaderManager.cpp @@ -288,8 +288,10 @@ bool KRShaderManager::compileAll(KRBundle* outputBundle, KRUnknown* logResource) program.addShader(&shader); } else { const char* log = shader.getInfoLog(); - logResource->getData()->append(log); - logResource->getData()->append("\n"); + if (log[0] != '\0') { + logResource->getData()->append(log); + logResource->getData()->append("\n"); + } success = false; } }; @@ -299,8 +301,10 @@ bool KRShaderManager::compileAll(KRBundle* outputBundle, KRUnknown* logResource) if (!program.link(messages)) { const char* log = program.getInfoLog(); - logResource->getData()->append(log); - logResource->getData()->append("\n"); + if (log[0] != '\0') { + logResource->getData()->append(log); + logResource->getData()->append("\n"); + } success = false; } @@ -312,8 +316,11 @@ bool KRShaderManager::compileAll(KRBundle* outputBundle, KRUnknown* logResource) spv::SpvBuildLogger logger; glslang::SpvOptions spvOptions; glslang::GlslangToSpv(*program.getIntermediate((EShLanguage)stage), spirv, &logger, &spvOptions); - logResource->getData()->append(logger.getAllMessages().c_str()); - logResource->getData()->append("\n"); + std::string messages = logger.getAllMessages(); + if (!messages.empty()) { + logResource->getData()->append(messages.c_str()); + logResource->getData()->append("\n"); + } std::string shader_name; switch (stage) diff --git a/standard_assets/shaders/CMakeLists.txt b/standard_assets/shaders/CMakeLists.txt index d1bae2b..d2e5243 100644 --- a/standard_assets/shaders/CMakeLists.txt +++ b/standard_assets/shaders/CMakeLists.txt @@ -1,3 +1,5 @@ set(KRAKEN_STANDARD_ASSETS "${KRAKEN_STANDARD_ASSETS}" PARENT_SCOPE) add_standard_asset(simple_blit.frag) add_standard_asset(simple_blit.vert) +add_standard_asset(sprite.frag) +add_standard_asset(sprite.vert) diff --git a/standard_assets/shaders/simple_blit.frag b/standard_assets/shaders/simple_blit.frag index d662892..eb8a17f 100644 --- a/standard_assets/shaders/simple_blit.frag +++ b/standard_assets/shaders/simple_blit.frag @@ -1,4 +1,4 @@ -// Copyright 2019 Kearwood Gilbert. All rights reserved. +// Copyright 2020 Kearwood Gilbert. All rights reserved. // // Redistribution and use in source and binary forms, with or without modification, are // permitted provided that the following conditions are met: diff --git a/standard_assets/shaders/simple_blit.vert b/standard_assets/shaders/simple_blit.vert index 1923c8c..496b282 100644 --- a/standard_assets/shaders/simple_blit.vert +++ b/standard_assets/shaders/simple_blit.vert @@ -1,4 +1,4 @@ -// Copyright 2019 Kearwood Gilbert. All rights reserved. +// Copyright 2020 Kearwood Gilbert. All rights reserved. // // Redistribution and use in source and binary forms, with or without modification, are // permitted provided that the following conditions are met: @@ -30,13 +30,13 @@ #extension GL_ARB_shading_language_420pack : enable layout (std140, binding = 0) uniform buf { - mat4 mvp_matrix; // mvp_matrix is the result of multiplying the model, view, and projection matrices + mat4 mvp_matrix; // mvp_matrix is the result of multiplying the model, view, and projection matrices } ubuf; layout (location = 0) in vec4 vertex_position; layout (location = 1) in vec2 vertex_uv; layout (location = 0) out vec2 textureCoordinate; void main() { - textureCoordinate = vertex_uv; - gl_Position = ubuf.mvp_matrix * vertex_position; + textureCoordinate = vertex_uv; + gl_Position = ubuf.mvp_matrix * vertex_position; } diff --git a/standard_assets/shaders/sprite_osx.fsh b/standard_assets/shaders/sprite.frag similarity index 79% rename from standard_assets/shaders/sprite_osx.fsh rename to standard_assets/shaders/sprite.frag index feb61b3..50008f1 100644 --- a/standard_assets/shaders/sprite_osx.fsh +++ b/standard_assets/shaders/sprite.frag @@ -1,19 +1,15 @@ +// Copyright 2020 Kearwood Gilbert. All rights reserved. // -// sprite.fsh -// KREngine -// -// Copyright 2012 Kearwood Gilbert. All rights reserved. -// // Redistribution and use in source and binary forms, with or without modification, are // permitted provided that the following conditions are met: -// +// // 1. Redistributions of source code must retain the above copyright notice, this list of // conditions and the following disclaimer. -// +// // 2. Redistributions in binary form must reproduce the above copyright notice, this list // of conditions and the following disclaimer in the documentation and/or other materials // provided with the distribution. -// +// // THIS SOFTWARE IS PROVIDED BY KEARWOOD GILBERT ''AS IS'' AND ANY EXPRESS OR IMPLIED // WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND // FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL KEARWOOD GILBERT OR @@ -23,18 +19,27 @@ // ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING // NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF // ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// +// // The views and conclusions contained in the software and documentation are those of the // authors and should not be interpreted as representing official policies, either expressed // or implied, of Kearwood Gilbert. // -out vec4 colorOut; +#version 400 +#extension GL_ARB_separate_shader_objects : enable +#extension GL_ARB_shading_language_420pack : enable + +layout (binding = 0) uniform MaterialObject +{ + float alpha; +} material; +layout (binding = 1) uniform sampler2D diffuseTexture; + +layout (location = 0) in vec2 textureCoordinate; +layout (location = 0) out vec4 colorOut; in mediump vec2 texCoord; -uniform sampler2D diffuseTexture; -uniform lowp float material_alpha; void main() { - colorOut = vec4(vec3(texture(diffuseTexture, texCoord)), 1.0) * material_alpha; -} \ No newline at end of file + colorOut = vec4(vec3(texture(diffuseTexture, texCoord)), 1.0) * material.alpha; +} diff --git a/standard_assets/shaders/sprite_osx.vsh b/standard_assets/shaders/sprite.vert similarity index 71% rename from standard_assets/shaders/sprite_osx.vsh rename to standard_assets/shaders/sprite.vert index b367a1c..fa93275 100644 --- a/standard_assets/shaders/sprite_osx.vsh +++ b/standard_assets/shaders/sprite.vert @@ -1,19 +1,15 @@ +// Copyright 2020 Kearwood Gilbert. All rights reserved. // -// sprite.vsh -// KREngine -// -// Copyright 2012 Kearwood Gilbert. All rights reserved. -// // Redistribution and use in source and binary forms, with or without modification, are // permitted provided that the following conditions are met: -// +// // 1. Redistributions of source code must retain the above copyright notice, this list of // conditions and the following disclaimer. -// +// // 2. Redistributions in binary form must reproduce the above copyright notice, this list // of conditions and the following disclaimer in the documentation and/or other materials // provided with the distribution. -// +// // THIS SOFTWARE IS PROVIDED BY KEARWOOD GILBERT ''AS IS'' AND ANY EXPRESS OR IMPLIED // WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND // FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL KEARWOOD GILBERT OR @@ -23,19 +19,24 @@ // ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING // NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF // ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// +// // The views and conclusions contained in the software and documentation are those of the // authors and should not be interpreted as representing official policies, either expressed // or implied, of Kearwood Gilbert. // -in mediump vec2 vertex_uv; -uniform highp mat4 mvp_matrix; // mvp_matrix is the result of multiplying the model, view, and projection matrices -uniform mediump vec4 viewport; +#version 400 +#extension GL_ARB_separate_shader_objects : enable +#extension GL_ARB_shading_language_420pack : enable -out mediump vec2 texCoord; +layout (std140, binding = 0) uniform buf { + mat4 mvp_matrix; // mvp_matrix is the result of multiplying the model, view, and projection matrices + vec4 viewport; +} ubuf; +layout (location = 0) in vec2 vertex_uv; +layout (location = 0) out vec2 textureCoordinate; void main() { - texCoord = vertex_uv; - gl_Position = mvp_matrix * vec4(vertex_uv.x * 2.0 - 1.0, vertex_uv.y * 2.0 - 1.0, 0.0, 1.0); + textureCoordinate = vertex_uv; + gl_Position = ubuf.mvp_matrix * vec4(vertex_uv.x * 2.0 - 1.0, vertex_uv.y * 2.0 - 1.0, 0.0, 1.0); } diff --git a/tools/convert/main.cpp b/tools/convert/main.cpp index 9edb5e4..4690a4f 100644 --- a/tools/convert/main.cpp +++ b/tools/convert/main.cpp @@ -169,7 +169,7 @@ int main( int argc, char *argv[] ) printf("Failed to get shader compile log. (Error %i)\n", result.result); } else { // result.data will be a null terminated string - if (result.data != nullptr && static_cast(result.data)[0] != '\0') { + if (result.data != nullptr && result.length > 0) { printf("Shader compile log:\n%s\n", static_cast(result.data)); } }