Skip to content

Commit

Permalink
Implement Metal shader pack
Browse files Browse the repository at this point in the history
  • Loading branch information
JoelOtter committed May 5, 2024
1 parent e66e833 commit 68437b4
Show file tree
Hide file tree
Showing 2 changed files with 22 additions and 0 deletions.
2 changes: 2 additions & 0 deletions src/plugins/metal/src/metal_graphics.h
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,8 @@ class MetalGraphicsAPI : public GraphicsAPIInternal {
const std::string& fragment_src) override;
Result<std::unique_ptr<Shader>>
createShader(const std::string& fragment_src) override;
Result<std::unique_ptr<Shader>>
createShader(const ShaderPack& shader_pack) override;

Window* getWindow() override {
return window.get();
Expand Down
20 changes: 20 additions & 0 deletions src/plugins/metal/src/metal_graphics.mm
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
#include "metal_graphics.h"
#include "growl/core/assets/font_face.h"
#include "growl/core/assets/shader_pack.h"
#include "growl/core/error.h"
#include "growl/core/graphics/shader.h"
#include "growl/core/imgui.h"
Expand All @@ -20,6 +21,7 @@
using Growl::MetalGraphicsAPI;
using Growl::Result;
using Growl::Shader;
using Growl::ShaderPack;
using Growl::Texture;
using Growl::TextureAtlas;
using Growl::TextureOptions;
Expand Down Expand Up @@ -268,6 +270,24 @@
return createShader(MetalShader::default_vertex, fragment_src);
}

Result<std::unique_ptr<Shader>>
MetalGraphicsAPI::createShader(const ShaderPack& shader_pack) {
auto source = shader_pack.getSources().find(ShaderType::Metal);
if (source == shader_pack.getSources().end()) {
return Error(std::make_unique<MetalError>(
"No Metal sources found in shader pack"));
}
if (!source->second.fragment_src.has_value()) {
return Error(std::make_unique<MetalError>(
"No fragment source found in shader pack"));
}
return createShader(
source->second.vertex_src.has_value()
? source->second.vertex_src.value()
: MetalShader::default_vertex,
source->second.fragment_src.value());
}

const std::vector<unsigned char>
MetalGraphicsAPI::convertRGBAToBGRA(const Image& rgba) {
const unsigned char* src = rgba.getRaw();
Expand Down

0 comments on commit 68437b4

Please sign in to comment.