diff --git a/private/sdl_gpu_test/0_triangle_with_texcoords/app.cpp b/private/sdl_gpu_test/0_triangle_with_texcoords/app.cpp index c6c8e99..afc1110 100644 --- a/private/sdl_gpu_test/0_triangle_with_texcoords/app.cpp +++ b/private/sdl_gpu_test/0_triangle_with_texcoords/app.cpp @@ -16,23 +16,15 @@ void TriangleWithTexcoordsApp::init(const AppInitArgs& args) { Application::init(args); - // create vertex shader - mijin::TypelessBuffer vertexSpv = getFileContentsBinary("shaders/glsl/textured_triangles_from_buffer.vert.spv"); - sdlpp::GPUShader vertexShader; - vertexShader.create(mDevice, { - .code = {static_cast(vertexSpv.data()), vertexSpv.byteSize()}, + // create shaders + sdlpp::GPUShader vertexShader = loadShader("shaders/glsl/textured_triangles_from_buffer.vert.spv", { .format = sdlpp::GPUShaderFormat::SPIRV, .stage = sdlpp::GPUShaderStage::VERTEX }); - - // create fragment shader - mijin::TypelessBuffer fragmentSpv = getFileContentsBinary("shaders/glsl/color_from_texcoord.frag.spv"); - sdlpp::GPUShader fragmentShader; - fragmentShader.create(mDevice, { - .code = {static_cast(fragmentSpv.data()), fragmentSpv.byteSize()}, - .format = sdlpp::GPUShaderFormat::SPIRV, - .stage = sdlpp::GPUShaderStage::FRAGMENT, - .numUniformBuffers = 1 + sdlpp::GPUShader fragmentShader = loadShader("shaders/glsl/color_from_texcoord.frag.spv", { + .format = sdlpp::GPUShaderFormat::SPIRV, + .stage = sdlpp::GPUShaderStage::FRAGMENT, + .numUniformBuffers = 1 }); // create graphics pipeline diff --git a/private/sdl_gpu_test/application.cpp b/private/sdl_gpu_test/application.cpp index 46ded9a..2928aeb 100644 --- a/private/sdl_gpu_test/application.cpp +++ b/private/sdl_gpu_test/application.cpp @@ -73,4 +73,13 @@ mijin::TypelessBuffer Application::getFileContentsBinary(const fs::path& path) mijin::throwOnError(stream->readRest(content), "Error reading file contents."); return content; } + +sdlpp::GPUShader Application::loadShader(const fs::path& path, sdlpp::GPUShaderCreateArgs args) +{ + mijin::TypelessBuffer source = getFileContentsBinary(path); + sdlpp::GPUShader shader; + args.code = {static_cast(source.data()), source.byteSize()}; + shader.create(mDevice, args); + return shader; +} } diff --git a/private/sdl_gpu_test/application.hpp b/private/sdl_gpu_test/application.hpp index 883e953..d0d4f57 100644 --- a/private/sdl_gpu_test/application.hpp +++ b/private/sdl_gpu_test/application.hpp @@ -47,17 +47,20 @@ public: // utility stuff [[nodiscard]] - std::string getFileContentsText(const fs::path& path); + std::string getFileContentsText(const fs::path& path) ; [[nodiscard]] mijin::TypelessBuffer getFileContentsBinary(const fs::path& path); + [[nodiscard]] + sdlpp::GPUShader loadShader(const fs::path& path, sdlpp::GPUShaderCreateArgs args); + template - void uploadVertexData(const sdlpp::GPUBuffer& vertexBuffer, std::span vertices); + void uploadVertexData(const sdlpp::GPUBuffer& vertexBuffer, std::span vertices) const; }; template -void Application::uploadVertexData(const sdlpp::GPUBuffer& vertexBuffer, std::span vertices) +void Application::uploadVertexData(const sdlpp::GPUBuffer& vertexBuffer, std::span vertices) const { sdlpp::GPUTransferBuffer transferBuffer; transferBuffer.create(mDevice, {