Fixed Post Processing functions

This commit is contained in:
n00b87
2025-11-23 03:16:43 -06:00
parent f53f486c54
commit f11d41622b
18 changed files with 2095 additions and 2077 deletions

View File

@@ -208,13 +208,12 @@ rc_getSpriteCanvasBilinearFilter( GETSPRITECANVASBILINEARFILTER_C_NUM )
rc_getSpriteCanvasPhysics( GETSPRITECANVASPHYSICS_C_NUM )
rc_setSpriteCanvasRenderPriority( SETSPRITECANVASRENDERPRIORITY_C_NUM, SETSPRITECANVASRENDERPRIORITY_PRIORITY, SETSPRITECANVASRENDERPRIORITY_ORDER )
rc_getSpriteCanvasRenderPriority( GETSPRITECANVASRENDERPRIORITY_C_NUM, &GETSPRITECANVASRENDERPRIORITY_PRIORITY, &GETSPRITECANVASRENDERPRIORITY_ORDER )
rc_addPostEffect( ADDPOSTEFFECT_C_NUM, ADDPOSTEFFECT_EFFECT_TYPE )
rc_removePostEffect( REMOVEPOSTEFFECT_C_NUM, REMOVEPOSTEFFECT_EFFECT_NUM )
rc_setPostEffectProperty( SETPOSTEFFECTPROPERTY_C_NUM, SETPOSTEFFECTPROPERTY_EFFECT_NUM, SETPOSTEFFECTPROPERTY_PROPERTY, SETPOSTEFFECTPROPERTY_PROPERTY_VALUE )
rc_getPostEffectProperty( GETPOSTEFFECTPROPERTY_C_NUM, GETPOSTEFFECTPROPERTY_EFFECT_NUM, GETPOSTEFFECTPROPERTY_PROPERTY )
rc_clearPostEffects( CLEARPOSTEFFECTS_C_NUM )
rc_setPostEffectActive( SETPOSTEFFECTACTIVE_C_NUM, SETPOSTEFFECTACTIVE_EFFECT_NUM, SETPOSTEFFECTACTIVE_FLAG )
rc_postEffectIsActive( POSTEFFECTISACTIVE_C_NUM, POSTEFFECTISACTIVE_EFFECT_NUM )
rc_setPostEffect( SETPOSTEFFECT_C_NUM, SETPOSTEFFECT_EFFECT_TYPE )
rc_clearPostEffect( CLEARPOSTEFFECT_C_NUM )
rc_setPostEffectProperty( SETPOSTEFFECTPROPERTY_C_NUM, SETPOSTEFFECTPROPERTY_PROPERTY, SETPOSTEFFECTPROPERTY_PROPERTY_VALUE )
rc_getPostEffectProperty( GETPOSTEFFECTPROPERTY_C_NUM, GETPOSTEFFECTPROPERTY_PROPERTY )
rc_setPostEffectActive( SETPOSTEFFECTACTIVE_C_NUM, SETPOSTEFFECTACTIVE_FLAG )
rc_postEffectIsActive( POSTEFFECTISACTIVE_C_NUM )
rc_drawCircle( CIRCLE_X, CIRCLE_Y, CIRCLE_RADIUS )
rc_drawCircleFill( CIRCLEFILL_X, CIRCLEFILL_Y, CIRCLEFILL_RADIUS )
rc_drawEllipse( ELLIPSE_X, ELLIPSE_Y, ELLIPSE_RX, ELLIPSE_RY )

View File

@@ -30,10 +30,9 @@ function GetSpriteCanvasBilinearFilter( c_num )
function GetSpriteCanvasPhysics( c_num )
function SetSpriteCanvasRenderPriority( c_num, priority, order )
sub GetSpriteCanvasRenderPriority( c_num, ByRef priority, ByRef order )
function AddPostEffect( c_num, effect_type )
sub RemovePostEffect( c_num, effect_num )
sub SetPostEffectProperty( c_num, effect_num, property, property_value )
function GetPostEffectProperty( c_num, effect_num, property)
sub ClearPostEffects( c_num )
sub SetPostEffectActive( c_num, effect_num, flag )
function PostEffectIsActive( c_num, effect_num )
function SetPostEffect( c_num, effect_type )
sub ClearPostEffect( c_num )
sub SetPostEffectProperty( c_num, property, property_value )
function GetPostEffectProperty( c_num, property)
sub SetPostEffectActive( c_num, flag )
function PostEffectIsActive( c_num )

View File

@@ -926,7 +926,7 @@ int main(int argc, char * argv[])
bool clean_after_build = true;
//DEBUG START
//chdir("/home/n00b/GameDev/Ambient/Ambient_Project");
//chdir("/home/n00b/Music/v47/RCBasic_Package/examples/Serenity_Demo2");
//rc_filename = "main.bas";
//rc_filename = "/home/n00b/test/SpriteShapeTest/main.bas";
//rc_filename = "/home/n00b/Programs/RCBasic_v400_Linux64/examples/Constraint/main.bas";

View File

@@ -555,30 +555,23 @@ void init_embedded_functions()
add_embedded_arg("c_num", ID_TYPE_NUM);
add_embedded_arg("priority", ID_TYPE_BYREF_NUM);
add_embedded_arg("order", ID_TYPE_BYREF_NUM);
embed_function("AddPostEffect", ID_TYPE_FN_NUM);
embed_function("SetPostEffect", ID_TYPE_FN_NUM);
add_embedded_arg("c_num", ID_TYPE_NUM);
add_embedded_arg("effect_type", ID_TYPE_NUM);
embed_function("RemovePostEffect", ID_TYPE_SUB);
embed_function("ClearPostEffect", ID_TYPE_SUB);
add_embedded_arg("c_num", ID_TYPE_NUM);
add_embedded_arg("effect_num", ID_TYPE_NUM);
embed_function("SetPostEffectProperty", ID_TYPE_SUB);
add_embedded_arg("c_num", ID_TYPE_NUM);
add_embedded_arg("effect_num", ID_TYPE_NUM);
add_embedded_arg("property", ID_TYPE_NUM);
add_embedded_arg("property_value", ID_TYPE_NUM);
embed_function("GetPostEffectProperty", ID_TYPE_FN_NUM);
add_embedded_arg("c_num", ID_TYPE_NUM);
add_embedded_arg("effect_num", ID_TYPE_NUM);
add_embedded_arg("property", ID_TYPE_NUM);
embed_function("ClearPostEffects", ID_TYPE_SUB);
add_embedded_arg("c_num", ID_TYPE_NUM);
embed_function("SetPostEffectActive", ID_TYPE_SUB);
add_embedded_arg("c_num", ID_TYPE_NUM);
add_embedded_arg("effect_num", ID_TYPE_NUM);
add_embedded_arg("flag", ID_TYPE_NUM);
embed_function("PostEffectIsActive", ID_TYPE_FN_NUM);
add_embedded_arg("c_num", ID_TYPE_NUM);
add_embedded_arg("effect_num", ID_TYPE_NUM);
embed_function("Circle", ID_TYPE_SUB);
add_embedded_arg("x", ID_TYPE_NUM);
add_embedded_arg("y", ID_TYPE_NUM);

Binary file not shown.

View File

@@ -1,5 +1,5 @@
# depslib dependency file v1.0
1762837514 source:/home/n00b/Projects/RCBASIC4/rcbasic_build/main.cpp
1763875570 source:/home/n00b/Projects/RCBASIC4/rcbasic_build/main.cpp
<iostream>
<stack>
<vector>
@@ -54,7 +54,7 @@
1752004854 /home/n00b/Projects/RCBASIC4/rcbasic_build/rc_global.h
<inttypes.h>
1762837355 /home/n00b/Projects/RCBASIC4/rcbasic_build/rc_builtin.h
1763875558 /home/n00b/Projects/RCBASIC4/rcbasic_build/rc_builtin.h
"identifier.h"
1752004854 /home/n00b/Projects/RCBASIC4/rcbasic_build/rc_vm_asm.h

View File

@@ -549,30 +549,23 @@ embed_function("GetSpriteCanvasRenderPriority", ID_TYPE_SUB);
add_embedded_arg("c_num", ID_TYPE_NUM);
add_embedded_arg("priority", ID_TYPE_BYREF_NUM);
add_embedded_arg("order", ID_TYPE_BYREF_NUM);
embed_function("AddPostEffect", ID_TYPE_FN_NUM);
embed_function("SetPostEffect", ID_TYPE_FN_NUM);
add_embedded_arg("c_num", ID_TYPE_NUM);
add_embedded_arg("effect_type", ID_TYPE_NUM);
embed_function("RemovePostEffect", ID_TYPE_SUB);
embed_function("ClearPostEffect", ID_TYPE_SUB);
add_embedded_arg("c_num", ID_TYPE_NUM);
add_embedded_arg("effect_num", ID_TYPE_NUM);
embed_function("SetPostEffectProperty", ID_TYPE_SUB);
add_embedded_arg("c_num", ID_TYPE_NUM);
add_embedded_arg("effect_num", ID_TYPE_NUM);
add_embedded_arg("property", ID_TYPE_NUM);
add_embedded_arg("property_value", ID_TYPE_NUM);
embed_function("GetPostEffectProperty", ID_TYPE_FN_NUM);
add_embedded_arg("c_num", ID_TYPE_NUM);
add_embedded_arg("effect_num", ID_TYPE_NUM);
add_embedded_arg("property", ID_TYPE_NUM);
embed_function("ClearPostEffects", ID_TYPE_SUB);
add_embedded_arg("c_num", ID_TYPE_NUM);
embed_function("SetPostEffectActive", ID_TYPE_SUB);
add_embedded_arg("c_num", ID_TYPE_NUM);
add_embedded_arg("effect_num", ID_TYPE_NUM);
add_embedded_arg("flag", ID_TYPE_NUM);
embed_function("PostEffectIsActive", ID_TYPE_FN_NUM);
add_embedded_arg("c_num", ID_TYPE_NUM);
add_embedded_arg("effect_num", ID_TYPE_NUM);
embed_function("Circle", ID_TYPE_SUB);
add_embedded_arg("x", ID_TYPE_NUM);
add_embedded_arg("y", ID_TYPE_NUM);

File diff suppressed because it is too large Load Diff

View File

@@ -655,26 +655,23 @@ case FN_SetSpriteCanvasRenderPriority: //Number Function
case FN_GetSpriteCanvasRenderPriority: //Sub Procedure
rc_getSpriteCanvasRenderPriority( GETSPRITECANVASRENDERPRIORITY_C_NUM, &GETSPRITECANVASRENDERPRIORITY_PRIORITY, &GETSPRITECANVASRENDERPRIORITY_ORDER );
break;
case FN_AddPostEffect: //Number Function
rc_push_num(rc_addPostEffect( ADDPOSTEFFECT_C_NUM, ADDPOSTEFFECT_EFFECT_TYPE ));
case FN_SetPostEffect: //Number Function
rc_push_num(rc_setPostEffect( SETPOSTEFFECT_C_NUM, SETPOSTEFFECT_EFFECT_TYPE ));
break;
case FN_RemovePostEffect: //Sub Procedure
rc_removePostEffect( REMOVEPOSTEFFECT_C_NUM, REMOVEPOSTEFFECT_EFFECT_NUM );
case FN_ClearPostEffect: //Sub Procedure
rc_clearPostEffect( CLEARPOSTEFFECT_C_NUM );
break;
case FN_SetPostEffectProperty: //Sub Procedure
rc_setPostEffectProperty( SETPOSTEFFECTPROPERTY_C_NUM, SETPOSTEFFECTPROPERTY_EFFECT_NUM, SETPOSTEFFECTPROPERTY_PROPERTY, SETPOSTEFFECTPROPERTY_PROPERTY_VALUE );
rc_setPostEffectProperty( SETPOSTEFFECTPROPERTY_C_NUM, SETPOSTEFFECTPROPERTY_PROPERTY, SETPOSTEFFECTPROPERTY_PROPERTY_VALUE );
break;
case FN_GetPostEffectProperty: //Number Function
rc_push_num(rc_getPostEffectProperty( GETPOSTEFFECTPROPERTY_C_NUM, GETPOSTEFFECTPROPERTY_EFFECT_NUM, GETPOSTEFFECTPROPERTY_PROPERTY ));
break;
case FN_ClearPostEffects: //Sub Procedure
rc_clearPostEffects( CLEARPOSTEFFECTS_C_NUM );
rc_push_num(rc_getPostEffectProperty( GETPOSTEFFECTPROPERTY_C_NUM, GETPOSTEFFECTPROPERTY_PROPERTY ));
break;
case FN_SetPostEffectActive: //Sub Procedure
rc_setPostEffectActive( SETPOSTEFFECTACTIVE_C_NUM, SETPOSTEFFECTACTIVE_EFFECT_NUM, SETPOSTEFFECTACTIVE_FLAG );
rc_setPostEffectActive( SETPOSTEFFECTACTIVE_C_NUM, SETPOSTEFFECTACTIVE_FLAG );
break;
case FN_PostEffectIsActive: //Number Function
rc_push_num(rc_postEffectIsActive( POSTEFFECTISACTIVE_C_NUM, POSTEFFECTISACTIVE_EFFECT_NUM ));
rc_push_num(rc_postEffectIsActive( POSTEFFECTISACTIVE_C_NUM ));
break;
case FN_Circle: //Sub Procedure
rc_drawCircle( CIRCLE_X, CIRCLE_Y, CIRCLE_RADIUS );

View File

@@ -4453,7 +4453,7 @@ int main(int argc, char * argv[])
//ogles2 test
#ifdef RC_TESTING
rc_intern_dirChange("/home/n00b/GameDev/Irrlicht Demo");
rc_intern_dirChange("/home/n00b/Music/v47/RCBasic_Package/examples/Serenity_Demo2");
//rc_intern_dirChange("");
rc_filename = "main.cbc";

File diff suppressed because it is too large Load Diff

View File

@@ -655,26 +655,23 @@ case FN_SetSpriteCanvasRenderPriority: //Number Function
case FN_GetSpriteCanvasRenderPriority: //Sub Procedure
rc_getSpriteCanvasRenderPriority( GETSPRITECANVASRENDERPRIORITY_C_NUM, &GETSPRITECANVASRENDERPRIORITY_PRIORITY, &GETSPRITECANVASRENDERPRIORITY_ORDER );
break;
case FN_AddPostEffect: //Number Function
rc_push_num(rc_addPostEffect( ADDPOSTEFFECT_C_NUM, ADDPOSTEFFECT_EFFECT_TYPE ));
case FN_SetPostEffect: //Number Function
rc_push_num(rc_setPostEffect( SETPOSTEFFECT_C_NUM, SETPOSTEFFECT_EFFECT_TYPE ));
break;
case FN_RemovePostEffect: //Sub Procedure
rc_removePostEffect( REMOVEPOSTEFFECT_C_NUM, REMOVEPOSTEFFECT_EFFECT_NUM );
case FN_ClearPostEffect: //Sub Procedure
rc_clearPostEffect( CLEARPOSTEFFECT_C_NUM );
break;
case FN_SetPostEffectProperty: //Sub Procedure
rc_setPostEffectProperty( SETPOSTEFFECTPROPERTY_C_NUM, SETPOSTEFFECTPROPERTY_EFFECT_NUM, SETPOSTEFFECTPROPERTY_PROPERTY, SETPOSTEFFECTPROPERTY_PROPERTY_VALUE );
rc_setPostEffectProperty( SETPOSTEFFECTPROPERTY_C_NUM, SETPOSTEFFECTPROPERTY_PROPERTY, SETPOSTEFFECTPROPERTY_PROPERTY_VALUE );
break;
case FN_GetPostEffectProperty: //Number Function
rc_push_num(rc_getPostEffectProperty( GETPOSTEFFECTPROPERTY_C_NUM, GETPOSTEFFECTPROPERTY_EFFECT_NUM, GETPOSTEFFECTPROPERTY_PROPERTY ));
break;
case FN_ClearPostEffects: //Sub Procedure
rc_clearPostEffects( CLEARPOSTEFFECTS_C_NUM );
rc_push_num(rc_getPostEffectProperty( GETPOSTEFFECTPROPERTY_C_NUM, GETPOSTEFFECTPROPERTY_PROPERTY ));
break;
case FN_SetPostEffectActive: //Sub Procedure
rc_setPostEffectActive( SETPOSTEFFECTACTIVE_C_NUM, SETPOSTEFFECTACTIVE_EFFECT_NUM, SETPOSTEFFECTACTIVE_FLAG );
rc_setPostEffectActive( SETPOSTEFFECTACTIVE_C_NUM, SETPOSTEFFECTACTIVE_FLAG );
break;
case FN_PostEffectIsActive: //Number Function
rc_push_num(rc_postEffectIsActive( POSTEFFECTISACTIVE_C_NUM, POSTEFFECTISACTIVE_EFFECT_NUM ));
rc_push_num(rc_postEffectIsActive( POSTEFFECTISACTIVE_C_NUM ));
break;
case FN_Circle: //Sub Procedure
rc_drawCircle( CIRCLE_X, CIRCLE_Y, CIRCLE_RADIUS );

View File

@@ -1078,6 +1078,9 @@ int rc_canvasOpen(int w, int h, int vx, int vy, int vw, int vh, int mode, int ca
canvas.type = canvas_type;
canvas.show3D = false;
canvas.physics2D.enabled = false;
canvas.post_effect.object = NULL;
canvas.post_effect.type = -1;
canvas.post_effect.is_active = false;
#ifdef RC_DRIVER_GLES2
Uint32 size_n = 2;
@@ -1247,12 +1250,8 @@ void rc_canvasClose(int canvas_id)
rc_canvas[canvas_id].sprite_id.clear();
//delete post effects for canvas
for(int i = 0; i < rc_canvas[canvas_id].post_effect.size(); i++)
{
rc_removePostEffect(canvas_id, i);
}
rc_clearPostEffect(canvas_id);
rc_canvas[canvas_id].post_effect.clear();
if(rc_active_canvas == canvas_id)
rc_active_canvas = -1;
@@ -1537,6 +1536,9 @@ int rc_cloneCanvas(int origin_canvas_id, int mode)
canvas.show3D = rc_canvas[origin_canvas_id].show3D;
canvas.color_mod = rc_canvas[origin_canvas_id].color_mod;
canvas.texture = rc_canvas[origin_canvas_id].texture;
canvas.post_effect.is_active = false;
canvas.post_effect.object = NULL;
canvas.post_effect.type = -1;
//canvas.sprite_layer = rc_canvas[origin_canvas_id].sprite_layer;
if(!canvas.texture)

View File

@@ -405,7 +405,7 @@ struct rc_canvas_obj
irr::core::array<irr::s32> sprite_id;
rc_spriteCanvasProperties spriteCanvasProperties;
irr::core::array<rc_post_effect> post_effect;
rc_post_effect post_effect;
};
irr::core::array<rc_canvas_obj> rc_canvas;

View File

@@ -920,39 +920,83 @@ public:
int rc_addPostEffect(int canvas_id, int effect_type)
void rc_clearPostEffect(int canvas_id)
{
if(canvas_id <= 0 || canvas_id >= rc_canvas.size())
return -1;
return;
int pp_id = -1;
rc_canvas[canvas_id].post_effect.is_active = false;
for(int i = 0; i < rc_canvas[canvas_id].post_effect.size(); i++)
if(rc_canvas[canvas_id].post_effect.object)
{
if(rc_canvas[canvas_id].post_effect[i].type < 0)
switch(rc_canvas[canvas_id].post_effect.type)
{
pp_id = i;
case RC_POST_PROCESS_BLOOM:
{
IPostProcessBloom* post_process = (IPostProcessBloom*)rc_canvas[canvas_id].post_effect.object;
post_process->remove();
}
break;
case RC_POST_PROCESS_BLUR:
{
IPostProcessBlur* post_process = (IPostProcessBlur*)rc_canvas[canvas_id].post_effect.object;
post_process->remove();
}
break;
case RC_POST_PROCESS_COLORIZE:
{
IPostProcessColor* post_process = (IPostProcessColor*)rc_canvas[canvas_id].post_effect.object;
post_process->remove();
}
break;
case RC_POST_PROCESS_DISTORTION:
{
IPostProcessGlass* post_process = (IPostProcessGlass*)rc_canvas[canvas_id].post_effect.object;
post_process->remove();
}
break;
case RC_POST_PROCESS_INVERT:
{
IPostProcessInvert* post_process = (IPostProcessInvert*)rc_canvas[canvas_id].post_effect.object;
post_process->remove();
}
break;
case RC_POST_PROCESS_MOTION_BLUR:
{
IPostProcessMotionBlur* post_process = (IPostProcessMotionBlur*)rc_canvas[canvas_id].post_effect.object;
post_process->remove();
}
break;
case RC_POST_PROCESS_RADIAL_BLUR:
{
IPostProcessRadialBlur* post_process = (IPostProcessRadialBlur*)rc_canvas[canvas_id].post_effect.object;
post_process->remove();
}
break;
}
}
if(pp_id < 0)
{
pp_id = rc_canvas[canvas_id].post_effect.size();
rc_canvas[canvas_id].post_effect.object = NULL;
rc_canvas[canvas_id].post_effect.type = -1;
}
rc_post_effect pfx;
pfx.type = effect_type;
pfx.object = NULL;
pfx.is_active = true;
rc_canvas[canvas_id].post_effect.push_back(pfx);
}
else
{
rc_canvas[canvas_id].post_effect[pp_id].type = effect_type;
rc_canvas[canvas_id].post_effect[pp_id].object = NULL;
rc_canvas[canvas_id].post_effect[pp_id].is_active = true;
}
bool rc_setPostEffect(int canvas_id, int effect_type)
{
if(canvas_id <= 0 || canvas_id >= rc_canvas.size())
return false;
rc_clearPostEffect(canvas_id);
rc_canvas[canvas_id].post_effect.type = effect_type;
rc_canvas[canvas_id].post_effect.object = NULL;
rc_canvas[canvas_id].post_effect.is_active = true;
switch(effect_type)
@@ -968,7 +1012,7 @@ int rc_addPostEffect(int canvas_id, int effect_type)
Bloom->initiate(rc_canvas[canvas_id].viewport.dimension.Width, rc_canvas[canvas_id].viewport.dimension.Height, setup, SceneManager);
rc_canvas[canvas_id].post_effect[pp_id].object = Bloom;
rc_canvas[canvas_id].post_effect.object = Bloom;
}
break;
@@ -979,7 +1023,7 @@ int rc_addPostEffect(int canvas_id, int effect_type)
float sampleDist = 0.001;
Blur->initiate(rc_canvas[canvas_id].viewport.dimension.Width, rc_canvas[canvas_id].viewport.dimension.Height, sampleDist, SceneManager);
rc_canvas[canvas_id].post_effect[pp_id].object = Blur;
rc_canvas[canvas_id].post_effect.object = Blur;
}
break;
@@ -992,7 +1036,7 @@ int rc_addPostEffect(int canvas_id, int effect_type)
setup.col=video::SColorf(0,0,0,0);
PPE_Color->initiate(rc_canvas[canvas_id].viewport.dimension.Width, rc_canvas[canvas_id].viewport.dimension.Height, setup, SceneManager);
rc_canvas[canvas_id].post_effect[pp_id].object = PPE_Color;
rc_canvas[canvas_id].post_effect.object = PPE_Color;
}
break;
@@ -1001,7 +1045,7 @@ int rc_addPostEffect(int canvas_id, int effect_type)
IPostProcessInvert *Invert = new IPostProcessInvert(SceneManager->getRootSceneNode(), SceneManager, -1);
Invert->initiate(rc_canvas[canvas_id].viewport.dimension.Width, rc_canvas[canvas_id].viewport.dimension.Height, SceneManager);
rc_canvas[canvas_id].post_effect[pp_id].object = Invert;
rc_canvas[canvas_id].post_effect.object = Invert;
}
break;
@@ -1011,7 +1055,7 @@ int rc_addPostEffect(int canvas_id, int effect_type)
float strength = 0.1;
Blur->initiate(rc_canvas[canvas_id].viewport.dimension.Width, rc_canvas[canvas_id].viewport.dimension.Height, strength, SceneManager);
rc_canvas[canvas_id].post_effect[pp_id].object = Blur;
rc_canvas[canvas_id].post_effect.object = Blur;
}
break;
@@ -1022,7 +1066,7 @@ int rc_addPostEffect(int canvas_id, int effect_type)
float strength = 1;
Blur->initiate(rc_canvas[canvas_id].viewport.dimension.Width, rc_canvas[canvas_id].viewport.dimension.Height, dist, strength, SceneManager);
rc_canvas[canvas_id].post_effect[pp_id].object = Blur;
rc_canvas[canvas_id].post_effect.object = Blur;
}
break;
@@ -1032,120 +1076,62 @@ int rc_addPostEffect(int canvas_id, int effect_type)
float strength = 0.1;
Glass->initiate(rc_canvas[canvas_id].viewport.dimension.Width, rc_canvas[canvas_id].viewport.dimension.Height, strength, SceneManager);
rc_canvas[canvas_id].post_effect[pp_id].object = Glass;
rc_canvas[canvas_id].post_effect.object = Glass;
}
break;
}
return pp_id;
}
void rc_removePostEffect(int canvas_id, int effect_id)
{
if(canvas_id <= 0 || canvas_id >= rc_canvas.size())
return;
if(effect_id < 0 || effect_id >= rc_canvas[canvas_id].post_effect.size())
return;
rc_canvas[canvas_id].post_effect[effect_id].is_active = false;
if(rc_canvas[canvas_id].post_effect[effect_id].object)
if(!rc_canvas[canvas_id].post_effect.object)
{
switch(rc_canvas[canvas_id].post_effect[effect_id].type)
{
case RC_POST_PROCESS_BLOOM:
delete (IPostProcessBloom*)rc_canvas[canvas_id].post_effect[effect_id].object;
break;
case RC_POST_PROCESS_BLUR:
delete (IPostProcessBlur*)rc_canvas[canvas_id].post_effect[effect_id].object;
break;
case RC_POST_PROCESS_COLORIZE:
delete (IPostProcessColor*)rc_canvas[canvas_id].post_effect[effect_id].object;
break;
case RC_POST_PROCESS_DISTORTION:
delete (IPostProcessGlass*)rc_canvas[canvas_id].post_effect[effect_id].object;
break;
case RC_POST_PROCESS_INVERT:
delete (IPostProcessInvert*)rc_canvas[canvas_id].post_effect[effect_id].object;
break;
case RC_POST_PROCESS_MOTION_BLUR:
delete (IPostProcessMotionBlur*)rc_canvas[canvas_id].post_effect[effect_id].object;
break;
case RC_POST_PROCESS_RADIAL_BLUR:
delete (IPostProcessRadialBlur*)rc_canvas[canvas_id].post_effect[effect_id].object;
break;
}
rc_canvas[canvas_id].post_effect.is_active = false;
rc_canvas[canvas_id].post_effect.type = -1;
}
rc_canvas[canvas_id].post_effect[effect_id].object = NULL;
rc_canvas[canvas_id].post_effect[effect_id].type = -1;
return true;
}
void rc_clearPostEffects(int canvas_id)
void rc_setPostEffectStrength(int canvas_id, double strength)
{
if(canvas_id <= 0 || canvas_id >= rc_canvas.size())
return;
for(int i = 0; i < rc_canvas[canvas_id].post_effect.size(); i++)
{
rc_removePostEffect(canvas_id, i);
}
rc_canvas[canvas_id].post_effect.clear();
}
void rc_setPostEffectStrength(int canvas_id, int effect_id, double strength)
{
if(canvas_id <= 0 || canvas_id >= rc_canvas.size())
return;
if(effect_id < 0 || effect_id >= rc_canvas[canvas_id].post_effect.size())
return;
int effect_type = rc_canvas[canvas_id].post_effect[effect_id].type; //type will be -1 if effect has been removed
int effect_type = rc_canvas[canvas_id].post_effect.type; //type will be -1 if effect has been removed
switch(effect_type)
{
case RC_POST_PROCESS_BLOOM:
{
IPostProcessBloom *Bloom = (IPostProcessBloom*) rc_canvas[canvas_id].post_effect[effect_id].object;
IPostProcessBloom *Bloom = (IPostProcessBloom*) rc_canvas[canvas_id].post_effect.object;
Bloom->callback->strength = (float)strength;
}
break;
case RC_POST_PROCESS_COLORIZE:
{
IPostProcessColor * PPE_Color = (IPostProcessColor*) rc_canvas[canvas_id].post_effect[effect_id].object;
IPostProcessColor * PPE_Color = (IPostProcessColor*) rc_canvas[canvas_id].post_effect.object;
PPE_Color->callback->coloringStrength = (float)strength;
}
break;
case RC_POST_PROCESS_MOTION_BLUR:
{
IPostProcessMotionBlur *Blur = (IPostProcessMotionBlur*) rc_canvas[canvas_id].post_effect[effect_id].object;
IPostProcessMotionBlur *Blur = (IPostProcessMotionBlur*) rc_canvas[canvas_id].post_effect.object;
Blur->callback->strength = (float)strength;
}
break;
case RC_POST_PROCESS_RADIAL_BLUR:
{
IPostProcessRadialBlur *Blur = (IPostProcessRadialBlur*) rc_canvas[canvas_id].post_effect[effect_id].object;
IPostProcessRadialBlur *Blur = (IPostProcessRadialBlur*) rc_canvas[canvas_id].post_effect.object;
Blur->callback->sampleStrength = (float)strength;
}
break;
case RC_POST_PROCESS_DISTORTION:
{
IPostProcessGlass *Glass = (IPostProcessGlass*) rc_canvas[canvas_id].post_effect[effect_id].object;
IPostProcessGlass *Glass = (IPostProcessGlass*) rc_canvas[canvas_id].post_effect.object;
Glass->callback->strength = (float)strength;
}
break;
@@ -1153,35 +1139,32 @@ void rc_setPostEffectStrength(int canvas_id, int effect_id, double strength)
}
void rc_setPostEffectDistance(int canvas_id, int effect_id, double dist)
void rc_setPostEffectDistance(int canvas_id, double dist)
{
if(canvas_id <= 0 || canvas_id >= rc_canvas.size())
return;
if(effect_id < 0 || effect_id >= rc_canvas[canvas_id].post_effect.size())
return;
int effect_type = rc_canvas[canvas_id].post_effect[effect_id].type; //type will be -1 if effect has been removed
int effect_type = rc_canvas[canvas_id].post_effect.type; //type will be -1 if effect has been removed
switch(effect_type)
{
case RC_POST_PROCESS_BLOOM:
{
IPostProcessBloom *Bloom = (IPostProcessBloom*) rc_canvas[canvas_id].post_effect[effect_id].object;
IPostProcessBloom *Bloom = (IPostProcessBloom*) rc_canvas[canvas_id].post_effect.object;
Bloom->callback->sampleDist = (float)dist;
}
break;
case RC_POST_PROCESS_BLUR:
{
IPostProcessBlur *Blur = (IPostProcessBlur*) rc_canvas[canvas_id].post_effect[effect_id].object;
IPostProcessBlur *Blur = (IPostProcessBlur*) rc_canvas[canvas_id].post_effect.object;
Blur->callback->sampleDist = (float)dist;
}
break;
case RC_POST_PROCESS_RADIAL_BLUR:
{
IPostProcessRadialBlur *Blur = (IPostProcessRadialBlur*) rc_canvas[canvas_id].post_effect[effect_id].object;
IPostProcessRadialBlur *Blur = (IPostProcessRadialBlur*) rc_canvas[canvas_id].post_effect.object;
Blur->callback->sampleDist = (float)dist;
}
break;
@@ -1190,21 +1173,18 @@ void rc_setPostEffectDistance(int canvas_id, int effect_id, double dist)
void rc_setPostEffectMultiplier(int canvas_id, int effect_id, double multiplier)
void rc_setPostEffectMultiplier(int canvas_id, double multiplier)
{
if(canvas_id <= 0 || canvas_id >= rc_canvas.size())
return;
if(effect_id < 0 || effect_id >= rc_canvas[canvas_id].post_effect.size())
return;
int effect_type = rc_canvas[canvas_id].post_effect[effect_id].type; //type will be -1 if effect has been removed
int effect_type = rc_canvas[canvas_id].post_effect.type; //type will be -1 if effect has been removed
switch(effect_type)
{
case RC_POST_PROCESS_BLOOM:
{
IPostProcessBloom *Bloom = (IPostProcessBloom*) rc_canvas[canvas_id].post_effect[effect_id].object;
IPostProcessBloom *Bloom = (IPostProcessBloom*) rc_canvas[canvas_id].post_effect.object;
Bloom->callback->multiplier = (float)multiplier;
}
break;
@@ -1212,21 +1192,18 @@ void rc_setPostEffectMultiplier(int canvas_id, int effect_id, double multiplier)
}
void rc_setPostEffectSaturation(int canvas_id, int effect_id, double saturation)
void rc_setPostEffectSaturation(int canvas_id, double saturation)
{
if(canvas_id <= 0 || canvas_id >= rc_canvas.size())
return;
if(effect_id < 0 || effect_id >= rc_canvas[canvas_id].post_effect.size())
return;
int effect_type = rc_canvas[canvas_id].post_effect[effect_id].type; //type will be -1 if effect has been removed
int effect_type = rc_canvas[canvas_id].post_effect.type; //type will be -1 if effect has been removed
switch(effect_type)
{
case RC_POST_PROCESS_COLORIZE:
{
IPostProcessColor * PPE_Color = (IPostProcessColor*) rc_canvas[canvas_id].post_effect[effect_id].object;
IPostProcessColor * PPE_Color = (IPostProcessColor*) rc_canvas[canvas_id].post_effect.object;
PPE_Color->callback->saturation = (float)saturation;
}
break;
@@ -1234,21 +1211,18 @@ void rc_setPostEffectSaturation(int canvas_id, int effect_id, double saturation)
}
void rc_setPostEffectColor(int canvas_id, int effect_id, double c_color)
void rc_setPostEffectColor(int canvas_id, double c_color)
{
if(canvas_id <= 0 || canvas_id >= rc_canvas.size())
return;
if(effect_id < 0 || effect_id >= rc_canvas[canvas_id].post_effect.size())
return;
int effect_type = rc_canvas[canvas_id].post_effect[effect_id].type; //type will be -1 if effect has been removed
int effect_type = rc_canvas[canvas_id].post_effect.type; //type will be -1 if effect has been removed
switch(effect_type)
{
case RC_POST_PROCESS_COLORIZE:
{
IPostProcessColor * PPE_Color = (IPostProcessColor*) rc_canvas[canvas_id].post_effect[effect_id].object;
IPostProcessColor * PPE_Color = (IPostProcessColor*) rc_canvas[canvas_id].post_effect.object;
PPE_Color->callback->col = irr::video::SColorf( irr::video::SColor((irr::u32) c_color) );
}
break;
@@ -1256,37 +1230,37 @@ void rc_setPostEffectColor(int canvas_id, int effect_id, double c_color)
}
void rc_setPostEffectProperty(int canvas_id, int effect_id, int effect_property, double effect_value)
void rc_setPostEffectProperty(int canvas_id, int effect_property, double effect_value)
{
switch(effect_property)
{
case RC_PP_PROPERTY_STRENGTH:
{
rc_setPostEffectStrength(canvas_id, effect_id, effect_value);
rc_setPostEffectStrength(canvas_id, effect_value);
}
break;
case RC_PP_PROPERTY_DISTANCE:
{
rc_setPostEffectDistance(canvas_id, effect_id, effect_value);
rc_setPostEffectDistance(canvas_id, effect_value);
}
break;
case RC_PP_PROPERTY_MULTIPLIER:
{
rc_setPostEffectMultiplier(canvas_id, effect_id, effect_value);
rc_setPostEffectMultiplier(canvas_id, effect_value);
}
break;
case RC_PP_PROPERTY_SATURATION:
{
rc_setPostEffectSaturation(canvas_id, effect_id, effect_value);
rc_setPostEffectSaturation(canvas_id, effect_value);
}
break;
case RC_PP_PROPERTY_COLOR:
{
rc_setPostEffectColor(canvas_id, effect_id, effect_value);
rc_setPostEffectColor(canvas_id, effect_value);
}
break;
}
@@ -1298,49 +1272,46 @@ void rc_setPostEffectProperty(int canvas_id, int effect_id, int effect_property,
double rc_getPostEffectStrength(int canvas_id, int effect_id)
double rc_getPostEffectStrength(int canvas_id)
{
if(canvas_id <= 0 || canvas_id >= rc_canvas.size())
return 0;
if(effect_id < 0 || effect_id >= rc_canvas[canvas_id].post_effect.size())
return 0;
int effect_type = rc_canvas[canvas_id].post_effect[effect_id].type; //type will be -1 if effect has been removed
int effect_type = rc_canvas[canvas_id].post_effect.type; //type will be -1 if effect has been removed
switch(effect_type)
{
case RC_POST_PROCESS_BLOOM:
{
IPostProcessBloom *Bloom = (IPostProcessBloom*) rc_canvas[canvas_id].post_effect[effect_id].object;
IPostProcessBloom *Bloom = (IPostProcessBloom*) rc_canvas[canvas_id].post_effect.object;
return (double)Bloom->callback->strength;
}
break;
case RC_POST_PROCESS_COLORIZE:
{
IPostProcessColor * PPE_Color = (IPostProcessColor*) rc_canvas[canvas_id].post_effect[effect_id].object;
IPostProcessColor * PPE_Color = (IPostProcessColor*) rc_canvas[canvas_id].post_effect.object;
return (double)PPE_Color->callback->coloringStrength;
}
break;
case RC_POST_PROCESS_MOTION_BLUR:
{
IPostProcessMotionBlur *Blur = (IPostProcessMotionBlur*) rc_canvas[canvas_id].post_effect[effect_id].object;
IPostProcessMotionBlur *Blur = (IPostProcessMotionBlur*) rc_canvas[canvas_id].post_effect.object;
return (double)Blur->callback->strength;
}
break;
case RC_POST_PROCESS_RADIAL_BLUR:
{
IPostProcessRadialBlur *Blur = (IPostProcessRadialBlur*) rc_canvas[canvas_id].post_effect[effect_id].object;
IPostProcessRadialBlur *Blur = (IPostProcessRadialBlur*) rc_canvas[canvas_id].post_effect.object;
return (double)Blur->callback->sampleStrength;
}
break;
case RC_POST_PROCESS_DISTORTION:
{
IPostProcessGlass *Glass = (IPostProcessGlass*) rc_canvas[canvas_id].post_effect[effect_id].object;
IPostProcessGlass *Glass = (IPostProcessGlass*) rc_canvas[canvas_id].post_effect.object;
return (double)Glass->callback->strength;
}
break;
@@ -1350,35 +1321,32 @@ double rc_getPostEffectStrength(int canvas_id, int effect_id)
}
double rc_getPostEffectDistance(int canvas_id, int effect_id)
double rc_getPostEffectDistance(int canvas_id)
{
if(canvas_id <= 0 || canvas_id >= rc_canvas.size())
return 0;
if(effect_id < 0 || effect_id >= rc_canvas[canvas_id].post_effect.size())
return 0;
int effect_type = rc_canvas[canvas_id].post_effect[effect_id].type; //type will be -1 if effect has been removed
int effect_type = rc_canvas[canvas_id].post_effect.type; //type will be -1 if effect has been removed
switch(effect_type)
{
case RC_POST_PROCESS_BLOOM:
{
IPostProcessBloom *Bloom = (IPostProcessBloom*) rc_canvas[canvas_id].post_effect[effect_id].object;
IPostProcessBloom *Bloom = (IPostProcessBloom*) rc_canvas[canvas_id].post_effect.object;
return (double)Bloom->callback->sampleDist;
}
break;
case RC_POST_PROCESS_BLUR:
{
IPostProcessBlur *Blur = (IPostProcessBlur*) rc_canvas[canvas_id].post_effect[effect_id].object;
IPostProcessBlur *Blur = (IPostProcessBlur*) rc_canvas[canvas_id].post_effect.object;
return (double)Blur->callback->sampleDist;
}
break;
case RC_POST_PROCESS_RADIAL_BLUR:
{
IPostProcessRadialBlur *Blur = (IPostProcessRadialBlur*) rc_canvas[canvas_id].post_effect[effect_id].object;
IPostProcessRadialBlur *Blur = (IPostProcessRadialBlur*) rc_canvas[canvas_id].post_effect.object;
return (double)Blur->callback->sampleDist;
}
break;
@@ -1389,21 +1357,18 @@ double rc_getPostEffectDistance(int canvas_id, int effect_id)
double rc_getPostEffectMultiplier(int canvas_id, int effect_id)
double rc_getPostEffectMultiplier(int canvas_id)
{
if(canvas_id <= 0 || canvas_id >= rc_canvas.size())
return 0;
if(effect_id < 0 || effect_id >= rc_canvas[canvas_id].post_effect.size())
return 0;
int effect_type = rc_canvas[canvas_id].post_effect[effect_id].type; //type will be -1 if effect has been removed
int effect_type = rc_canvas[canvas_id].post_effect.type; //type will be -1 if effect has been removed
switch(effect_type)
{
case RC_POST_PROCESS_BLOOM:
{
IPostProcessBloom *Bloom = (IPostProcessBloom*) rc_canvas[canvas_id].post_effect[effect_id].object;
IPostProcessBloom *Bloom = (IPostProcessBloom*) rc_canvas[canvas_id].post_effect.object;
return (double)Bloom->callback->multiplier;
}
break;
@@ -1413,21 +1378,18 @@ double rc_getPostEffectMultiplier(int canvas_id, int effect_id)
}
double rc_getPostEffectSaturation(int canvas_id, int effect_id)
double rc_getPostEffectSaturation(int canvas_id)
{
if(canvas_id <= 0 || canvas_id >= rc_canvas.size())
return 0;
if(effect_id < 0 || effect_id >= rc_canvas[canvas_id].post_effect.size())
return 0;
int effect_type = rc_canvas[canvas_id].post_effect[effect_id].type; //type will be -1 if effect has been removed
int effect_type = rc_canvas[canvas_id].post_effect.type; //type will be -1 if effect has been removed
switch(effect_type)
{
case RC_POST_PROCESS_COLORIZE:
{
IPostProcessColor * PPE_Color = (IPostProcessColor*) rc_canvas[canvas_id].post_effect[effect_id].object;
IPostProcessColor * PPE_Color = (IPostProcessColor*) rc_canvas[canvas_id].post_effect.object;
return (double)PPE_Color->callback->saturation;
}
break;
@@ -1437,21 +1399,18 @@ double rc_getPostEffectSaturation(int canvas_id, int effect_id)
}
double rc_getPostEffectColor(int canvas_id, int effect_id)
double rc_getPostEffectColor(int canvas_id)
{
if(canvas_id <= 0 || canvas_id >= rc_canvas.size())
return 0;
if(effect_id < 0 || effect_id >= rc_canvas[canvas_id].post_effect.size())
return 0;
int effect_type = rc_canvas[canvas_id].post_effect[effect_id].type; //type will be -1 if effect has been removed
int effect_type = rc_canvas[canvas_id].post_effect.type; //type will be -1 if effect has been removed
switch(effect_type)
{
case RC_POST_PROCESS_COLORIZE:
{
IPostProcessColor * PPE_Color = (IPostProcessColor*) rc_canvas[canvas_id].post_effect[effect_id].object;
IPostProcessColor * PPE_Color = (IPostProcessColor*) rc_canvas[canvas_id].post_effect.object;
return (double)PPE_Color->callback->col.toSColor().color;
}
break;
@@ -1461,37 +1420,37 @@ double rc_getPostEffectColor(int canvas_id, int effect_id)
}
double rc_getPostEffectProperty(int canvas_id, int effect_id, int effect_property)
double rc_getPostEffectProperty(int canvas_id, int effect_property)
{
switch(effect_property)
{
case RC_PP_PROPERTY_STRENGTH:
{
return rc_getPostEffectStrength(canvas_id, effect_id);
return rc_getPostEffectStrength(canvas_id);
}
break;
case RC_PP_PROPERTY_DISTANCE:
{
return rc_getPostEffectDistance(canvas_id, effect_id);
return rc_getPostEffectDistance(canvas_id);
}
break;
case RC_PP_PROPERTY_MULTIPLIER:
{
return rc_getPostEffectMultiplier(canvas_id, effect_id);
return rc_getPostEffectMultiplier(canvas_id);
}
break;
case RC_PP_PROPERTY_SATURATION:
{
return rc_getPostEffectSaturation(canvas_id, effect_id);
return rc_getPostEffectSaturation(canvas_id);
}
break;
case RC_PP_PROPERTY_COLOR:
{
return rc_getPostEffectColor(canvas_id, effect_id);
return rc_getPostEffectColor(canvas_id);
}
break;
}
@@ -1500,84 +1459,78 @@ double rc_getPostEffectProperty(int canvas_id, int effect_id, int effect_propert
}
void rc_setPostEffectActive(int canvas_id, int effect_id, bool flag)
void rc_setPostEffectActive(int canvas_id, bool flag)
{
if(canvas_id <= 0 || canvas_id >= rc_canvas.size())
return;
if(effect_id < 0 || effect_id >= rc_canvas[canvas_id].post_effect.size())
return;
rc_canvas[canvas_id].post_effect[effect_id].is_active = flag;
rc_canvas[canvas_id].post_effect.is_active = flag;
}
bool rc_postEffectIsActive(int canvas_id, int effect_id)
bool rc_postEffectIsActive(int canvas_id)
{
if(canvas_id <= 0 || canvas_id >= rc_canvas.size())
return false;
if(effect_id < 0 || effect_id >= rc_canvas[canvas_id].post_effect.size())
return false;
return rc_canvas[canvas_id].post_effect[effect_id].is_active;
return rc_canvas[canvas_id].post_effect.is_active;
}
void rc_renderPostEffect(int canvas_id, int effect_id)
void rc_renderPostEffect(int canvas_id)
{
if(!rc_canvas[canvas_id].post_effect[effect_id].is_active)
if(!rc_canvas[canvas_id].post_effect.is_active)
return;
int effect_type = rc_canvas[canvas_id].post_effect[effect_id].type; //type will be -1 if effect has been removed
int effect_type = rc_canvas[canvas_id].post_effect.type; //type will be -1 if effect has been removed
switch(effect_type)
{
case RC_POST_PROCESS_BLOOM:
{
IPostProcessBloom *Bloom = (IPostProcessBloom*) rc_canvas[canvas_id].post_effect[effect_id].object;
IPostProcessBloom *Bloom = (IPostProcessBloom*) rc_canvas[canvas_id].post_effect.object;
Bloom->render();
}
break;
case RC_POST_PROCESS_BLUR:
{
IPostProcessBlur *Blur = (IPostProcessBlur*) rc_canvas[canvas_id].post_effect[effect_id].object;
IPostProcessBlur *Blur = (IPostProcessBlur*) rc_canvas[canvas_id].post_effect.object;
Blur->render();
}
break;
case RC_POST_PROCESS_COLORIZE:
{
IPostProcessColor * PPE_Color = (IPostProcessColor*) rc_canvas[canvas_id].post_effect[effect_id].object;
IPostProcessColor * PPE_Color = (IPostProcessColor*) rc_canvas[canvas_id].post_effect.object;
PPE_Color->render();
}
break;
case RC_POST_PROCESS_INVERT:
{
IPostProcessInvert *Invert = (IPostProcessInvert*) rc_canvas[canvas_id].post_effect[effect_id].object;
IPostProcessInvert *Invert = (IPostProcessInvert*) rc_canvas[canvas_id].post_effect.object;
Invert->render();
}
break;
case RC_POST_PROCESS_MOTION_BLUR:
{
IPostProcessMotionBlur *Blur = (IPostProcessMotionBlur*) rc_canvas[canvas_id].post_effect[effect_id].object;
Blur->render();
IPostProcessMotionBlur *Blur = (IPostProcessMotionBlur*) rc_canvas[canvas_id].post_effect.object;
Blur->renderFinal();
}
break;
case RC_POST_PROCESS_RADIAL_BLUR:
{
IPostProcessRadialBlur *Blur = (IPostProcessRadialBlur*) rc_canvas[canvas_id].post_effect[effect_id].object;
IPostProcessRadialBlur *Blur = (IPostProcessRadialBlur*) rc_canvas[canvas_id].post_effect.object;
Blur->render();
}
break;
case RC_POST_PROCESS_DISTORTION:
{
IPostProcessGlass *Glass = (IPostProcessGlass*) rc_canvas[canvas_id].post_effect[effect_id].object;
IPostProcessGlass *Glass = (IPostProcessGlass*) rc_canvas[canvas_id].post_effect.object;
Glass->render();
}
break;

View File

@@ -114,7 +114,47 @@ void rc_pipeline_Render()
if(rc_canvas[rc_active_canvas].show3D)
{
//VideoDriver->setRenderTarget(rc_canvas[rc_active_canvas].texture, true, true, irr::video::SColor(255,120,120,120));
if(rc_canvas[rc_active_canvas].post_effect.is_active)
{
if(rc_canvas[rc_active_canvas].post_effect.type == RC_POST_PROCESS_DISTORTION)
{
IPostProcessGlass* post_process = (IPostProcessGlass*) rc_canvas[rc_active_canvas].post_effect.object;
VideoDriver->setRenderTarget(post_process->rt0, true, true);
}
else if(rc_canvas[rc_active_canvas].post_effect.type == RC_POST_PROCESS_BLOOM)
{
IPostProcessBloom* post_process = (IPostProcessBloom*) rc_canvas[rc_active_canvas].post_effect.object;
VideoDriver->setRenderTarget(post_process->rt0, true, true);
}
else if(rc_canvas[rc_active_canvas].post_effect.type == RC_POST_PROCESS_BLUR)
{
IPostProcessBlur* post_process = (IPostProcessBlur*) rc_canvas[rc_active_canvas].post_effect.object;
VideoDriver->setRenderTarget(post_process->rt0, true, true);
}
else if(rc_canvas[rc_active_canvas].post_effect.type == RC_POST_PROCESS_COLORIZE)
{
IPostProcessColor* post_process = (IPostProcessColor*) rc_canvas[rc_active_canvas].post_effect.object;
VideoDriver->setRenderTarget(post_process->rt0, true, true);
}
else if(rc_canvas[rc_active_canvas].post_effect.type == RC_POST_PROCESS_INVERT)
{
IPostProcessInvert* post_process = (IPostProcessInvert*) rc_canvas[rc_active_canvas].post_effect.object;
VideoDriver->setRenderTarget(post_process->rt0, true, true, irr::video::SColor(0,0,0,0));
}
else if(rc_canvas[rc_active_canvas].post_effect.type == RC_POST_PROCESS_RADIAL_BLUR)
{
IPostProcessRadialBlur* post_process = (IPostProcessRadialBlur*) rc_canvas[rc_active_canvas].post_effect.object;
VideoDriver->setRenderTarget(post_process->rt0, true, true);
}
else
{
VideoDriver->setRenderTarget(rc_canvas[rc_active_canvas].texture, true, true, rc_clear_color);
}
}
else
{
VideoDriver->setRenderTarget(rc_canvas[rc_active_canvas].texture, true, true, rc_clear_color);
}
if(rc_canvas[rc_active_canvas].camera.camera)
SceneManager->setActiveCamera(rc_canvas[rc_active_canvas].camera.camera);
@@ -153,7 +193,16 @@ void rc_pipeline_Render()
rc_active_color = current_color;
rc_setDriverMaterial();
SceneManager->drawAll();
if(rc_canvas[rc_active_canvas].post_effect.type == RC_POST_PROCESS_MOTION_BLUR && rc_canvas[rc_active_canvas].post_effect.is_active)
{
//render motion blur
IPostProcessMotionBlur* post_process = (IPostProcessMotionBlur*) rc_canvas[rc_active_canvas].post_effect.object;
post_process->render();
}
else
{
SceneManager->drawAll();
}
for(int p_actor = 0; p_actor < rc_projector_actors.size(); p_actor++)
{
@@ -173,9 +222,9 @@ void rc_pipeline_Render()
}
//render post effects
for(int effect_num = 0; effect_num < rc_canvas[rc_active_canvas].post_effect.size(); effect_num++)
if(rc_canvas[rc_active_canvas].post_effect.is_active)
{
rc_renderPostEffect(rc_active_canvas, effect_num); //It won't render if not active so no check needs to be done here
rc_renderPostEffect(rc_active_canvas);
}
}

View File

@@ -542,7 +542,47 @@ bool rc_update()
{
if(rc_canvas[canvas_id].show3D)
{
VideoDriver->setRenderTarget(rc_canvas[canvas_id].texture, true, true, rc_clear_color);
if(rc_canvas[canvas_id].post_effect.is_active)
{
if(rc_canvas[canvas_id].post_effect.type == RC_POST_PROCESS_DISTORTION)
{
IPostProcessGlass* post_process = (IPostProcessGlass*) rc_canvas[canvas_id].post_effect.object;
VideoDriver->setRenderTarget(post_process->rt0, true, true);
}
else if(rc_canvas[canvas_id].post_effect.type == RC_POST_PROCESS_BLOOM)
{
IPostProcessBloom* post_process = (IPostProcessBloom*) rc_canvas[canvas_id].post_effect.object;
VideoDriver->setRenderTarget(post_process->rt0, true, true);
}
else if(rc_canvas[canvas_id].post_effect.type == RC_POST_PROCESS_BLUR)
{
IPostProcessBlur* post_process = (IPostProcessBlur*) rc_canvas[canvas_id].post_effect.object;
VideoDriver->setRenderTarget(post_process->rt0, true, true);
}
else if(rc_canvas[canvas_id].post_effect.type == RC_POST_PROCESS_COLORIZE)
{
IPostProcessColor* post_process = (IPostProcessColor*) rc_canvas[canvas_id].post_effect.object;
VideoDriver->setRenderTarget(post_process->rt0, true, true);
}
else if(rc_canvas[canvas_id].post_effect.type == RC_POST_PROCESS_INVERT)
{
IPostProcessInvert* post_process = (IPostProcessInvert*) rc_canvas[canvas_id].post_effect.object;
VideoDriver->setRenderTarget(post_process->rt0, true, true, irr::video::SColor(0,0,0,0));
}
else if(rc_canvas[canvas_id].post_effect.type == RC_POST_PROCESS_RADIAL_BLUR)
{
IPostProcessRadialBlur* post_process = (IPostProcessRadialBlur*) rc_canvas[canvas_id].post_effect.object;
VideoDriver->setRenderTarget(post_process->rt0, true, true);
}
else
{
VideoDriver->setRenderTarget(rc_canvas[canvas_id].texture, true, true, rc_clear_color);
}
}
else
{
VideoDriver->setRenderTarget(rc_canvas[canvas_id].texture, true, true, rc_clear_color);
}
if(rc_canvas[canvas_id].camera.camera)
SceneManager->setActiveCamera(rc_canvas[canvas_id].camera.camera);
@@ -583,7 +623,16 @@ bool rc_update()
rc_active_color = current_color;
rc_setDriverMaterial();
SceneManager->drawAll();
if(rc_canvas[canvas_id].post_effect.type == RC_POST_PROCESS_MOTION_BLUR && rc_canvas[canvas_id].post_effect.is_active)
{
//render motion blur
IPostProcessMotionBlur* post_process = (IPostProcessMotionBlur*) rc_canvas[canvas_id].post_effect.object;
post_process->render();
}
else
{
SceneManager->drawAll();
}
for(int p_actor = 0; p_actor < rc_projector_actors.size(); p_actor++)
{
@@ -603,9 +652,10 @@ bool rc_update()
}
//render post effects
for(int effect_num = 0; effect_num < rc_canvas[rc_active_canvas].post_effect.size(); effect_num++)
if(rc_canvas[canvas_id].post_effect.is_active)
{
rc_renderPostEffect(canvas_id, effect_num); //It won't render if not active so no check needs to be done here
VideoDriver->setRenderTarget(rc_canvas[canvas_id].texture, true, true, rc_clear_color);
rc_renderPostEffect(canvas_id);
}
//VideoDriver->draw2DRectangle(irr::video::SColor(255,0,255,0), irr::core::rect<irr::s32>(10,40,100,500));

View File

@@ -1,5 +1,5 @@
# depslib dependency file v1.0
1762838155 source:/home/n00b/Projects/RCBASIC4/rcbasic_runtime/main.cpp
1763866998 source:/home/n00b/Projects/RCBASIC4/rcbasic_runtime/main.cpp
"rc_os_defines.h"
<emscripten.h>
<sys/param.h>
@@ -34,10 +34,10 @@
<irrtheora.h>
"rc_func130_cases.h"
1759134832 /home/n00b/Projects/RCBASIC4/rcbasic_runtime/rc_os_defines.h
1763866870 /home/n00b/Projects/RCBASIC4/rcbasic_runtime/rc_os_defines.h
<TargetConditionals.h>
1763784345 /home/n00b/Projects/RCBASIC4/rcbasic_runtime/rc_defines.h
1763875558 /home/n00b/Projects/RCBASIC4/rcbasic_runtime/rc_defines.h
1763522526 /home/n00b/Projects/RCBASIC4/rcbasic_runtime/rc_stdlib.h
"rc_os_defines.h"
@@ -1249,7 +1249,7 @@
1734372058 /home/n00b/Projects/RCBASIC4/rcbasic_runtime/RealisticWater.h
<irrlicht.h>
1763708323 /home/n00b/Projects/RCBASIC4/rcbasic_runtime/rc_gfx.h
1763874908 /home/n00b/Projects/RCBASIC4/rcbasic_runtime/rc_gfx.h
"SDL.h"
<SDL2/SDL.h>
<irrlicht.h>
@@ -1274,7 +1274,7 @@
"rc_post_fx.h"
<irrtheora.h>
1763707267 /home/n00b/Projects/RCBASIC4/rcbasic_runtime/rc_gfx_core.h
1763871259 /home/n00b/Projects/RCBASIC4/rcbasic_runtime/rc_gfx_core.h
"SDL.h"
"btBulletDynamicsCommon.h"
"BulletSoftBody/btSoftRigidDynamicsWorld.h"
@@ -2279,7 +2279,7 @@
"rc_gfx_core.h"
<irrtheora.h>
1763784345 /home/n00b/Projects/RCBASIC4/rcbasic_runtime/rc_func130_cases.h
1763875558 /home/n00b/Projects/RCBASIC4/rcbasic_runtime/rc_func130_cases.h
1760243468 source:/home/n00b/Projects/irrBullet/src/irrBullet.cpp
"irrBullet.h"
@@ -2552,7 +2552,7 @@
1758412944 /home/n00b/Projects/RCBASIC4/rcbasic_runtime/rc_camera.h
1763708061 /home/n00b/Projects/RCBASIC4/rcbasic_runtime/rc_windowclose.h
1763889169 /home/n00b/Projects/RCBASIC4/rcbasic_runtime/rc_windowclose.h
1650940764 /usr/include/bullet/BulletCollision/NarrowPhaseCollision/btRaycastCallback.h
"BulletCollision/CollisionShapes/btTriangleCallback.h"
@@ -2746,12 +2746,12 @@
<sstream>
"rc_steam.h"
1763708113 /home/n00b/Projects/RCBASIC4/rcbasic_runtime/rc_render_control.h
1763888014 /home/n00b/Projects/RCBASIC4/rcbasic_runtime/rc_render_control.h
<irrlicht.h>
"rc_gfx_core.h"
"rc_post_fx.h"
1762838223 /home/n00b/Projects/RCBASIC4/rcbasic_runtime/rc_post_fx.h
1763885109 /home/n00b/Projects/RCBASIC4/rcbasic_runtime/rc_post_fx.h
<irrlicht.h>
<cstdlib>
"rc_gfx_core.h"