Skip to content

Commit

Permalink
feat: support core shaders
Browse files Browse the repository at this point in the history
BREAKING CHANGE: ShaderProgram was renamed to Shader
  • Loading branch information
vberlier committed Mar 21, 2021
1 parent 37c90f8 commit 69e3d19
Show file tree
Hide file tree
Showing 4 changed files with 32 additions and 20 deletions.
26 changes: 18 additions & 8 deletions beet/library/resource_pack.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,9 +8,10 @@
"GlyphSizeFile",
"TrueTypeFont",
"ShaderPost",
"ShaderProgram",
"Shader",
"FragmentShader",
"VertexShader",
"GlslShader",
"Text",
"TextureMcmeta",
"Texture",
Expand Down Expand Up @@ -96,27 +97,34 @@ class ShaderPost(JsonFile, NamespaceFile):
extension = ".json"


class ShaderProgram(JsonFile, NamespaceFile):
"""Class representing a shader program."""
class Shader(JsonFile, NamespaceFile):
"""Class representing a shader."""

scope = ("shaders", "program")
scope = ("shaders",)
extension = ".json"


class FragmentShader(TextFile, NamespaceFile):
"""Class representing a fragment shader."""

scope = ("shaders", "program")
scope = ("shaders",)
extension = ".fsh"


class VertexShader(TextFile, NamespaceFile):
"""Class representing a vertex shader."""

scope = ("shaders", "program")
scope = ("shaders",)
extension = ".vsh"


class GlslShader(TextFile, NamespaceFile):
"""Class representing a glsl shader."""

scope = ("shaders",)
extension = ".glsl"


class Text(TextFile, NamespaceFile):
"""Class representing a text file."""

Expand Down Expand Up @@ -161,9 +169,10 @@ class ResourcePackNamespace(Namespace):
glyph_sizes: NamespacePin[GlyphSizeFile] = NamespacePin(GlyphSizeFile)
truetype_fonts: NamespacePin[TrueTypeFont] = NamespacePin(TrueTypeFont)
shader_posts: NamespacePin[ShaderPost] = NamespacePin(ShaderPost)
shader_programs: NamespacePin[ShaderProgram] = NamespacePin(ShaderProgram)
shaders: NamespacePin[Shader] = NamespacePin(Shader)
fragment_shaders: NamespacePin[FragmentShader] = NamespacePin(FragmentShader)
vertex_shaders: NamespacePin[VertexShader] = NamespacePin(VertexShader)
glsl_shaders: NamespacePin[GlslShader] = NamespacePin(GlslShader)
texts: NamespacePin[Text] = NamespacePin(Text)
textures_mcmeta: NamespacePin[TextureMcmeta] = NamespacePin(TextureMcmeta)
textures: NamespacePin[Texture] = NamespacePin(Texture)
Expand All @@ -188,9 +197,10 @@ class ResourcePack(Pack[ResourcePackNamespace]):
glyph_sizes: NamespaceProxyDescriptor[GlyphSizeFile] = NamespaceProxyDescriptor(GlyphSizeFile)
truetype_fonts: NamespaceProxyDescriptor[TrueTypeFont] = NamespaceProxyDescriptor(TrueTypeFont)
shader_posts: NamespaceProxyDescriptor[ShaderPost] = NamespaceProxyDescriptor(ShaderPost)
shader_programs: NamespaceProxyDescriptor[ShaderProgram] = NamespaceProxyDescriptor(ShaderProgram)
shaders: NamespaceProxyDescriptor[Shader] = NamespaceProxyDescriptor(Shader)
fragment_shaders: NamespaceProxyDescriptor[FragmentShader] = NamespaceProxyDescriptor(FragmentShader)
vertex_shaders: NamespaceProxyDescriptor[VertexShader] = NamespaceProxyDescriptor(VertexShader)
glsl_shaders: NamespaceProxyDescriptor[GlslShader] = NamespaceProxyDescriptor(GlslShader)
texts: NamespaceProxyDescriptor[Text] = NamespaceProxyDescriptor(Text)
textures_mcmeta: NamespaceProxyDescriptor[TextureMcmeta] = NamespaceProxyDescriptor(TextureMcmeta)
textures: NamespaceProxyDescriptor[Texture] = NamespaceProxyDescriptor(Texture)
Expand Down
12 changes: 7 additions & 5 deletions tests/snapshots/resource_pack__vanilla_shaders_snapshot__2.txt
Original file line number Diff line number Diff line change
@@ -1,16 +1,18 @@
#version 110
#version 150

uniform sampler2D DiffuseSampler;

varying vec2 texCoord;
varying vec2 oneTexel;
in vec2 texCoord;
in vec2 oneTexel;

uniform vec2 InSize;

uniform float Time;
uniform vec2 Frequency;
uniform vec2 WobbleAmount;

out vec4 fragColor;

vec3 hue(float h)
{
float r = abs(h * 6.0 - 3.0) - 1.0;
Expand Down Expand Up @@ -51,8 +53,8 @@ void main() {
float xOffset = sin(texCoord.y * Frequency.x + Time * 3.1415926535 * 2.0) * WobbleAmount.x;
float yOffset = cos(texCoord.x * Frequency.y + Time * 3.1415926535 * 2.0) * WobbleAmount.y;
vec2 offset = vec2(xOffset, yOffset);
vec4 rgb = texture2D(DiffuseSampler, texCoord + offset);
vec4 rgb = texture(DiffuseSampler, texCoord + offset);
vec3 hsv = RGBtoHSV(rgb.rgb);
hsv.x = fract(hsv.x + Time);
gl_FragColor = vec4(HSVtoRGB(hsv), 1.0);
fragColor = vec4(HSVtoRGB(hsv), 1.0);
}
Original file line number Diff line number Diff line change
@@ -1,13 +1,13 @@
#version 110
#version 150

attribute vec4 Position;
in vec4 Position;

uniform mat4 ProjMat;
uniform vec2 InSize;
uniform vec2 OutSize;

varying vec2 texCoord;
varying vec2 oneTexel;
out vec2 texCoord;
out vec2 oneTexel;

void main(){
vec4 outPos = ProjMat * vec4(Position.xy, 0.0, 1.0);
Expand Down
6 changes: 3 additions & 3 deletions tests/test_resource_pack.py
Original file line number Diff line number Diff line change
Expand Up @@ -113,6 +113,6 @@ def test_vanilla_zip(minecraft_resource_pack: Path, tmp_path: Path):
def test_vanilla_shaders(snapshot: Any, minecraft_resource_pack: Path):
pack = ResourcePack(path=minecraft_resource_pack)
assert snapshot("json") == pack.shader_posts["minecraft:spider"].data
assert snapshot("json") == pack.shader_programs["minecraft:entity_outline"].data
assert snapshot() == pack.fragment_shaders["minecraft:wobble"].text
assert snapshot() == pack.vertex_shaders["minecraft:sobel"].text
assert snapshot("json") == pack.shaders["minecraft:program/entity_outline"].data
assert snapshot() == pack.fragment_shaders["minecraft:program/wobble"].text
assert snapshot() == pack.vertex_shaders["minecraft:program/sobel"].text

0 comments on commit 69e3d19

Please sign in to comment.