Set canvas render material for sprites

This commit is contained in:
n00b87
2025-08-31 21:50:38 -05:00
parent a25b4ad6ec
commit bfdff4207a
24 changed files with 1446 additions and 1119 deletions

View File

@@ -325,6 +325,13 @@ struct rc_physicsWorld2D_obj
int positionIterations = 3; //how strongly to correct position
};
struct rc_spriteCanvasProperties
{
irr::video::E_BLEND_OPERATION blend_mode; // = irr::video::EBO_ADD;
bool bilinear_filter; // = false;
irr::video::E_ANTI_ALIASING_MODE anti_alias; // = irr::video::EAAM_OFF;
};
#define RC_CANVAS_TYPE_2D 0
#define RC_CANVAS_TYPE_3D 1
#define RC_CANVAS_TYPE_SPRITE 2
@@ -363,6 +370,7 @@ struct rc_canvas_obj
rc_physicsWorld2D_obj physics2D;
irr::core::array<irr::s32> sprite_id;
rc_spriteCanvasProperties spriteCanvasProperties;
};
irr::core::array<rc_canvas_obj> rc_canvas;
@@ -809,6 +817,29 @@ void rc_setDriverMaterial()
}
void rc_setDriverMaterial_B(irr::video::E_BLEND_OPERATION op, irr::video::E_ANTI_ALIASING_MODE aa, bool bf)
{
if(!VideoDriver)
return;
irr::video::SMaterial material;
material.Lighting = false;
material.ZWriteEnable = irr::video::EZW_OFF;
material.ZBuffer = false;
material.BackfaceCulling = false;
material.TextureLayer[0].Texture = 0;
material.TextureLayer[0].BilinearFilter = bf;
material.MaterialTypeParam = irr::video::pack_textureBlendFunc(irr::video::EBF_SRC_ALPHA, irr::video::EBF_ONE_MINUS_SRC_ALPHA, irr::video::EMFN_MODULATE_1X, irr::video::EAS_TEXTURE | irr::video::EAS_VERTEX_COLOR);
material.BlendOperation = op;
//material.BlendOperation = irr::video::EBO_ADD;
material.AntiAliasing = aa;
material.MaterialType = irr::video::EMT_ONETEXTURE_BLEND;
VideoDriver->setMaterial(material);
}
void draw2DImage(irr::video::IVideoDriver *driver, irr::video::ITexture* texture, irr::core::rect<irr::s32> sourceRect, irr::core::position2d<irr::s32> position, irr::core::position2d<irr::s32> rotationPoint, irr::f32 rotation, irr::core::vector2df scale, bool useAlphaChannel, irr::video::SColor color, irr::core::vector2d<irr::f32> screenSize)
{
if(rc_active_canvas < 0 || rc_active_canvas >= rc_canvas.size())