OpenGL Renderer: Make the MSAA sample size limit based on the framebuffer size instead of being fixed at 8xMSAA.
- The MSAA sample size limit is now based on the following sizes: 1x Native Resolution - 32xMSAA 2x Native Resolution - 16xMSAA 3x-8x Native Resolution - 8xMSAA 9x and greater Native Resolution - 4xMSAA
This commit is contained in:
parent
e6d5a8fbe1
commit
2379dc1e41
|
@ -1878,9 +1878,28 @@ Render3DError OpenGLRenderer_1_2::InitExtensions()
|
||||||
|
|
||||||
if (maxSamplesOGL >= 2)
|
if (maxSamplesOGL >= 2)
|
||||||
{
|
{
|
||||||
if (maxSamplesOGL > OGLRENDER_MAX_MULTISAMPLES)
|
GLint maxMultisamples = OGLMaxMultisamples_Tier1;
|
||||||
|
|
||||||
|
if ( (this->_framebufferWidth <= GPU_FRAMEBUFFER_NATIVE_WIDTH) && (this->_framebufferHeight <= GPU_FRAMEBUFFER_NATIVE_HEIGHT) )
|
||||||
{
|
{
|
||||||
maxSamplesOGL = OGLRENDER_MAX_MULTISAMPLES;
|
maxMultisamples = OGLMaxMultisamples_Tier1;
|
||||||
|
}
|
||||||
|
else if ( (this->_framebufferWidth <= GPU_FRAMEBUFFER_NATIVE_WIDTH * 2) && (this->_framebufferHeight <= GPU_FRAMEBUFFER_NATIVE_HEIGHT * 2) )
|
||||||
|
{
|
||||||
|
maxMultisamples = OGLMaxMultisamples_Tier2;
|
||||||
|
}
|
||||||
|
else if ( (this->_framebufferWidth <= GPU_FRAMEBUFFER_NATIVE_WIDTH * 8) && (this->_framebufferHeight <= GPU_FRAMEBUFFER_NATIVE_HEIGHT * 8) )
|
||||||
|
{
|
||||||
|
maxMultisamples = OGLMaxMultisamples_Tier3;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
maxMultisamples = OGLMaxMultisamples_Tier4;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (maxSamplesOGL > maxMultisamples)
|
||||||
|
{
|
||||||
|
maxSamplesOGL = maxMultisamples;
|
||||||
}
|
}
|
||||||
|
|
||||||
error = this->CreateMultisampledFBO(maxSamplesOGL);
|
error = this->CreateMultisampledFBO(maxSamplesOGL);
|
||||||
|
@ -4451,9 +4470,28 @@ Render3DError OpenGLRenderer_1_2::SetFramebufferSize(size_t w, size_t h)
|
||||||
if (this->isMultisampledFBOSupported)
|
if (this->isMultisampledFBOSupported)
|
||||||
{
|
{
|
||||||
GLsizei maxSamplesOGL = (GLsizei)this->_deviceInfo.maxSamples;
|
GLsizei maxSamplesOGL = (GLsizei)this->_deviceInfo.maxSamples;
|
||||||
if (maxSamplesOGL > OGLRENDER_MAX_MULTISAMPLES)
|
GLint maxMultisamples = OGLMaxMultisamples_Tier1;
|
||||||
|
|
||||||
|
if ( (w <= GPU_FRAMEBUFFER_NATIVE_WIDTH) && (h <= GPU_FRAMEBUFFER_NATIVE_HEIGHT) )
|
||||||
{
|
{
|
||||||
maxSamplesOGL = OGLRENDER_MAX_MULTISAMPLES;
|
maxMultisamples = OGLMaxMultisamples_Tier1;
|
||||||
|
}
|
||||||
|
else if ( (w <= GPU_FRAMEBUFFER_NATIVE_WIDTH * 2) && (h <= GPU_FRAMEBUFFER_NATIVE_HEIGHT * 2) )
|
||||||
|
{
|
||||||
|
maxMultisamples = OGLMaxMultisamples_Tier2;
|
||||||
|
}
|
||||||
|
else if ( (w <= GPU_FRAMEBUFFER_NATIVE_WIDTH * 8) && (h <= GPU_FRAMEBUFFER_NATIVE_HEIGHT * 8) )
|
||||||
|
{
|
||||||
|
maxMultisamples = OGLMaxMultisamples_Tier3;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
maxMultisamples = OGLMaxMultisamples_Tier4;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (maxSamplesOGL > maxMultisamples)
|
||||||
|
{
|
||||||
|
maxSamplesOGL = maxMultisamples;
|
||||||
}
|
}
|
||||||
|
|
||||||
glBindRenderbufferEXT(GL_RENDERBUFFER_EXT, OGLRef.rboMSGColorID);
|
glBindRenderbufferEXT(GL_RENDERBUFFER_EXT, OGLRef.rboMSGColorID);
|
||||||
|
|
|
@ -280,9 +280,16 @@ EXTERNOGLEXT(PFNGLTEXBUFFERPROC, glTexBuffer) // Core in v3.1
|
||||||
#define OGLRENDER_MINIMUM_DRIVER_VERSION_REQUIRED_MINOR 2
|
#define OGLRENDER_MINIMUM_DRIVER_VERSION_REQUIRED_MINOR 2
|
||||||
#define OGLRENDER_MINIMUM_DRIVER_VERSION_REQUIRED_REVISION 0
|
#define OGLRENDER_MINIMUM_DRIVER_VERSION_REQUIRED_REVISION 0
|
||||||
|
|
||||||
#define OGLRENDER_MAX_MULTISAMPLES 8
|
|
||||||
#define OGLRENDER_VERT_INDEX_BUFFER_COUNT (POLYLIST_SIZE * 6)
|
#define OGLRENDER_VERT_INDEX_BUFFER_COUNT (POLYLIST_SIZE * 6)
|
||||||
|
|
||||||
|
enum OGLMaxMultisamples
|
||||||
|
{
|
||||||
|
OGLMaxMultisamples_Tier1 = 32,
|
||||||
|
OGLMaxMultisamples_Tier2 = 16,
|
||||||
|
OGLMaxMultisamples_Tier3 = 8,
|
||||||
|
OGLMaxMultisamples_Tier4 = 4,
|
||||||
|
};
|
||||||
|
|
||||||
enum OGLVertexAttributeID
|
enum OGLVertexAttributeID
|
||||||
{
|
{
|
||||||
OGLVertexAttributeID_Position = 0,
|
OGLVertexAttributeID_Position = 0,
|
||||||
|
|
|
@ -703,9 +703,28 @@ Render3DError OpenGLRenderer_3_2::InitExtensions()
|
||||||
|
|
||||||
if (maxSamplesOGL >= 2)
|
if (maxSamplesOGL >= 2)
|
||||||
{
|
{
|
||||||
if (maxSamplesOGL > OGLRENDER_MAX_MULTISAMPLES)
|
GLint maxMultisamples = OGLMaxMultisamples_Tier1;
|
||||||
|
|
||||||
|
if ( (this->_framebufferWidth <= GPU_FRAMEBUFFER_NATIVE_WIDTH) && (this->_framebufferHeight <= GPU_FRAMEBUFFER_NATIVE_HEIGHT) )
|
||||||
{
|
{
|
||||||
maxSamplesOGL = OGLRENDER_MAX_MULTISAMPLES;
|
maxMultisamples = OGLMaxMultisamples_Tier1;
|
||||||
|
}
|
||||||
|
else if ( (this->_framebufferWidth <= GPU_FRAMEBUFFER_NATIVE_WIDTH * 2) && (this->_framebufferHeight <= GPU_FRAMEBUFFER_NATIVE_HEIGHT * 2) )
|
||||||
|
{
|
||||||
|
maxMultisamples = OGLMaxMultisamples_Tier2;
|
||||||
|
}
|
||||||
|
else if ( (this->_framebufferWidth <= GPU_FRAMEBUFFER_NATIVE_WIDTH * 8) && (this->_framebufferHeight <= GPU_FRAMEBUFFER_NATIVE_HEIGHT * 8) )
|
||||||
|
{
|
||||||
|
maxMultisamples = OGLMaxMultisamples_Tier3;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
maxMultisamples = OGLMaxMultisamples_Tier4;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (maxSamplesOGL > maxMultisamples)
|
||||||
|
{
|
||||||
|
maxSamplesOGL = maxMultisamples;
|
||||||
}
|
}
|
||||||
|
|
||||||
error = this->CreateMultisampledFBO(maxSamplesOGL);
|
error = this->CreateMultisampledFBO(maxSamplesOGL);
|
||||||
|
@ -2008,9 +2027,28 @@ Render3DError OpenGLRenderer_3_2::SetFramebufferSize(size_t w, size_t h)
|
||||||
if (this->isMultisampledFBOSupported)
|
if (this->isMultisampledFBOSupported)
|
||||||
{
|
{
|
||||||
GLsizei maxSamplesOGL = (GLsizei)this->_deviceInfo.maxSamples;
|
GLsizei maxSamplesOGL = (GLsizei)this->_deviceInfo.maxSamples;
|
||||||
if (maxSamplesOGL > OGLRENDER_MAX_MULTISAMPLES)
|
GLint maxMultisamples = OGLMaxMultisamples_Tier1;
|
||||||
|
|
||||||
|
if ( (w <= GPU_FRAMEBUFFER_NATIVE_WIDTH) && (h <= GPU_FRAMEBUFFER_NATIVE_HEIGHT) )
|
||||||
{
|
{
|
||||||
maxSamplesOGL = OGLRENDER_MAX_MULTISAMPLES;
|
maxMultisamples = OGLMaxMultisamples_Tier1;
|
||||||
|
}
|
||||||
|
else if ( (w <= GPU_FRAMEBUFFER_NATIVE_WIDTH * 2) && (h <= GPU_FRAMEBUFFER_NATIVE_HEIGHT * 2) )
|
||||||
|
{
|
||||||
|
maxMultisamples = OGLMaxMultisamples_Tier2;
|
||||||
|
}
|
||||||
|
else if ( (w <= GPU_FRAMEBUFFER_NATIVE_WIDTH * 8) && (h <= GPU_FRAMEBUFFER_NATIVE_HEIGHT * 8) )
|
||||||
|
{
|
||||||
|
maxMultisamples = OGLMaxMultisamples_Tier3;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
maxMultisamples = OGLMaxMultisamples_Tier4;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (maxSamplesOGL > maxMultisamples)
|
||||||
|
{
|
||||||
|
maxSamplesOGL = maxMultisamples;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (this->willUsePerSampleZeroDstPass)
|
if (this->willUsePerSampleZeroDstPass)
|
||||||
|
|
Loading…
Reference in New Issue