diff options
author | Hamed Zaghaghi <hamed.zaghaghi@gmail.com> | 2007-11-06 15:16:12 +0300 |
---|---|---|
committer | Hamed Zaghaghi <hamed.zaghaghi@gmail.com> | 2007-11-06 15:16:12 +0300 |
commit | af169b41fda5fe05d62655b782674eda2bc565e7 (patch) | |
tree | f70303d83032dffdeca399e97659cfa91fcc5d0a /source | |
parent | aa774427f64916ef5713c01c5d23657b61a80003 (diff) |
2d Filters updated, now you can use custom filter and write your own GLSL shader program to filter rendering result.
Diffstat (limited to 'source')
23 files changed, 176 insertions, 105 deletions
diff --git a/source/blender/blenloader/intern/readfile.c b/source/blender/blenloader/intern/readfile.c index b5cad264177..4b588c690e0 100644 --- a/source/blender/blenloader/intern/readfile.c +++ b/source/blender/blenloader/intern/readfile.c @@ -2820,7 +2820,8 @@ static void lib_link_object(FileData *fd, Main *main) ma->toObject= newlibadr(fd, ob->id.lib, ma->toObject); } else if(act->type==ACT_2DFILTER){ - /* bTwoDFilterActuator *_2dfa = act->data; */ + bTwoDFilterActuator *_2dfa = act->data; + _2dfa->text= newlibadr(fd, ob->id.lib, _2dfa->text); } act= act->next; } diff --git a/source/blender/makesdna/DNA_actuator_types.h b/source/blender/makesdna/DNA_actuator_types.h index bc847958fdf..0d324b7d5d3 100644 --- a/source/blender/makesdna/DNA_actuator_types.h +++ b/source/blender/makesdna/DNA_actuator_types.h @@ -38,6 +38,7 @@ struct Object; struct Mesh; struct Scene; struct Group; +struct Text; /* ****************** ACTUATORS ********************* */ @@ -192,14 +193,16 @@ typedef struct bVisibilityActuator { } bVisibilityActuator; typedef struct bTwoDFilterActuator{ + char pad[4]; /* Tells what type of 2D Filter*/ short type; /* (flag == 0) means 2D filter is activate and (flag != 0) means 2D filter is inactive*/ short flag; + int int_arg; /* a float argument */ float float_arg; - int int_arg; + struct Text *text; }bTwoDFilterActuator; typedef struct bActuator { @@ -404,19 +407,22 @@ typedef struct FreeCamera { #define ACT_VISIBILITY_INVISIBLE (1 << 0) /* twodfilter->type */ -#define ACT_2DFILTER_NOFILTER -1 -#define ACT_2DFILTER_MOTIONBLUR 0 -#define ACT_2DFILTER_BLUR 1 -#define ACT_2DFILTER_SHARPEN 2 -#define ACT_2DFILTER_DILATION 3 -#define ACT_2DFILTER_EROSION 4 -#define ACT_2DFILTER_LAPLACIAN 5 -#define ACT_2DFILTER_SOBEL 6 -#define ACT_2DFILTER_PREWITT 7 -#define ACT_2DFILTER_GRAYSCALE 8 -#define ACT_2DFILTER_SEPIA 9 -#define ACT_2DFILTER_INVERT 10 -#define ACT_2DFILTER_NUMBER_OF_FILTERS 11 +#define ACT_2DFILTER_ENABLED -2 +#define ACT_2DFILTER_DISABLED -1 +#define ACT_2DFILTER_NOFILTER 0 +#define ACT_2DFILTER_MOTIONBLUR 1 +#define ACT_2DFILTER_BLUR 2 +#define ACT_2DFILTER_SHARPEN 3 +#define ACT_2DFILTER_DILATION 4 +#define ACT_2DFILTER_EROSION 5 +#define ACT_2DFILTER_LAPLACIAN 6 +#define ACT_2DFILTER_SOBEL 7 +#define ACT_2DFILTER_PREWITT 8 +#define ACT_2DFILTER_GRAYSCALE 9 +#define ACT_2DFILTER_SEPIA 10 +#define ACT_2DFILTER_INVERT 11 +#define ACT_2DFILTER_CUSTOMFILTER 12 +#define ACT_2DFILTER_NUMBER_OF_FILTERS 13 #endif diff --git a/source/blender/src/buttons_logic.c b/source/blender/src/buttons_logic.c index e457e44bd63..819f7bbaa24 100644 --- a/source/blender/src/buttons_logic.c +++ b/source/blender/src/buttons_logic.c @@ -2178,7 +2178,11 @@ static short draw_actuatorbuttons(bActuator *act, uiBlock *block, short xco, sho case ACT_2DFILTER: tdfa = act->data; - ysize= 50; + ysize = 50; + if(tdfa->type == ACT_2DFILTER_CUSTOMFILTER) + { + ysize +=20; + } glRects( xco, yco-ysize, xco+width, yco ); uiEmboss( (float)xco, (float)yco-ysize, (float)xco+width, (float)yco, 1 ); @@ -2206,12 +2210,19 @@ static short draw_actuatorbuttons(bActuator *act, uiBlock *block, short xco, sho case ACT_2DFILTER_SEPIA: case ACT_2DFILTER_INVERT: case ACT_2DFILTER_NOFILTER: - uiDefButI(block, NUM, B_REDR, "Pass Number:", xco+30,yco-44,width-60,19,&tdfa->int_arg,-1.0,MAX_RENDER_PASS-1,0.0,0.0,"Set motion blur value"); + case ACT_2DFILTER_DISABLED: + case ACT_2DFILTER_ENABLED: + uiDefButI(block, NUM, B_REDR, "Pass Number:", xco+30,yco-44,width-60,19,&tdfa->int_arg,0.0,MAX_RENDER_PASS-1,0.0,0.0,"Set motion blur value"); + break; + case ACT_2DFILTER_CUSTOMFILTER: + uiDefButI(block, NUM, B_REDR, "Pass Number:", xco+30,yco-44,width-60,19,&tdfa->int_arg,0.0,MAX_RENDER_PASS-1,0.0,0.0,"Set motion blur value"); + uiDefIDPoinBut(block, test_scriptpoin_but, ID_SCRIPT, 1, "Script: ", xco+30,yco-64,width-60, 19, &tdfa->text, ""); break; } - str= "2D Filter %t|Motion Blur %x0|Blur %x1|Sharpen %x2|Dilation %x3|Erosion %x4|" - "Laplacian %x5|Sobel %x6|Prewitt %x7|Gray Scale %x8|Sepia %x9|Invert %x10|No Filter %x-1|"; + str= "2D Filter %t|Motion Blur %x1|Blur %x2|Sharpen %x3|Dilation %x4|Erosion %x5|" + "Laplacian %x6|Sobel %x7|Prewitt %x8|Gray Scale %x9|Sepia %x10|Invert %x11|Custom Filter %x12|" + "Enable Filter %x-2|Disable Filter %x-1|Remove Filter %x0|"; uiDefButS(block, MENU, B_REDR, str, xco+30,yco-24,width-60, 19, &tdfa->type, 0.0, 0.0, 0.0, 0.0, "2D filter type"); yco -= ysize; diff --git a/source/gameengine/BlenderRoutines/KX_BlenderRenderTools.cpp b/source/gameengine/BlenderRoutines/KX_BlenderRenderTools.cpp index 06d869a9396..7e32ade37f2 100644 --- a/source/gameengine/BlenderRoutines/KX_BlenderRenderTools.cpp +++ b/source/gameengine/BlenderRoutines/KX_BlenderRenderTools.cpp @@ -475,9 +475,9 @@ void KX_BlenderRenderTools::MotionBlur(RAS_IRasterizer* rasterizer) } } -void KX_BlenderRenderTools::Update2DFilter(RAS_2DFilterManager::RAS_2DFILTER_MODE filtermode, int pass) +void KX_BlenderRenderTools::Update2DFilter(RAS_2DFilterManager::RAS_2DFILTER_MODE filtermode, int pass, STR_String& text) { - m_filtermanager.EnableFilter(filtermode, pass); + m_filtermanager.EnableFilter(filtermode, pass, text); } void KX_BlenderRenderTools::Render2DFilters(RAS_ICanvas* canvas) diff --git a/source/gameengine/BlenderRoutines/KX_BlenderRenderTools.h b/source/gameengine/BlenderRoutines/KX_BlenderRenderTools.h index b67b7c8161f..3c2d4ac8e35 100644 --- a/source/gameengine/BlenderRoutines/KX_BlenderRenderTools.h +++ b/source/gameengine/BlenderRoutines/KX_BlenderRenderTools.h @@ -104,7 +104,7 @@ public: virtual void MotionBlur(RAS_IRasterizer* rasterizer); - virtual void Update2DFilter(RAS_2DFilterManager::RAS_2DFILTER_MODE filtermode, int pass); + virtual void Update2DFilter(RAS_2DFilterManager::RAS_2DFILTER_MODE filtermode, int pass, STR_String& text); virtual void Render2DFilters(RAS_ICanvas* canvas); diff --git a/source/gameengine/Converter/KX_ConvertActuators.cpp b/source/gameengine/Converter/KX_ConvertActuators.cpp index e29a1729fc3..89a07abe21d 100644 --- a/source/gameengine/Converter/KX_ConvertActuators.cpp +++ b/source/gameengine/Converter/KX_ConvertActuators.cpp @@ -37,6 +37,8 @@ #define BLENDER_HACK_DTIME 0.02 +#include "MEM_guardedalloc.h" + #include "KX_BlenderSceneConverter.h" #include "KX_ConvertActuators.h" @@ -70,7 +72,7 @@ #include "KX_GameObject.h" /* This little block needed for linking to Blender... */ - +#include "BKE_text.h" #include "BLI_blenlib.h" #include "KX_NetworkMessageActuator.h" @@ -879,9 +881,18 @@ void BL_ConvertActuators(char* maggiename, case ACT_2DFILTER_INVERT: filtermode = RAS_2DFilterManager::RAS_2DFILTER_INVERT; break; + case ACT_2DFILTER_CUSTOMFILTER: + filtermode = RAS_2DFilterManager::RAS_2DFILTER_CUSTOMFILTER; + break; case ACT_2DFILTER_NOFILTER: filtermode = RAS_2DFilterManager::RAS_2DFILTER_NOFILTER; break; + case ACT_2DFILTER_DISABLED: + filtermode = RAS_2DFilterManager::RAS_2DFILTER_DISABLED; + break; + case ACT_2DFILTER_ENABLED: + filtermode = RAS_2DFilterManager::RAS_2DFILTER_ENABLED; + break; default: filtermode = RAS_2DFilterManager::RAS_2DFILTER_NOFILTER; break; @@ -890,6 +901,18 @@ void BL_ConvertActuators(char* maggiename, tmp = new SCA_2DFilterActuator(gameobj, filtermode, _2dfilter->flag, _2dfilter->float_arg,_2dfilter->int_arg,ketsjiEngine->GetRasterizer(),rendertools); + if (_2dfilter->text) + { + char *buf; + // this is some blender specific code + buf = txt_to_buf(_2dfilter->text); + if (buf) + { + tmp->SetShaderText(STR_String(buf)); + MEM_freeN(buf); + } + } + baseact = tmp; } diff --git a/source/gameengine/GameLogic/SCA_2DFilterActuator.cpp b/source/gameengine/GameLogic/SCA_2DFilterActuator.cpp index 7033ae30ac5..9627ad92c4c 100644 --- a/source/gameengine/GameLogic/SCA_2DFilterActuator.cpp +++ b/source/gameengine/GameLogic/SCA_2DFilterActuator.cpp @@ -8,6 +8,9 @@ #include <iostream> +SCA_2DFilterActuator::~SCA_2DFilterActuator() +{ +} SCA_2DFilterActuator::SCA_2DFilterActuator( SCA_IObject *gameobj, @@ -28,13 +31,13 @@ SCA_2DFilterActuator::SCA_2DFilterActuator( { } - -SCA_2DFilterActuator::~SCA_2DFilterActuator() +void SCA_2DFilterActuator::SetShaderText(STR_String& text) { - + m_shaderText = text; } + CValue* SCA_2DFilterActuator::GetReplica() { SCA_2DFilterActuator* replica = new SCA_2DFilterActuator(*this); @@ -69,7 +72,7 @@ bool SCA_2DFilterActuator::Update() } else if(m_type < RAS_2DFilterManager::RAS_2DFILTER_NUMBER_OF_FILTERS) { - m_rendertools->Update2DFilter(m_type, m_int_arg); + m_rendertools->Update2DFilter(m_type, m_int_arg, m_shaderText); } return true; } diff --git a/source/gameengine/GameLogic/SCA_2DFilterActuator.h b/source/gameengine/GameLogic/SCA_2DFilterActuator.h index f1871c8f093..76df95ac399 100644 --- a/source/gameengine/GameLogic/SCA_2DFilterActuator.h +++ b/source/gameengine/GameLogic/SCA_2DFilterActuator.h @@ -16,6 +16,7 @@ private: short m_flag; float m_float_arg; int m_int_arg; + STR_String m_shaderText; RAS_IRasterizer* m_rasterizer; RAS_IRenderTools* m_rendertools; @@ -32,7 +33,7 @@ public: PyTypeObject* T=&Type ); - + void SetShaderText(STR_String& text); virtual ~SCA_2DFilterActuator(); virtual bool Update(); diff --git a/source/gameengine/GamePlayer/common/GPC_RenderTools.cpp b/source/gameengine/GamePlayer/common/GPC_RenderTools.cpp index ffa8bdb32e7..388882e67e4 100644 --- a/source/gameengine/GamePlayer/common/GPC_RenderTools.cpp +++ b/source/gameengine/GamePlayer/common/GPC_RenderTools.cpp @@ -593,9 +593,9 @@ void GPC_RenderTools::MotionBlur(RAS_IRasterizer* rasterizer) } } -void GPC_RenderTools::Update2DFilter(RAS_2DFilterManager::RAS_2DFILTER_MODE filtermode, int pass) +void GPC_RenderTools::Update2DFilter(RAS_2DFilterManager::RAS_2DFILTER_MODE filtermode, int pass, STR_String& text) { - m_filtermanager.EnableFilter(filtermode, pass); + m_filtermanager.EnableFilter(filtermode, pass, text); } void GPC_RenderTools::Render2DFilters(RAS_ICanvas* canvas) diff --git a/source/gameengine/GamePlayer/common/GPC_RenderTools.h b/source/gameengine/GamePlayer/common/GPC_RenderTools.h index 4b1e990b717..d90f0e5da45 100644 --- a/source/gameengine/GamePlayer/common/GPC_RenderTools.h +++ b/source/gameengine/GamePlayer/common/GPC_RenderTools.h @@ -152,7 +152,7 @@ public: virtual void MotionBlur(RAS_IRasterizer* rasterizer); - virtual void Update2DFilter(RAS_2DFilterManager::RAS_2DFILTER_MODE filtermode, int pass); + virtual void Update2DFilter(RAS_2DFilterManager::RAS_2DFILTER_MODE filtermode, int pass, STR_String& text); virtual void Render2DFilters(RAS_ICanvas* canvas); diff --git a/source/gameengine/Rasterizer/RAS_2DFilterManager.cpp b/source/gameengine/Rasterizer/RAS_2DFilterManager.cpp index 740a4d7a6b3..8576ea1487c 100644 --- a/source/gameengine/Rasterizer/RAS_2DFilterManager.cpp +++ b/source/gameengine/Rasterizer/RAS_2DFilterManager.cpp @@ -12,6 +12,7 @@ #include "RAS_OpenGLFilters/RAS_Sepia2DFilter.h" #include "RAS_OpenGLFilters/RAS_Invert2DFilter.h" +#include "STR_String.h" #include "RAS_ICanvas.h" #include "RAS_2DFilterManager.h" #include <iostream> @@ -48,12 +49,11 @@ numberoffilters(0),texname(-1) int passindex; for(passindex =0; passindex<MAX_RENDER_PASS; passindex++) + { m_filters[passindex] = 0; + m_enabled[passindex] = 0; + } - int programindex; - for(programindex=0; programindex<RAS_2DFILTER_NUMBER_OF_FILTERS; programindex++) - m_programs[programindex] = 0; - } RAS_2DFilterManager::~RAS_2DFilterManager() @@ -129,20 +129,31 @@ unsigned int RAS_2DFilterManager::CreateShaderProgram(int filtermode) return 0; } -void RAS_2DFilterManager::StartShaderProgram(int filtermode) +void RAS_2DFilterManager::StartShaderProgram(unsigned int shaderprogram) { GLint uniformLoc; - bgl::blUseProgramObjectARB(m_programs[filtermode]); - uniformLoc = bgl::blGetUniformLocationARB(m_programs[filtermode], "sampler0"); + bgl::blUseProgramObjectARB(shaderprogram); + uniformLoc = bgl::blGetUniformLocationARB(shaderprogram, "bgl_RenderedTexture"); if (uniformLoc != -1) { bgl::blUniform1iARB(uniformLoc, 0); } - uniformLoc = bgl::blGetUniformLocationARB(m_programs[filtermode], "tc_offset"); + uniformLoc = bgl::blGetUniformLocationARB(shaderprogram, "bgl_TextureCoordinateOffset"); if (uniformLoc != -1) { bgl::blUniform2fvARB(uniformLoc, 9, textureoffsets); } + uniformLoc = bgl::blGetUniformLocationARB(shaderprogram, "bgl_RenderedTextureWidth"); + if (uniformLoc != -1) + { + bgl::blUniform1fARB(uniformLoc,texturewidth); + } + uniformLoc = bgl::blGetUniformLocationARB(shaderprogram, "bgl_RenderedTextureHeight"); + if (uniformLoc != -1) + { + bgl::blUniform1fARB(uniformLoc,textureheight); + } + } void RAS_2DFilterManager::EndShaderProgram() @@ -200,7 +211,7 @@ void RAS_2DFilterManager::UpdateOffsetMatrix(int width, int height) void RAS_2DFilterManager::RenderFilters(RAS_ICanvas* canvas) { - if(numberoffilters<=0 || !isshadersupported) + if(!isshadersupported) return; if(canvaswidth != canvas->GetWidth() || canvasheight != canvas->GetHeight()) @@ -213,7 +224,7 @@ void RAS_2DFilterManager::RenderFilters(RAS_ICanvas* canvas) bool first = true; for(passindex =0; passindex<MAX_RENDER_PASS; passindex++) { - if(m_filters[passindex]) + if(m_filters[passindex] && m_enabled[passindex]) { if(first) { @@ -253,33 +264,48 @@ void RAS_2DFilterManager::RenderFilters(RAS_ICanvas* canvas) } } -void RAS_2DFilterManager::EnableFilter(RAS_2DFILTER_MODE mode, int pass) +void RAS_2DFilterManager::EnableFilter(RAS_2DFILTER_MODE mode, int pass, STR_String& text) { if(!isshadersupported) return; - if( pass == -1) + if(pass<0 || pass>=MAX_RENDER_PASS) + return; + + if(mode == RAS_2DFILTER_DISABLED) { - if(m_programs[mode] == 0) - m_programs[mode] = CreateShaderProgram(mode); + m_enabled[pass] = 0; + return; } - else if( pass < MAX_RENDER_PASS ) + + if(mode == RAS_2DFILTER_ENABLED) { - if(mode == RAS_2DFILTER_NOFILTER ) - { - if(m_filters[pass] != 0) - numberoffilters--; - m_filters[pass] = 0; - } - else - { - if(!m_programs[mode]) - m_programs[mode] = CreateShaderProgram(mode); - if(m_programs[mode]) - { - if(m_filters[pass] == 0) - numberoffilters++; - m_filters[pass] = mode; - } - } + m_enabled[pass] = 1; + return; + } + + if(mode == RAS_2DFILTER_NOFILTER) + { + if(m_filters[pass]) + bgl::blDeleteObjectARB(m_filters[pass]); + m_enabled[pass] = 0; + m_filters[pass] = 0; + return; + } + + if(mode == RAS_2DFILTER_CUSTOMFILTER) + { + if(m_filters[pass]) + bgl::blDeleteObjectARB(m_filters[pass]); + m_filters[pass] = CreateShaderProgram(text.Ptr()); + m_enabled[pass] = 1; + return; + } + + if(mode>=RAS_2DFILTER_MOTIONBLUR && mode<=RAS_2DFILTER_INVERT) + { + if(m_filters[pass]) + bgl::blDeleteObjectARB(m_filters[pass]); + m_filters[pass] = CreateShaderProgram(mode); + m_enabled[pass] = 1; } } diff --git a/source/gameengine/Rasterizer/RAS_2DFilterManager.h b/source/gameengine/Rasterizer/RAS_2DFilterManager.h index e2d9dce170e..45e33db8d2e 100644 --- a/source/gameengine/Rasterizer/RAS_2DFilterManager.h +++ b/source/gameengine/Rasterizer/RAS_2DFilterManager.h @@ -10,7 +10,7 @@ class RAS_2DFilterManager private: unsigned int CreateShaderProgram(char* shadersource); unsigned int CreateShaderProgram(int filtermode); - void StartShaderProgram(int filtermode); + void StartShaderProgram(unsigned int shaderprogram); void EndShaderProgram(); float textureoffsets[18]; @@ -25,6 +25,8 @@ private: bool isshadersupported; public: enum RAS_2DFILTER_MODE { + RAS_2DFILTER_ENABLED = -2, + RAS_2DFILTER_DISABLED = -1, RAS_2DFILTER_NOFILTER = 0, RAS_2DFILTER_MOTIONBLUR, RAS_2DFILTER_BLUR, @@ -37,13 +39,13 @@ public: RAS_2DFILTER_GRAYSCALE, RAS_2DFILTER_SEPIA, RAS_2DFILTER_INVERT, + RAS_2DFILTER_CUSTOMFILTER, RAS_2DFILTER_NUMBER_OF_FILTERS }; - int m_filters[MAX_RENDER_PASS]; + unsigned int m_filters[MAX_RENDER_PASS]; + short m_enabled[MAX_RENDER_PASS]; - unsigned int m_programs[RAS_2DFILTER_NUMBER_OF_FILTERS]; - RAS_2DFilterManager(); ~RAS_2DFilterManager(); @@ -54,6 +56,6 @@ public: void RenderFilters(RAS_ICanvas* canvas); - void EnableFilter(RAS_2DFILTER_MODE mode, int pass); + void EnableFilter(RAS_2DFILTER_MODE mode, int pass, STR_String& text); }; #endif diff --git a/source/gameengine/Rasterizer/RAS_IRenderTools.h b/source/gameengine/Rasterizer/RAS_IRenderTools.h index e7cb1c9176f..771c34a595f 100644 --- a/source/gameengine/Rasterizer/RAS_IRenderTools.h +++ b/source/gameengine/Rasterizer/RAS_IRenderTools.h @@ -183,7 +183,7 @@ public: virtual void - Update2DFilter(RAS_2DFilterManager::RAS_2DFILTER_MODE filtermode, int pass)=0; + Update2DFilter(RAS_2DFilterManager::RAS_2DFILTER_MODE filtermode, int pass, STR_String& text)=0; virtual void diff --git a/source/gameengine/Rasterizer/RAS_OpenGLFilters/RAS_Blur2DFilter.h b/source/gameengine/Rasterizer/RAS_OpenGLFilters/RAS_Blur2DFilter.h index ae7f56174e6..2b0bdbc4351 100644 --- a/source/gameengine/Rasterizer/RAS_OpenGLFilters/RAS_Blur2DFilter.h +++ b/source/gameengine/Rasterizer/RAS_OpenGLFilters/RAS_Blur2DFilter.h @@ -2,8 +2,8 @@ #define __RAS_BLUR2DFILTER char * BlurFragmentShader=STRINGIFY( -uniform sampler2D sampler0; -uniform vec2 tc_offset[9]; +uniform sampler2D bgl_RenderedTexture; +uniform vec2 bgl_TextureCoordinateOffset[9]; void main(void) { @@ -11,8 +11,8 @@ void main(void) for (int i = 0; i < 9; i++) { - sample[i] = texture2D(sampler0, - gl_TexCoord[0].st + tc_offset[i]); + sample[i] = texture2D(bgl_RenderedTexture, + gl_TexCoord[0].st + bgl_TextureCoordinateOffset[i]); } gl_FragColor = (sample[0] + (2.0*sample[1]) + sample[2] + diff --git a/source/gameengine/Rasterizer/RAS_OpenGLFilters/RAS_Dilation2DFilter.h b/source/gameengine/Rasterizer/RAS_OpenGLFilters/RAS_Dilation2DFilter.h index 6fd7f867d10..9cf233d549a 100644 --- a/source/gameengine/Rasterizer/RAS_OpenGLFilters/RAS_Dilation2DFilter.h +++ b/source/gameengine/Rasterizer/RAS_OpenGLFilters/RAS_Dilation2DFilter.h @@ -2,8 +2,8 @@ #define __RAS_DILATION2DFILTER char * DilationFragmentShader=STRINGIFY( -uniform sampler2D sampler0; -uniform vec2 tc_offset[9]; +uniform sampler2D bgl_RenderedTexture; +uniform vec2 bgl_TextureCoordinateOffset[9]; void main(void) { @@ -12,8 +12,8 @@ void main(void) for (int i = 0; i < 9; i++) { - sample[i] = texture2D(sampler0, - gl_TexCoord[0].st + tc_offset[i]); + sample[i] = texture2D(bgl_RenderedTexture, + gl_TexCoord[0].st + bgl_TextureCoordinateOffset[i]); maxValue = max(sample[i], maxValue); } diff --git a/source/gameengine/Rasterizer/RAS_OpenGLFilters/RAS_Erosion2DFilter.h b/source/gameengine/Rasterizer/RAS_OpenGLFilters/RAS_Erosion2DFilter.h index a0fc7486447..667da14c10e 100644 --- a/source/gameengine/Rasterizer/RAS_OpenGLFilters/RAS_Erosion2DFilter.h +++ b/source/gameengine/Rasterizer/RAS_OpenGLFilters/RAS_Erosion2DFilter.h @@ -2,8 +2,8 @@ #define __RAS_EROSION2DFILTER char * ErosionFragmentShader=STRINGIFY( -uniform sampler2D sampler0; -uniform vec2 tc_offset[9]; +uniform sampler2D bgl_RenderedTexture; +uniform vec2 bgl_TextureCoordinateOffset[9]; void main(void) { @@ -12,8 +12,8 @@ void main(void) for (int i = 0; i < 9; i++) { - sample[i] = texture2D(sampler0, - gl_TexCoord[0].st + tc_offset[i]); + sample[i] = texture2D(bgl_RenderedTexture, + gl_TexCoord[0].st + bgl_TextureCoordinateOffset[i]); minValue = min(sample[i], minValue); } diff --git a/source/gameengine/Rasterizer/RAS_OpenGLFilters/RAS_GrayScale2DFilter.h b/source/gameengine/Rasterizer/RAS_OpenGLFilters/RAS_GrayScale2DFilter.h index c6fc4a0214d..09f58c0a350 100644 --- a/source/gameengine/Rasterizer/RAS_OpenGLFilters/RAS_GrayScale2DFilter.h +++ b/source/gameengine/Rasterizer/RAS_OpenGLFilters/RAS_GrayScale2DFilter.h @@ -2,11 +2,11 @@ #define __RAS_GRAYSCALE2DFILTER char * GrayScaleFragmentShader=STRINGIFY( -uniform sampler2D sampler0; +uniform sampler2D bgl_RenderedTexture; void main(void) { - vec4 texcolor = texture2D(sampler0, gl_TexCoord[0].st); + vec4 texcolor = texture2D(bgl_RenderedTexture, gl_TexCoord[0].st); float gray = dot(texcolor.rgb, vec3(0.299, 0.587, 0.114)); gl_FragColor = vec4(gray, gray, gray, texcolor.a); } diff --git a/source/gameengine/Rasterizer/RAS_OpenGLFilters/RAS_Invert2DFilter.h b/source/gameengine/Rasterizer/RAS_OpenGLFilters/RAS_Invert2DFilter.h index 34e6fe29cd3..c3b9ee117c0 100644 --- a/source/gameengine/Rasterizer/RAS_OpenGLFilters/RAS_Invert2DFilter.h +++ b/source/gameengine/Rasterizer/RAS_OpenGLFilters/RAS_Invert2DFilter.h @@ -2,12 +2,11 @@ #define __RAS_INVERT2DFILTER char * InvertFragmentShader=STRINGIFY( -uniform sampler2D sampler0; -uniform vec2 offset[9]; +uniform sampler2D bgl_RenderedTexture; void main(void) { - vec4 texcolor = texture2D(sampler0, gl_TexCoord[0].st); + vec4 texcolor = texture2D(bgl_RenderedTexture, gl_TexCoord[0].st); gl_FragColor.rgb = 1.0 - texcolor.rgb; gl_FragColor.a = texcolor.a; } diff --git a/source/gameengine/Rasterizer/RAS_OpenGLFilters/RAS_Laplacian2DFilter.h b/source/gameengine/Rasterizer/RAS_OpenGLFilters/RAS_Laplacian2DFilter.h index f5b44a69c13..684ac4399fa 100644 --- a/source/gameengine/Rasterizer/RAS_OpenGLFilters/RAS_Laplacian2DFilter.h +++ b/source/gameengine/Rasterizer/RAS_OpenGLFilters/RAS_Laplacian2DFilter.h @@ -2,8 +2,8 @@ #define __RAS_LAPLACION2DFILTER char * LaplacionFragmentShader=STRINGIFY( -uniform sampler2D sampler0; -uniform vec2 tc_offset[9]; +uniform sampler2D bgl_RenderedTexture; +uniform vec2 bgl_TextureCoordinateOffset[9]; void main(void) { @@ -11,8 +11,8 @@ void main(void) for (int i = 0; i < 9; i++) { - sample[i] = texture2D(sampler0, - gl_TexCoord[0].st + tc_offset[i]); + sample[i] = texture2D(bgl_RenderedTexture, + gl_TexCoord[0].st + bgl_TextureCoordinateOffset[i]); } gl_FragColor = (sample[4] * 8.0) - diff --git a/source/gameengine/Rasterizer/RAS_OpenGLFilters/RAS_Prewitt2DFilter.h b/source/gameengine/Rasterizer/RAS_OpenGLFilters/RAS_Prewitt2DFilter.h index a6897bd33d4..c4b344b2ded 100644 --- a/source/gameengine/Rasterizer/RAS_OpenGLFilters/RAS_Prewitt2DFilter.h +++ b/source/gameengine/Rasterizer/RAS_OpenGLFilters/RAS_Prewitt2DFilter.h @@ -2,8 +2,8 @@ #define __RAS_PREWITT2DFILTER char * PrewittFragmentShader=STRINGIFY( -uniform sampler2D sampler0; -uniform vec2 tc_offset[9]; +uniform sampler2D bgl_RenderedTexture; +uniform vec2 bgl_TextureCoordinateOffset[9]; void main(void) { @@ -11,8 +11,8 @@ void main(void) for (int i = 0; i < 9; i++) { - sample[i] = texture2D(sampler0, - gl_TexCoord[0].st + tc_offset[i]); + sample[i] = texture2D(bgl_RenderedTexture, + gl_TexCoord[0].st + bgl_TextureCoordinateOffset[i]); } vec4 horizEdge = sample[2] + sample[5] + sample[8] - diff --git a/source/gameengine/Rasterizer/RAS_OpenGLFilters/RAS_Sepia2DFilter.h b/source/gameengine/Rasterizer/RAS_OpenGLFilters/RAS_Sepia2DFilter.h index cfff00e1287..4ba91b85784 100644 --- a/source/gameengine/Rasterizer/RAS_OpenGLFilters/RAS_Sepia2DFilter.h +++ b/source/gameengine/Rasterizer/RAS_OpenGLFilters/RAS_Sepia2DFilter.h @@ -2,12 +2,11 @@ #define __RAS_SEPIA2DFILTER char * SepiaFragmentShader=STRINGIFY( -uniform sampler2D sampler0; -uniform vec2 offset[9]; +uniform sampler2D bgl_RenderedTexture; void main(void) { - vec4 texcolor = texture2D(sampler0, gl_TexCoord[0].st); + vec4 texcolor = texture2D(bgl_RenderedTexture, gl_TexCoord[0].st); float gray = dot(texcolor.rgb, vec3(0.299, 0.587, 0.114)); gl_FragColor = vec4(gray * vec3(1.2, 1.0, 0.8), texcolor.a); } diff --git a/source/gameengine/Rasterizer/RAS_OpenGLFilters/RAS_Sharpen2DFilter.h b/source/gameengine/Rasterizer/RAS_OpenGLFilters/RAS_Sharpen2DFilter.h index 640983482a9..685471aab07 100644 --- a/source/gameengine/Rasterizer/RAS_OpenGLFilters/RAS_Sharpen2DFilter.h +++ b/source/gameengine/Rasterizer/RAS_OpenGLFilters/RAS_Sharpen2DFilter.h @@ -2,8 +2,8 @@ #define __RAS_SHARPEN2DFILTER char * SharpenFragmentShader=STRINGIFY( -uniform sampler2D sampler0; -uniform vec2 tc_offset[9]; +uniform sampler2D bgl_RenderedTexture; +uniform vec2 bgl_TextureCoordinateOffset[9]; void main(void) { @@ -11,8 +11,8 @@ void main(void) for (int i = 0; i < 9; i++) { - sample[i] = texture2D(sampler0, - gl_TexCoord[0].st + tc_offset[i]); + sample[i] = texture2D(bgl_RenderedTexture, + gl_TexCoord[0].st + bgl_TextureCoordinateOffset[i]); } gl_FragColor = (sample[4] * 9.0) - diff --git a/source/gameengine/Rasterizer/RAS_OpenGLFilters/RAS_Sobel2DFilter.h b/source/gameengine/Rasterizer/RAS_OpenGLFilters/RAS_Sobel2DFilter.h index da1d34713c9..93480afb250 100644 --- a/source/gameengine/Rasterizer/RAS_OpenGLFilters/RAS_Sobel2DFilter.h +++ b/source/gameengine/Rasterizer/RAS_OpenGLFilters/RAS_Sobel2DFilter.h @@ -2,8 +2,8 @@ #define __RAS_SOBEL2DFILTER char * SobelFragmentShader=STRINGIFY( -uniform sampler2D sampler0; -uniform vec2 tc_offset[9]; +uniform sampler2D bgl_RenderedTexture; +uniform vec2 bgl_TextureCoordinateOffset[9]; void main(void) { @@ -11,8 +11,8 @@ void main(void) for (int i = 0; i < 9; i++) { - sample[i] = texture2D(sampler0, - gl_TexCoord[0].st + tc_offset[i]); + sample[i] = texture2D(bgl_RenderedTexture, + gl_TexCoord[0].st + bgl_TextureCoordinateOffset[i]); } vec4 horizEdge = sample[2] + (2.0*sample[5]) + sample[8] - |