Fixed out of bounds access to m_shaderBuffer array in 3D viewer raytracer
This commit is contained in:
parent
e0b33ee8a6
commit
5bbb4489b3
|
@ -965,16 +965,16 @@ void C3D_RENDER_RAYTRACING::rt_render_post_process_blur_finish( GLubyte *ptrPBO,
|
||||||
{
|
{
|
||||||
GLubyte *ptr = &ptrPBO[ y * m_realBufferSize.x * 4 ];
|
GLubyte *ptr = &ptrPBO[ y * m_realBufferSize.x * 4 ];
|
||||||
|
|
||||||
SFVEC3F *ptrShaderY0 =
|
const SFVEC3F *ptrShaderY0 =
|
||||||
&m_shaderBuffer[ glm::max((int)y - 2, 0) * m_realBufferSize.x ];
|
&m_shaderBuffer[ glm::max((int)y - 2, 0) * m_realBufferSize.x ];
|
||||||
SFVEC3F *ptrShaderY1 =
|
const SFVEC3F *ptrShaderY1 =
|
||||||
&m_shaderBuffer[ glm::max((int)y - 1, 0) * m_realBufferSize.x ];
|
&m_shaderBuffer[ glm::max((int)y - 1, 0) * m_realBufferSize.x ];
|
||||||
SFVEC3F *ptrShaderY2 =
|
const SFVEC3F *ptrShaderY2 =
|
||||||
&m_shaderBuffer[ y * m_realBufferSize.x ];
|
&m_shaderBuffer[ y * m_realBufferSize.x ];
|
||||||
SFVEC3F *ptrShaderY3 =
|
const SFVEC3F *ptrShaderY3 =
|
||||||
&m_shaderBuffer[ glm::min((int)y + 1, (int)(m_realBufferSize.y - 1)) *
|
&m_shaderBuffer[ glm::min((int)y + 1, (int)(m_realBufferSize.y - 1)) *
|
||||||
m_realBufferSize.x ];
|
m_realBufferSize.x ];
|
||||||
SFVEC3F *ptrShaderY4 =
|
const SFVEC3F *ptrShaderY4 =
|
||||||
&m_shaderBuffer[ glm::min((int)y + 2, (int)(m_realBufferSize.y - 1)) *
|
&m_shaderBuffer[ glm::min((int)y + 2, (int)(m_realBufferSize.y - 1)) *
|
||||||
m_realBufferSize.x ];
|
m_realBufferSize.x ];
|
||||||
|
|
||||||
|
@ -982,77 +982,46 @@ void C3D_RENDER_RAYTRACING::rt_render_post_process_blur_finish( GLubyte *ptrPBO,
|
||||||
{
|
{
|
||||||
// This #if should be 1, it is here that can be used for debug proposes during development
|
// This #if should be 1, it is here that can be used for debug proposes during development
|
||||||
#if 1
|
#if 1
|
||||||
|
int idx = x > 1 ? -2 : 0;
|
||||||
|
SFVEC3F bluredShadeColor = ptrShaderY0[idx] * 1.0f / 273.0f +
|
||||||
|
ptrShaderY1[idx] * 4.0f / 273.0f +
|
||||||
|
ptrShaderY2[idx] * 7.0f / 273.0f +
|
||||||
|
ptrShaderY3[idx] * 4.0f / 273.0f +
|
||||||
|
ptrShaderY4[idx] * 1.0f / 273.0f;
|
||||||
|
|
||||||
SFVEC3F bluredShadeColor = (*ptrShaderY0) * 1.0f / 273.0f +
|
idx = x > 0 ? -1 : 0;
|
||||||
(*ptrShaderY1) * 4.0f / 273.0f +
|
bluredShadeColor += ptrShaderY0[idx] * 4.0f / 273.0f +
|
||||||
(*ptrShaderY2) * 7.0f / 273.0f +
|
ptrShaderY1[idx] * 16.0f / 273.0f +
|
||||||
(*ptrShaderY3) * 4.0f / 273.0f +
|
ptrShaderY2[idx] * 26.0f / 273.0f +
|
||||||
(*ptrShaderY4) * 1.0f / 273.0f;
|
ptrShaderY3[idx] * 16.0f / 273.0f +
|
||||||
if( x > 1 )
|
ptrShaderY4[idx] * 4.0f / 273.0f;
|
||||||
{
|
|
||||||
ptrShaderY0++;
|
|
||||||
ptrShaderY1++;
|
|
||||||
ptrShaderY2++;
|
|
||||||
ptrShaderY3++;
|
|
||||||
ptrShaderY4++;
|
|
||||||
}
|
|
||||||
|
|
||||||
bluredShadeColor += (*ptrShaderY0) * 4.0f / 273.0f +
|
bluredShadeColor += (*ptrShaderY0) * 7.0f / 273.0f +
|
||||||
(*ptrShaderY1) *16.0f / 273.0f +
|
(*ptrShaderY1) * 26.0f / 273.0f +
|
||||||
(*ptrShaderY2) *26.0f / 273.0f +
|
(*ptrShaderY2) * 41.0f / 273.0f +
|
||||||
(*ptrShaderY3) *16.0f / 273.0f +
|
(*ptrShaderY3) * 26.0f / 273.0f +
|
||||||
(*ptrShaderY4) * 4.0f / 273.0f;
|
(*ptrShaderY4) * 7.0f / 273.0f;
|
||||||
|
|
||||||
if( x > 0 )
|
idx = (x < (int)m_realBufferSize.x - 1) ? 1 : 0;
|
||||||
{
|
bluredShadeColor += ptrShaderY0[idx] * 4.0f / 273.0f +
|
||||||
ptrShaderY0++;
|
ptrShaderY1[idx] *16.0f / 273.0f +
|
||||||
ptrShaderY1++;
|
ptrShaderY2[idx] *26.0f / 273.0f +
|
||||||
ptrShaderY2++;
|
ptrShaderY3[idx] *16.0f / 273.0f +
|
||||||
ptrShaderY3++;
|
ptrShaderY4[idx] * 4.0f / 273.0f;
|
||||||
ptrShaderY4++;
|
|
||||||
}
|
|
||||||
|
|
||||||
bluredShadeColor += (*ptrShaderY0) * 7.0f / 273.0f +
|
idx = (x < (int)m_realBufferSize.x - 2) ? 2 : 0;
|
||||||
(*ptrShaderY1) *26.0f / 273.0f +
|
bluredShadeColor += ptrShaderY0[idx] * 1.0f / 273.0f +
|
||||||
(*ptrShaderY2) *41.0f / 273.0f +
|
ptrShaderY1[idx] * 4.0f / 273.0f +
|
||||||
(*ptrShaderY3) *26.0f / 273.0f +
|
ptrShaderY2[idx] * 7.0f / 273.0f +
|
||||||
(*ptrShaderY4) * 7.0f / 273.0f;
|
ptrShaderY3[idx] * 4.0f / 273.0f +
|
||||||
|
ptrShaderY4[idx] * 1.0f / 273.0f;
|
||||||
|
|
||||||
if( x < ((int)m_realBufferSize.x - 1) )
|
// process next pixel
|
||||||
{
|
++ptrShaderY0;
|
||||||
ptrShaderY0++;
|
++ptrShaderY1;
|
||||||
ptrShaderY1++;
|
++ptrShaderY2;
|
||||||
ptrShaderY2++;
|
++ptrShaderY3;
|
||||||
ptrShaderY3++;
|
++ptrShaderY4;
|
||||||
ptrShaderY4++;
|
|
||||||
}
|
|
||||||
|
|
||||||
bluredShadeColor += (*ptrShaderY0) * 4.0f / 273.0f +
|
|
||||||
(*ptrShaderY1) *16.0f / 273.0f +
|
|
||||||
(*ptrShaderY2) *26.0f / 273.0f +
|
|
||||||
(*ptrShaderY3) *16.0f / 273.0f +
|
|
||||||
(*ptrShaderY4) * 4.0f / 273.0f;
|
|
||||||
|
|
||||||
if( x < ((int)m_realBufferSize.x - 2) )
|
|
||||||
{
|
|
||||||
ptrShaderY0++;
|
|
||||||
ptrShaderY1++;
|
|
||||||
ptrShaderY2++;
|
|
||||||
ptrShaderY3++;
|
|
||||||
ptrShaderY4++;
|
|
||||||
}
|
|
||||||
|
|
||||||
bluredShadeColor += (*ptrShaderY0) * 1.0f / 273.0f +
|
|
||||||
(*ptrShaderY1) * 4.0f / 273.0f +
|
|
||||||
(*ptrShaderY2) * 7.0f / 273.0f +
|
|
||||||
(*ptrShaderY3) * 4.0f / 273.0f +
|
|
||||||
(*ptrShaderY4) * 1.0f / 273.0f;
|
|
||||||
|
|
||||||
ptrShaderY0-= 3;
|
|
||||||
ptrShaderY1-= 3;
|
|
||||||
ptrShaderY2-= 3;
|
|
||||||
ptrShaderY3-= 3;
|
|
||||||
ptrShaderY4-= 3;
|
|
||||||
|
|
||||||
#ifdef USE_SRGB_SPACE
|
#ifdef USE_SRGB_SPACE
|
||||||
const SFVEC3F originColor = convertLinearToSRGB( m_postshader_ssao.GetColorAtNotProtected( SFVEC2I( x,y ) ) );
|
const SFVEC3F originColor = convertLinearToSRGB( m_postshader_ssao.GetColorAtNotProtected( SFVEC2I( x,y ) ) );
|
||||||
|
|
Loading…
Reference in New Issue