- removed gpu memory leaks! (THANKS to Gianpaolo!)

This commit is contained in:
Guido Ranzuglia granzuglia 2016-09-16 11:51:00 +00:00
parent 23dd9b234e
commit f3abbe7bec
8 changed files with 195 additions and 193 deletions

View File

@ -52,7 +52,7 @@ public:
this->_texH = 1024;
}
//virtual ~DecorateShader();
virtual ~DecorateShader() {}
/**
* Performs init commands.
@ -89,7 +89,7 @@ protected:
{
assert(_initOk);
glClearDepth(1.0);
glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, _fbo);
glBindFramebuffer(GL_FRAMEBUFFER, _fbo);
glPushAttrib(GL_VIEWPORT_BIT);
glViewport(0, 0, this->_texW, this->_texH);
glClear(GL_DEPTH_BUFFER_BIT | GL_COLOR_BUFFER_BIT);
@ -125,7 +125,7 @@ protected:
return;
glPopAttrib();
glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, 0);
glBindFramebuffer(GL_FRAMEBUFFER, 0);
}
/**
@ -310,7 +310,6 @@ protected:
* @param attachement the FBO attachment target.
*/
void genColorTextureEXT(GLuint& tex, GLenum attachment){
glGenTextures(1, &tex);
glBindTexture(GL_TEXTURE_2D, tex);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP);
@ -320,7 +319,7 @@ protected:
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA8, this->_texW, this->_texH, 0, GL_RGBA, GL_UNSIGNED_BYTE, NULL);
glFramebufferTexture2DEXT(GL_FRAMEBUFFER_EXT, attachment, GL_TEXTURE_2D, tex, 0);
glFramebufferTexture2D(GL_FRAMEBUFFER, attachment, GL_TEXTURE_2D, tex, 0);
}
@ -332,10 +331,10 @@ protected:
*/
void genDepthRenderBufferEXT(GLuint& tex){
glGenRenderbuffersEXT(1, &tex);
glBindRenderbufferEXT(GL_RENDERBUFFER_EXT, tex);
glRenderbufferStorageEXT(GL_RENDERBUFFER_EXT, GL_DEPTH_COMPONENT, this->_texW, this->_texH);
glFramebufferRenderbufferEXT(GL_FRAMEBUFFER_EXT, GL_DEPTH_ATTACHMENT_EXT, GL_RENDERBUFFER_EXT, tex);
glGenRenderbuffers(1, &tex);
glBindRenderbuffer(GL_RENDERBUFFER, tex);
glRenderbufferStorage(GL_RENDERBUFFER, GL_DEPTH_COMPONENT, this->_texW, this->_texH);
glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_RENDERBUFFER, tex);
}
@ -361,7 +360,7 @@ protected:
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_COMPARE_FUNC_ARB, GL_LEQUAL);
}
glTexImage2D(GL_TEXTURE_2D, 0, GL_DEPTH_COMPONENT24, this->_texW, this->_texH, 0, GL_DEPTH_COMPONENT, GL_FLOAT, NULL);
glFramebufferTexture2DEXT(GL_FRAMEBUFFER_EXT, GL_DEPTH_ATTACHMENT_EXT, GL_TEXTURE_2D, tex, 0);
glFramebufferTexture2D(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_TEXTURE_2D, tex, 0);
return;
}
@ -382,13 +381,13 @@ protected:
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
if(isShMap){
glTexParameteri(GL_TEXTURE_2D, GL_GENERATE_MIPMAP, GL_TRUE);
glTexParameteri(GL_TEXTURE_2D, GL_DEPTH_TEXTURE_MODE_ARB, GL_LUMINANCE);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_COMPARE_MODE_ARB, GL_COMPARE_R_TO_TEXTURE_ARB);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_COMPARE_FUNC_ARB, GL_LEQUAL);
glTexParameteri(GL_TEXTURE_2D, GL_DEPTH_TEXTURE_MODE, GL_LUMINANCE);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_COMPARE_MODE, GL_COMPARE_R_TO_TEXTURE);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_COMPARE_FUNC, GL_LEQUAL);
}
glTexImage2D(GL_TEXTURE_2D, 0, GL_DEPTH_COMPONENT16, this->_texW, this->_texH, 0, GL_DEPTH_COMPONENT, GL_FLOAT, NULL);
glFramebufferTexture2DEXT(GL_FRAMEBUFFER_EXT, GL_DEPTH_ATTACHMENT_EXT, GL_TEXTURE_2D, tex, 0);
glFramebufferTexture2D(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_TEXTURE_2D, tex, 0);
return;
}
};

View File

@ -27,157 +27,159 @@ using namespace vcg;
QString DecorateShadowPlugin::decorationInfo(FilterIDType id) const
{
switch(id){
case DP_SHOW_SHADOW : return tr("Enable shadow mapping");
case DP_SHOW_SSAO: return tr("Enable Screen Space Ambient Occlusion");
default: assert(0); return QString();
}
switch (id) {
case DP_SHOW_SHADOW: return tr("Enable shadow mapping");
case DP_SHOW_SSAO: return tr("Enable Screen Space Ambient Occlusion");
default: assert(0); return QString();
}
}
QString DecorateShadowPlugin::decorationName(FilterIDType id) const
{
switch(id){
case DP_SHOW_SHADOW : return tr("Enable shadow mapping");
case DP_SHOW_SSAO: return tr("Enable Screen Space Ambient Occlusion");
default: assert(0); return QString();
}
switch (id) {
case DP_SHOW_SHADOW: return tr("Enable shadow mapping");
case DP_SHOW_SSAO: return tr("Enable Screen Space Ambient Occlusion");
default: assert(0); return QString();
}
}
void DecorateShadowPlugin::initGlobalParameterSet(QAction *action, RichParameterSet &parset)
{
switch(ID(action)){
case DP_SHOW_SHADOW : {
assert(!(parset.hasParameter(this->DecorateShadowMethod())));
int method = SH_MAP_VSM_BLUR;
parset.addParam(
new RichEnum(
this->DecorateShadowMethod(),
method,
getSHMethods(),
"Shader used to perform shadow mapping decoration",
"Shadow mapping method")
);
parset.addParam(new RichDynamicFloat(this->DecorateShadowIntensity(),0.3f,0.0f,1.0f,"Shadow Intensity","Shadow Intensity"));
break;
}
switch (ID(action)) {
case DP_SHOW_SHADOW: {
assert(!(parset.hasParameter(this->DecorateShadowMethod())));
int method = SH_MAP_VSM_BLUR;
parset.addParam(
new RichEnum(
this->DecorateShadowMethod(),
method,
getSHMethods(),
"Shader used to perform shadow mapping decoration",
"Shadow mapping method")
);
parset.addParam(new RichDynamicFloat(this->DecorateShadowIntensity(), 0.3f, 0.0f, 1.0f, "Shadow Intensity", "Shadow Intensity"));
break;
}
case DP_SHOW_SSAO : {
assert(!(parset.hasParameter(this->DecorateShadowSSAORadius())));
float radius = 0.25f;
parset.addParam(
new RichFloat(this->DecorateShadowSSAORadius(),
radius,
"Uniform parameter for SSAO shader",
"SSAO radius"));
break;
}
case DP_SHOW_SSAO: {
assert(!(parset.hasParameter(this->DecorateShadowSSAORadius())));
float radius = 0.25f;
parset.addParam(
new RichFloat(this->DecorateShadowSSAORadius(),
radius,
"Uniform parameter for SSAO shader",
"SSAO radius"));
break;
}
default: assert(0);
}
}
default: assert(0);
}
}
bool DecorateShadowPlugin::startDecorate(QAction* action, MeshDocument& /*m*/, RichParameterSet* parset, GLArea* /*gla*/)
{
bool result;
switch(ID(action)){
case DP_SHOW_SHADOW :
if(!parset->hasParameter(DecorateShadowMethod())){
qDebug("Unable to find Shadow mapping method");
assert(0);
}
switch (parset->getEnum(DecorateShadowMethod()))
{
case SH_MAP:
{
smShader= new ShadowMapping(0.1f);
this->_decoratorSH = smShader; break;
}
case SH_MAP_VSM:
{
vsmShader= new VarianceShadowMapping(0.1f);
this->_decoratorSH = vsmShader; break;
}
case SH_MAP_VSM_BLUR:
{
vsmbShader= new VarianceShadowMappingBlur(0.1f);
this->_decoratorSH = vsmbShader; break;
}
}
this->_decoratorSH->setShadowIntensity(parset->getDynamicFloat(this->DecorateShadowIntensity()));
result = this->_decoratorSH->init();
return result;
bool result;
case DP_SHOW_SSAO:
_decoratorSSAO = new SSAO(0.1f);
this->_decoratorSSAO->setRadius(parset->getFloat(DecorateShadowSSAORadius()));
result = this->_decoratorSSAO->init();
return result;
switch (ID(action))
{
case DP_SHOW_SHADOW:
if (!parset->hasParameter(DecorateShadowMethod())) {
qDebug("Unable to find Shadow mapping method");
assert(0);
}
switch (parset->getEnum(DecorateShadowMethod()))
{
case SH_MAP:
{
smShader = new ShadowMapping(0.1f);
this->_decoratorSH = smShader; break;
}
case SH_MAP_VSM:
{
vsmShader = new VarianceShadowMapping(0.1f);
this->_decoratorSH = vsmShader; break;
}
case SH_MAP_VSM_BLUR:
{
vsmbShader = new VarianceShadowMappingBlur(0.1f);
this->_decoratorSH = vsmbShader; break;
}
}
this->_decoratorSH->setShadowIntensity(parset->getDynamicFloat(this->DecorateShadowIntensity()));
result = this->_decoratorSH->init();
return result;
default: assert(0);
}
return false;
case DP_SHOW_SSAO:
_decoratorSSAO = new SSAO(0.1f);
this->_decoratorSSAO->setRadius(parset->getFloat(DecorateShadowSSAORadius()));
result = this->_decoratorSSAO->init();
return result;
default: assert(0);
}
return false;
}
void DecorateShadowPlugin::endDecorate( QAction * action, MeshDocument & md, RichParameterSet * parset, GLArea * gla)
void DecorateShadowPlugin::endDecorate(QAction * action, MeshDocument & md, RichParameterSet * parset, GLArea * gla)
{
switch(ID(action))
{
case DP_SHOW_SHADOW :
{
if(!parset->hasParameter(DecorateShadowMethod()))
{
qDebug("Unable to find Shadow mapping method");
assert(0);
}
switch (parset->getEnum(DecorateShadowMethod()))
{
case SH_MAP:
{
delete smShader;
smShader = NULL;
break;
}
case SH_MAP_VSM:
{
delete vsmShader;
vsmShader = NULL;
break;
}
case SH_MAP_VSM_BLUR:
{
delete vsmbShader;
vsmbShader = NULL;
break;
}
}
_decoratorSH = NULL;
break;
}
case DP_SHOW_SSAO:
{
delete _decoratorSSAO;
_decoratorSSAO = NULL;
break;
}
default: assert(0);
}
switch (ID(action))
{
case DP_SHOW_SHADOW:
{
if (!parset->hasParameter(DecorateShadowMethod()))
{
qDebug("Unable to find Shadow mapping method");
assert(0);
}
switch (parset->getEnum(DecorateShadowMethod()))
{
case SH_MAP:
{
delete smShader;
smShader = NULL;
break;
}
case SH_MAP_VSM:
{
delete vsmShader;
vsmShader = NULL;
break;
}
case SH_MAP_VSM_BLUR:
{
delete vsmbShader;
vsmbShader = NULL;
break;
}
}
_decoratorSH = NULL;
break;
}
case DP_SHOW_SSAO:
{
delete _decoratorSSAO;
_decoratorSSAO = NULL;
break;
}
default:
break;
}
}
void DecorateShadowPlugin::decorateDoc(QAction *action, MeshDocument &md, RichParameterSet *, GLArea *gla,QPainter *,GLLogStream &)
void DecorateShadowPlugin::decorateDoc(QAction *action, MeshDocument &md, RichParameterSet *, GLArea *gla, QPainter *, GLLogStream &)
{
switch(ID(action)){
case DP_SHOW_SHADOW :
this->_decoratorSH->runShader(md, gla);
break;
switch (ID(action)) {
case DP_SHOW_SHADOW:
this->_decoratorSH->runShader(md, gla);
break;
case DP_SHOW_SSAO:
this->_decoratorSSAO->runShader(md, gla);
break;
case DP_SHOW_SSAO:
this->_decoratorSSAO->runShader(md, gla);
break;
default: assert(0);
}
default: assert(0);
}
}

View File

@ -81,7 +81,7 @@ public:
_decoratorSSAO = new SSAO(0.1f);*/
smShader = NULL;
vsmbShader = NULL;
vsmShader = NULL;
vsmbShader = NULL;
_decoratorSSAO = NULL;
}

View File

@ -46,7 +46,7 @@ ShadowMapping::~ShadowMapping(){
glDeleteTextures(1, &(this->_shadowMap));
glDeleteFramebuffersEXT(1, &_fbo);
glDeleteFramebuffers(1, &_fbo);
}
bool ShadowMapping::init()
@ -204,8 +204,8 @@ bool ShadowMapping::setup()
if (_initOk)
return true;
glGenFramebuffersEXT(1, &_fbo);
glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, _fbo);
glGenFramebuffers(1, &_fbo);
glBindFramebuffer(GL_FRAMEBUFFER, _fbo);
this->genDepthMapTexture24(this->_shadowMap, true);
@ -216,8 +216,8 @@ bool ShadowMapping::setup()
glReadBuffer(GL_NONE);
//checks for fbo creation errors
int err = glCheckFramebufferStatusEXT(GL_FRAMEBUFFER_EXT);
_initOk = (err == GL_FRAMEBUFFER_COMPLETE_EXT);
glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, 0);
int err = glCheckFramebufferStatus(GL_FRAMEBUFFER);
_initOk = (err == GL_FRAMEBUFFER_COMPLETE);
glBindFramebuffer(GL_FRAMEBUFFER, 0);
return _initOk;
}

View File

@ -30,7 +30,7 @@ class ShadowMapping : public DecorateShader
public:
ShadowMapping(float);
~ShadowMapping();
virtual ~ShadowMapping();
/**
* Performs init commands.

View File

@ -73,15 +73,15 @@ SSAO::~SSAO(){
glDeleteShader(this->_blurFrag);
glDeleteProgram(this->_blurShaderProgram);
glDeleteTexturesEXT(1, &(this->_color1));
glDeleteTexturesEXT(1, &(this->_depthMap));
glDeleteTextures(1, &(this->_color1));
glDeleteTextures(1, &(this->_depthMap));
glDeleteFramebuffersEXT(1, &(this->_depth));
glDeleteTexturesEXT(1, &(this->_color2));
glDeleteTexturesEXT(1, &(this->_color2));
glDeleteFramebuffers(1, &(this->_depth));
glDeleteTextures(1, &(this->_color2));
glDeleteTextures(1, &(this->_color2));
glDeleteFramebuffersEXT(1, &_fbo);
glDeleteFramebuffersEXT(1, &_fbo2);
glDeleteFramebuffers(1, &_fbo);
glDeleteFramebuffers(1, &_fbo2);
}
bool SSAO::init()
@ -132,7 +132,7 @@ void SSAO::runShader(MeshDocument& md, GLArea* gla)
mProj.transposeInPlace();
mInverseProj = vcg::Inverse(mProj);
glDrawBuffer(GL_COLOR_ATTACHMENT0_EXT);
glDrawBuffer(GL_COLOR_ATTACHMENT0);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
MLRenderingData dt;
MLRenderingData::RendAtts atts;
@ -153,7 +153,7 @@ void SSAO::runShader(MeshDocument& md, GLArea* gla)
/***********************************************************/
//SSAO PASS
/***********************************************************/
glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, _fbo2);
glBindFramebuffer(GL_FRAMEBUFFER, _fbo2);
glUseProgram(this->_ssaoShaderProgram);
glEnable(GL_TEXTURE_2D);
@ -182,7 +182,7 @@ void SSAO::runShader(MeshDocument& md, GLArea* gla)
GLuint invMatrixLoc = glGetUniformLocation(this->_ssaoShaderProgram, "invProj");
glUniformMatrix4fv(invMatrixLoc, 1, 0, mInverseProj.transpose().V());
glDrawBuffer(GL_COLOR_ATTACHMENT0_EXT);
glDrawBuffer(GL_COLOR_ATTACHMENT0);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glBegin(GL_TRIANGLE_STRIP);
glVertex3f(-1.0f, -1.0f, 0.0f);
@ -195,7 +195,7 @@ void SSAO::runShader(MeshDocument& md, GLArea* gla)
/***********************************************************/
//BLURRING horizontal
/***********************************************************/
glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, _fbo);
glBindFramebuffer(GL_FRAMEBUFFER, _fbo);
glUseProgram(this->_blurShaderProgram);
float blur_coef(0.8f);
@ -209,7 +209,7 @@ void SSAO::runShader(MeshDocument& md, GLArea* gla)
loc = glGetUniformLocation(this->_blurShaderProgram, "scene");
glUniform1i(loc, 0);
glDrawBuffer(GL_COLOR_ATTACHMENT0_EXT);
glDrawBuffer(GL_COLOR_ATTACHMENT0);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glBegin(GL_TRIANGLE_STRIP);
glVertex3f(-1.0f, -1.0f, 0.0f);
@ -254,14 +254,14 @@ bool SSAO::setup()
return true;
//genero i 2 framebuffer object che mi servono.
glGenFramebuffersEXT(1, &_fbo);
glGenFramebuffersEXT(1, &_fbo2);
glGenFramebuffers(1, &_fbo);
glGenFramebuffers(1, &_fbo2);
//attacco il primo...adesso le modifiche andranno a modificare solo _fbo
glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, _fbo);
glBindFramebuffer(GL_FRAMEBUFFER, _fbo);
//Generates first color texture
this->genColorTextureEXT(this->_color1, GL_COLOR_ATTACHMENT0_EXT);
this->genColorTextureEXT(this->_color1, GL_COLOR_ATTACHMENT0);
this->genDepthMapTexture24(this->_depthMap, false);
@ -269,17 +269,17 @@ bool SSAO::setup()
glDrawBuffersARB(0, drawBuffers);
int err = glCheckFramebufferStatusEXT(GL_FRAMEBUFFER_EXT);
_initOk = (err == GL_FRAMEBUFFER_COMPLETE_EXT);
int err = glCheckFramebufferStatus(GL_FRAMEBUFFER);
_initOk = (err == GL_FRAMEBUFFER_COMPLETE);
if(!this->_initOk)
return this->_initOk;
//attacco il secondo fbo...adesso le modifiche andranno a modificare solo _fbo2
glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, _fbo2);
glBindFramebuffer(GL_FRAMEBUFFER, _fbo2);
//Generates first color texture
this->genColorTextureEXT(this->_color2, GL_COLOR_ATTACHMENT0_EXT);
this->genColorTextureEXT(this->_color2, GL_COLOR_ATTACHMENT0);
//Generates render buffer for depth attachment
this->genDepthRenderBufferEXT(this->_depth);
@ -290,10 +290,10 @@ bool SSAO::setup()
this->loadNoiseTxt();
err = glCheckFramebufferStatusEXT(GL_FRAMEBUFFER_EXT);
_initOk = (err == GL_FRAMEBUFFER_COMPLETE_EXT);
err = glCheckFramebufferStatus(GL_FRAMEBUFFER);
_initOk = (err == GL_FRAMEBUFFER_COMPLETE);
glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, 0);
glBindFramebuffer(GL_FRAMEBUFFER, 0);
return _initOk;
}

View File

@ -37,6 +37,7 @@ VarianceShadowMapping::VarianceShadowMapping(float intensity):ShadowMapping(inte
}
VarianceShadowMapping::~VarianceShadowMapping(){
glDetachShader(this->_depthShaderProgram, this->_depthVert);
glDetachShader(this->_depthShaderProgram, this->_depthFrag);
@ -44,7 +45,7 @@ VarianceShadowMapping::~VarianceShadowMapping(){
glDeleteShader(this->_depthFrag);
glDeleteProgram(this->_depthShaderProgram);
glDeleteFramebuffersEXT(1, &(this->_depth));
glDeleteRenderbuffers(1, &(this->_depth));
}
bool VarianceShadowMapping::init()
@ -167,18 +168,18 @@ bool VarianceShadowMapping::setup()
return true;
//genero il frame buffer object
glGenFramebuffersEXT(1, &_fbo);
glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, _fbo);
glGenFramebuffers(1, &_fbo);
glBindFramebuffer(GL_FRAMEBUFFER, _fbo);
//Generates texture color for variance shadow map
this->genColorTextureEXT(this->_shadowMap, GL_COLOR_ATTACHMENT0_EXT);
this->genColorTextureEXT(this->_shadowMap, GL_COLOR_ATTACHMENT0);
//Generates render buffer for depth attachment
this->genDepthRenderBufferEXT(this->_depth);
//checks for errors
int err = glCheckFramebufferStatusEXT(GL_FRAMEBUFFER_EXT);
_initOk = (err == GL_FRAMEBUFFER_COMPLETE_EXT);
glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, 0);
int err = glCheckFramebufferStatus(GL_FRAMEBUFFER);
_initOk = (err == GL_FRAMEBUFFER_COMPLETE);
glBindFramebuffer(GL_FRAMEBUFFER, 0);
return _initOk;
}

View File

@ -43,8 +43,8 @@ VarianceShadowMappingBlur::~VarianceShadowMappingBlur(){
glDeleteShader(this->_blurFrag);
glDeleteProgram(this->_blurShaderProgram);
glDeleteTexturesEXT(1, &(this->_blurH));
glDeleteTexturesEXT(1, &(this->_blurV));
glDeleteTextures(1, &(this->_blurH));
glDeleteTextures(1, &(this->_blurV));
}
bool VarianceShadowMappingBlur::init()
@ -96,7 +96,7 @@ void VarianceShadowMappingBlur::runShader(MeshDocument& md, GLArea* gla){
this->bind();
glUseProgram(this->_depthShaderProgram);
glDrawBuffer(GL_COLOR_ATTACHMENT0_EXT);
glDrawBuffer(GL_COLOR_ATTACHMENT0);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
foreach(MeshModel *m, md.meshList)
{
@ -123,7 +123,7 @@ void VarianceShadowMappingBlur::runShader(MeshDocument& md, GLArea* gla){
GLuint loc = glGetUniformLocation(this->_blurShaderProgram, "scene");
glUniform1i(loc, 0);
glDrawBuffer(GL_COLOR_ATTACHMENT1_EXT);
glDrawBuffer(GL_COLOR_ATTACHMENT1);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glBegin(GL_TRIANGLE_STRIP);
@ -144,7 +144,7 @@ void VarianceShadowMappingBlur::runShader(MeshDocument& md, GLArea* gla){
loc = glGetUniformLocation(this->_blurShaderProgram, "scene");
glUniform1i(loc, 0);
glDrawBuffer(GL_COLOR_ATTACHMENT2_EXT);
glDrawBuffer(GL_COLOR_ATTACHMENT2);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glBegin(GL_TRIANGLE_STRIP);
@ -206,17 +206,17 @@ bool VarianceShadowMappingBlur::setup()
return true;
//genero il frame buffer object
glGenFramebuffersEXT(1, &_fbo);
glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, _fbo);
glGenFramebuffers(1, &_fbo);
glBindFramebuffer(GL_FRAMEBUFFER, _fbo);
//Generates texture color for variance shadow map
this->genColorTextureEXT(this->_shadowMap, GL_COLOR_ATTACHMENT0_EXT);
this->genColorTextureEXT(this->_shadowMap, GL_COLOR_ATTACHMENT0);
//Generates texture color for horizontal blur
this->genColorTextureEXT(this->_blurH, GL_COLOR_ATTACHMENT1_EXT);
this->genColorTextureEXT(this->_blurH, GL_COLOR_ATTACHMENT1);
//Generates texture color for vertical blur
this->genColorTextureEXT(this->_blurV, GL_COLOR_ATTACHMENT2_EXT);
this->genColorTextureEXT(this->_blurV, GL_COLOR_ATTACHMENT2);
//Generates render buffer for depth attachment
this->genDepthRenderBufferEXT(this->_depth);
@ -226,8 +226,8 @@ bool VarianceShadowMappingBlur::setup()
glDrawBuffersARB(3, drawBuffers);
//checks for errors
int err = glCheckFramebufferStatusEXT(GL_FRAMEBUFFER_EXT);
_initOk = (err == GL_FRAMEBUFFER_COMPLETE_EXT);
glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, 0);
int err = glCheckFramebufferStatus(GL_FRAMEBUFFER);
_initOk = (err == GL_FRAMEBUFFER_COMPLETE);
glBindFramebuffer(GL_FRAMEBUFFER, 0);
return _initOk;
}