diff --git a/nif/extra.h b/nif/extra.h index d682bce42..a4208331c 100644 --- a/nif/extra.h +++ b/nif/extra.h @@ -59,6 +59,14 @@ struct NiVertWeightsExtraData : Extra struct NiTextKeyExtraData : Extra { + struct TextKey + { + float time; + SString text; + }; + + std::vector 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; igetFloat(); // time - nif->getString(); // key text + list[i].time = nif->getFloat(); + list[i].text = nif->getString(); } } }; diff --git a/nif/nif_file.h b/nif/nif_file.h index 4943e4e79..23815c346 100644 --- a/nif/nif_file.h +++ b/nif/nif_file.h @@ -93,6 +93,14 @@ class NIFFile parse(); } + ~NIFFile() + { + for(int i=0; i +#include #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; iprops.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; ichildren.length(); i++) + cout << " " << n->children.getIndex(i); + cout << endl; + + cout << "Effects:"; + for(int i=0; ieffects.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; ilist.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; irecName.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; + } } diff --git a/nifogre/tests/ogre_nif_test.cpp b/nifogre/tests/ogre_nif_test.cpp index a9a6b1c45..752ea686b 100644 --- a/nifogre/tests/ogre_nif_test.cpp +++ b/nifogre/tests/ogre_nif_test.cpp @@ -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); diff --git a/old_d_version/sound/al.d b/old_d_version/sound/al.d deleted file mode 100644 index 07c931eb8..000000000 --- a/old_d_version/sound/al.d +++ /dev/null @@ -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 ); diff --git a/old_d_version/sound/alc.d b/old_d_version/sound/alc.d deleted file mode 100644 index a1a8d1c66..000000000 --- a/old_d_version/sound/alc.d +++ /dev/null @@ -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 );