Sprite.smooth

This commit is contained in:
CatWindow 2026-08-18 19:29:10 +03:00
parent 8da6b3d7d6
commit be151cbfcc
5 changed files with 42 additions and 0 deletions

View file

@ -78,6 +78,26 @@ DEF_PROP_B(Sprite, MirrorY)
DEF_PROP_B(Sprite, Obscured) DEF_PROP_B(Sprite, Obscured)
DEF_PROP_B(Sprite, PerspectiveMode) DEF_PROP_B(Sprite, PerspectiveMode)
RB_METHOD(SpriteGetSmooth)
{
RB_UNUSED_PARAM;
Sprite *k = getPrivateData<Sprite>(self);
bool value = false;
GUARD_EXC( value = k->smooth; )
return rb_bool_new(value);
}
RB_METHOD(SpriteSetSmooth)
{
rb_check_argc(argc, 1);
Sprite *k = getPrivateData<Sprite>(self);
bool value;
rb_bool_arg(*argv, &value);
GUARD_EXC( k->smooth = value; )
return *argv;
}
RB_METHOD(spriteWidth){ RB_METHOD(spriteWidth){
RB_UNUSED_PARAM; RB_UNUSED_PARAM;
@ -129,6 +149,7 @@ void spriteBindingInit(){
INIT_PROP_BIND( Sprite, Modulate, "modulate" ); INIT_PROP_BIND( Sprite, Modulate, "modulate" );
INIT_PROP_BIND( Sprite, Obscured, "obscured" ); INIT_PROP_BIND( Sprite, Obscured, "obscured" );
INIT_PROP_BIND( Sprite, Shader, "shader" ); INIT_PROP_BIND( Sprite, Shader, "shader" );
INIT_PROP_BIND( Sprite, Smooth, "smooth" );
INIT_PROP_BIND( Sprite, PerspectiveMode, "pm"); INIT_PROP_BIND( Sprite, PerspectiveMode, "pm");
INIT_PROP_BIND( Sprite, PerspectiveZ, "pz"); INIT_PROP_BIND( Sprite, PerspectiveZ, "pz");
INIT_PROP_BIND( Sprite, PerspectiveRotationX, "rx"); INIT_PROP_BIND( Sprite, PerspectiveRotationX, "rx");

View file

@ -54,6 +54,7 @@ typedef void (APIENTRYP _PFNGLTEXIMAGE2DPROC) (GLenum target, GLint level, GLint
typedef void (APIENTRYP _PFNGLTEXSUBIMAGE2DPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *pixels); typedef void (APIENTRYP _PFNGLTEXSUBIMAGE2DPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *pixels);
typedef void (APIENTRYP _PFNGLTEXPARAMETERIPROC) (GLenum target, GLenum pname, GLint param); typedef void (APIENTRYP _PFNGLTEXPARAMETERIPROC) (GLenum target, GLenum pname, GLint param);
typedef void (APIENTRYP _PFNGLACTIVETEXTUREPROC) (GLenum texture); typedef void (APIENTRYP _PFNGLACTIVETEXTUREPROC) (GLenum texture);
typedef void (APIENTRYP _PFNGLGENERATEMIPMAPPROC) (GLenum texture);
/* Debugging */ /* Debugging */
typedef void (APIENTRY * _GLDEBUGPROC) (GLenum source, GLenum type, GLuint id, GLenum severity, GLsizei length, const GLchar* message, const void *userParam); typedef void (APIENTRY * _GLDEBUGPROC) (GLenum source, GLenum type, GLuint id, GLenum severity, GLsizei length, const GLchar* message, const void *userParam);
@ -148,6 +149,7 @@ typedef void (APIENTRYP _PFNGLRELEASESHADERCOMPILERPROC) (void);
GL_FUN(TexSubImage2D, _PFNGLTEXSUBIMAGE2DPROC) \ GL_FUN(TexSubImage2D, _PFNGLTEXSUBIMAGE2DPROC) \
GL_FUN(TexParameteri, _PFNGLTEXPARAMETERIPROC) \ GL_FUN(TexParameteri, _PFNGLTEXPARAMETERIPROC) \
GL_FUN(ActiveTexture, _PFNGLACTIVETEXTUREPROC) \ GL_FUN(ActiveTexture, _PFNGLACTIVETEXTUREPROC) \
GL_FUN(GenerateMipmap, _PFNGLGENERATEMIPMAPPROC) \
/* Buffer object */ \ /* Buffer object */ \
GL_FUN(GenBuffers, _PFNGLGENBUFFERSPROC) \ GL_FUN(GenBuffers, _PFNGLGENBUFFERSPROC) \
GL_FUN(DeleteBuffers, _PFNGLDELETEBUFFERSPROC) \ GL_FUN(DeleteBuffers, _PFNGLDELETEBUFFERSPROC) \

View file

@ -92,6 +92,15 @@ namespace TEX{
gl.TexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, mode ? GL_LINEAR : GL_NEAREST); gl.TexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, mode ? GL_LINEAR : GL_NEAREST);
gl.TexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, mode ? GL_LINEAR : GL_NEAREST); gl.TexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, mode ? GL_LINEAR : GL_NEAREST);
} }
static inline void setSmoothMipMaps(bool mode){
gl.TexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, mode ? GL_LINEAR_MIPMAP_LINEAR : GL_NEAREST_MIPMAP_NEAREST);
gl.TexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, mode ? GL_LINEAR_MIPMAP_LINEAR : GL_NEAREST_MIPMAP_NEAREST);
}
static inline void generateMipMaps(){
gl.GenerateMipmap(GL_TEXTURE_2D);
}
} }
/* Framebuffer Object */ /* Framebuffer Object */

View file

@ -651,12 +651,20 @@ void Sprite::draw(){
p->bitmap->bindTex(*base); p->bitmap->bindTex(*base);
if (smooth)
{
//TEX::generateMipMaps();
TEX::setSmooth(true);
}
if (p->wave.active) if (p->wave.active)
p->wave.qArray.draw(); p->wave.qArray.draw();
else else
p->quad.draw(); p->quad.draw();
glState.blendMode.pop(); glState.blendMode.pop();
if (smooth)
TEX::setSmooth(false);
} }
void Sprite::onGeometryChange(const Scene::Geometry &geo){ void Sprite::onGeometryChange(const Scene::Geometry &geo){

View file

@ -46,6 +46,8 @@ public:
int getWidth() const; int getWidth() const;
int getHeight() const; int getHeight() const;
bool smooth = false;
void update(); void update();
DECL_ATTR( Bitmap, Bitmap* ) DECL_ATTR( Bitmap, Bitmap* )