From: Rémi Bernon rbernon@codeweavers.com
The driver uses the default implementation provided by opengl32.dll. --- dlls/winemac.drv/opengl.c | 324 +------------------------------------- 1 file changed, 1 insertion(+), 323 deletions(-)
diff --git a/dlls/winemac.drv/opengl.c b/dlls/winemac.drv/opengl.c index 65ec565ea64..114d5a8d43f 100644 --- a/dlls/winemac.drv/opengl.c +++ b/dlls/winemac.drv/opengl.c @@ -2373,328 +2373,6 @@ static BOOL macdrv_wglBindTexImageARB(struct wgl_pbuffer *pbuffer, int iBuffer) }
-/*********************************************************************** - * macdrv_wglChoosePixelFormatARB - * - * WGL_ARB_pixel_format: wglChoosePixelFormatARB - */ -static BOOL macdrv_wglChoosePixelFormatARB(HDC hdc, const int *piAttribIList, - const FLOAT *pfAttribFList, UINT nMaxFormats, - int *piFormats, UINT *nNumFormats) -{ - pixel_format pf, valid; - const int *iptr; - int color_bits, red_bits, green_bits, blue_bits, alpha_bits; - int accum_bits, accum_red_bits, accum_green_bits, accum_blue_bits, accum_alpha_bits; - int float_color; - BOOL srgb; - int i, found = 0; - - TRACE("hdc %p piAttribIList %p pfAttribFList %p nMaxFormats %u piFormats %p nNumFormats %p\n", - hdc, piAttribIList, pfAttribFList, nMaxFormats, piFormats, nNumFormats); - if (pfAttribFList) - FIXME("unused pfAttribFList\n"); - - memset(&pf, 0, sizeof(pf)); - memset(&valid, 0, sizeof(valid)); - color_bits = red_bits = green_bits = blue_bits = alpha_bits = 0; - accum_bits = accum_red_bits = accum_green_bits = accum_blue_bits = accum_alpha_bits = 0; - float_color = -1; - srgb = FALSE; - - for (iptr = piAttribIList; iptr && *iptr; iptr += 2) - { - int attr = iptr[0]; - int value = iptr[1]; - - TRACE("%s\n", debugstr_attrib(attr, value)); - - switch (attr) - { - case WGL_DRAW_TO_WINDOW_ARB: - if (valid.window && (!pf.window != !value)) goto cant_match; - pf.window = (value != 0); - valid.window = 1; - break; - - case WGL_DRAW_TO_BITMAP_ARB: - goto cant_match; - - case WGL_ACCELERATION_ARB: - if (value == WGL_FULL_ACCELERATION_ARB) - value = 1; - else if (value == WGL_NO_ACCELERATION_ARB) - value = 0; - else - goto cant_match; - if (valid.accelerated && pf.accelerated != value) goto cant_match; - pf.accelerated = value; - valid.accelerated = 1; - break; - - case WGL_NEED_PALETTE_ARB: - case WGL_NEED_SYSTEM_PALETTE_ARB: - case WGL_SWAP_LAYER_BUFFERS_ARB: - if (value) goto cant_match; - break; - - case WGL_SWAP_METHOD_ARB: - if (value == WGL_SWAP_COPY_ARB) - value = 1; - else if (value == WGL_SWAP_UNDEFINED_ARB) - value = 0; - else - goto cant_match; - if (valid.backing_store && pf.backing_store != value) goto cant_match; - if (valid.double_buffer && !pf.double_buffer && value) goto cant_match; - pf.backing_store = value; - valid.backing_store = 1; - break; - - case WGL_NUMBER_OVERLAYS_ARB: - case WGL_NUMBER_UNDERLAYS_ARB: - if (value) goto cant_match; - break; - - case WGL_SHARE_DEPTH_ARB: - case WGL_SHARE_STENCIL_ARB: - case WGL_SHARE_ACCUM_ARB: - /* no effect */ - break; - - case WGL_SUPPORT_GDI_ARB: - if (value) goto cant_match; - break; - - case WGL_SUPPORT_OPENGL_ARB: - if (!value) goto cant_match; - break; - - case WGL_DOUBLE_BUFFER_ARB: - if (valid.double_buffer && (!pf.double_buffer != !value)) goto cant_match; - pf.double_buffer = (value != 0); - valid.double_buffer = 1; - if (valid.backing_store && pf.backing_store && !pf.double_buffer) goto cant_match; - break; - - case WGL_STEREO_ARB: - if (valid.stereo && (!pf.stereo != !value)) goto cant_match; - pf.stereo = (value != 0); - valid.stereo = 1; - break; - - case WGL_PIXEL_TYPE_ARB: - if (value == WGL_TYPE_RGBA_FLOAT_ARB) - value = 1; - else if (value == WGL_TYPE_RGBA_ARB) - value = 0; - else - { - /* Mac contexts don't support rendering to unsigned floating - point formats, even if GL_EXT_packed_float is supported. - So, WGL_TYPE_RGBA_UNSIGNED_FLOAT_EXT is not supported. */ - goto cant_match; - } - if (float_color != -1 && float_color != value) goto cant_match; - if (srgb && value) goto cant_match; - float_color = value; - break; - - case WGL_COLOR_BITS_ARB: - if (color_bits < value) color_bits = value; - break; - - case WGL_RED_BITS_ARB: - if (srgb && value > 8) goto cant_match; - if (red_bits < value) red_bits = value; - break; - - case WGL_GREEN_BITS_ARB: - if (srgb && value > 8) goto cant_match; - if (green_bits < value) green_bits = value; - break; - - case WGL_BLUE_BITS_ARB: - if (srgb && value > 8) goto cant_match; - if (blue_bits < value) blue_bits = value; - break; - - case WGL_ALPHA_BITS_ARB: - if (alpha_bits < value) alpha_bits = value; - break; - - case WGL_ACCUM_BITS_ARB: - if (accum_bits < value) accum_bits = value; - break; - - case WGL_ACCUM_RED_BITS_ARB: - if (accum_red_bits < value) accum_red_bits = value; - break; - - case WGL_ACCUM_GREEN_BITS_ARB: - if (accum_green_bits < value) accum_green_bits = value; - break; - - case WGL_ACCUM_BLUE_BITS_ARB: - if (accum_blue_bits < value) accum_blue_bits = value; - break; - - case WGL_ACCUM_ALPHA_BITS_ARB: - if (accum_alpha_bits < value) accum_alpha_bits = value; - break; - - case WGL_DEPTH_BITS_ARB: - if (value > 255) goto cant_match; - if (pf.depth_bits < value) pf.depth_bits = value; - break; - - case WGL_STENCIL_BITS_ARB: - if (value > 255) goto cant_match; - if (pf.stencil_bits < value) pf.stencil_bits = value; - break; - - case WGL_AUX_BUFFERS_ARB: - if (value > 7) goto cant_match; - if (pf.aux_buffers < value) pf.aux_buffers = value; - break; - - case WGL_SAMPLE_BUFFERS_ARB: - if (value > 1) goto cant_match; - if (pf.sample_buffers < value) pf.sample_buffers = value; - break; - - case WGL_SAMPLES_ARB: - if (value > 31) goto cant_match; - if (pf.samples < value) pf.samples = value; - break; - - case WGL_FRAMEBUFFER_SRGB_CAPABLE_ARB: /* a.k.a. WGL_FRAMEBUFFER_SRGB_CAPABLE_EXT */ - /* sRGB is only supported for 8-bit integer color components */ - if (float_color >= 1 || red_bits > 8 || green_bits > 8 || blue_bits > 8) - goto cant_match; - srgb = TRUE; - break; - - case WGL_NUMBER_PIXEL_FORMATS_ARB: - case WGL_RED_SHIFT_ARB: - case WGL_GREEN_SHIFT_ARB: - case WGL_BLUE_SHIFT_ARB: - case WGL_ALPHA_SHIFT_ARB: - case WGL_TRANSPARENT_ARB: - case WGL_TRANSPARENT_RED_VALUE_ARB: - case WGL_TRANSPARENT_GREEN_VALUE_ARB: - case WGL_TRANSPARENT_BLUE_VALUE_ARB: - case WGL_TRANSPARENT_ALPHA_VALUE_ARB: - case WGL_TRANSPARENT_INDEX_VALUE_ARB: - /* ignored */ - break; - - case WGL_DRAW_TO_PBUFFER_ARB: - case WGL_BIND_TO_TEXTURE_RGB_ARB: - case WGL_BIND_TO_TEXTURE_RGBA_ARB: - case WGL_BIND_TO_TEXTURE_RECTANGLE_RGB_NV: - case WGL_BIND_TO_TEXTURE_RECTANGLE_RGBA_NV: - if (valid.pbuffer && (!pf.pbuffer != !value)) goto cant_match; - pf.pbuffer = (value != 0); - valid.pbuffer = 1; - if ((attr == WGL_BIND_TO_TEXTURE_RGBA_ARB || attr == WGL_BIND_TO_TEXTURE_RECTANGLE_RGBA_NV) && - !alpha_bits) - alpha_bits = 1; - break; - - default: - WARN("invalid attribute %s\n", debugstr_attrib(attr, value)); - return GL_FALSE; - } - } - - TRACE("required: w/p/a %s/%s/%s col/r/g/b/a %d%s/%d/%d/%d/%d srgb %d ac %d/%d/%d/%d/%d dp/stn/ax/b/db/str %u/%u/%u/%s/%s/%s samp %u/%u\n", - valid.window ? (pf.window ? "1" : "0") : "?", - valid.pbuffer ? (pf.pbuffer ? "1" : "0") : "?", - valid.accelerated ? (pf.accelerated ? "1" : "0") : "?", - color_bits, - float_color == -1 ? "?" : float_color ? "f" : "", - red_bits, - green_bits, - blue_bits, - alpha_bits, - (int)srgb, - accum_bits, - accum_red_bits, - accum_green_bits, - accum_blue_bits, - accum_alpha_bits, - pf.depth_bits, - pf.stencil_bits, - pf.aux_buffers, - valid.backing_store ? (pf.backing_store ? "1" : "0") : "?", - valid.double_buffer ? (pf.double_buffer ? "1" : "0") : "?", - valid.stereo ? (pf.stereo ? "1" : "0") : "?", - pf.sample_buffers, - pf.samples); - - for (i = 0; i < nb_formats && found < nMaxFormats; i++) - { - const struct color_mode *mode; - - if (valid.window && pixel_formats[i].window != pf.window) continue; - if (valid.pbuffer && pixel_formats[i].pbuffer != pf.pbuffer) continue; - if (valid.accelerated && pixel_formats[i].accelerated != pf.accelerated) continue; - if (valid.double_buffer && pixel_formats[i].double_buffer != pf.double_buffer) continue; - if (valid.stereo && pixel_formats[i].stereo != pf.stereo) continue; - if (valid.backing_store && pixel_formats[i].backing_store != pf.backing_store) continue; - - if (pixel_formats[i].aux_buffers < pf.aux_buffers) continue; - if (pixel_formats[i].depth_bits < pf.depth_bits) continue; - if (pixel_formats[i].stencil_bits < pf.stencil_bits) continue; - if (pixel_formats[i].sample_buffers < pf.sample_buffers) continue; - if (pixel_formats[i].samples < pf.samples) continue; - - mode = &color_modes[pixel_formats[i].color_mode]; - /* If the mode doesn't have alpha, check requested color bits against - bits per pixel instead of the mode's color bits. On Windows, color - bits sometimes exceeds r+g+b (e.g. it's 32 for an R8G8B8A0 pixel format). - If an app depends on that and requests WGL_COLOR_BITS_ARB == 32 and - expects that to match such a pixel format, we need to accommodate that. */ - if (mode->alpha_bits) - { - if (mode->color_bits < color_bits) - continue; - } - else - { - if (mode->bits_per_pixel < color_bits) - continue; - } - if (mode->red_bits < red_bits || mode->green_bits < green_bits || - mode->blue_bits < blue_bits || mode->alpha_bits < alpha_bits) - continue; - if (float_color != -1 && (!mode->is_float != !float_color)) continue; - if (srgb && (mode->red_bits != 8 || mode->green_bits != 8 || mode->blue_bits != 8 || mode->is_float)) - continue; - - if (pixel_formats[i].accum_mode) - { - mode = &color_modes[pixel_formats[i].accum_mode - 1]; - if (mode->color_bits < accum_bits || mode->red_bits < accum_red_bits || - mode->green_bits < accum_green_bits || mode->blue_bits < accum_blue_bits || - mode->alpha_bits < accum_alpha_bits) - continue; - } - else if (accum_bits || accum_red_bits || accum_green_bits || accum_blue_bits || accum_alpha_bits) - continue; - - piFormats[found++] = i + 1; - TRACE("match: pixel format %d %s\n", i + 1, debugstr_pf(&pixel_formats[i])); - } - -cant_match: - *nNumFormats = found; - - return TRUE; -} - - /*********************************************************************** * macdrv_wglCreateContextAttribsARB * @@ -3763,7 +3441,7 @@ static const char *macdrv_init_wgl_extensions(void) opengl_funcs.p_wglMakeContextCurrentARB = macdrv_wglMakeContextCurrentARB;
register_extension("WGL_ARB_pixel_format"); - opengl_funcs.p_wglChoosePixelFormatARB = macdrv_wglChoosePixelFormatARB; + opengl_funcs.p_wglChoosePixelFormatARB = (void *)1; /* never called */ opengl_funcs.p_wglGetPixelFormatAttribfvARB = (void *)1; /* never called */ opengl_funcs.p_wglGetPixelFormatAttribivARB = (void *)1; /* never called */