// Emacs style mode select   -*- C++ -*-
//-----------------------------------------------------------------------------
//
// Copyright (C) 2001 by DooM Legacy Team.
//
// This program is free software; you can redistribute it and/or
// modify it under the terms of the GNU General Public License
// as published by the Free Software Foundation; either version 2
// of the License, or (at your option) any later version.
//
// This program 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 General Public License for more details.
//
//-----------------------------------------------------------------------------
/// \file
/// \brief 3D sound import/export prototypes for low-level hardware interface

#ifndef __HW_3DS_DRV_H__
#define __HW_3DS_DRV_H__

// Use standart hardware API
#include "hw_dll.h"
#include "hws_data.h"

#if defined (HAVE_SDL) || !defined (HWD)
EXPORT void HWRAPI(Shutdown) (void);
#endif

// Use standart Init and Shutdown functions

EXPORT INT32    HWRAPI (Startup) (I_Error_t FatalErrorFunction, snddev_t *snd_dev);
EXPORT u_int  HWRAPI (AddSfx) (sfx_data_t *sfx);
EXPORT INT32    HWRAPI (AddSource) (source3D_data_t *src, u_int sfxhandle);
EXPORT INT32    HWRAPI (StartSource) (INT32 handle);
EXPORT void   HWRAPI (StopSource) (INT32 handle);
EXPORT INT32    HWRAPI (GetHW3DSVersion) (void);
EXPORT void   HWRAPI (BeginFrameUpdate) (void);
EXPORT void   HWRAPI (EndFrameUpdate) (void);
EXPORT INT32    HWRAPI (IsPlaying) (INT32 handle);
EXPORT void   HWRAPI (UpdateListener) (listener_data_t *data, INT32 num);
EXPORT void   HWRAPI (UpdateSourceParms) (INT32 handle, INT32 vol, INT32 sep);
EXPORT void   HWRAPI (SetGlobalSfxVolume) (INT32 volume);
EXPORT INT32    HWRAPI (SetCone) (INT32 handle, cone_def_t *cone_def);
EXPORT void   HWRAPI (Update3DSource) (INT32 handle, source3D_pos_t *data);
EXPORT INT32    HWRAPI (ReloadSource) (INT32 handle, u_int sfxhandle);
EXPORT void   HWRAPI (KillSource) (INT32 handle);
EXPORT void   HWRAPI (KillSfx) (u_int sfxhandle);
EXPORT void   HWRAPI (GetHW3DSTitle) (char *buf, size_t size);


#if !defined (_CREATE_DLL_)

struct hardware3ds_s
{
	Startup             pfnStartup;
	AddSfx              pfnAddSfx;
	AddSource           pfnAddSource;
	StartSource         pfnStartSource;
	StopSource          pfnStopSource;
	GetHW3DSVersion     pfnGetHW3DSVersion;
	BeginFrameUpdate    pfnBeginFrameUpdate;
	EndFrameUpdate      pfnEndFrameUpdate;
	IsPlaying           pfnIsPlaying;
	UpdateListener      pfnUpdateListener;
	UpdateSourceParms   pfnUpdateSourceParms;
	SetGlobalSfxVolume  pfnSetGlobalSfxVolume;
	SetCone             pfnSetCone;
	Update3DSource      pfnUpdate3DSource;
	ReloadSource        pfnReloadSource;
	KillSource          pfnKillSource;
	KillSfx             pfnKillSfx;
	Shutdown            pfnShutdown;
	GetHW3DSTitle       pfnGetHW3DSTitle;
};

extern struct hardware3ds_s hw3ds_driver;

#define HW3DS hw3ds_driver


#endif  // _CREATE_DLL_

#endif // __HW_3DS_DRV_H__
