mkxp-z/shader/simpleSprite.pgl.c
刘皓 2cd8202af3
Convert GLSL shaders to PortableGL's shader format
PortableGL supports shaders, but requires them to be compiled
ahead-of-time to C or C++.

I'll write a compiler later to translate from GLSL to this format
automatically at build time.
2025-03-13 16:16:17 -04:00

28 lines
1.6 KiB
C

#include "simpleSprite.pgl.h"
void mkxpSimpleSpriteVS(float *_output, pgl_vec4 *_attribs, Shader_Builtins *builtins, void *_uniforms)
{
struct SimpleSpriteVarying *output = (struct SimpleSpriteVarying *)_output;
struct SimpleSpriteAttribs *attribs = (struct SimpleSpriteAttribs *)_attribs;
struct SimpleSpriteUniforms *uniforms = (struct SimpleSpriteUniforms *)_uniforms;
builtins->gl_Position = mult_mat4_vec4(uniforms->projMat, mult_mat4_vec4(uniforms->spriteMat, (pgl_vec4){attribs->position.x, attribs->position.y, 0, 1}));
output->v_texCoord = mult_vec2s(attribs->texCoord, uniforms->texSizeInv);
if (uniforms->renderPattern) {
if (uniforms->patternTile) {
pgl_vec2 scroll = mult_vec2s(uniforms->patternScroll, div_vec2s(uniforms->patternSizeInv, uniforms->texSizeInv));
output->v_patCoord = sub_vec2s(mult_vec2s(attribs->texCoord, div_vec2s(uniforms->patternSizeInv, uniforms->patternZoom)), mult_vec2s(scroll, uniforms->patternSizeInv));
} else {
pgl_vec2 scroll = mult_vec2s(uniforms->patternScroll, div_vec2s(uniforms->patternSizeInv, uniforms->texSizeInv));
output->v_patCoord = sub_vec2s(mult_vec2s(attribs->texCoord, div_vec2s(uniforms->texSizeInv, uniforms->patternZoom)), mult_vec2s(scroll, uniforms->texSizeInv));
}
}
}
void mkxpSimpleSpriteFS(float *_input, Shader_Builtins *builtins, void *_uniforms)
{
struct SimpleSpriteVarying *input = (struct SimpleSpriteVarying *)_input;
struct SimpleSpriteUniforms *uniforms = (struct SimpleSpriteUniforms *)_uniforms;
builtins->gl_FragColor = mkxp_pgl_texture2D(uniforms->texture, input->v_texCoord.x, input->v_texCoord.y);
}