Example #1
0
HRESULT d2d_bitmap_brush_init(struct d2d_brush *brush, struct d2d_d3d_render_target *render_target, ID2D1Bitmap *bitmap,
        const D2D1_BITMAP_BRUSH_PROPERTIES *bitmap_brush_desc, const D2D1_BRUSH_PROPERTIES *brush_desc)
{
    D3D10_SAMPLER_DESC sampler_desc;
    HRESULT hr;

    FIXME("Ignoring brush properties.\n");

    d2d_brush_init(brush, &render_target->ID2D1RenderTarget_iface, D2D_BRUSH_TYPE_BITMAP,
            brush_desc, (ID2D1BrushVtbl *)&d2d_bitmap_brush_vtbl);
    brush->u.bitmap.bitmap = unsafe_impl_from_ID2D1Bitmap(bitmap);

    sampler_desc.Filter = D3D10_FILTER_MIN_MAG_MIP_POINT;
    sampler_desc.AddressU = D3D10_TEXTURE_ADDRESS_CLAMP;
    sampler_desc.AddressV = D3D10_TEXTURE_ADDRESS_CLAMP;
    sampler_desc.AddressW = D3D10_TEXTURE_ADDRESS_CLAMP;
    sampler_desc.MipLODBias = 0.0f;
    sampler_desc.MaxAnisotropy = 0;
    sampler_desc.ComparisonFunc = D3D10_COMPARISON_NEVER;
    sampler_desc.BorderColor[0] = 0.0f;
    sampler_desc.BorderColor[1] = 0.0f;
    sampler_desc.BorderColor[2] = 0.0f;
    sampler_desc.BorderColor[3] = 0.0f;
    sampler_desc.MinLOD = 0.0f;
    sampler_desc.MaxLOD = 0.0f;

    if (FAILED(hr = ID3D10Device_CreateSamplerState(render_target->device,
            &sampler_desc, &brush->u.bitmap.sampler_state)))
    {
        ERR("Failed to create sampler state, hr %#x.\n", hr);
        return hr;
    }

    return S_OK;
}
Example #2
0
void d2d_brush_bind_resources(struct d2d_brush *brush, struct d2d_d3d_render_target *render_target,
        enum d2d_shape_type shape_type)
{
    static const float blend_factor[] = {1.0f, 1.0f, 1.0f, 1.0f};
    ID3D10Device *device = render_target->device;
    ID3D10PixelShader *ps;
    HRESULT hr;

    ID3D10Device_OMSetBlendState(device, render_target->bs, blend_factor, D3D10_DEFAULT_SAMPLE_MASK);
    if (!(ps = render_target->shape_resources[shape_type].ps[brush->type]))
        FIXME("No pixel shader for shape type %#x and brush type %#x.\n", shape_type, brush->type);
    ID3D10Device_PSSetShader(device, ps);

    if (brush->type == D2D_BRUSH_TYPE_BITMAP)
    {
        ID3D10Device_PSSetShaderResources(device, 0, 1, &brush->u.bitmap.bitmap->view);
        if (!brush->u.bitmap.sampler_state)
        {
            D3D10_SAMPLER_DESC sampler_desc;

            if (brush->u.bitmap.interpolation_mode == D2D1_BITMAP_INTERPOLATION_MODE_NEAREST_NEIGHBOR)
                sampler_desc.Filter = D3D10_FILTER_MIN_MAG_MIP_POINT;
            else
                sampler_desc.Filter = D3D10_FILTER_MIN_MAG_MIP_LINEAR;
            sampler_desc.AddressU = texture_address_mode_from_extend_mode(brush->u.bitmap.extend_mode_x);
            sampler_desc.AddressV = texture_address_mode_from_extend_mode(brush->u.bitmap.extend_mode_y);
            sampler_desc.AddressW = D3D10_TEXTURE_ADDRESS_CLAMP;
            sampler_desc.MipLODBias = 0.0f;
            sampler_desc.MaxAnisotropy = 0;
            sampler_desc.ComparisonFunc = D3D10_COMPARISON_NEVER;
            sampler_desc.BorderColor[0] = 0.0f;
            sampler_desc.BorderColor[1] = 0.0f;
            sampler_desc.BorderColor[2] = 0.0f;
            sampler_desc.BorderColor[3] = 0.0f;
            sampler_desc.MinLOD = 0.0f;
            sampler_desc.MaxLOD = 0.0f;

            if (FAILED(hr = ID3D10Device_CreateSamplerState(device,
                    &sampler_desc, &brush->u.bitmap.sampler_state)))
                ERR("Failed to create sampler state, hr %#x.\n", hr);
        }
        ID3D10Device_PSSetSamplers(device, 0, 1, &brush->u.bitmap.sampler_state);
    }
    else if (brush->type != D2D_BRUSH_TYPE_SOLID)
    {
        FIXME("Unhandled brush type %#x.\n", brush->type);
    }
}