mirror of
https://github.com/mkxp-z/mkxp-z.git
synced 2025-09-10 12:02:53 +02:00
Add settable bitmap patterns on Sprites
This commit is contained in:
parent
3da0f4c948
commit
6722a1e61a
7 changed files with 569 additions and 464 deletions
|
@ -52,6 +52,7 @@ RB_METHOD(spriteInitialize) {
|
||||||
}
|
}
|
||||||
|
|
||||||
DEF_GFX_PROP_OBJ_REF(Sprite, Bitmap, Bitmap, "bitmap")
|
DEF_GFX_PROP_OBJ_REF(Sprite, Bitmap, Bitmap, "bitmap")
|
||||||
|
DEF_GFX_PROP_OBJ_REF(Sprite, Bitmap, Pattern, "pattern")
|
||||||
DEF_GFX_PROP_OBJ_VAL(Sprite, Rect, SrcRect, "src_rect")
|
DEF_GFX_PROP_OBJ_VAL(Sprite, Rect, SrcRect, "src_rect")
|
||||||
DEF_GFX_PROP_OBJ_VAL(Sprite, Color, Color, "color")
|
DEF_GFX_PROP_OBJ_VAL(Sprite, Color, Color, "color")
|
||||||
DEF_GFX_PROP_OBJ_VAL(Sprite, Tone, Tone, "tone")
|
DEF_GFX_PROP_OBJ_VAL(Sprite, Tone, Tone, "tone")
|
||||||
|
@ -64,6 +65,9 @@ DEF_GFX_PROP_I(Sprite, BushDepth)
|
||||||
DEF_GFX_PROP_I(Sprite, BushOpacity)
|
DEF_GFX_PROP_I(Sprite, BushOpacity)
|
||||||
DEF_GFX_PROP_I(Sprite, Opacity)
|
DEF_GFX_PROP_I(Sprite, Opacity)
|
||||||
DEF_GFX_PROP_I(Sprite, BlendType)
|
DEF_GFX_PROP_I(Sprite, BlendType)
|
||||||
|
DEF_GFX_PROP_I(Sprite, PatternOpacity)
|
||||||
|
DEF_GFX_PROP_I(Sprite, PatternScrollX)
|
||||||
|
DEF_GFX_PROP_I(Sprite, PatternScrollY)
|
||||||
DEF_GFX_PROP_I(Sprite, WaveAmp)
|
DEF_GFX_PROP_I(Sprite, WaveAmp)
|
||||||
DEF_GFX_PROP_I(Sprite, WaveLength)
|
DEF_GFX_PROP_I(Sprite, WaveLength)
|
||||||
DEF_GFX_PROP_I(Sprite, WaveSpeed)
|
DEF_GFX_PROP_I(Sprite, WaveSpeed)
|
||||||
|
@ -132,6 +136,11 @@ void spriteBindingInit() {
|
||||||
|
|
||||||
INIT_PROP_BIND(Sprite, BushOpacity, "bush_opacity");
|
INIT_PROP_BIND(Sprite, BushOpacity, "bush_opacity");
|
||||||
|
|
||||||
|
INIT_PROP_BIND(Sprite, Pattern, "pattern");
|
||||||
|
INIT_PROP_BIND(Sprite, PatternOpacity, "pattern_opacity");
|
||||||
|
INIT_PROP_BIND(Sprite, PatternScrollX, "pattern_scroll_x");
|
||||||
|
INIT_PROP_BIND(Sprite, PatternScrollY, "pattern_scroll_y");
|
||||||
|
|
||||||
INIT_PROP_BIND(Sprite, WaveAmp, "wave_amp");
|
INIT_PROP_BIND(Sprite, WaveAmp, "wave_amp");
|
||||||
INIT_PROP_BIND(Sprite, WaveLength, "wave_length");
|
INIT_PROP_BIND(Sprite, WaveLength, "wave_length");
|
||||||
INIT_PROP_BIND(Sprite, WaveSpeed, "wave_speed");
|
INIT_PROP_BIND(Sprite, WaveSpeed, "wave_speed");
|
||||||
|
|
|
@ -9,14 +9,26 @@ uniform lowp vec4 color;
|
||||||
uniform float bushDepth;
|
uniform float bushDepth;
|
||||||
uniform lowp float bushOpacity;
|
uniform lowp float bushOpacity;
|
||||||
|
|
||||||
|
uniform sampler2D pattern;
|
||||||
|
uniform lowp float patternOpacity;
|
||||||
|
uniform bool renderPattern;
|
||||||
|
|
||||||
varying vec2 v_texCoord;
|
varying vec2 v_texCoord;
|
||||||
|
varying vec2 v_patCoord;
|
||||||
|
|
||||||
const vec3 lumaF = vec3(.299, .587, .114);
|
const vec3 lumaF = vec3(.299, .587, .114);
|
||||||
|
const vec2 repeat = vec2(1, 1);
|
||||||
|
|
||||||
void main()
|
void main()
|
||||||
{
|
{
|
||||||
/* Sample source color */
|
/* Sample source color */
|
||||||
vec4 frag = texture2D(texture, v_texCoord);
|
vec4 frag = texture2D(texture, v_texCoord);
|
||||||
|
|
||||||
|
/* Apply the pattern if needed */
|
||||||
|
if (renderPattern) {
|
||||||
|
vec4 pattfrag = texture2D(pattern, mod(v_patCoord, repeat));
|
||||||
|
frag.rgb = mix(frag.rgb, pattfrag.rgb, pattfrag.a * patternOpacity);
|
||||||
|
}
|
||||||
|
|
||||||
/* Apply gray */
|
/* Apply gray */
|
||||||
float luma = dot(frag.rgb, lumaF);
|
float luma = dot(frag.rgb, lumaF);
|
||||||
|
|
|
@ -4,14 +4,22 @@ uniform mat4 projMat;
|
||||||
uniform mat4 spriteMat;
|
uniform mat4 spriteMat;
|
||||||
|
|
||||||
uniform vec2 texSizeInv;
|
uniform vec2 texSizeInv;
|
||||||
|
uniform vec2 patternSizeInv;
|
||||||
|
uniform vec2 patternScroll;
|
||||||
|
uniform bool renderPattern;
|
||||||
|
|
||||||
attribute vec2 position;
|
attribute vec2 position;
|
||||||
attribute vec2 texCoord;
|
attribute vec2 texCoord;
|
||||||
|
|
||||||
varying vec2 v_texCoord;
|
varying vec2 v_texCoord;
|
||||||
|
varying vec2 v_patCoord;
|
||||||
|
|
||||||
void main()
|
void main()
|
||||||
{
|
{
|
||||||
gl_Position = projMat * spriteMat * vec4(position, 0, 1);
|
gl_Position = projMat * spriteMat * vec4(position, 0, 1);
|
||||||
|
|
||||||
v_texCoord = texCoord * texSizeInv;
|
v_texCoord = texCoord * texSizeInv;
|
||||||
|
if (renderPattern) {
|
||||||
|
v_patCoord = (texCoord * patternSizeInv) - (patternScroll * patternSizeInv);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -245,6 +245,11 @@ void Shader::initFromFile(const char *_vertFile, const char *_fragFile,
|
||||||
_vertFile, _fragFile, programName);
|
_vertFile, _fragFile, programName);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Shader::setVec2Uniform(GLint location, const Vec2 &vec)
|
||||||
|
{
|
||||||
|
gl.Uniform2f(location, vec.x, vec.y);
|
||||||
|
}
|
||||||
|
|
||||||
void Shader::setVec4Uniform(GLint location, const Vec4 &vec)
|
void Shader::setVec4Uniform(GLint location, const Vec4 &vec)
|
||||||
{
|
{
|
||||||
gl.Uniform4f(location, vec.x, vec.y, vec.z, vec.w);
|
gl.Uniform4f(location, vec.x, vec.y, vec.z, vec.w);
|
||||||
|
@ -463,6 +468,11 @@ SpriteShader::SpriteShader()
|
||||||
GET_U(opacity);
|
GET_U(opacity);
|
||||||
GET_U(bushDepth);
|
GET_U(bushDepth);
|
||||||
GET_U(bushOpacity);
|
GET_U(bushOpacity);
|
||||||
|
GET_U(pattern);
|
||||||
|
GET_U(renderPattern);
|
||||||
|
GET_U(patternSizeInv);
|
||||||
|
GET_U(patternOpacity);
|
||||||
|
GET_U(patternScroll);
|
||||||
}
|
}
|
||||||
|
|
||||||
void SpriteShader::setSpriteMat(const float value[16])
|
void SpriteShader::setSpriteMat(const float value[16])
|
||||||
|
@ -495,6 +505,27 @@ void SpriteShader::setBushOpacity(float value)
|
||||||
gl.Uniform1f(u_bushOpacity, value);
|
gl.Uniform1f(u_bushOpacity, value);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void SpriteShader::setPattern(const TEX::ID pattern, const Vec2 &dimensions)
|
||||||
|
{
|
||||||
|
setTexUniform(u_pattern, 1, pattern);
|
||||||
|
gl.Uniform2f(u_patternSizeInv, 1.f / dimensions.x, 1.f / dimensions.y);
|
||||||
|
}
|
||||||
|
|
||||||
|
void SpriteShader::setShouldRenderPattern(bool value)
|
||||||
|
{
|
||||||
|
gl.Uniform1i(u_renderPattern, value);
|
||||||
|
}
|
||||||
|
|
||||||
|
void SpriteShader::setPatternOpacity(float value)
|
||||||
|
{
|
||||||
|
gl.Uniform1f(u_patternOpacity, value);
|
||||||
|
}
|
||||||
|
|
||||||
|
void SpriteShader::setPatternScroll(const Vec2 &scroll)
|
||||||
|
{
|
||||||
|
setVec2Uniform(u_patternScroll, scroll);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
PlaneShader::PlaneShader()
|
PlaneShader::PlaneShader()
|
||||||
{
|
{
|
||||||
|
|
|
@ -53,6 +53,7 @@ protected:
|
||||||
const char *programName);
|
const char *programName);
|
||||||
|
|
||||||
static void setVec4Uniform(GLint location, const Vec4 &vec);
|
static void setVec4Uniform(GLint location, const Vec4 &vec);
|
||||||
|
static void setVec2Uniform(GLint location, const Vec2 &vec);
|
||||||
static void setTexUniform(GLint location, unsigned unitIndex, TEX::ID texture);
|
static void setTexUniform(GLint location, unsigned unitIndex, TEX::ID texture);
|
||||||
|
|
||||||
GLuint vertShader, fragShader;
|
GLuint vertShader, fragShader;
|
||||||
|
@ -190,9 +191,13 @@ public:
|
||||||
void setOpacity(float value);
|
void setOpacity(float value);
|
||||||
void setBushDepth(float value);
|
void setBushDepth(float value);
|
||||||
void setBushOpacity(float value);
|
void setBushOpacity(float value);
|
||||||
|
void setPattern(const TEX::ID pattern, const Vec2 &dimensions);
|
||||||
|
void setShouldRenderPattern(bool value);
|
||||||
|
void setPatternOpacity(float value);
|
||||||
|
void setPatternScroll(const Vec2 &scroll);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
GLint u_spriteMat, u_tone, u_opacity, u_color, u_bushDepth, u_bushOpacity;
|
GLint u_spriteMat, u_tone, u_opacity, u_color, u_bushDepth, u_bushOpacity, u_pattern, u_renderPattern, u_patternSizeInv, u_patternOpacity, u_patternScroll;
|
||||||
};
|
};
|
||||||
|
|
||||||
class PlaneShader : public ShaderBase
|
class PlaneShader : public ShaderBase
|
||||||
|
|
File diff suppressed because it is too large
Load diff
|
@ -62,6 +62,10 @@ public:
|
||||||
DECL_ATTR( BlendType, int )
|
DECL_ATTR( BlendType, int )
|
||||||
DECL_ATTR( Color, Color& )
|
DECL_ATTR( Color, Color& )
|
||||||
DECL_ATTR( Tone, Tone& )
|
DECL_ATTR( Tone, Tone& )
|
||||||
|
DECL_ATTR( Pattern, Bitmap* )
|
||||||
|
DECL_ATTR( PatternOpacity, int )
|
||||||
|
DECL_ATTR( PatternScrollX, int )
|
||||||
|
DECL_ATTR( PatternScrollY, int )
|
||||||
DECL_ATTR( WaveAmp, int )
|
DECL_ATTR( WaveAmp, int )
|
||||||
DECL_ATTR( WaveLength, int )
|
DECL_ATTR( WaveLength, int )
|
||||||
DECL_ATTR( WaveSpeed, int )
|
DECL_ATTR( WaveSpeed, int )
|
||||||
|
|
Loading…
Add table
Reference in a new issue