Added loadShader() utility function.

This commit is contained in:
Patrick 2024-09-14 01:11:01 +02:00
parent 853e55322c
commit 9095c7e99a
3 changed files with 21 additions and 17 deletions

View File

@ -16,20 +16,12 @@ void TriangleWithTexcoordsApp::init(const AppInitArgs& args)
{ {
Application::init(args); Application::init(args);
// create vertex shader // create shaders
mijin::TypelessBuffer vertexSpv = getFileContentsBinary("shaders/glsl/textured_triangles_from_buffer.vert.spv"); sdlpp::GPUShader vertexShader = loadShader("shaders/glsl/textured_triangles_from_buffer.vert.spv", {
sdlpp::GPUShader vertexShader;
vertexShader.create(mDevice, {
.code = {static_cast<const Uint8*>(vertexSpv.data()), vertexSpv.byteSize()},
.format = sdlpp::GPUShaderFormat::SPIRV, .format = sdlpp::GPUShaderFormat::SPIRV,
.stage = sdlpp::GPUShaderStage::VERTEX .stage = sdlpp::GPUShaderStage::VERTEX
}); });
sdlpp::GPUShader fragmentShader = loadShader("shaders/glsl/color_from_texcoord.frag.spv", {
// create fragment shader
mijin::TypelessBuffer fragmentSpv = getFileContentsBinary("shaders/glsl/color_from_texcoord.frag.spv");
sdlpp::GPUShader fragmentShader;
fragmentShader.create(mDevice, {
.code = {static_cast<const Uint8*>(fragmentSpv.data()), fragmentSpv.byteSize()},
.format = sdlpp::GPUShaderFormat::SPIRV, .format = sdlpp::GPUShaderFormat::SPIRV,
.stage = sdlpp::GPUShaderStage::FRAGMENT, .stage = sdlpp::GPUShaderStage::FRAGMENT,
.numUniformBuffers = 1 .numUniformBuffers = 1

View File

@ -73,4 +73,13 @@ mijin::TypelessBuffer Application::getFileContentsBinary(const fs::path& path)
mijin::throwOnError(stream->readRest(content), "Error reading file contents."); mijin::throwOnError(stream->readRest(content), "Error reading file contents.");
return content; 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<const Uint8*>(source.data()), source.byteSize()};
shader.create(mDevice, args);
return shader;
}
} }

View File

@ -52,12 +52,15 @@ public:
[[nodiscard]] [[nodiscard]]
mijin::TypelessBuffer getFileContentsBinary(const fs::path& path); mijin::TypelessBuffer getFileContentsBinary(const fs::path& path);
[[nodiscard]]
sdlpp::GPUShader loadShader(const fs::path& path, sdlpp::GPUShaderCreateArgs args);
template<typename TVertex> template<typename TVertex>
void uploadVertexData(const sdlpp::GPUBuffer& vertexBuffer, std::span<TVertex> vertices); void uploadVertexData(const sdlpp::GPUBuffer& vertexBuffer, std::span<TVertex> vertices) const;
}; };
template<typename TVertex> template<typename TVertex>
void Application::uploadVertexData(const sdlpp::GPUBuffer& vertexBuffer, std::span<TVertex> vertices) void Application::uploadVertexData(const sdlpp::GPUBuffer& vertexBuffer, std::span<TVertex> vertices) const
{ {
sdlpp::GPUTransferBuffer transferBuffer; sdlpp::GPUTransferBuffer transferBuffer;
transferBuffer.create(mDevice, { transferBuffer.create(mDevice, {