Henri Verbeet : d3drm: Introduce d3drm_set_color().
Alexandre Julliard
julliard at winehq.org
Thu Nov 10 14:37:54 CST 2016
Module: wine
Branch: master
Commit: 060ea15ae2c1604d51d3df1460e99c7d6e6211cf
URL: http://source.winehq.org/git/wine.git/?a=commit;h=060ea15ae2c1604d51d3df1460e99c7d6e6211cf
Author: Henri Verbeet <hverbeet at codeweavers.com>
Date: Thu Nov 10 16:17:37 2016 +0100
d3drm: Introduce d3drm_set_color().
Signed-off-by: Henri Verbeet <hverbeet at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>
---
dlls/d3drm/d3drm_private.h | 16 ++++++++++++++++
dlls/d3drm/frame.c | 5 ++---
dlls/d3drm/light.c | 2 +-
dlls/d3drm/math.c | 29 +++++++++--------------------
dlls/d3drm/meshbuilder.c | 7 +++----
5 files changed, 31 insertions(+), 28 deletions(-)
diff --git a/dlls/d3drm/d3drm_private.h b/dlls/d3drm/d3drm_private.h
index e75fe45..49e4af1 100644
--- a/dlls/d3drm/d3drm_private.h
+++ b/dlls/d3drm/d3drm_private.h
@@ -21,6 +21,7 @@
#ifndef __D3DRM_PRIVATE_INCLUDED__
#define __D3DRM_PRIVATE_INCLUDED__
+#include <math.h>
#include "d3drm.h"
#include "dxfile.h"
#include "d3drmwin.h"
@@ -140,4 +141,19 @@ struct d3drm_file_header
extern char templates[] DECLSPEC_HIDDEN;
+static inline BYTE d3drm_color_component(float c)
+{
+ if (c <= 0.0f)
+ return 0u;
+ if (c >= 1.0f)
+ return 0xffu;
+ return floor(c * 255.0f);
+}
+
+static inline void d3drm_set_color(D3DCOLOR *color, float r, float g, float b, float a)
+{
+ *color = RGBA_MAKE(d3drm_color_component(r), d3drm_color_component(g),
+ d3drm_color_component(b), d3drm_color_component(a));
+}
+
#endif /* __D3DRM_PRIVATE_INCLUDED__ */
diff --git a/dlls/d3drm/frame.c b/dlls/d3drm/frame.c
index 978b1d8..39b2f87 100644
--- a/dlls/d3drm/frame.c
+++ b/dlls/d3drm/frame.c
@@ -2004,8 +2004,7 @@ static HRESULT WINAPI d3drm_frame3_SetSceneBackgroundRGB(IDirect3DRMFrame3 *ifac
TRACE("iface %p, red %.8e, green %.8e, blue %.8e.\n", iface, red, green, blue);
- frame->scenebackground = RGBA_MAKE((BYTE)(red * 255.0f),
- (BYTE)(green * 255.0f), (BYTE)(blue * 255.0f), 0xff);
+ d3drm_set_color(&frame->scenebackground, red, green, blue, 1.0f);
return D3DRM_OK;
}
@@ -2949,7 +2948,7 @@ HRESULT d3drm_frame_create(struct d3drm_frame **frame, IUnknown *parent_frame, I
object->IDirect3DRMFrame3_iface.lpVtbl = &d3drm_frame3_vtbl;
object->d3drm = d3drm;
object->ref = 1;
- object->scenebackground = RGBA_MAKE(0, 0, 0, 0xff);
+ d3drm_set_color(&object->scenebackground, 0.0f, 0.0f, 0.0f, 1.0f);
memcpy(object->transform, identity, sizeof(D3DRMMATRIX4D));
diff --git a/dlls/d3drm/light.c b/dlls/d3drm/light.c
index 53accbf..7a7ccd4 100644
--- a/dlls/d3drm/light.c
+++ b/dlls/d3drm/light.c
@@ -183,7 +183,7 @@ static HRESULT WINAPI d3drm_light_SetColorRGB(IDirect3DRMLight *iface,
TRACE("iface %p, red %.8e, green %.8e, blue %.8e.\n", iface, red, green, blue);
- light->color = RGBA_MAKE((BYTE)(red * 255.0f), (BYTE)(green * 255.0f), (BYTE)(blue * 255.0f), 0xff);
+ d3drm_set_color(&light->color, red, green, blue, 1.0f);
return D3DRM_OK;
}
diff --git a/dlls/d3drm/math.c b/dlls/d3drm/math.c
index a1ad727..4ccde60 100644
--- a/dlls/d3drm/math.c
+++ b/dlls/d3drm/math.c
@@ -19,12 +19,10 @@
#define NONAMELESSUNION
-#include <math.h>
-#include <stdarg.h>
-#include "windef.h"
-#include "winbase.h"
-#include "wingdi.h"
-#include "d3drmdef.h"
+#include "config.h"
+#include "wine/port.h"
+
+#include "d3drm_private.h"
/* Create a RGB color from its components */
D3DCOLOR WINAPI D3DRMCreateColorRGB(D3DVALUE red, D3DVALUE green, D3DVALUE blue)
@@ -34,20 +32,11 @@ D3DCOLOR WINAPI D3DRMCreateColorRGB(D3DVALUE red, D3DVALUE green, D3DVALUE blue)
/* Create a RGBA color from its components */
D3DCOLOR WINAPI D3DRMCreateColorRGBA(D3DVALUE red, D3DVALUE green, D3DVALUE blue, D3DVALUE alpha)
{
- int Red, Green, Blue, Alpha;
- Red=floor(red*255);
- Green=floor(green*255);
- Blue=floor(blue*255);
- Alpha=floor(alpha*255);
- if (red < 0) Red=0;
- if (red > 1) Red=255;
- if (green < 0) Green=0;
- if (green > 1) Green=255;
- if (blue < 0) Blue=0;
- if (blue > 1) Blue=255;
- if (alpha < 0) Alpha=0;
- if (alpha > 1) Alpha=255;
- return (RGBA_MAKE(Red, Green, Blue, Alpha));
+ D3DCOLOR color;
+
+ d3drm_set_color(&color, red, green, blue, alpha);
+
+ return color;
}
/* Determine the alpha part of a color */
diff --git a/dlls/d3drm/meshbuilder.c b/dlls/d3drm/meshbuilder.c
index 958e759..0028f12 100644
--- a/dlls/d3drm/meshbuilder.c
+++ b/dlls/d3drm/meshbuilder.c
@@ -1235,8 +1235,7 @@ HRESULT load_mesh_data(IDirect3DRMMeshBuilder3 *iface, IDirectXFileData *pData,
values = (float*)ptr;
- This->materials[i].color = RGBA_MAKE((BYTE)(values[0] * 255.0f), (BYTE)(values[1] * 255.0f),
- (BYTE)(values[2] * 255.0f), (BYTE)(values[3] * 255.0f));
+ d3drm_set_color(&This->materials[i].color, values[0], values[1], values[2], values[3]);
IDirect3DRMMaterial2_SetAmbient(This->materials[i].material, values[0], values [1], values[2]); /* Alpha ignored */
IDirect3DRMMaterial2_SetPower(This->materials[i].material, values[4]);
@@ -1694,7 +1693,7 @@ static HRESULT WINAPI d3drm_mesh_builder3_SetColorRGB(IDirect3DRMMeshBuilder3 *i
TRACE("iface %p, red %.8e, green %.8e, blue %.8e.\n", iface, red, green, blue);
- mesh_builder->color = RGBA_MAKE((BYTE)(red * 255.0f), (BYTE)(green * 255.0f), (BYTE)(blue * 255.0f), 0xff);
+ d3drm_set_color(&mesh_builder->color, red, green, blue, 1.0f);
return D3DRM_OK;
}
@@ -2595,7 +2594,7 @@ static HRESULT WINAPI d3drm_mesh_SetGroupColorRGB(IDirect3DRMMesh *iface,
if (id >= mesh->nb_groups)
return D3DRMERR_BADVALUE;
- mesh->groups[id].color = RGBA_MAKE((BYTE)(red * 255.0f), (BYTE)(green * 255.0f), (BYTE)(blue * 255.0f), 0xff);
+ d3drm_set_color(&mesh->groups[id].color, red, green, blue, 1.0f);
return D3DRM_OK;
}
More information about the wine-cvs
mailing list