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,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<const Uint8*>(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<const Uint8*>(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

View File

@ -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<const Uint8*>(source.data()), source.byteSize()};
shader.create(mDevice, args);
return shader;
}
}

View File

@ -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<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>
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;
transferBuffer.create(mDevice, {