#define _USE_MATH_DEFINES
#include <cmath>
#include "SampleViewportFilter.h"
#include <QtCore/QDir>
MB_PLUGIN(
"Sample Filter",
"Sample Viewport Filter",
"Autodesk",
"http://www.mudbox3d.com", 0 );
static void drawFullScreenQuad() {
glMatrixMode( GL_PROJECTION );
glLoadIdentity();
glMatrixMode( GL_MODELVIEW );
glLoadIdentity();
glBegin( GL_QUADS );
glTexCoord2f( 0, 0 );
glVertex2f( -1, -1 );
glTexCoord2f( 1, 0 );
glVertex2f( 1, -1 );
glTexCoord2f( 1, 1 );
glVertex2f( 1, 1 );
glTexCoord2f( 0, 1 );
glVertex2f( -1, 1 );
glEnd();
}
static void gpuTransform(
Texture*
const outputTexture) {
drawFullScreenQuad();
}
{
}
}
}
SampleViewPortFilter::SampleViewPortFilter() :
m_aGaussianBlur(this, "Gaussian"),
m_aBlurWidth(this, "Blur Width")
{
QDir pluginDir(
Kernel()->PluginDirectory(
"Sample Filter") );
m_BlurProgram =
m_CGContext,
m_FragmentProfile,
"main",
NULL);
m_aGaussianBlur = true;
m_aBlurWidth.SetMax(.0050
f);
m_aBlurWidth.SetMin(.0001
f);
m_aBlurWidth = 0.0012f;
m_pResultTexture = CreateInstance<Texture>();
}
SampleViewPortFilter::~SampleViewPortFilter()
{
if( m_pResultTexture )
delete m_pResultTexture;
if (m_CGContext)
};
{
const float cameraNear =
Kernel()->Scene()->ActiveCamera()->Near();
const float cameraFar =
Kernel()->Scene()->ActiveCamera()->Far();
const float cameraFOV =
Kernel()->Scene()->ActiveCamera()->FOV();
const float cameraAspectRatio =
Kernel()->Scene()->ActiveCamera()->AspectRatio();
const float cameraHeight = tanf(cameraFOV / 2.0
f) * cameraNear;
const float cameraWidth = cameraHeight * cameraAspectRatio;
const float cameraTop = -cameraHeight;
const float cameraBottom = cameraHeight;
const float cameraLeft = -cameraWidth;
const float cameraRight = cameraWidth;
const int extendMin = width < height ? width :
height;
const int levelCountMax = (
int)floorf(logf(
float(extendMin)) / float(M_LN2));
{
};
m_pResultTexture->SetLocation( TexturePool::locationGPU );
gpuTransform(m_pResultTexture);
};
void SampleViewPortFilter::SetVisible( bool bVisible )
{
ViewPortFilter::SetVisible( bVisible );
if( bVisible )
{
if( !m_pResultTexture )
m_pResultTexture = CreateInstance<Texture>();
}
else
{
delete m_pResultTexture;
m_pResultTexture = 0;
};
};