[3] [wined3d] GLSL: implement texrect coord fixup

Henri Verbeet hverbeet at gmail.com
Tue Mar 24 05:01:57 CDT 2009


2009/3/23 Tobias Jakobi <Liquid.Acid at gmx.net>:
>
> +        if (prog->ps_args.texrect_fixup) {
> +            for (i = 0; i < MAX_FRAGMENT_SAMPLERS; ++i) {

Using something like the following would avoid checking the entire
prog->rectFixup_location array when only the first few samplers are
used:

    DWORD fixup = prog->ps_args.texrect_fixup;
    for (i = 0; fixup; fixup >>= 1, ++i)
    {
        if (!(fixup & 1)) continue;
        ...
    }

> +                    /* Casting to IWineD3DTextureImpl* does work here, because rectFixup_location[i]
> +                     * only gets initialized (with value != -1) when textures[i] is of type RECT. */
> +                    const IWineD3DTextureImpl* const tex = (const IWineD3DTextureImpl*)stateBlock->textures[i];
It works, but it's still unecessary. You can access the pow2Matrix
through IWineD3DBaseTextureImpl just fine. Also note that * is part of
the declarator rather than the base type in C.

> +    char texrect_fixup[28] = "";
Please don't do that, handle the fixup the same way bias is handled.

> +                sprintf(name, "PsamplerRectFixup%d", i);
i is unsigned here.



More information about the wine-devel mailing list