1
0
Fork 1
mirror of https://github.com/TES3MP/openmw-tes3mp.git synced 2025-01-16 21:49:55 +00:00

niftool now spits out some useful info

- cleaned up some more old files
This commit is contained in:
Nicolay Korslund 2010-01-17 13:37:20 +01:00
parent a21628d9c5
commit b4eefb6ca3
9 changed files with 175 additions and 395 deletions

View file

@ -59,6 +59,14 @@ struct NiVertWeightsExtraData : Extra
struct NiTextKeyExtraData : Extra
{
struct TextKey
{
float time;
SString text;
};
std::vector<TextKey> list;
void read(NIFFile *nif)
{
Extra::read(nif);
@ -66,10 +74,11 @@ struct NiTextKeyExtraData : Extra
nif->getInt(); // 0
int keynum = nif->getInt();
list.resize(keynum);
for(int i=0; i<keynum; i++)
{
nif->getFloat(); // time
nif->getString(); // key text
list[i].time = nif->getFloat();
list[i].text = nif->getString();
}
}
};

View file

@ -93,6 +93,14 @@ class NIFFile
parse();
}
~NIFFile()
{
for(int i=0; i<records.size(); i++)
{
delete records[i];
}
}
/// Get a given record
Record *getRecord(int index)
{

View file

@ -44,7 +44,7 @@ struct Node : Named
bool hasBounds;
const Vector *boundPos;
const Matrix *boundRot;
const Vector *boundXYZ;
const Vector *boundXYZ; // Box size
void read(NIFFile *nif)
{

View file

@ -119,6 +119,12 @@ class RecordListT
return !list[index].empty();
}
int getIndex(int index)
{
if(has(index)) return list[index].getIndex();
else return -1;
}
int length() { return list.size(); }
};

View file

@ -1,3 +1,4 @@
niftool
*_test
*.nif
*.kf

View file

@ -1,16 +1,132 @@
#include "../nif_file.h"
/*
Test of the NIFFile class
*/
#include "../nif_file.h"
#include <iostream>
#include <iomanip>
#include "../../mangle/stream/servers/file_stream.h"
#include "../node.h"
#include "../controller.h"
using namespace Mangle::Stream;
using namespace std;
using namespace Nif;
void doVector(const Vector *vec)
{
cout << "["
<< vec->array[0] << ","
<< vec->array[1] << ","
<< vec->array[2] << "]\n";
}
void doMatrix(const Matrix *mat)
{
cout << "Matrix:\n";
for(int i=0; i<3; i++)
{
cout << " ";
doVector(&mat->v[i]);
}
}
void doTrafo(const Transformation* trafo)
{
cout << "--- transformation:\n";
cout << "Pos: "; doVector(&trafo->pos);
cout << "Rot: "; doMatrix(&trafo->rotation);
cout << "Scale: " << trafo->scale << endl;
cout << "Vel: "; doVector(&trafo->velocity);
cout << "--- end transformation\n";
}
void doExtra(Extra *e)
{
cout << "Extra: " << e->extra.getIndex() << endl;
}
void doControlled(Controlled *c)
{
doExtra(c);
cout << "Controller: " << c->controller.getIndex() << endl;
}
void doNamed(Named *n)
{
doControlled(n);
cout << "Name: " << n->name.toString() << endl;
}
void doNode(Node *n)
{
doNamed(n);
cout << "Flags: 0x" << hex << n->flags << dec << endl;
doTrafo(n->trafo);
cout << "Properties:";
for(int i=0; i<n->props.length(); i++)
cout << " " << n->props.getIndex(i);
cout << endl;
if(n->hasBounds)
{
cout << "Bounding box:\n";
doVector(n->boundPos);
doMatrix(n->boundRot);
doVector(n->boundXYZ);
}
}
void doNiNode(NiNode *n)
{
doNode(n);
cout << "Children:";
for(int i=0; i<n->children.length(); i++)
cout << " " << n->children.getIndex(i);
cout << endl;
cout << "Effects:";
for(int i=0; i<n->effects.length(); i++)
cout << " " << n->effects.getIndex(i);
cout << endl;
}
void doNiStringExtraData(NiStringExtraData *s)
{
doExtra(s);
cout << "String: " << s->string.toString() << endl;
}
void doNiTextKeyExtraData(NiTextKeyExtraData *t)
{
doExtra(t);
for(int i=0; i<t->list.size(); i++)
{
cout << "@time " << t->list[i].time << ":\n\""
<< t->list[i].text.toString() << "\"" << endl;
}
}
void doController(Controller *r)
{
cout << "Next controller: " << r->next.getIndex() << endl;
cout << "Flags: " << hex << r->flags << dec << endl;
cout << "Frequency: " << r->frequency << endl;
cout << "Phase: " << r->phase << endl;
cout << "Time start: " << r->timeStart << endl;
cout << "Time stop: " << r->timeStop << endl;
cout << "Target: " << r->target.getIndex() << endl;
}
void doNiKeyframeController(NiKeyframeController *k)
{
doController(k);
cout << "Data: " << k->data.getIndex() << endl;
}
int main(int argc, char **args)
{
if(argc != 2)
@ -21,4 +137,23 @@ int main(int argc, char **args)
StreamPtr file(new FileStream(args[1]));
NIFFile nif(file, args[1]);
int num = nif.numRecords();
for(int i=0; i<num; i++)
{
Record *r = nif.getRecord(i);
cout << i << ": " << r->recName.toString() << endl;
switch(r->recType)
{
case RC_NiNode: doNiNode((NiNode*)r); break;
case RC_NiStringExtraData: doNiStringExtraData((NiStringExtraData*)r); break;
case RC_NiSequenceStreamHelper: doNamed((Named*)r); break;
case RC_NiTextKeyExtraData: doNiTextKeyExtraData((NiTextKeyExtraData*)r); break;
case RC_NiKeyframeController: doNiKeyframeController((NiKeyframeController*)r); break;
}
cout << endl;
}
}

View file

@ -10,7 +10,8 @@ RenderWindow *window;
//const char* mesh = "meshes\\a\\towershield_steel.nif";
//const char* mesh = "meshes\\r\\bonelord.nif";
const char* mesh = "meshes\\m\\text_scroll_open_01.nif";
//const char* mesh = "meshes\\m\\text_scroll_open_01.nif";
const char* mesh = "meshes\\f\\ex_ashl_a_banner_r.nif";
int shot = 0;
@ -85,24 +86,28 @@ int main(int argc, char**args)
NIFLoader::load(mesh);
NIFLoader::load(mesh);
//*
/*
SceneNode *node = mgr->getRootSceneNode()->createChildSceneNode("node");
Entity *ent = mgr->createEntity("Mesh1", mesh);
node->attachObject(ent);
// Works great for the scroll
node->setPosition(0,4,50);
node->pitch(Degree(20));
node->roll(Degree(10));
node->yaw(Degree(-10));
/*
/* Bone lord
node->setPosition(0,-70,170);
node->pitch(Degree(-90));
/*
// Display it from two different angles
*/
// Display it from two different angles - shield and banner
const int sep = 45;
SceneNode *node = mgr->getRootSceneNode()->createChildSceneNode("node");
Entity *ent = mgr->createEntity("Mesh1", mesh);
node->attachObject(ent);
node->setPosition(sep,0,100);
node->setPosition(sep,0,130);
node = node->createChildSceneNode("node2");
ent = mgr->createEntity("Mesh2", mesh);
node->attachObject(ent);

View file

@ -1,269 +0,0 @@
/*
OpenMW - The completely unofficial reimplementation of Morrowind
Copyright (C) 2008 Nicolay Korslund
Email: < korslund@gmail.com >
WWW: http://openmw.snaptoad.com/
This file (al.d) is part of the OpenMW package.
OpenMW is distributed as free software: you can redistribute it
and/or modify it under the terms of the GNU General Public License
version 3, as published by the Free Software Foundation.
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.
You should have received a copy of the GNU General Public License
version 3 along with this program. If not, see
http://www.gnu.org/licenses/ .
*/
module sound.al;
extern(C):
//Defines
const int AL_NONE = 0;
const int AL_FALSE = 0;
const int AL_TRUE = 1;
const int AL_SOURCE_RELATIVE = 0x202;
const int AL_CONE_INNER_ANGLE = 0x1001;
const int AL_CONE_OUTER_ANGLE = 0x1002;
const int AL_PITCH = 0x1003;
const int AL_POSITION = 0x1004;
const int AL_DIRECTION = 0x1005;
const int AL_VELOCITY = 0x1006;
const int AL_LOOPING = 0x1007;
const int AL_BUFFER = 0x1009;
const int AL_GAIN = 0x100A;
const int AL_MIN_GAIN = 0x100D;
const int AL_MAX_GAIN = 0x100E;
const int AL_ORIENTATION = 0x100F;
const int AL_SOURCE_STATE = 0x1010;
const int AL_INITIAL = 0x1011;
const int AL_PLAYING = 0x1012;
const int AL_PAUSED = 0x1013;
const int AL_STOPPED = 0x1014;
const int AL_BUFFERS_QUEUED = 0x1015;
const int AL_BUFFERS_PROCESSED = 0x1016;
const int AL_SEC_OFFSET = 0x1024;
const int AL_SAMPLE_OFFSET = 0x1025;
const int AL_BYTE_OFFSET = 0x1026;
const int AL_SOURCE_TYPE = 0x1027;
const int AL_STATIC = 0x1028;
const int AL_STREAMING = 0x1029;
const int AL_UNDETERMINED = 0x1030;
const int AL_FORMAT_MONO8 = 0x1100;
const int AL_FORMAT_MONO16 = 0x1101;
const int AL_FORMAT_STEREO8 = 0x1102;
const int AL_FORMAT_STEREO16 = 0x1103;
const int AL_REFERENCE_DISTANCE = 0x1020;
const int AL_ROLLOFF_FACTOR = 0x1021;
const int AL_CONE_OUTER_GAIN = 0x1022;
const int AL_MAX_DISTANCE = 0x1023;
const int AL_FREQUENCY = 0x2001;
const int AL_BITS = 0x2002;
const int AL_CHANNELS = 0x2003;
const int AL_SIZE = 0x2004;
const int AL_UNUSED = 0x2010;
const int AL_PENDING = 0x2011;
const int AL_PROCESSED = 0x2012;
const int AL_NO_ERROR = AL_FALSE;
const int AL_INVALID_NAME = 0xA001;
const int AL_INVALID_ENUM = 0xA002;
const int AL_INVALID_VALUE = 0xA003;
const int AL_INVALID_OPERATION = 0xA004;
const int AL_OUT_OF_MEMORY = 0xA005;
const int AL_VENDOR = 0xB001;
const int AL_VERSION = 0xB002;
const int AL_RENDERER = 0xB003;
const int AL_EXTENSIONS = 0xB004;
const int AL_DOPPLER_FACTOR = 0xC000;
const int AL_DOPPLER_VELOCITY = 0xC001;
const int AL_SPEED_OF_SOUND = 0xC003;
const int AL_DISTANCE_MODEL = 0xD000;
const int AL_INVERSE_DISTANCE = 0xD001;
const int AL_INVERSE_DISTANCE_CLAMPED = 0xD002;
const int AL_LINEAR_DISTANCE = 0xD003;
const int AL_LINEAR_DISTANCE_CLAMPED = 0xD004;
const int AL_EXPONENT_DISTANCE = 0xD005;
const int AL_EXPONENT_DISTANCE_CLAMPED = 0xD006;
//Typedefs
alias char ALboolean;
alias char ALchar;
alias char ALbyte;
alias ubyte ALubyte;
alias short ALshort;
alias ushort ALushort;
alias int ALint;
alias uint ALuint;
alias int ALsizei;
alias int ALenum;
alias float ALfloat;
alias double ALdouble;
alias void ALvoid;
//AL Functions
void alEnable( ALenum capability );
void alDisable( ALenum capability );
ALboolean alIsEnabled( ALenum capability );
ALchar* alGetString( ALenum param );
void alGetBooleanv( ALenum param, ALboolean* data );
void alGetIntegerv( ALenum param, ALint* data );
void alGetFloatv( ALenum param, ALfloat* data );
void alGetDoublev( ALenum param, ALdouble* data );
ALboolean alGetBoolean( ALenum param );
ALint alGetInteger( ALenum param );
ALfloat alGetFloat( ALenum param );
ALdouble alGetDouble( ALenum param );
ALenum alGetError();
ALboolean alIsExtensionPresent( ALchar* extname );
void* alGetProcAddress( ALchar* fname );
ALenum alGetEnumValue( ALchar* ename );
void alListenerf( ALenum param, ALfloat value );
void alListener3f( ALenum param, ALfloat value1, ALfloat value2, ALfloat value3 );
void alListenerfv( ALenum param, ALfloat* values );
void alListeneri( ALenum param, ALint value );
void alListener3i( ALenum param, ALint value1, ALint value2, ALint value3 );
void alListeneriv( ALenum param, ALint* values );
void alGetListenerf( ALenum param, ALfloat* value );
void alGetListener3f( ALenum param, ALfloat *value1, ALfloat *value2, ALfloat *value3 );
void alGetListenerfv( ALenum param, ALfloat* values );
void alGetListeneri( ALenum param, ALint* value );
void alGetListener3i( ALenum param, ALint *value1, ALint *value2, ALint *value3 );
void alGetListeneriv( ALenum param, ALint* values );
void alGenSources( ALsizei n, ALuint* sources );
void alDeleteSources( ALsizei n, ALuint* sources );
ALboolean alIsSource( ALuint sid );
void alSourcef( ALuint sid, ALenum param, ALfloat value );
void alSource3f( ALuint sid, ALenum param, ALfloat value1, ALfloat value2, ALfloat value3 );
void alSourcefv( ALuint sid, ALenum param, ALfloat* values );
void alSourcei( ALuint sid, ALenum param, ALint value );
void alSource3i( ALuint sid, ALenum param, ALint value1, ALint value2, ALint value3 );
void alSourceiv( ALuint sid, ALenum param, ALint* values );
void alGetSourcef( ALuint sid, ALenum param, ALfloat* value );
void alGetSource3f( ALuint sid, ALenum param, ALfloat* value1, ALfloat* value2, ALfloat* value3);
void alGetSourcefv( ALuint sid, ALenum param, ALfloat* values );
void alGetSourcei( ALuint sid, ALenum param, ALint* value );
void alGetSource3i( ALuint sid, ALenum param, ALint* value1, ALint* value2, ALint* value3);
void alGetSourceiv( ALuint sid, ALenum param, ALint* values );
void alSourcePlayv( ALsizei ns, ALuint *sids );
void alSourceStopv( ALsizei ns, ALuint *sids );
void alSourceRewindv( ALsizei ns, ALuint *sids );
void alSourcePausev( ALsizei ns, ALuint *sids );
void alSourcePlay( ALuint sid );
void alSourceStop( ALuint sid );
void alSourceRewind( ALuint sid );
void alSourcePause( ALuint sid );
void alSourceQueueBuffers( ALuint sid, ALsizei numEntries, ALuint *bids );
void alSourceUnqueueBuffers( ALuint sid, ALsizei numEntries, ALuint *bids );
void alGenBuffers( ALsizei n, ALuint* buffers );
void alDeleteBuffers( ALsizei n, ALuint* buffers );
ALboolean alIsBuffer( ALuint bid );
void alBufferData( ALuint bid, ALenum format, ALvoid* data, ALsizei size, ALsizei freq );
void alBufferf( ALuint bid, ALenum param, ALfloat value );
void alBuffer3f( ALuint bid, ALenum param, ALfloat value1, ALfloat value2, ALfloat value3 );
void alBufferfv( ALuint bid, ALenum param, ALfloat* values );
void alBufferi( ALuint bid, ALenum param, ALint value );
void alBuffer3i( ALuint bid, ALenum param, ALint value1, ALint value2, ALint value3 );
void alBufferiv( ALuint bid, ALenum param, ALint* values );
void alGetBufferf( ALuint bid, ALenum param, ALfloat* value );
void alGetBuffer3f( ALuint bid, ALenum param, ALfloat* value1, ALfloat* value2, ALfloat* value3);
void alGetBufferfv( ALuint bid, ALenum param, ALfloat* values );
void alGetBufferi( ALuint bid, ALenum param, ALint* value );
void alGetBuffer3i( ALuint bid, ALenum param, ALint* value1, ALint* value2, ALint* value3);
void alGetBufferiv( ALuint bid, ALenum param, ALint* values );
void alDopplerFactor( ALfloat value );
void alDopplerVelocity( ALfloat value );
void alSpeedOfSound( ALfloat value );
void alDistanceModel( ALenum distanceModel );
typedef void ( *LPALENABLE)( ALenum capability );
typedef void ( *LPALDISABLE)( ALenum capability );
typedef ALboolean ( *LPALISENABLED)( ALenum capability );
typedef const ALchar* ( *LPALGETSTRING)( ALenum param );
typedef void ( *LPALGETBOOLEANV)( ALenum param, ALboolean* data );
typedef void ( *LPALGETINTEGERV)( ALenum param, ALint* data );
typedef void ( *LPALGETFLOATV)( ALenum param, ALfloat* data );
typedef void ( *LPALGETDOUBLEV)( ALenum param, ALdouble* data );
typedef ALboolean ( *LPALGETBOOLEAN)( ALenum param );
typedef ALint ( *LPALGETINTEGER)( ALenum param );
typedef ALfloat ( *LPALGETFLOAT)( ALenum param );
typedef ALdouble ( *LPALGETDOUBLE)( ALenum param );
typedef ALenum ( *LPALGETERROR)();
typedef ALboolean ( *LPALISEXTENSIONPRESENT)(ALchar* extname );
typedef void* ( *LPALGETPROCADDRESS)( ALchar* fname );
typedef ALenum ( *LPALGETENUMVALUE)( ALchar* ename );
typedef void ( *LPALLISTENERF)( ALenum param, ALfloat value );
typedef void ( *LPALLISTENER3F)( ALenum param, ALfloat value1, ALfloat value2, ALfloat value3 );
typedef void ( *LPALLISTENERFV)( ALenum param, ALfloat* values );
typedef void ( *LPALLISTENERI)( ALenum param, ALint value );
typedef void ( *LPALLISTENER3I)( ALenum param, ALint value1, ALint value2, ALint value3 );
typedef void ( *LPALLISTENERIV)( ALenum param, ALint* values );
typedef void ( *LPALGETLISTENERF)( ALenum param, ALfloat* value );
typedef void ( *LPALGETLISTENER3F)( ALenum param, ALfloat *value1, ALfloat *value2, ALfloat *value3 );
typedef void ( *LPALGETLISTENERFV)( ALenum param, ALfloat* values );
typedef void ( *LPALGETLISTENERI)( ALenum param, ALint* value );
typedef void ( *LPALGETLISTENER3I)( ALenum param, ALint *value1, ALint *value2, ALint *value3 );
typedef void ( *LPALGETLISTENERIV)( ALenum param, ALint* values );
typedef void ( *LPALGENSOURCES)( ALsizei n, ALuint* sources );
typedef void ( *LPALDELETESOURCES)( ALsizei n, ALuint* sources );
typedef ALboolean ( *LPALISSOURCE)( ALuint sid );
typedef void ( *LPALSOURCEF)( ALuint sid, ALenum param, ALfloat value);
typedef void ( *LPALSOURCE3F)( ALuint sid, ALenum param, ALfloat value1, ALfloat value2, ALfloat value3 );
typedef void ( *LPALSOURCEFV)( ALuint sid, ALenum param, ALfloat* values );
typedef void ( *LPALSOURCEI)( ALuint sid, ALenum param, ALint value);
typedef void ( *LPALSOURCE3I)( ALuint sid, ALenum param, ALint value1, ALint value2, ALint value3 );
typedef void ( *LPALSOURCEIV)( ALuint sid, ALenum param, ALint* values );
typedef void ( *LPALGETSOURCEF)( ALuint sid, ALenum param, ALfloat* value );
typedef void ( *LPALGETSOURCE3F)( ALuint sid, ALenum param, ALfloat* value1, ALfloat* value2, ALfloat* value3);
typedef void ( *LPALGETSOURCEFV)( ALuint sid, ALenum param, ALfloat* values );
typedef void ( *LPALGETSOURCEI)( ALuint sid, ALenum param, ALint* value );
typedef void ( *LPALGETSOURCE3I)( ALuint sid, ALenum param, ALint* value1, ALint* value2, ALint* value3);
typedef void ( *LPALGETSOURCEIV)( ALuint sid, ALenum param, ALint* values );
typedef void ( *LPALSOURCEPLAYV)( ALsizei ns, ALuint *sids );
typedef void ( *LPALSOURCESTOPV)( ALsizei ns, ALuint *sids );
typedef void ( *LPALSOURCEREWINDV)( ALsizei ns, ALuint *sids );
typedef void ( *LPALSOURCEPAUSEV)( ALsizei ns, ALuint *sids );
typedef void ( *LPALSOURCEPLAY)( ALuint sid );
typedef void ( *LPALSOURCESTOP)( ALuint sid );
typedef void ( *LPALSOURCEREWIND)( ALuint sid );
typedef void ( *LPALSOURCEPAUSE)( ALuint sid );
typedef void ( *LPALSOURCEQUEUEBUFFERS)(ALuint sid, ALsizei numEntries, ALuint *bids );
typedef void ( *LPALSOURCEUNQUEUEBUFFERS)(ALuint sid, ALsizei numEntries, ALuint *bids );
typedef void ( *LPALGENBUFFERS)( ALsizei n, ALuint* buffers );
typedef void ( *LPALDELETEBUFFERS)( ALsizei n, ALuint* buffers );
typedef ALboolean ( *LPALISBUFFER)( ALuint bid );
typedef void ( *LPALBUFFERDATA)( ALuint bid, ALenum format, ALvoid* data, ALsizei size, ALsizei freq );
typedef void ( *LPALBUFFERF)( ALuint bid, ALenum param, ALfloat value);
typedef void ( *LPALBUFFER3F)( ALuint bid, ALenum param, ALfloat value1, ALfloat value2, ALfloat value3 );
typedef void ( *LPALBUFFERFV)( ALuint bid, ALenum param, ALfloat* values );
typedef void ( *LPALBUFFERI)( ALuint bid, ALenum param, ALint value);
typedef void ( *LPALBUFFER3I)( ALuint bid, ALenum param, ALint value1, ALint value2, ALint value3 );
typedef void ( *LPALBUFFERIV)( ALuint bid, ALenum param, ALint* values );
typedef void ( *LPALGETBUFFERF)( ALuint bid, ALenum param, ALfloat* value );
typedef void ( *LPALGETBUFFER3F)( ALuint bid, ALenum param, ALfloat* value1, ALfloat* value2, ALfloat* value3);
typedef void ( *LPALGETBUFFERFV)( ALuint bid, ALenum param, ALfloat* values );
typedef void ( *LPALGETBUFFERI)( ALuint bid, ALenum param, ALint* value );
typedef void ( *LPALGETBUFFER3I)( ALuint bid, ALenum param, ALint* value1, ALint* value2, ALint* value3);
typedef void ( *LPALGETBUFFERIV)( ALuint bid, ALenum param, ALint* values );
typedef void ( *LPALDOPPLERFACTOR)( ALfloat value );
typedef void ( *LPALDOPPLERVELOCITY)( ALfloat value );
typedef void ( *LPALSPEEDOFSOUND)( ALfloat value );
typedef void ( *LPALDISTANCEMODEL)( ALenum distanceModel );

View file

@ -1,115 +0,0 @@
/*
OpenMW - The completely unofficial reimplementation of Morrowind
Copyright (C) 2008 Nicolay Korslund
Email: < korslund@gmail.com >
WWW: http://openmw.snaptoad.com/
This file (alc.d) is part of the OpenMW package.
OpenMW is distributed as free software: you can redistribute it
and/or modify it under the terms of the GNU General Public License
version 3, as published by the Free Software Foundation.
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.
You should have received a copy of the GNU General Public License
version 3 along with this program. If not, see
http://www.gnu.org/licenses/ .
*/
module sound.alc;
extern(C):
//Definitions
const int ALC_FALSE = 0;
const int ALC_TRUE = 1;
const int ALC_FREQUENCY = 0x1007;
const int ALC_REFRESH = 0x1008;
const int ALC_SYNC = 0x1009;
const int ALC_MONO_SOURCES = 0x1010;
const int ALC_STEREO_SOURCES = 0x1011;
const int ALC_NO_ERROR = ALC_FALSE;
const int ALC_INVALID_DEVICE = 0xA001;
const int ALC_INVALID_CONTEXT = 0xA002;
const int ALC_INVALID_ENUM = 0xA003;
const int ALC_INVALID_VALUE = 0xA004;
const int ALC_OUT_OF_MEMORY = 0xA005;
const int ALC_DEFAULT_DEVICE_SPECIFIER = 0x1004;
const int ALC_DEVICE_SPECIFIER = 0x1005;
const int ALC_EXTENSIONS = 0x1006;
const int ALC_MAJOR_VERSION = 0x1000;
const int ALC_MINOR_VERSION = 0x1001;
const int ALC_ATTRIBUTES_SIZE = 0x1002;
const int ALC_ALL_ATTRIBUTES = 0x1003;
const int ALC_CAPTURE_DEVICE_SPECIFIER = 0x310;
const int ALC_CAPTURE_DEFAULT_DEVICE_SPECIFIER = 0x311;
const int ALC_CAPTURE_SAMPLES = 0x312;
//Device and context structures
alias void ALCdevice;
alias void ALCcontext;
//Typedefs
alias char ALCboolean;
alias char ALCchar;
alias char ALCbyte;
alias ubyte ALCubyte;
alias short ALCshort;
alias ushort ALCushort;
alias int ALCint;
alias uint ALCuint;
alias int ALCsizei;
alias int ALCenum;
alias float ALCfloat;
alias double ALCdouble;
alias void ALCvoid;
//Context functions
ALCcontext* alcCreateContext( ALCdevice *device, ALCint* attrlist );
ALCboolean alcMakeContextCurrent( ALCcontext *context );
void alcProcessContext( ALCcontext *context );
void alcSuspendContext( ALCcontext *context );
void alcDestroyContext( ALCcontext *context );
ALCcontext* alcGetCurrentContext();
ALCdevice* alcGetContextsDevice( ALCcontext *context );
ALCdevice * alcOpenDevice( ALCchar *devicename );
ALCboolean alcCloseDevice( ALCdevice *device );
ALCenum alcGetError( ALCdevice *device );
ALCboolean alcIsExtensionPresent( ALCdevice *device, ALCchar *extname );
void* alcGetProcAddress( ALCdevice *device, ALCchar *funcname );
ALCenum alcGetEnumValue( ALCdevice *device, ALCchar *enumname );
ALCchar* alcGetString( ALCdevice *device, ALCenum param );
void alcGetIntegerv( ALCdevice *device, ALCenum param, ALCsizei size, ALCint *data );
ALCdevice* alcCaptureOpenDevice( ALCchar *devicename, ALCuint frequency, ALCenum format, ALCsizei buffersize );
ALCboolean alcCaptureCloseDevice( ALCdevice *device );
void alcCaptureStart( ALCdevice *device );
void alcCaptureStop( ALCdevice *device );
void alcCaptureSamples( ALCdevice *device, ALCvoid *buffer, ALCsizei samples );
typedef ALCcontext * ( *LPALCCREATECONTEXT) (ALCdevice *device, ALCint *attrlist);
typedef ALCboolean ( *LPALCMAKECONTEXTCURRENT)( ALCcontext *context );
typedef void ( *LPALCPROCESSCONTEXT)( ALCcontext *context );
typedef void ( *LPALCSUSPENDCONTEXT)( ALCcontext *context );
typedef void ( *LPALCDESTROYCONTEXT)( ALCcontext *context );
typedef ALCcontext * ( *LPALCGETCURRENTCONTEXT)( );
typedef ALCdevice * ( *LPALCGETCONTEXTSDEVICE)( ALCcontext *context );
typedef ALCdevice * ( *LPALCOPENDEVICE)( ALCchar *devicename );
typedef ALCboolean ( *LPALCCLOSEDEVICE)( ALCdevice *device );
typedef ALCenum ( *LPALCGETERROR)( ALCdevice *device );
typedef ALCboolean ( *LPALCISEXTENSIONPRESENT)( ALCdevice *device, ALCchar *extname );
typedef void * ( *LPALCGETPROCADDRESS)(ALCdevice *device, ALCchar *funcname );
typedef ALCenum ( *LPALCGETENUMVALUE)(ALCdevice *device, ALCchar *enumname );
typedef const ALCchar* ( *LPALCGETSTRING)( ALCdevice *device, ALCenum param );
typedef void ( *LPALCGETINTEGERV)( ALCdevice *device, ALCenum param, ALCsizei size, ALCint *dest );
typedef ALCdevice * ( *LPALCCAPTUREOPENDEVICE)( ALCchar *devicename, ALCuint frequency, ALCenum format, ALCsizei buffersize );
typedef ALCboolean ( *LPALCCAPTURECLOSEDEVICE)( ALCdevice *device );
typedef void ( *LPALCCAPTURESTART)( ALCdevice *device );
typedef void ( *LPALCCAPTURESTOP)( ALCdevice *device );
typedef void ( *LPALCCAPTURESAMPLES)( ALCdevice *device, ALCvoid *buffer, ALCsizei samples );