Commit 926e3553 authored by Antoine Chavasse's avatar Antoine Chavasse Committed by Alexandre Julliard

Test cases for the direct3d7 light api.

parent b65e790b
Makefile Makefile
d3d.ok
ddrawmodes.ok ddrawmodes.ok
dsurface.ok dsurface.ok
testlist.c testlist.c
...@@ -4,8 +4,10 @@ SRCDIR = @srcdir@ ...@@ -4,8 +4,10 @@ SRCDIR = @srcdir@
VPATH = @srcdir@ VPATH = @srcdir@
TESTDLL = ddraw.dll TESTDLL = ddraw.dll
IMPORTS = ddraw user32 gdi32 kernel32 IMPORTS = ddraw user32 gdi32 kernel32
EXTRALIBS = -ldxguid
CTESTS = \ CTESTS = \
d3d.c \
ddrawmodes.c \ ddrawmodes.c \
dsurface.c dsurface.c
......
/*
* Some unit tests for d3d functions
*
* Copyright (C) 2005 Antoine Chavasse
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
#include <assert.h>
#include "wine/test.h"
#include "ddraw.h"
#include "d3d.h"
#ifdef NONAMELESSUNION
# define U(x) (x).u
# define U1(x) (x).u1
# define U2(x) (x).u2
# define U3(x) (x).u3
#else
# define U(x) (x)
# define U1(x) (x)
# define U2(x) (x)
# define U3(x) (x)
#endif
static LPDIRECTDRAW7 lpDD = NULL;
static LPDIRECT3D7 lpD3D = NULL;
static LPDIRECTDRAWSURFACE7 lpDDS = NULL;
static LPDIRECT3DDEVICE7 lpD3DDevice = NULL;
static void CreateDirect3D()
{
HRESULT rc;
DDSURFACEDESC2 ddsd;
rc = DirectDrawCreateEx(NULL, (void**)&lpDD,
&IID_IDirectDraw7, NULL);
ok(rc==DD_OK, "DirectDrawCreateEx returned: %lx\n", rc);
rc = IDirectDraw_SetCooperativeLevel(lpDD, NULL, DDSCL_NORMAL);
ok(rc==DD_OK, "SetCooperativeLevel returned: %lx\n", rc);
rc = IDirectDraw7_QueryInterface(lpDD, &IID_IDirect3D7, (void**) &lpD3D);
ok(rc==DD_OK, "QueryInterface returned: %lx\n", rc);
memset(&ddsd, 0, sizeof(ddsd));
ddsd.dwSize = sizeof(ddsd);
ddsd.dwFlags = DDSD_CAPS | DDSD_WIDTH | DDSD_HEIGHT;
ddsd.ddsCaps.dwCaps = DDSCAPS_OFFSCREENPLAIN | DDSCAPS_3DDEVICE;
ddsd.dwWidth = 256;
ddsd.dwHeight = 256;
rc = IDirectDraw7_CreateSurface(lpDD, &ddsd, &lpDDS, NULL);
ok(rc==DD_OK, "CreateSurface returned: %lx\n", rc);
rc = IDirect3D7_CreateDevice(lpD3D, &IID_IDirect3DTnLHalDevice, lpDDS,
&lpD3DDevice);
ok(rc==D3D_OK, "CreateDevice returned: %lx\n", rc);
}
static void ReleaseDirect3D()
{
if (lpD3DDevice != NULL)
{
IDirect3DDevice7_Release(lpD3DDevice);
lpD3DDevice = NULL;
}
if (lpDDS != NULL)
{
IDirectDrawSurface_Release(lpDDS);
lpDDS = NULL;
}
if (lpD3D != NULL)
{
IDirect3D7_Release(lpD3D);
lpD3D = NULL;
}
if (lpDD != NULL)
{
IDirectDraw_Release(lpDD);
lpDD = NULL;
}
}
static void LightTest()
{
HRESULT rc;
D3DLIGHT7 light;
D3DLIGHT7 defaultlight;
BOOL bEnabled = FALSE;
/* Set a few lights with funky indices. */
memset(&light, 0, sizeof(light));
light.dltType = D3DLIGHT_DIRECTIONAL;
U1(light.dcvDiffuse).r = 0.5f;
U2(light.dcvDiffuse).g = 0.6f;
U3(light.dcvDiffuse).b = 0.7f;
U2(light.dvDirection).y = 1.f;
rc = IDirect3DDevice7_SetLight(lpD3DDevice, 5, &light);
ok(rc==D3D_OK, "SetLight returned: %lx\n", rc);
rc = IDirect3DDevice7_SetLight(lpD3DDevice, 10, &light);
ok(rc==D3D_OK, "SetLight returned: %lx\n", rc);
rc = IDirect3DDevice7_SetLight(lpD3DDevice, 45, &light);
ok(rc==D3D_OK, "SetLight returned: %lx\n", rc);
/* Try to retrieve a light beyond the indices of the lights that have
been set. */
rc = IDirect3DDevice7_GetLight(lpD3DDevice, 50, &light);
ok(rc==DDERR_INVALIDPARAMS, "GetLight returned: %lx\n", rc);
rc = IDirect3DDevice7_GetLight(lpD3DDevice, 2, &light);
ok(rc==DDERR_INVALIDPARAMS, "GetLight returned: %lx\n", rc);
/* Try to retrieve one of the lights that have been set */
rc = IDirect3DDevice7_GetLight(lpD3DDevice, 10, &light);
ok(rc==D3D_OK, "GetLight returned: %lx\n", rc);
/* Enable a light that have been previously set. */
rc = IDirect3DDevice7_LightEnable(lpD3DDevice, 10, TRUE);
ok(rc==D3D_OK, "LightEnable returned: %lx\n", rc);
/* Enable some lights that have not been previously set, and verify that
they have been initialized with proper default values. */
memset(&defaultlight, 0, sizeof(D3DLIGHT7));
defaultlight.dltType = D3DLIGHT_DIRECTIONAL;
U1(defaultlight.dcvDiffuse).r = 1.f;
U2(defaultlight.dcvDiffuse).g = 1.f;
U3(defaultlight.dcvDiffuse).b = 1.f;
U3(defaultlight.dvDirection).z = 1.f;
rc = IDirect3DDevice7_LightEnable(lpD3DDevice, 20, TRUE);
ok(rc==D3D_OK, "LightEnable returned: %lx\n", rc);
memset(&light, 0, sizeof(D3DLIGHT7));
rc = IDirect3DDevice7_GetLight(lpD3DDevice, 20, &light);
ok(rc==D3D_OK, "GetLight returned: %lx\n", rc);
ok(!memcmp(&light, &defaultlight, sizeof(D3DLIGHT7)),
"light data doesn't match expected default values\n" );
rc = IDirect3DDevice7_LightEnable(lpD3DDevice, 50, TRUE);
ok(rc==D3D_OK, "LightEnable returned: %lx\n", rc);
memset(&light, 0, sizeof(D3DLIGHT7));
rc = IDirect3DDevice7_GetLight(lpD3DDevice, 50, &light);
ok(rc==D3D_OK, "GetLight returned: %lx\n", rc);
ok(!memcmp(&light, &defaultlight, sizeof(D3DLIGHT7)),
"light data doesn't match expected default values\n" );
/* Disable one of the light that have been previously enabled. */
rc = IDirect3DDevice7_LightEnable(lpD3DDevice, 20, FALSE);
ok(rc==D3D_OK, "LightEnable returned: %lx\n", rc);
/* Try to retrieve the enable status of some lights */
/* Light 20 is supposed to be disabled */
rc = IDirect3DDevice7_GetLightEnable(lpD3DDevice, 20, &bEnabled );
ok(rc==D3D_OK, "GetLightEnable returned: %lx\n", rc);
ok(!bEnabled, "GetLightEnable says the light is enabled\n");
/* Light 10 is supposed to be enabled */
bEnabled = FALSE;
rc = IDirect3DDevice7_GetLightEnable(lpD3DDevice, 10, &bEnabled );
ok(rc==D3D_OK, "GetLightEnable returned: %lx\n", rc);
ok(bEnabled, "GetLightEnable says the light is disabled\n");
/* Light 80 has not been set */
rc = IDirect3DDevice7_GetLightEnable(lpD3DDevice, 80, &bEnabled );
ok(rc==DDERR_INVALIDPARAMS, "GetLightEnable returned: %lx\n", rc);
/* Light 23 has not been set */
rc = IDirect3DDevice7_GetLightEnable(lpD3DDevice, 23, &bEnabled );
ok(rc==DDERR_INVALIDPARAMS, "GetLightEnable returned: %lx\n", rc);
}
START_TEST(d3d)
{
CreateDirect3D();
LightTest();
ReleaseDirect3D();
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment