Henri Verbeet : wined3d: Create a texture for the logo surface.
Alexandre Julliard
julliard at winehq.org
Thu Nov 14 13:57:10 CST 2013
Module: wine
Branch: master
Commit: 94509fbd59b59244379e3efb54e78f676dc09e4c
URL: http://source.winehq.org/git/wine.git/?a=commit;h=94509fbd59b59244379e3efb54e78f676dc09e4c
Author: Henri Verbeet <hverbeet at codeweavers.com>
Date: Thu Nov 14 10:47:19 2013 +0100
wined3d: Create a texture for the logo surface.
---
dlls/wined3d/device.c | 33 ++++++++++++++++++++++-----------
dlls/wined3d/swapchain.c | 5 +++--
dlls/wined3d/wined3d_private.h | 4 ++--
3 files changed, 27 insertions(+), 15 deletions(-)
diff --git a/dlls/wined3d/device.c b/dlls/wined3d/device.c
index 8a1af6b..2d65684 100644
--- a/dlls/wined3d/device.c
+++ b/dlls/wined3d/device.c
@@ -551,6 +551,8 @@ struct wined3d_swapchain * CDECL wined3d_device_get_swapchain(const struct wined
static void device_load_logo(struct wined3d_device *device, const char *filename)
{
struct wined3d_color_key color_key;
+ struct wined3d_resource_desc desc;
+ struct wined3d_surface *surface;
HBITMAP hbm;
BITMAP bm;
HRESULT hr;
@@ -574,31 +576,40 @@ static void device_load_logo(struct wined3d_device *device, const char *filename
bm.bmHeight = 32;
}
- hr = wined3d_surface_create(device, bm.bmWidth, bm.bmHeight, WINED3DFMT_B5G6R5_UNORM, 0,
- WINED3D_POOL_SYSTEM_MEM, WINED3D_MULTISAMPLE_NONE, 0, WINED3D_SURFACE_MAPPABLE,
- NULL, &wined3d_null_parent_ops, &device->logo_surface);
- if (FAILED(hr))
- {
- ERR("Wine logo requested, but failed to create surface, hr %#x.\n", hr);
+ desc.resource_type = WINED3D_RTYPE_TEXTURE;
+ desc.format = WINED3DFMT_B5G6R5_UNORM;
+ desc.multisample_type = WINED3D_MULTISAMPLE_NONE;
+ desc.multisample_quality = 0;
+ desc.usage = 0;
+ desc.pool = WINED3D_POOL_SYSTEM_MEM;
+ desc.width = bm.bmWidth;
+ desc.height = bm.bmHeight;
+ desc.depth = 1;
+ desc.size = 0;
+ if (FAILED(hr = wined3d_texture_create_2d(device, &desc, 1, WINED3D_SURFACE_MAPPABLE,
+ NULL, &wined3d_null_parent_ops, &device->logo_texture)))
+ {
+ ERR("Wine logo requested, but failed to create texture, hr %#x.\n", hr);
goto out;
}
+ surface = surface_from_resource(wined3d_texture_get_sub_resource(device->logo_texture, 0));
if (dcb)
{
- if (FAILED(hr = wined3d_surface_getdc(device->logo_surface, &dcs)))
+ if (FAILED(hr = wined3d_surface_getdc(surface, &dcs)))
goto out;
BitBlt(dcs, 0, 0, bm.bmWidth, bm.bmHeight, dcb, 0, 0, SRCCOPY);
- wined3d_surface_releasedc(device->logo_surface, dcs);
+ wined3d_surface_releasedc(surface, dcs);
color_key.color_space_low_value = 0;
color_key.color_space_high_value = 0;
- wined3d_surface_set_color_key(device->logo_surface, WINEDDCKEY_SRCBLT, &color_key);
+ wined3d_surface_set_color_key(surface, WINEDDCKEY_SRCBLT, &color_key);
}
else
{
const struct wined3d_color c = {1.0f, 1.0f, 1.0f, 1.0f};
/* Fill the surface with a white color to show that wined3d is there */
- wined3d_device_color_fill(device, device->logo_surface, NULL, &c);
+ wined3d_device_color_fill(device, surface, NULL, &c);
}
out:
@@ -1014,8 +1025,8 @@ HRESULT CDECL wined3d_device_uninit_3d(struct wined3d_device *device)
context = context_acquire(device, NULL);
gl_info = context->gl_info;
- if (device->logo_surface)
- wined3d_surface_decref(device->logo_surface);
+ if (device->logo_texture)
+ wined3d_texture_decref(device->logo_texture);
state_unbind_resources(&device->state);
diff --git a/dlls/wined3d/swapchain.c b/dlls/wined3d/swapchain.c
index 7a383fd..1b45cd0 100644
--- a/dlls/wined3d/swapchain.c
+++ b/dlls/wined3d/swapchain.c
@@ -468,9 +468,10 @@ static void swapchain_gl_present(struct wined3d_swapchain *swapchain, const RECT
NULL, WINED3D_TEXF_POINT);
}
- if (swapchain->device->logo_surface)
+ if (swapchain->device->logo_texture)
{
- struct wined3d_surface *src_surface = swapchain->device->logo_surface;
+ struct wined3d_surface *src_surface = surface_from_resource(
+ wined3d_texture_get_sub_resource(swapchain->device->logo_texture, 0));
RECT rect = {0, 0, src_surface->resource.width, src_surface->resource.height};
/* Blit the logo into the upper left corner of the drawable. */
diff --git a/dlls/wined3d/wined3d_private.h b/dlls/wined3d/wined3d_private.h
index e4ce84d..3c8cc51 100644
--- a/dlls/wined3d/wined3d_private.h
+++ b/dlls/wined3d/wined3d_private.h
@@ -1924,8 +1924,8 @@ struct wined3d_device
GLuint cursorTexture;
HCURSOR hardwareCursor;
- /* The Wine logo surface */
- struct wined3d_surface *logo_surface;
+ /* The Wine logo texture */
+ struct wined3d_texture *logo_texture;
/* Textures for when no other textures are mapped */
UINT dummy_texture_2d[MAX_COMBINED_SAMPLERS];
More information about the wine-cvs
mailing list