forked from bartvdbraak/blender
2d Filters updated, now you can use custom filter and write your own GLSL shader program to filter rendering result.
This commit is contained in:
parent
aa774427f6
commit
af169b41fd
@ -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;
|
||||
}
|
||||
|
@ -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
|
||||
|
||||
|
||||
|
@ -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;
|
||||
|
@ -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)
|
||||
|
@ -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);
|
||||
|
||||
|
@ -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;
|
||||
|
||||
}
|
||||
|
@ -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;
|
||||
}
|
||||
|
@ -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();
|
||||
|
||||
|
@ -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)
|
||||
|
@ -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);
|
||||
|
||||
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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] +
|
||||
|
@ -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);
|
||||
}
|
||||
|
||||
|
@ -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);
|
||||
}
|
||||
|
||||
|
@ -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);
|
||||
}
|
||||
|
@ -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;
|
||||
}
|
||||
|
@ -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) -
|
||||
|
@ -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] -
|
||||
|
@ -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);
|
||||
}
|
||||
|
@ -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) -
|
||||
|
@ -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] -
|
||||
|
Loading…
Reference in New Issue
Block a user