Merge branch 'master' of ssh://code.nikooneshot.ru:222/Sunshine/mkxp-sunshine

This commit is contained in:
DepressedTWM 2026-08-19 09:24:21 +04:00
commit 1f48ab469f
6 changed files with 53 additions and 1 deletions

View file

@ -78,6 +78,26 @@ DEF_PROP_B(Sprite, MirrorY)
DEF_PROP_B(Sprite, Obscured)
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_UNUSED_PARAM;
@ -129,6 +149,7 @@ void spriteBindingInit(){
INIT_PROP_BIND( Sprite, Modulate, "modulate" );
INIT_PROP_BIND( Sprite, Obscured, "obscured" );
INIT_PROP_BIND( Sprite, Shader, "shader" );
INIT_PROP_BIND( Sprite, Smooth, "smooth" );
INIT_PROP_BIND( Sprite, PerspectiveMode, "pm");
INIT_PROP_BIND( Sprite, PerspectiveZ, "pz");
INIT_PROP_BIND( Sprite, PerspectiveRotationX, "rx");

View file

@ -390,9 +390,19 @@ void EventThread::process(RGSSThreadData &rtData){
break;
case REQUEST_SETFULLSCREEN :
setFullscreen(win, static_cast<bool>(event.user.code));
if (!fullscreen)
SDL_SetWindowSize(win, shState->graphics().width(), shState->graphics().height());
break;
case REQUEST_WINRESIZE :
if (fullscreen)
{
int winW;
int winH;
SDL_GetWindowSize(win, &winW, &winH);
windowSizeMsg.post(Vec2i(winW, winH));
}
else
SDL_SetWindowSize(win, event.window.data1, event.window.data2);
break;
case REQUEST_WINMOVETO :

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 _PFNGLTEXPARAMETERIPROC) (GLenum target, GLenum pname, GLint param);
typedef void (APIENTRYP _PFNGLACTIVETEXTUREPROC) (GLenum texture);
typedef void (APIENTRYP _PFNGLGENERATEMIPMAPPROC) (GLenum texture);
/* Debugging */
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(TexParameteri, _PFNGLTEXPARAMETERIPROC) \
GL_FUN(ActiveTexture, _PFNGLACTIVETEXTUREPROC) \
GL_FUN(GenerateMipmap, _PFNGLGENERATEMIPMAPPROC) \
/* Buffer object */ \
GL_FUN(GenBuffers, _PFNGLGENBUFFERSPROC) \
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_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 */

View file

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

View file

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