Merged logic fix from 2.7.1 trunk.

This commit is contained in:
Camilla Berglund 2010-09-28 00:22:34 +02:00
parent f93801c221
commit fdcbb402a8

View File

@ -256,18 +256,9 @@ const _GLFWfbconfig* _glfwChooseFBConfig(const _GLFWfbconfig* desired,
unsigned int missing, leastMissing = UINT_MAX; unsigned int missing, leastMissing = UINT_MAX;
unsigned int colorDiff, leastColorDiff = UINT_MAX; unsigned int colorDiff, leastColorDiff = UINT_MAX;
unsigned int extraDiff, leastExtraDiff = UINT_MAX; unsigned int extraDiff, leastExtraDiff = UINT_MAX;
GLboolean desiresColor = GL_FALSE;
const _GLFWfbconfig* current; const _GLFWfbconfig* current;
const _GLFWfbconfig* closest = NULL; const _GLFWfbconfig* closest = NULL;
// Cache some long-winded preferences
if (desired->redBits || desired->greenBits || desired->blueBits ||
desired->alphaBits)
{
desiresColor = GL_TRUE;
}
for (i = 0; i < count; i++) for (i = 0; i < count; i++)
{ {
current = alternatives + i; current = alternatives + i;
@ -383,26 +374,17 @@ const _GLFWfbconfig* _glfwChooseFBConfig(const _GLFWfbconfig* desired,
} }
// Figure out if the current one is better than the best one found so far // Figure out if the current one is better than the best one found so far
// Missing buffers is the most important heuristic, then color buffer size
// mismatches and lastly size mismatches for other buffers
if (missing < leastMissing) if (missing < leastMissing)
closest = current; closest = current;
else if (missing == leastMissing) else if (missing == leastMissing)
{ {
if (desiresColor) if ((colorDiff < leastColorDiff) ||
(colorDiff == leastColorDiff && extraDiff < leastExtraDiff))
{ {
if ((colorDiff < leastColorDiff) || closest = current;
(colorDiff == leastColorDiff && extraDiff < leastExtraDiff))
{
closest = current;
}
}
else
{
if ((extraDiff < leastExtraDiff) ||
(extraDiff == leastExtraDiff && colorDiff < leastColorDiff))
{
closest = current;
}
} }
} }