mirror of
https://github.com/lucaspalomodevelop/meshlab.git
synced 2026-03-16 01:24:36 +00:00
- removed gpu memory leaks! (THANKS to Gianpaolo!)
This commit is contained in:
parent
23dd9b234e
commit
f3abbe7bec
@ -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;
|
||||
}
|
||||
};
|
||||
|
||||
@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
@ -81,7 +81,7 @@ public:
|
||||
_decoratorSSAO = new SSAO(0.1f);*/
|
||||
|
||||
smShader = NULL;
|
||||
vsmbShader = NULL;
|
||||
vsmShader = NULL;
|
||||
vsmbShader = NULL;
|
||||
_decoratorSSAO = NULL;
|
||||
}
|
||||
|
||||
@ -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;
|
||||
}
|
||||
|
||||
@ -30,7 +30,7 @@ class ShadowMapping : public DecorateShader
|
||||
public:
|
||||
|
||||
ShadowMapping(float);
|
||||
~ShadowMapping();
|
||||
virtual ~ShadowMapping();
|
||||
|
||||
/**
|
||||
* Performs init commands.
|
||||
|
||||
@ -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;
|
||||
}
|
||||
|
||||
|
||||
@ -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;
|
||||
}
|
||||
|
||||
@ -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;
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user