forked from bartvdbraak/blender
Pixel format selection now favours a format with a number of samples
closer to the one requested on Windows. Patch D1384 by Benoit Bolsee.
This commit is contained in:
parent
05ee9d2dd0
commit
422ffd252a
@ -475,7 +475,7 @@ static void makeAttribList(
|
||||
out.push_back(numOfAASamples);
|
||||
|
||||
out.push_back(WGL_SAMPLE_BUFFERS_ARB);
|
||||
out.push_back(1);
|
||||
out.push_back(GL_TRUE);
|
||||
}
|
||||
|
||||
if (sRGB) {
|
||||
@ -489,7 +489,7 @@ static void makeAttribList(
|
||||
|
||||
int GHOST_ContextWGL::_choose_pixel_format_arb_2(
|
||||
bool stereoVisual,
|
||||
int numOfAASamples,
|
||||
int *numOfAASamples,
|
||||
bool needAlpha,
|
||||
bool needStencil,
|
||||
bool sRGB,
|
||||
@ -502,12 +502,12 @@ int GHOST_ContextWGL::_choose_pixel_format_arb_2(
|
||||
int samples;
|
||||
|
||||
// guard against some insanely high number of samples
|
||||
if (numOfAASamples > 64) {
|
||||
if (*numOfAASamples > 64) {
|
||||
fprintf(stderr, "Warning! Clamping number of samples to 64.\n");
|
||||
samples = 64;
|
||||
}
|
||||
else {
|
||||
samples = numOfAASamples;
|
||||
samples = *numOfAASamples;
|
||||
}
|
||||
|
||||
// request a format with as many samples as possible, but not more than requested
|
||||
@ -542,46 +542,78 @@ int GHOST_ContextWGL::_choose_pixel_format_arb_2(
|
||||
int actualSamples;
|
||||
wglGetPixelFormatAttribivARB(m_hDC, iPixelFormat, 0, 1, iQuery, &actualSamples);
|
||||
|
||||
if (actualSamples != numOfAASamples) {
|
||||
if (actualSamples != *numOfAASamples) {
|
||||
fprintf(stderr,
|
||||
"Warning! Unable to find a multisample pixel format that supports exactly %d samples. "
|
||||
"Substituting one that uses %d samples.\n",
|
||||
numOfAASamples, actualSamples);
|
||||
*numOfAASamples, actualSamples);
|
||||
|
||||
m_numOfAASamples = actualSamples; // set context property to actual value
|
||||
*numOfAASamples = actualSamples; // set context property to actual value
|
||||
}
|
||||
}
|
||||
|
||||
else {
|
||||
*numOfAASamples = 0;
|
||||
}
|
||||
return iPixelFormat;
|
||||
}
|
||||
|
||||
|
||||
int GHOST_ContextWGL::_choose_pixel_format_arb_1(
|
||||
bool stereoVisual,
|
||||
int GHOST_ContextWGL::_choose_pixel_format_arb_1(bool stereoVisual,
|
||||
int numOfAASamples,
|
||||
bool needAlpha,
|
||||
bool needStencil,
|
||||
bool sRGB,
|
||||
int &swapMethodOut)
|
||||
int *swapMethodOut)
|
||||
{
|
||||
int iPixelFormat;
|
||||
int copyPixelFormat = 0;
|
||||
int undefPixelFormat = 0;
|
||||
int exchPixelFormat = 0;
|
||||
int copyNumOfAASamples = 0;
|
||||
int undefNumOfAASamples = 0;
|
||||
int exchNumOfAASamples = 0;
|
||||
|
||||
swapMethodOut = WGL_SWAP_COPY_ARB;
|
||||
iPixelFormat = _choose_pixel_format_arb_2(
|
||||
stereoVisual, numOfAASamples, needAlpha, needStencil, sRGB, swapMethodOut);
|
||||
*swapMethodOut = WGL_SWAP_COPY_ARB;
|
||||
copyNumOfAASamples = numOfAASamples;
|
||||
copyPixelFormat = _choose_pixel_format_arb_2(
|
||||
stereoVisual, ©NumOfAASamples, needAlpha, needStencil, sRGB, *swapMethodOut);
|
||||
|
||||
if (iPixelFormat == 0) {
|
||||
swapMethodOut = WGL_SWAP_UNDEFINED_ARB;
|
||||
iPixelFormat = _choose_pixel_format_arb_2(
|
||||
stereoVisual, numOfAASamples, needAlpha, needStencil, sRGB, swapMethodOut);
|
||||
if (copyPixelFormat == 0 || copyNumOfAASamples < numOfAASamples) {
|
||||
*swapMethodOut = WGL_SWAP_UNDEFINED_ARB;
|
||||
undefNumOfAASamples = numOfAASamples;
|
||||
undefPixelFormat = _choose_pixel_format_arb_2(
|
||||
stereoVisual, &undefNumOfAASamples, needAlpha, needStencil, sRGB, *swapMethodOut);
|
||||
|
||||
if (undefPixelFormat == 0 || undefNumOfAASamples < numOfAASamples) {
|
||||
*swapMethodOut = WGL_SWAP_EXCHANGE_ARB;
|
||||
exchNumOfAASamples = numOfAASamples;
|
||||
exchPixelFormat = _choose_pixel_format_arb_2(
|
||||
stereoVisual, &exchNumOfAASamples, needAlpha, needStencil, sRGB, *swapMethodOut);
|
||||
if (exchPixelFormat == 0 || exchNumOfAASamples < numOfAASamples) {
|
||||
// the number of AA samples cannot be met, take the highest
|
||||
if (undefPixelFormat != 0 && undefNumOfAASamples >= exchNumOfAASamples) {
|
||||
exchNumOfAASamples = undefNumOfAASamples;
|
||||
exchPixelFormat = undefPixelFormat;
|
||||
*swapMethodOut = WGL_SWAP_UNDEFINED_ARB;
|
||||
}
|
||||
if (copyPixelFormat != 0 && copyNumOfAASamples >= exchNumOfAASamples) {
|
||||
exchNumOfAASamples = copyNumOfAASamples;
|
||||
exchPixelFormat = copyPixelFormat;
|
||||
*swapMethodOut = WGL_SWAP_COPY_ARB;
|
||||
}
|
||||
}
|
||||
iPixelFormat = exchPixelFormat;
|
||||
m_numOfAASamples = exchNumOfAASamples;
|
||||
}
|
||||
else {
|
||||
iPixelFormat = undefPixelFormat;
|
||||
m_numOfAASamples = undefNumOfAASamples;
|
||||
}
|
||||
}
|
||||
|
||||
if (iPixelFormat == 0) {
|
||||
swapMethodOut = WGL_SWAP_EXCHANGE_ARB;
|
||||
iPixelFormat = _choose_pixel_format_arb_2(
|
||||
stereoVisual, numOfAASamples, needAlpha, needStencil, sRGB, swapMethodOut);
|
||||
else {
|
||||
iPixelFormat = copyPixelFormat;
|
||||
m_numOfAASamples = copyNumOfAASamples;
|
||||
}
|
||||
|
||||
return iPixelFormat;
|
||||
}
|
||||
|
||||
@ -602,7 +634,7 @@ int GHOST_ContextWGL::choose_pixel_format_arb(
|
||||
needAlpha,
|
||||
needStencil,
|
||||
sRGB,
|
||||
swapMethodOut);
|
||||
&swapMethodOut);
|
||||
|
||||
if (iPixelFormat == 0 && stereoVisual) {
|
||||
fprintf(stderr, "Warning! Unable to find a stereo pixel format.\n");
|
||||
@ -613,7 +645,7 @@ int GHOST_ContextWGL::choose_pixel_format_arb(
|
||||
needAlpha,
|
||||
needStencil,
|
||||
sRGB,
|
||||
swapMethodOut);
|
||||
&swapMethodOut);
|
||||
|
||||
m_stereoVisual = false; // set context property to actual value
|
||||
}
|
||||
|
@ -148,11 +148,10 @@ private:
|
||||
bool needAlpha,
|
||||
bool needStencil,
|
||||
bool sRGB,
|
||||
int &swapMethodOut);
|
||||
int *swapMethodOut);
|
||||
|
||||
int _choose_pixel_format_arb_2(
|
||||
bool stereoVisual,
|
||||
int numOfAASamples,
|
||||
int _choose_pixel_format_arb_2(bool stereoVisual,
|
||||
int *numOfAASamples,
|
||||
bool needAlpha,
|
||||
bool needStencil,
|
||||
bool sRGB,
|
||||
|
Loading…
Reference in New Issue
Block a user