From f191b170379e5ae7f237aa2f7adae5f387caaa35 Mon Sep 17 00:00:00 2001 From: Tim Redfern Date: Tue, 25 Jun 2013 12:46:38 +0100 Subject: blend node/ blend, subtract, multiply modes --- rotord/rotor.h | 63 +++++++++++++++++++++++++++++++++++++++------------------- 1 file changed, 43 insertions(+), 20 deletions(-) (limited to 'rotord') diff --git a/rotord/rotor.h b/rotord/rotor.h index 0c16df7..cb1e815 100755 --- a/rotord/rotor.h +++ b/rotord/rotor.h @@ -119,19 +119,19 @@ namespace Rotor { //so - pixels.add[0x78][0x66]; will give the precalculated result of adding with saturation public: pixeltables(){ - add=new uint8_t*[0xFF]; - multiply=new uint8_t*[0xFF]; - for (int i=0;i<0xFF;i++){ - add[i]=new uint8_t[0xFF]; - multiply[i]=new uint8_t[0xFF]; - for (int j=0;j<0xFF;j++){ + add=new uint8_t*[256]; + multiply=new uint8_t*[256]; + for (int i=0;i<256;i++){ + add[i]=new uint8_t[256]; + multiply[i]=new uint8_t[256]; + for (int j=0;j<256;j++){ add[i][j]=(uint8_t)min(i+j,0xFF); multiply[i][j]=(uint8_t)((((float)i)/255.0f)*(((float)j)/255.0f)*255.0f); } } } virtual ~pixeltables(){ - for (int i=0;i<0xFF;i++){ + for (int i=0;i<256;i++){ delete[] add[i]; delete[] multiply[i]; } @@ -265,6 +265,8 @@ namespace Rotor { else { for (int i=0;i &settings) { base_settings(settings); }; - ~Video_output(){ }; + ~Video_output(){ }; Image *output(const Frame_spec &frame){ if (image_inputs[0]->connection) { return ((Image_node*)(image_inputs[0]->connection))->get_output(frame); @@ -854,7 +871,7 @@ namespace Rotor { palette.push_back(Colour(colours.substr(i*6,6))); } for (auto i: palette) { - cerr << "Signal_colour found palette colour: "<<(int)i.r<<" "<<(int)i.g<<" "<<(int)i.b<receiver=&value; } } - + }; ~Image_arithmetic(){if (image) delete image;}; Image *output(const Frame_spec &frame){ @@ -1183,6 +1200,7 @@ namespace Rotor { if (_mode=="screen") mode=BLEND_screen; if (_mode=="multiply") mode=BLEND_multiply; if (_mode=="blend") mode=BLEND_blend; + cerr<<"blend node: mode: "<connection){ - if (inputs.size()>1) { + if (image_inputs.size()>1) { if (image_inputs[1]->connection) { //copy incoming image **writable image->free(); @@ -1206,7 +1224,12 @@ namespace Rotor { case BLEND_multiply: (*image)*=(*(((Image_node*)image_inputs[1]->connection)->get_output(frame))); break; - + case BLEND_blend: + (*image)*=(1.0f-amount); + Image *in=(*(((Image_node*)image_inputs[1]->connection)->get_output(frame)))*amount; + (*image)+=(*in); + delete in; + break; } return image; } -- cgit v1.2.3