mirror of
https://github.com/AquariaOSE/Aquaria.git
synced 2025-06-07 17:11:56 +00:00
Merge branch 'experimental' into xCode
This commit is contained in:
commit
9d4baeb38d
269 changed files with 47228 additions and 876 deletions
|
@ -1415,6 +1415,7 @@ void AnimationEditor::load()
|
|||
std::string file = dsq->getUserInputString("Enter anim file to load:");
|
||||
if (file.empty()) return;
|
||||
this->editingFile = file;
|
||||
SkeletalSprite::clearCache();
|
||||
loadFile();
|
||||
}
|
||||
|
||||
|
@ -1426,6 +1427,7 @@ void AnimationEditor::loadSkin()
|
|||
if (file.empty()) return;
|
||||
//this->editingFile = file;
|
||||
//loadFile();
|
||||
SkeletalSprite::clearCache();
|
||||
editSprite->loadSkin(file);
|
||||
}
|
||||
|
||||
|
|
|
@ -27,7 +27,7 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
|||
#define SCROLL_DELAY 0.1f
|
||||
#define SCROLL_DELAY_FIRST 0.4f
|
||||
|
||||
AquariaComboBox::AquariaComboBox() : RenderObject()
|
||||
AquariaComboBox::AquariaComboBox(Vector textscale) : RenderObject()
|
||||
{
|
||||
//Quad *bar, *window, *scrollBtnUp, *scrollBtnDown, *scrollBar;
|
||||
bar = new Quad("gui/combo-drop", Vector(0,0));
|
||||
|
@ -47,6 +47,7 @@ AquariaComboBox::AquariaComboBox() : RenderObject()
|
|||
selectedItemLabel->setFontSize(8);
|
||||
selectedItemLabel->offset.y = -10;
|
||||
selectedItemLabel->position.x = -50;
|
||||
selectedItemLabel->scale = textscale;
|
||||
addChild(selectedItemLabel, PM_POINTER);
|
||||
|
||||
numDrops = 8;
|
||||
|
@ -62,6 +63,8 @@ AquariaComboBox::AquariaComboBox() : RenderObject()
|
|||
|
||||
scrollDelay = 0;
|
||||
firstScroll = 0;
|
||||
|
||||
this->textscale = textscale;
|
||||
}
|
||||
|
||||
void AquariaComboBox::destroy()
|
||||
|
@ -230,7 +233,7 @@ void AquariaComboBox::open(float t)
|
|||
{
|
||||
if (i < items.size())
|
||||
{
|
||||
AquariaComboBoxItem *a = new AquariaComboBoxItem(items[i], i, this);
|
||||
AquariaComboBoxItem *a = new AquariaComboBoxItem(items[i], i, this, textscale);
|
||||
a->alpha = 0;
|
||||
a->alpha.interpolateTo(1, t);
|
||||
a->position.y = (a->getHeight()+2) * ((i-scroll)+1);
|
||||
|
@ -335,7 +338,7 @@ int AquariaComboBox::addItem(const std::string &n)
|
|||
Vector unselectedColor(0.7, 0.7, 0.7);
|
||||
Vector selectedColor(1,1,1);
|
||||
|
||||
AquariaComboBoxItem::AquariaComboBoxItem(const std::string &str, int idx, AquariaComboBox *combo) : Quad()
|
||||
AquariaComboBoxItem::AquariaComboBoxItem(const std::string &str, int idx, AquariaComboBox *combo, Vector textscale) : Quad()
|
||||
{
|
||||
this->combo = combo;
|
||||
index = idx;
|
||||
|
@ -348,6 +351,7 @@ AquariaComboBoxItem::AquariaComboBoxItem(const std::string &str, int idx, Aquari
|
|||
label->setText(str);
|
||||
label->offset.y = -10;
|
||||
label->position.x = -50;
|
||||
label->scale = textscale;
|
||||
addChild(label, PM_POINTER);
|
||||
|
||||
color = unselectedColor;
|
||||
|
|
|
@ -847,16 +847,17 @@ void AquariaMenuItem::useSound(const std::string &tex)
|
|||
useSfx = tex;
|
||||
}
|
||||
|
||||
void AquariaMenuItem::useQuad(const std::string &tex)
|
||||
bool AquariaMenuItem::useQuad(const std::string &tex)
|
||||
{
|
||||
if (quad)
|
||||
{
|
||||
debugLog("trying to call useQuad twice on the same object");
|
||||
return;
|
||||
return true;
|
||||
}
|
||||
quad = new Quad;
|
||||
quad->setTexture(tex);
|
||||
bool good = quad->setTexture(tex);
|
||||
addChild(quad, PM_POINTER);
|
||||
return good;
|
||||
}
|
||||
|
||||
void AquariaMenuItem::useGlow(const std::string &tex, int w, int h)
|
||||
|
|
|
@ -81,7 +81,7 @@ public:
|
|||
XMLElement *ability, *xmlItem;
|
||||
int choice;
|
||||
Quad *glow, *quad;
|
||||
void useQuad(const std::string &tex);
|
||||
bool useQuad(const std::string &tex);
|
||||
void useGlow(const std::string &tex, int w, int h);
|
||||
void useSound(const std::string &tex);
|
||||
|
||||
|
@ -195,7 +195,7 @@ class AquariaComboBox;
|
|||
class AquariaComboBoxItem : public Quad
|
||||
{
|
||||
public:
|
||||
AquariaComboBoxItem(const std::string &str, int idx, AquariaComboBox *combo);
|
||||
AquariaComboBoxItem(const std::string &str, int idx, AquariaComboBox *combo, Vector textscale);
|
||||
|
||||
protected:
|
||||
void onUpdate(float dt);
|
||||
|
@ -210,7 +210,7 @@ protected:
|
|||
class AquariaComboBox : public RenderObject
|
||||
{
|
||||
public:
|
||||
AquariaComboBox();
|
||||
AquariaComboBox(Vector textscale = Vector(1, 1));
|
||||
|
||||
void destroy();
|
||||
|
||||
|
@ -242,6 +242,7 @@ protected:
|
|||
int selectedItem;
|
||||
float scrollDelay;
|
||||
bool firstScroll;
|
||||
Vector textscale;
|
||||
|
||||
std::vector<AquariaComboBoxItem*> shownItems;
|
||||
};
|
||||
|
|
|
@ -4110,33 +4110,16 @@ void Avatar::refreshNormalForm()
|
|||
if (c.empty())
|
||||
c = "Naija";
|
||||
refreshModel("Naija", c);
|
||||
if (true)
|
||||
if(hair)
|
||||
{
|
||||
if (hair)
|
||||
hair->alphaMod = 1.0;
|
||||
hair->alphaMod = 1.0;
|
||||
if (!c.empty() && c!="Naija")
|
||||
{
|
||||
if (exists(core->getBaseTextureDirectory() + "naija/cape-"+c+".png"))
|
||||
{
|
||||
if (hair)
|
||||
hair->setTexture("naija/cape-"+c);
|
||||
}
|
||||
else
|
||||
{
|
||||
if (hair)
|
||||
hair->alphaMod = 0;
|
||||
}
|
||||
if(!hair->setTexture("naija/cape-"+c))
|
||||
hair->alphaMod = 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (hair)
|
||||
hair->setTexture("naija/cape");
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if (hair)
|
||||
hair->alphaMod = 0.0;
|
||||
hair->setTexture("naija/cape");
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -7127,7 +7110,7 @@ void Avatar::onUpdate(float dt)
|
|||
|
||||
if(!core->particlesPaused && elementEffectMult > 0)
|
||||
{
|
||||
ElementUpdateList& elems = dsq->game->elementUpdateList;
|
||||
ElementUpdateList& elems = dsq->game->elementInteractionList;
|
||||
for (ElementUpdateList::iterator it = elems.begin(); it != elems.end(); ++it)
|
||||
{
|
||||
(*it)->doInteraction(this, elementEffectMult, 16);
|
||||
|
|
|
@ -1368,7 +1368,19 @@ void Continuity::loadEatBank()
|
|||
{
|
||||
eats.clear();
|
||||
|
||||
InStream inf("data/eats.txt");
|
||||
std::string file;
|
||||
bool found = false;
|
||||
if (dsq->mod.isActive())
|
||||
{
|
||||
file = dsq->mod.getPath() + "eats.txt";
|
||||
if(exists(file))
|
||||
found = true;
|
||||
}
|
||||
|
||||
if(!found)
|
||||
file = "data/eats.txt";
|
||||
|
||||
InStream inf(file.c_str());
|
||||
|
||||
EatData curData;
|
||||
std::string read;
|
||||
|
@ -3649,7 +3661,8 @@ void Continuity::reset()
|
|||
|
||||
speedTypes.clear();
|
||||
InStream inFile("data/speedtypes.txt");
|
||||
int n, spd;
|
||||
int n;
|
||||
float spd;
|
||||
while (inFile >> n)
|
||||
{
|
||||
inFile >> spd;
|
||||
|
@ -3667,7 +3680,7 @@ void Continuity::reset()
|
|||
core->resetTimer();
|
||||
}
|
||||
|
||||
int Continuity::getSpeedType(int speedType)
|
||||
float Continuity::getSpeedType(int speedType)
|
||||
{
|
||||
if (speedType >= speedTypes.size() || speedType < 0)
|
||||
{
|
||||
|
|
|
@ -2222,7 +2222,7 @@ void DSQ::refreshResourcesForPatch(const std::string& name)
|
|||
{
|
||||
for(int i = 0; i < dsq->resources.size(); ++i)
|
||||
{
|
||||
Resource *r = dsq->resources[i];
|
||||
Texture *r = dsq->resources[i];
|
||||
if(files.find(r->name) != files.end())
|
||||
r->reload();
|
||||
}
|
||||
|
@ -2313,7 +2313,7 @@ void DSQ::shutdown()
|
|||
SkeletalSprite::clearCache();
|
||||
|
||||
|
||||
cursor->setTexturePointer(0, RenderObject::NO_ADD_REF);
|
||||
cursor->setTexturePointer(0);
|
||||
|
||||
UNREFTEX(texCursor);
|
||||
UNREFTEX(texCursorSwim);
|
||||
|
@ -2410,7 +2410,7 @@ void DSQ::setTexturePointers()
|
|||
texCursorSing = core->addTexture("cursor-sing");
|
||||
|
||||
if (cursor)
|
||||
cursor->setTexturePointer(texCursor, RenderObject::NO_ADD_REF);
|
||||
cursor->setTexturePointer(texCursor);
|
||||
}
|
||||
|
||||
void DSQ::setCursor(CursorType type)
|
||||
|
@ -2418,22 +2418,22 @@ void DSQ::setCursor(CursorType type)
|
|||
switch(type)
|
||||
{
|
||||
case CURSOR_NORMAL:
|
||||
cursor->setTexturePointer(texCursor, RenderObject::NO_ADD_REF);
|
||||
cursor->setTexturePointer(texCursor);
|
||||
break;
|
||||
case CURSOR_LOOK:
|
||||
cursor->setTexturePointer(texCursorLook, RenderObject::NO_ADD_REF);
|
||||
cursor->setTexturePointer(texCursorLook);
|
||||
break;
|
||||
case CURSOR_BURST:
|
||||
cursor->setTexturePointer(texCursorBurst, RenderObject::NO_ADD_REF);
|
||||
cursor->setTexturePointer(texCursorBurst);
|
||||
break;
|
||||
case CURSOR_SWIM:
|
||||
cursor->setTexturePointer(texCursorSwim, RenderObject::NO_ADD_REF);
|
||||
cursor->setTexturePointer(texCursorSwim);
|
||||
break;
|
||||
case CURSOR_SING:
|
||||
cursor->setTexturePointer(texCursorSing, RenderObject::NO_ADD_REF);
|
||||
cursor->setTexturePointer(texCursorSing);
|
||||
break;
|
||||
default:
|
||||
cursor->setTexturePointer(texCursor, RenderObject::NO_ADD_REF);
|
||||
cursor->setTexturePointer(texCursor);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
@ -3869,58 +3869,6 @@ void DSQ::jumpToSection(InStream &inFile, const std::string §ion)
|
|||
debugLog("could not find section [" + section + "]");
|
||||
}
|
||||
|
||||
|
||||
void DSQ::runGesture(const std::string &line)
|
||||
{
|
||||
std::istringstream is(line);
|
||||
std::string target;
|
||||
is >> target;
|
||||
debugLog("Gesture: " + line);
|
||||
if (target == "entity")
|
||||
{
|
||||
std::string entName;
|
||||
is >> entName;
|
||||
Entity *e = getEntityByName(entName);
|
||||
if (e)
|
||||
{
|
||||
std::string cmd;
|
||||
is >> cmd;
|
||||
if (cmd=="anim" || cmd=="animate")
|
||||
{
|
||||
std::string anim;
|
||||
is >> anim;
|
||||
int loop = 0;
|
||||
int group = 0;
|
||||
if (anim == "idle")
|
||||
{
|
||||
e->skeletalSprite.stopAllAnimations();
|
||||
loop = -1;
|
||||
}
|
||||
if (line.find("upperBody")!=std::string::npos)
|
||||
{
|
||||
group = 1;
|
||||
}
|
||||
if (line.find("loop")!=std::string::npos)
|
||||
{
|
||||
loop = -1;
|
||||
}
|
||||
if (line.find("stopAll")!=std::string::npos)
|
||||
{
|
||||
e->skeletalSprite.stopAllAnimations();
|
||||
}
|
||||
e->skeletalSprite.transitionAnimate(anim, 0.2, loop, group);
|
||||
}
|
||||
else if (cmd == "moveToNode")
|
||||
{
|
||||
std::string node;
|
||||
is >> node;
|
||||
Path *p = dsq->game->getPathByName(node);
|
||||
e->moveToNode(p, 0);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
bool DSQ::runScript(const std::string &name, const std::string &function, bool ignoremissing /* = false */)
|
||||
{
|
||||
if (!scriptInterface.runScript(name, function, ignoremissing))
|
||||
|
@ -4550,7 +4498,7 @@ void DSQ::onUpdate(float dt)
|
|||
if (isDeveloperKeys() && fpsText && cmDebug && cmDebug->alpha == 1)
|
||||
{
|
||||
std::ostringstream os;
|
||||
os << "FPS: " << core->fps << " | ROC: " << core->renderObjectCount << " | RC: " << Core::dbg_numRenderCalls;
|
||||
os << "FPS: " << core->fps << " | ROC: " << core->renderObjectCount << " | RC: " << Core::dbg_numRenderCalls << " | RES: " << core->resources.size();
|
||||
os << " | p: " << core->processedRenderObjectCount << " | t: " << core->totalRenderObjectCount;
|
||||
os << " | s: " << dsq->continuity.seconds;
|
||||
os << " | evQ: " << core->eventQueue.getSize();
|
||||
|
@ -4829,7 +4777,12 @@ void DSQ::modifyDt(float &dt)
|
|||
if (isDeveloperKeys())
|
||||
{
|
||||
if (core->getKeyState(KEY_G))
|
||||
dt *= 4;
|
||||
{
|
||||
if(core->getShiftState())
|
||||
dt *= 10;
|
||||
else
|
||||
dt *= 4;
|
||||
}
|
||||
else if (core->getKeyState(KEY_F))
|
||||
{
|
||||
if (core->getShiftState())
|
||||
|
|
|
@ -31,8 +31,6 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
|||
#include "AquariaMenuItem.h"
|
||||
#include "ScriptInterface.h"
|
||||
|
||||
#include "PathFinding.h"
|
||||
|
||||
#include "TTFFont.h"
|
||||
|
||||
#include "tinyxml2.h"
|
||||
|
@ -622,12 +620,13 @@ class Path;
|
|||
|
||||
struct GemData
|
||||
{
|
||||
GemData() { canMove=false; }
|
||||
GemData() { canMove=false; blink = false; }
|
||||
std::string name;
|
||||
std::string userString;
|
||||
std::string mapName;
|
||||
bool canMove;
|
||||
Vector pos;
|
||||
bool canMove;
|
||||
bool blink; // not saved
|
||||
};
|
||||
|
||||
struct BeaconData
|
||||
|
@ -994,7 +993,7 @@ public:
|
|||
float getStory();
|
||||
void setStory(float v);
|
||||
|
||||
int getSpeedType(int speedType);
|
||||
float getSpeedType(int speedType);
|
||||
void setNaijaModel(std::string model);
|
||||
|
||||
|
||||
|
@ -1161,7 +1160,7 @@ public:
|
|||
|
||||
protected:
|
||||
std::vector<EatData> eats;
|
||||
std::vector<int> speedTypes;
|
||||
std::vector<float> speedTypes;
|
||||
float story;
|
||||
WorldType worldType;
|
||||
|
||||
|
@ -1264,7 +1263,7 @@ public:
|
|||
Quad *bar_left, *bar_right, *bar_up, *bar_down;
|
||||
Quad *barFade_left, *barFade_right;
|
||||
|
||||
Texture *texCursor, *texCursorSwim, *texCursorBurst, *texCursorSing, *texCursorLook;
|
||||
CountedPtr<Texture> texCursor, texCursorSwim, texCursorBurst, texCursorSing, texCursorLook;
|
||||
|
||||
void setBlackBarsColor(Vector color);
|
||||
|
||||
|
@ -1397,8 +1396,6 @@ public:
|
|||
|
||||
void jumpToSection(InStream &inFile, const std::string §ion);
|
||||
|
||||
PathFinding pathFinding;
|
||||
void runGesture(const std::string &line);
|
||||
void generateCollisionMask(RenderObject *r);
|
||||
void toggleRenderCollisionShapes();
|
||||
|
||||
|
|
|
@ -84,12 +84,8 @@ void Element::doInteraction(Entity *ent, float mult, float touchWidth)
|
|||
eff->hitPerc = hitPerc;
|
||||
eff->touchVel = ent->vel;
|
||||
eff->effectMult = mult;
|
||||
return;
|
||||
}
|
||||
}
|
||||
//eff->touchVel = Vector(0, 0);
|
||||
//eff->hitPerc = 0;
|
||||
eff->touching = false;
|
||||
}
|
||||
|
||||
void Element::updateEffects(float dt)
|
||||
|
@ -110,6 +106,7 @@ void Element::updateEffects(float dt)
|
|||
|
||||
if (eff->touching)
|
||||
{
|
||||
eff->touching = false;
|
||||
float ramp = eff->touchVel.getLength2D()/800.0f;
|
||||
if (ramp < 0) ramp = 0;
|
||||
if (ramp > 1) ramp = 1;
|
||||
|
|
|
@ -26,6 +26,7 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
|||
#include "Avatar.h"
|
||||
#include "ScriptedEntity.h"
|
||||
#include "Shot.h"
|
||||
#include "PathFinding.h"
|
||||
|
||||
//Shader Entity::blurShader;
|
||||
|
||||
|
@ -254,7 +255,7 @@ Entity::Entity()
|
|||
//debugLog("dsq->addEntity()");
|
||||
|
||||
dsq->addEntity(this);
|
||||
maxSpeed = oldMaxSpeed = 300;
|
||||
maxSpeed = 300;
|
||||
entityDead = false;
|
||||
health = maxHealth = 5;
|
||||
invincibleBreak = false;
|
||||
|
@ -439,43 +440,45 @@ void Entity::setName(const std::string &name)
|
|||
this->name = name;
|
||||
}
|
||||
|
||||
void Entity::followPath(Path *p, int speedType, int dir, bool deleteOnEnd)
|
||||
float Entity::followPath(Path *p, float speed, int dir, bool deleteOnEnd)
|
||||
{
|
||||
if (p)
|
||||
{
|
||||
deleteOnPathEnd = deleteOnEnd;
|
||||
if(!speed)
|
||||
speed = getMaxSpeed();
|
||||
deleteOnPathEnd = deleteOnEnd;
|
||||
|
||||
position.stopPath();
|
||||
position.ensureData();
|
||||
position.data->path.clear();
|
||||
if (dir)
|
||||
position.stopPath();
|
||||
position.ensureData();
|
||||
position.data->path.clear();
|
||||
if (dir)
|
||||
{
|
||||
for (int i = p->nodes.size()-1; i >=0; i--)
|
||||
{
|
||||
for (int i = p->nodes.size()-1; i >=0; i--)
|
||||
{
|
||||
PathNode pn = p->nodes[i];
|
||||
position.data->path.addPathNode(pn.position, 1.0f-(float(i/float(p->nodes.size()))));
|
||||
}
|
||||
PathNode pn = p->nodes[i];
|
||||
position.data->path.addPathNode(pn.position, 1.0f-(float(i/float(p->nodes.size()))));
|
||||
}
|
||||
else
|
||||
{
|
||||
for (int i = 0; i < p->nodes.size(); i++)
|
||||
{
|
||||
PathNode pn = p->nodes[i];
|
||||
position.data->path.addPathNode(pn.position, float(i/float(p->nodes.size())));
|
||||
}
|
||||
}
|
||||
//debugLog("Calculating Time");
|
||||
float time = position.data->path.getLength()/(float)dsq->continuity.getSpeedType(speedType);
|
||||
//debugLog("Starting");
|
||||
position.data->path.getPathNode(0)->value = position;
|
||||
position.startPath(time);//, 1.0f/2.0f);
|
||||
}
|
||||
else
|
||||
{
|
||||
for (int i = 0; i < p->nodes.size(); i++)
|
||||
{
|
||||
PathNode pn = p->nodes[i];
|
||||
position.data->path.addPathNode(pn.position, float(i/float(p->nodes.size())));
|
||||
}
|
||||
}
|
||||
//debugLog("Calculating Time");
|
||||
float time = position.data->path.getLength()/speed;
|
||||
//debugLog("Starting");
|
||||
position.data->path.getPathNode(0)->value = position;
|
||||
position.startPath(time);//, 1.0f/2.0f);
|
||||
return time;
|
||||
}
|
||||
|
||||
void Entity::moveToNode(Path *path, int speedType, int dieOnPathEnd, bool swim)
|
||||
float Entity::moveToPos(Vector dest, float speed, int dieOnPathEnd, bool swim)
|
||||
{
|
||||
if(!speed)
|
||||
speed = getMaxSpeed();
|
||||
|
||||
Vector start = position;
|
||||
Vector dest = path->nodes[0].position;
|
||||
followEntity = 0;
|
||||
//watchingEntity = 0;
|
||||
|
||||
|
@ -485,10 +488,10 @@ void Entity::moveToNode(Path *path, int speedType, int dieOnPathEnd, bool swim)
|
|||
|
||||
swimPath = swim;
|
||||
//debugLog("Generating path to: " + path->name);
|
||||
dsq->pathFinding.generatePath(this, TileVector(start), TileVector(dest));
|
||||
int sz = position.data->path.getNumPathNodes();
|
||||
position.data->path.addPathNode(path->nodes[0].position, 1);
|
||||
VectorPath old = position.data->path;
|
||||
PathFinding::generatePath(this, TileVector(start), TileVector(dest));
|
||||
//int sz = position.data->path.getNumPathNodes();
|
||||
//position.data->path.addPathNode(path->nodes[0].position, 1);
|
||||
//VectorPath old = position.data->path;
|
||||
/*std::ostringstream os;
|
||||
os << "Path length: " << sz;
|
||||
debugLog(os.str());*/
|
||||
|
@ -509,16 +512,16 @@ void Entity::moveToNode(Path *path, int speedType, int dieOnPathEnd, bool swim)
|
|||
|
||||
//debugLog("Molesting Path");
|
||||
|
||||
dsq->pathFinding.molestPath(position.data->path);
|
||||
PathFinding::molestPath(position.data->path);
|
||||
//position.data->path.realPercentageCalc();
|
||||
//position.data->path.cut(4);
|
||||
|
||||
//debugLog("forcing path to minimum 2 nodes");
|
||||
dsq->pathFinding.forceMinimumPath(position.data->path, start, dest);
|
||||
PathFinding::forceMinimumPath(position.data->path, start, dest);
|
||||
//debugLog("Done");
|
||||
|
||||
//debugLog("Calculating Time");
|
||||
float time = position.data->path.getLength()/(float)dsq->continuity.getSpeedType(speedType);
|
||||
float time = position.data->path.getLength()/speed;
|
||||
//debugLog("Starting");
|
||||
position.data->path.getPathNode(0)->value = position;
|
||||
position.startPath(time);//, 1.0f/2.0f);
|
||||
|
@ -535,6 +538,8 @@ void Entity::moveToNode(Path *path, int speedType, int dieOnPathEnd, bool swim)
|
|||
|
||||
//position.startSpeedPath(dsq->continuity.getSpeedType(speedType));
|
||||
//position.startPath(((position.data->path.getNumPathNodes()*TILE_SIZE*4)-2)/dsq->continuity.getSpeedType(speedType));
|
||||
|
||||
return time;
|
||||
}
|
||||
|
||||
void Entity::stopFollowingPath()
|
||||
|
@ -1009,7 +1014,7 @@ bool Entity::isNearObstruction(int sz, int type, TileVector *hitTile)
|
|||
return v;
|
||||
}
|
||||
|
||||
bool Entity::touchAvatarDamage(int radius, float dmg, const Vector &override, int speed, float pushTime, Vector collidePos)
|
||||
bool Entity::touchAvatarDamage(int radius, float dmg, const Vector &override, float speed, float pushTime, Vector collidePos)
|
||||
{
|
||||
if (isv(EV_BEASTBURST, 1) && isDamageTarget(DT_AVATAR_BITE) && dsq->continuity.form == FORM_BEAST && dsq->game->avatar->bursting)
|
||||
{
|
||||
|
@ -1150,7 +1155,7 @@ void Entity::update(float dt)
|
|||
Vector backupPos = position;
|
||||
Vector backupVel = vel;
|
||||
|
||||
bool doUpdate = (updateCull == -1 || (position - core->screenCenter).isLength2DIn(updateCull));
|
||||
bool doUpdate = (updateCull < 0 || (position - core->screenCenter).isLength2DIn(updateCull));
|
||||
if (doUpdate && !(pauseFreeze && dsq->game->isPaused()))
|
||||
{
|
||||
|
||||
|
@ -2212,7 +2217,7 @@ bool Entity::isUnderWater(const Vector &override)
|
|||
return false;
|
||||
}
|
||||
|
||||
void Entity::push(const Vector &vec, float time, int maxSpeed, float dmg)
|
||||
void Entity::push(const Vector &vec, float time, float maxSpeed, float dmg)
|
||||
{
|
||||
if (!this->isEntityDead())
|
||||
{
|
||||
|
@ -2233,9 +2238,9 @@ void Entity::push(const Vector &vec, float time, int maxSpeed, float dmg)
|
|||
//vel += pushVec;
|
||||
}
|
||||
|
||||
void Entity::setMaxSpeed(int ms)
|
||||
void Entity::setMaxSpeed(float ms)
|
||||
{
|
||||
maxSpeed = oldMaxSpeed = ms;
|
||||
maxSpeed = ms;
|
||||
}
|
||||
|
||||
int Entity::getMaxSpeed()
|
||||
|
@ -2394,11 +2399,6 @@ void Entity::onEnterState(int action)
|
|||
{
|
||||
switch (action)
|
||||
{
|
||||
case STATE_IDLE:
|
||||
{
|
||||
maxSpeed = oldMaxSpeed;
|
||||
}
|
||||
break;
|
||||
case STATE_DEAD:
|
||||
{
|
||||
if (!isGoingToBeEaten())
|
||||
|
@ -3019,7 +3019,7 @@ void Entity::shotHitEntity(Entity *hit, Shot *shot, Bone *b)
|
|||
{
|
||||
}
|
||||
|
||||
bool Entity::doCollisionAvoidance(float dt, int search, float mod, Vector *vp, int overrideMaxSpeed, int ignoreObs, bool onlyVP)
|
||||
bool Entity::doCollisionAvoidance(float dt, int search, float mod, Vector *vp, float overrideMaxSpeed, int ignoreObs, bool onlyVP)
|
||||
{
|
||||
Vector accum;
|
||||
int c = 0;
|
||||
|
|
|
@ -28,6 +28,7 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
|||
#include "DSQ.h"
|
||||
#include "Path.h"
|
||||
#include "Hair.h"
|
||||
#include "TileVector.h"
|
||||
|
||||
#include "tinyxml2.h"
|
||||
using namespace tinyxml2;
|
||||
|
@ -232,7 +233,7 @@ public:
|
|||
|
||||
void heal(float a, int type=0);
|
||||
|
||||
void push(const Vector &vec, float time, int maxSpeed, float dmg);
|
||||
void push(const Vector &vec, float time, float maxSpeed, float dmg);
|
||||
|
||||
bool canSetState(int state);
|
||||
|
||||
|
@ -311,9 +312,9 @@ public:
|
|||
};
|
||||
virtual void onNotify(Entity *notify){}
|
||||
//void followPath(Path *p, int spd, int loop, bool deleteOnEnd = false);
|
||||
void followPath(Path *p, int speedType, int dir, bool deleteOnEnd = false);
|
||||
float followPath(Path *p, float speed, int dir, bool deleteOnEnd = false);
|
||||
Entity *attachedTo;
|
||||
bool touchAvatarDamage(int radius, float dmg, const Vector &override=Vector(-1,-1,-1), int speed=0, float pushTime = 0, Vector collidePos = Vector(0,0,0));
|
||||
bool touchAvatarDamage(int radius, float dmg, const Vector &override=Vector(-1,-1,-1), float speed=0, float pushTime = 0, Vector collidePos = Vector(0,0,0));
|
||||
|
||||
void moveTowards(Vector p, float dt, int spd);
|
||||
void moveAround(Vector p, float dt, int spd, int d);
|
||||
|
@ -326,10 +327,10 @@ public:
|
|||
void moveAroundEntity(float dt, int spd, int d, Entity *e);
|
||||
void moveTowardsGroupCenter(float dt, int spd);
|
||||
void moveTowardsGroupHeading(float dt, int spd);
|
||||
bool doCollisionAvoidance(float dt, int search, float mod, Vector *v = 0, int overrideMaxSpeed=0, int ignoreObs=0, bool onlyVP=false);
|
||||
bool doCollisionAvoidance(float dt, int search, float mod, Vector *v = 0, float overrideMaxSpeed=0, int ignoreObs=0, bool onlyVP=false);
|
||||
void doSpellAvoidance(float dt, int range, float mod);
|
||||
void doEntityAvoidance(float dt, int range, float mod, Entity *ignore =0);
|
||||
void setMaxSpeed(int ms);
|
||||
void setMaxSpeed(float ms);
|
||||
Entity *findTarget(int dist, int type, int t=0);
|
||||
//bool hasTarget() { return target != 0; }
|
||||
bool hasTarget(int t=0);
|
||||
|
@ -352,7 +353,7 @@ public:
|
|||
void overideMaxSpeed(int ms, float time);
|
||||
void disableOverideMaxSpeed();
|
||||
int currentEntityTarget;
|
||||
void moveToNode(Path *path, int speedType, int dieOnPathEnd=0, bool swim = false);
|
||||
float moveToPos(Vector pos, float speed, int dieOnPathEnd=0, bool swim = false);
|
||||
bool isHit();
|
||||
bool pathBurst(bool wallJump = false);
|
||||
Timer burstTimer;
|
||||
|
@ -598,7 +599,7 @@ protected:
|
|||
|
||||
void updateBoneLock();
|
||||
|
||||
int pushMaxSpeed;
|
||||
float pushMaxSpeed;
|
||||
std::string currentAnim;
|
||||
|
||||
|
||||
|
@ -609,8 +610,7 @@ protected:
|
|||
private:
|
||||
|
||||
|
||||
int maxSpeed;
|
||||
int oldMaxSpeed;
|
||||
float maxSpeed;
|
||||
|
||||
bool stopSoundsOnDeath;
|
||||
|
||||
|
|
|
@ -42,8 +42,6 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
|||
|
||||
std::vector<std::string> allowedMaps;
|
||||
|
||||
const int PATH_ACTIVATION_RANGE = 800;
|
||||
|
||||
Vector worldLeftCenter(217,250), worldRightCenter(575, 250);
|
||||
Vector opt_save_original = Vector(350, 350), opt_cancel_original = Vector(450, 350);
|
||||
|
||||
|
@ -3384,12 +3382,14 @@ void Game::createInGameMenu()
|
|||
resolutionLabel->position = Vector(160, 260);
|
||||
options->addChild(resolutionLabel, PM_POINTER);
|
||||
|
||||
resBox = new AquariaComboBox();
|
||||
resBox = new AquariaComboBox(Vector(0.7f, 1.0f));
|
||||
resBox->position = Vector(196, 285);
|
||||
for (i = 0; i < core->screenModes.size(); i++)
|
||||
{
|
||||
std::ostringstream os;
|
||||
os << core->screenModes[i].x << "x" << core->screenModes[i].y;
|
||||
if(core->screenModes[i].hz)
|
||||
os << " (" << core->screenModes[i].hz << "hz)";
|
||||
resBox->addItem(os.str());
|
||||
if (core->screenModes[i].x == dsq->user.video.resx && core->screenModes[i].y == dsq->user.video.resy)
|
||||
{
|
||||
|
@ -5910,22 +5910,14 @@ void Game::rebuildElementUpdateList()
|
|||
elementUpdateList.clear();
|
||||
elementInteractionList.clear();
|
||||
for (int i = 0; i < dsq->getNumElements(); i++)
|
||||
//for (int i = LR_ELEMENTS1; i <= LR_ELEMENTS8; i++)
|
||||
{
|
||||
//RenderObjectLayer *rl = dsq->getRenderObjectLayer(i);
|
||||
Element *e = dsq->getElement(i);
|
||||
if (e && e->layer >= LR_ELEMENTS1 && e->layer <= LR_ELEMENTS8)
|
||||
{
|
||||
if (e->getElementEffectIndex() != -1)
|
||||
{
|
||||
elementUpdateList.push_back(e);
|
||||
}
|
||||
ElementEffect ee = dsq->getElementEffectByIndex(e->getElementEffectIndex());
|
||||
if(ee.type == EFX_WAVY)
|
||||
{
|
||||
elementInteractionList.push_back(e);
|
||||
}
|
||||
}
|
||||
const int eeidx = e->getElementEffectIndex();
|
||||
if (eeidx != -1 && e->layer >= LR_ELEMENTS1 && e->layer <= LR_ELEMENTS8)
|
||||
elementUpdateList.push_back(e);
|
||||
ElementEffect ee = dsq->getElementEffectByIndex(eeidx);
|
||||
if(ee.type == EFX_WAVY)
|
||||
elementInteractionList.push_back(e);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -6460,18 +6452,9 @@ void Game::applyState()
|
|||
}
|
||||
#endif
|
||||
|
||||
worldMapRender = 0;
|
||||
dsq->continuity.worldMap.revealMap(sceneToLoad);
|
||||
|
||||
debugLog("Creating WorldMapRender");
|
||||
if(dsq->mod.isActive() && dsq->mod.mapRevealMethod != REVEAL_UNSPECIFIED)
|
||||
WorldMapRender::setRevealMethod(dsq->mod.mapRevealMethod);
|
||||
else
|
||||
WorldMapRender::setRevealMethod((WorldMapRevealMethod)dsq->user.video.worldMapRevealMethod);
|
||||
|
||||
worldMapRender = new WorldMapRender;
|
||||
addRenderObject(worldMapRender, LR_WORLDMAP);
|
||||
|
||||
/*
|
||||
if (liFlag == 100)
|
||||
*/
|
||||
|
||||
if (verbose) debugLog("Creating Avatar");
|
||||
avatar = new Avatar();
|
||||
|
@ -6535,6 +6518,8 @@ void Game::applyState()
|
|||
if (verbose) debugLog("...Done");
|
||||
backupSceneColor = sceneColor;
|
||||
|
||||
dsq->continuity.worldMap.revealMap(sceneName);
|
||||
|
||||
colorTest();
|
||||
|
||||
if (!warpAreaType.empty())
|
||||
|
@ -6663,6 +6648,18 @@ void Game::applyState()
|
|||
timerText->followCamera = 1;
|
||||
addRenderObject(timerText, LR_MINIMAP);
|
||||
|
||||
worldMapRender = 0;
|
||||
|
||||
if(dsq->mod.isActive() && dsq->mod.mapRevealMethod != REVEAL_UNSPECIFIED)
|
||||
WorldMapRender::setRevealMethod(dsq->mod.mapRevealMethod);
|
||||
else
|
||||
WorldMapRender::setRevealMethod((WorldMapRevealMethod)dsq->user.video.worldMapRevealMethod);
|
||||
|
||||
worldMapRender = new WorldMapRender;
|
||||
addRenderObject(worldMapRender, LR_WORLDMAP);
|
||||
// to hide minimap
|
||||
//miniMapRender->position += Vector(800,0);
|
||||
|
||||
sceneToLoad="";
|
||||
|
||||
if (!fromScene.empty())
|
||||
|
@ -9328,7 +9325,7 @@ void Game::toggleKeyConfigMenu(bool f)
|
|||
|
||||
//group_keyConfig->children[group_keyConfig->children.size()-3]
|
||||
|
||||
RenderObjectList::reverse_iterator i = group_keyConfig->children.rbegin();
|
||||
RenderObject::Children::reverse_iterator i = group_keyConfig->children.rbegin();
|
||||
AquariaKeyConfig *upright0 = (AquariaKeyConfig*)(*i);
|
||||
i++;
|
||||
AquariaKeyConfig *upright = (AquariaKeyConfig*)(*i);
|
||||
|
@ -10372,7 +10369,7 @@ void Game::update(float dt)
|
|||
{
|
||||
Vector diff = p->nodes[0].position - dsq->game->avatar->position;
|
||||
|
||||
if (p->isCoordinateInside(dsq->game->avatar->position) || diff.getSquaredLength2D() < sqr(PATH_ACTIVATION_RANGE))
|
||||
if (p->isCoordinateInside(dsq->game->avatar->position) || diff.getSquaredLength2D() < sqr(p->activationRange))
|
||||
{
|
||||
//if (trace(avatar->position, p->nodes[0].position))
|
||||
{
|
||||
|
@ -10819,6 +10816,7 @@ void Game::removeState()
|
|||
core->particlesPaused = false;
|
||||
|
||||
elementUpdateList.clear();
|
||||
elementInteractionList.clear();
|
||||
|
||||
dsq->setCursor(CURSOR_NORMAL);
|
||||
dsq->darkLayer.toggle(0);
|
||||
|
|
|
@ -66,14 +66,14 @@ namespace MiniMapRenderSpace
|
|||
const int healthMarkerSize = 20;
|
||||
|
||||
|
||||
Texture *texCook = 0;
|
||||
Texture *texWaterBit = 0;
|
||||
Texture *texMinimapBtm = 0;
|
||||
Texture *texMinimapTop = 0;
|
||||
Texture *texRipple = 0;
|
||||
Texture *texNaija = 0;
|
||||
Texture *texHealthBar = 0;
|
||||
Texture *texMarker = 0;
|
||||
CountedPtr<Texture> texCook = 0;
|
||||
CountedPtr<Texture> texWaterBit = 0;
|
||||
CountedPtr<Texture> texMinimapBtm = 0;
|
||||
CountedPtr<Texture> texMinimapTop = 0;
|
||||
CountedPtr<Texture> texRipple = 0;
|
||||
CountedPtr<Texture> texNaija = 0;
|
||||
CountedPtr<Texture> texHealthBar = 0;
|
||||
CountedPtr<Texture> texMarker = 0;
|
||||
|
||||
float waterSin = 0;
|
||||
|
||||
|
|
|
@ -640,8 +640,7 @@ bool ModIconOnline::fixIcon()
|
|||
quad->setDecayRate(2);
|
||||
quad = 0;
|
||||
}
|
||||
useQuad(iconfile);
|
||||
result = Texture::textureError == TEXERR_OK;
|
||||
result = useQuad(iconfile);
|
||||
}
|
||||
if(!quad)
|
||||
{
|
||||
|
|
|
@ -54,6 +54,7 @@ Path::Path()
|
|||
warpType = 0;
|
||||
spiritFreeze = true;
|
||||
pauseFreeze = true;
|
||||
activationRange = 800;
|
||||
}
|
||||
|
||||
void Path::clampPosition(Vector *pos, float radius)
|
||||
|
@ -450,14 +451,23 @@ void Path::refreshScript()
|
|||
//core->removeRenderObject(&emitter, Core::DO_NOT_DESTROY_RENDER_OBJECT);
|
||||
//core->getTopStateData()->addRenderObject(&emitter, LR_PARTICLES);
|
||||
|
||||
if (emitter)
|
||||
{
|
||||
emitter->safeKill();
|
||||
emitter = 0;
|
||||
}
|
||||
setEmitter(particleEffect);
|
||||
}
|
||||
}
|
||||
|
||||
void Path::setEmitter(const std::string& name)
|
||||
{
|
||||
if (emitter)
|
||||
{
|
||||
emitter->safeKill();
|
||||
emitter = 0;
|
||||
}
|
||||
if(!name.empty())
|
||||
{
|
||||
emitter = new ParticleEffect;
|
||||
emitter->load(particleEffect);
|
||||
emitter->start();
|
||||
emitter->load(name);
|
||||
if(active)
|
||||
emitter->start();
|
||||
if (!nodes.empty())
|
||||
{
|
||||
emitter->position = nodes[0].position;
|
||||
|
|
|
@ -89,6 +89,7 @@ public:
|
|||
void update(float dt);
|
||||
void setActive(bool v);
|
||||
bool action(int id, int state);
|
||||
void setEmitter(const std::string& name);
|
||||
|
||||
PathNode *getPathNode(int idx);
|
||||
bool isCoordinateInside(const Vector &pos, int rad=0);
|
||||
|
@ -144,6 +145,7 @@ public:
|
|||
bool pauseFreeze;
|
||||
|
||||
PathShape pathShape;
|
||||
float activationRange;
|
||||
|
||||
|
||||
void parseWarpNodeData(const std::string &dataString);
|
||||
|
|
|
@ -24,6 +24,7 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
|||
#include "DSQ.h"
|
||||
#include "Game.h"
|
||||
|
||||
|
||||
class SearchGridRaw
|
||||
{
|
||||
public:
|
||||
|
@ -33,11 +34,19 @@ public:
|
|||
return (game->getGridRaw(TileVector(x, y)) & blockingObsBits) == OT_EMPTY;
|
||||
}
|
||||
|
||||
private:
|
||||
const ObsType blockingObsBits;
|
||||
ObsType blockingObsBits;
|
||||
const Game *game;
|
||||
};
|
||||
|
||||
class PathFinding::State : public ScriptObject
|
||||
{
|
||||
public:
|
||||
State(ObsType obs) : grid(obs), searcher(grid), result(JPS::NO_PATH) {}
|
||||
SearchGridRaw grid;
|
||||
JPS::Searcher<SearchGridRaw> searcher;
|
||||
JPS::Result result;
|
||||
};
|
||||
|
||||
static void generateVectorPath(const JPS::PathVector& rawpath, VectorPath& vp, int offx, int offy)
|
||||
{
|
||||
for(JPS::PathVector::const_iterator it = rawpath.begin(); it != rawpath.end(); ++it)
|
||||
|
@ -124,7 +133,7 @@ void PathFinding::molestPath(VectorPath &path)
|
|||
lastSuccessNode = 0;
|
||||
hadSuccess = false;
|
||||
Vector node = path.getPathNode(i)->value;
|
||||
for (int j = sz-3; j >= i+adjust; j--)
|
||||
for (int j = sz-1; j >= i+adjust; j--)
|
||||
{
|
||||
Vector target = path.getPathNode(j)->value;
|
||||
if (dsq->game->trace(node, target))
|
||||
|
@ -183,3 +192,55 @@ bool PathFinding::generatePathSimple(VectorPath& path, const Vector& start, cons
|
|||
molestPath(path);
|
||||
return true;
|
||||
}
|
||||
|
||||
PathFinding::State *PathFinding::initFindPath()
|
||||
{
|
||||
State *state = new PathFinding::State(OT_BLOCKING);
|
||||
return state;
|
||||
}
|
||||
|
||||
void PathFinding::deleteFindPath(State *state)
|
||||
{
|
||||
delete state;
|
||||
}
|
||||
|
||||
void PathFinding::beginFindPath(PathFinding::State *state, const Vector& start, const Vector& end, unsigned int obs /* = 0 */)
|
||||
{
|
||||
if(obs == OT_EMPTY)
|
||||
obs = OT_BLOCKING;
|
||||
|
||||
state->grid.blockingObsBits = (ObsType)obs;
|
||||
JPS::Position istart = JPS::Pos(start.x, start.y);
|
||||
JPS::Position iend = JPS::Pos(end.x, end.y);
|
||||
state->result = state->searcher.findPathInit(istart, iend);
|
||||
}
|
||||
|
||||
bool PathFinding::updateFindPath(PathFinding::State *state, int limit)
|
||||
{
|
||||
int oldres = state->result;
|
||||
if(oldres == JPS::NEED_MORE_STEPS)
|
||||
{
|
||||
state->result = state->searcher.findPathStep(limit);
|
||||
return oldres != state->result;
|
||||
}
|
||||
return true; // done
|
||||
}
|
||||
|
||||
bool PathFinding::finishFindPath(PathFinding::State *state, VectorPath& path, unsigned step /* = 0 */)
|
||||
{
|
||||
if(state->result != JPS::FOUND_PATH)
|
||||
return false;
|
||||
|
||||
JPS::PathVector rawpath;
|
||||
state->searcher.findPathFinish(rawpath, step);
|
||||
generateVectorPath(rawpath, path, 0, 0);
|
||||
molestPath(path);
|
||||
return true;
|
||||
}
|
||||
|
||||
void PathFinding::getStats(PathFinding::State *state, unsigned& stepsDone, unsigned& nodesExpanded)
|
||||
{
|
||||
stepsDone = (unsigned)state->searcher.getStepsDone();
|
||||
nodesExpanded = (unsigned)state->searcher.getNodesExpanded();
|
||||
}
|
||||
|
||||
|
|
|
@ -30,14 +30,23 @@ class RenderObject;
|
|||
class SearchGrid;
|
||||
class Game;
|
||||
|
||||
class PathFinding
|
||||
namespace PathFinding
|
||||
{
|
||||
public:
|
||||
class State;
|
||||
|
||||
void forceMinimumPath(VectorPath &path, const Vector &start, const Vector &dest);
|
||||
void molestPath(VectorPath &path);
|
||||
void generatePath(RenderObject *go, TileVector g1, TileVector g2, int offx=0, int offy=0);
|
||||
|
||||
bool generatePathSimple(VectorPath& path, const Vector& start, const Vector& end, unsigned int step = 0, unsigned int obs = 0);
|
||||
|
||||
State *initFindPath();
|
||||
void deleteFindPath(State *state);
|
||||
|
||||
void beginFindPath(State *state, const Vector& start, const Vector& end, unsigned int obs = 0);
|
||||
bool updateFindPath(State *state, int limit);
|
||||
bool finishFindPath(State *state, VectorPath& path, unsigned step = 0);
|
||||
void getStats(State *state, unsigned& stepsDone, unsigned& nodesExpanded);
|
||||
};
|
||||
|
||||
#endif
|
||||
|
|
|
@ -23,19 +23,19 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
|||
#include "Avatar.h"
|
||||
#include "../BBGE/AfterEffect.h"
|
||||
|
||||
float strengthSeparation = 1;
|
||||
float strengthAlignment = 0.8;
|
||||
float strengthAvoidance = 1;
|
||||
float strengthCohesion = 0.5;
|
||||
const float strengthSeparation = 1;
|
||||
const float strengthAlignment = 0.8f;
|
||||
const float strengthAvoidance = 1;
|
||||
const float strengthCohesion = 0.5f;
|
||||
|
||||
float avoidanceDistance = 128;
|
||||
float separationDistance = 128;
|
||||
float minUrgency = 5;//0.05;
|
||||
float maxUrgency = 10;//0.1;
|
||||
float maxSpeed = 400; // 1
|
||||
float maxChange = maxSpeed*maxUrgency;
|
||||
const float avoidanceDistance = 128;
|
||||
const float separationDistance = 128;
|
||||
const float minUrgency = 5;//0.05;
|
||||
const float maxUrgency = 10;//0.1;
|
||||
const float maxSpeed = 400; // 1
|
||||
const float maxChange = maxSpeed*maxUrgency;
|
||||
|
||||
float velocityScale = 1;
|
||||
const float velocityScale = 1;
|
||||
|
||||
|
||||
SchoolFish::SchoolFish(const std::string &texname) : FlockEntity()
|
||||
|
|
|
@ -36,7 +36,9 @@ extern "C"
|
|||
#include "Web.h"
|
||||
#include "GridRender.h"
|
||||
#include "AfterEffect.h"
|
||||
#include "PathFinding.h"
|
||||
#include <algorithm>
|
||||
#include "Gradient.h"
|
||||
|
||||
#include "../BBGE/MathFunctions.h"
|
||||
|
||||
|
@ -874,7 +876,26 @@ luaFunc(fileExists)
|
|||
safePath(L, s);
|
||||
std::string res;
|
||||
bool there = findFile_helper(s.c_str(), res);
|
||||
luaReturnBool(there);
|
||||
lua_pushboolean(L, there);
|
||||
lua_pushstring(L, res.c_str());
|
||||
return 2;
|
||||
}
|
||||
|
||||
luaFunc(getModName)
|
||||
{
|
||||
luaReturnStr(dsq->mod.isActive() ? dsq->mod.getName().c_str() : "");
|
||||
}
|
||||
|
||||
luaFunc(getModPath)
|
||||
{
|
||||
std::string path;
|
||||
if (dsq->mod.isActive())
|
||||
{
|
||||
path = dsq->mod.getPath();
|
||||
if(path[path.length() - 1] != '/')
|
||||
path += '/';
|
||||
}
|
||||
luaReturnStr(path.c_str());
|
||||
}
|
||||
|
||||
|
||||
|
@ -890,6 +911,7 @@ MakeTypeCheckFunc(isNode, SCO_PATH);
|
|||
MakeTypeCheckFunc(isObject, SCO_RENDEROBJECT);
|
||||
MakeTypeCheckFunc(isEntity, SCO_ENTITY)
|
||||
MakeTypeCheckFunc(isScriptedEntity, SCO_SCRIPTED_ENTITY)
|
||||
MakeTypeCheckFunc(isBone, SCO_BONE)
|
||||
MakeTypeCheckFunc(isShot, SCO_SHOT)
|
||||
MakeTypeCheckFunc(isWeb, SCO_WEB)
|
||||
MakeTypeCheckFunc(isIng, SCO_INGREDIENT)
|
||||
|
@ -1110,9 +1132,7 @@ luaFunc(obj_setBlendType)
|
|||
luaFunc(obj_setTexture)
|
||||
{
|
||||
RenderObject *r = robj(L);
|
||||
if (r)
|
||||
r->setTexture(getString(L, 2));
|
||||
luaReturnNil();
|
||||
luaReturnBool(r ? r->setTexture(getString(L, 2)) : false);
|
||||
}
|
||||
|
||||
luaFunc(obj_getTexture)
|
||||
|
@ -1179,6 +1199,7 @@ luaFunc(obj_addChild)
|
|||
RenderObject *r = robj(L);
|
||||
RenderObject *which = robj(L, 2);
|
||||
bool takeOwnership = getBool(L, 3);
|
||||
bool front = getBool(L, 4);
|
||||
if (r && which)
|
||||
{
|
||||
if (takeOwnership)
|
||||
|
@ -1188,7 +1209,7 @@ luaFunc(obj_addChild)
|
|||
dsq->getState(dsq->game->name)->removeRenderObjectFromList(which);
|
||||
which->setStateDataObject(NULL);
|
||||
core->removeRenderObject(which, Core::DO_NOT_DESTROY_RENDER_OBJECT);
|
||||
r->addChild(which, PM_POINTER);
|
||||
r->addChild(which, PM_POINTER, RBP_NONE, front ? CHILD_FRONT : CHILD_BACK);
|
||||
}
|
||||
else
|
||||
r->addChild(which, PM_STATIC);
|
||||
|
@ -1541,10 +1562,15 @@ luaFunc(obj_setUpdateCull)
|
|||
{
|
||||
RenderObject *r = robj(L);;
|
||||
if (r)
|
||||
r->updateCull = lua_tointeger(L, 2);
|
||||
r->updateCull = lua_tonumber(L, 2);
|
||||
luaReturnNil();
|
||||
}
|
||||
|
||||
luaFunc(obj_getUpdateCull)
|
||||
{
|
||||
RenderObject *r = robj(L);;
|
||||
luaReturnNum(r ? r->updateCull : 0.0f);
|
||||
}
|
||||
|
||||
luaFunc(obj_setPositionX)
|
||||
{
|
||||
|
@ -1832,6 +1858,7 @@ luaFunc(quad_getBorderAlpha)
|
|||
RO_FUNC(getter, prefix, setCull ) \
|
||||
RO_FUNC(getter, prefix, setCullRadius ) \
|
||||
RO_FUNC(getter, prefix, setUpdateCull ) \
|
||||
RO_FUNC(getter, prefix, getUpdateCull ) \
|
||||
RO_FUNC(getter, prefix, setRenderPass ) \
|
||||
RO_FUNC(getter, prefix, setOverrideRenderPass ) \
|
||||
RO_FUNC(getter, prefix, setPositionX ) \
|
||||
|
@ -3129,6 +3156,11 @@ luaFunc(createShot)
|
|||
luaReturnPtr(s);
|
||||
}
|
||||
|
||||
luaFunc(isSkippingCutscene)
|
||||
{
|
||||
luaReturnBool(dsq->isSkippingCutscene());
|
||||
}
|
||||
|
||||
// deprecated, use entity_playSfx
|
||||
luaFunc(entity_sound)
|
||||
{
|
||||
|
@ -3318,45 +3350,67 @@ luaFunc(entity_moveToNode)
|
|||
{
|
||||
Entity *e = entity(L);
|
||||
Path *p = path(L, 2);
|
||||
float time = 0;
|
||||
if (e && p)
|
||||
{
|
||||
e->moveToNode(p, lua_tointeger(L, 3), lua_tointeger(L, 4), 0);
|
||||
float speed = dsq->continuity.getSpeedType(lua_tointeger(L, 3));
|
||||
time = e->moveToPos(p->nodes[0].position, speed, lua_tointeger(L, 4), 0);
|
||||
}
|
||||
luaReturnNil();
|
||||
luaReturnNum(time);
|
||||
}
|
||||
|
||||
luaFunc(entity_swimToNode)
|
||||
{
|
||||
Entity *e = entity(L);
|
||||
Path *p = path(L, 2);
|
||||
float time = 0;
|
||||
if (e && p)
|
||||
{
|
||||
e->moveToNode(p, lua_tointeger(L, 3), lua_tointeger(L, 4), 1);
|
||||
/*
|
||||
ScriptedEntity *se = dynamic_cast<ScriptedEntity*>(e);
|
||||
se->swimPath = true;
|
||||
*/
|
||||
float speed = dsq->continuity.getSpeedType(lua_tointeger(L, 3));
|
||||
time = e->moveToPos(p->nodes[0].position, speed, lua_tointeger(L, 4), 1);
|
||||
}
|
||||
luaReturnNil();
|
||||
luaReturnNum(time);
|
||||
}
|
||||
|
||||
luaFunc(entity_swimToPosition)
|
||||
{
|
||||
Entity *e = entity(L);
|
||||
//Path *p = path(L, 2);
|
||||
Path p;
|
||||
PathNode n;
|
||||
n.position = Vector(lua_tonumber(L, 2), lua_tonumber(L, 3));
|
||||
p.nodes.push_back(n);
|
||||
float time = 0;
|
||||
if (e)
|
||||
{
|
||||
e->moveToNode(&p, lua_tointeger(L, 4), lua_tointeger(L, 5), 1);
|
||||
/*
|
||||
ScriptedEntity *se = dynamic_cast<ScriptedEntity*>(e);
|
||||
se->swimPath = true;
|
||||
*/
|
||||
float speed = dsq->continuity.getSpeedType(lua_tointeger(L, 4));
|
||||
time = e->moveToPos(Vector(lua_tonumber(L, 2), lua_tonumber(L, 3)), speed, lua_tointeger(L, 5), 1);
|
||||
}
|
||||
luaReturnNil();
|
||||
luaReturnNum(time);
|
||||
}
|
||||
|
||||
luaFunc(entity_moveToNodeSpeed)
|
||||
{
|
||||
Entity *e = entity(L);
|
||||
Path *p = path(L, 2);
|
||||
float time = 0;
|
||||
if (e && p)
|
||||
time = e->moveToPos(p->nodes[0].position, lua_tonumber(L, 3), lua_tointeger(L, 4), 0);
|
||||
luaReturnNum(time);
|
||||
}
|
||||
|
||||
luaFunc(entity_swimToNodeSpeed)
|
||||
{
|
||||
Entity *e = entity(L);
|
||||
Path *p = path(L, 2);
|
||||
float time = 0;
|
||||
if (e && p)
|
||||
time = e->moveToPos(p->nodes[0].position, lua_tonumber(L, 3), lua_tointeger(L, 4), 1);
|
||||
luaReturnNum(time);
|
||||
}
|
||||
|
||||
luaFunc(entity_swimToPositionSpeed)
|
||||
{
|
||||
Entity *e = entity(L);
|
||||
float time = 0;
|
||||
if (e)
|
||||
time = e->moveToPos(Vector(lua_tonumber(L, 2), lua_tonumber(L, 3)), lua_tonumber(L, 4), lua_tointeger(L, 5), 1);
|
||||
luaReturnNum(time);
|
||||
}
|
||||
|
||||
|
||||
|
@ -3642,15 +3696,30 @@ luaFunc(loadMap)
|
|||
luaFunc(entity_followPath)
|
||||
{
|
||||
Entity *e = entity(L);
|
||||
float time = 0;
|
||||
if (e)
|
||||
{
|
||||
Path *p = path(L, 2);
|
||||
int speedType = lua_tointeger(L, 3);
|
||||
int dir = lua_tointeger(L, 4);
|
||||
|
||||
e->followPath(p, speedType, dir);
|
||||
float speed = dsq->continuity.getSpeedType(speedType);
|
||||
time = e->followPath(p, speed, dir);
|
||||
}
|
||||
luaReturnNil();
|
||||
luaReturnNum(time);
|
||||
}
|
||||
|
||||
luaFunc(entity_followPathSpeed)
|
||||
{
|
||||
Entity *e = entity(L);
|
||||
float time = 0;
|
||||
if (e)
|
||||
{
|
||||
Path *p = path(L, 2);
|
||||
float speed = lua_tonumber(L, 3);
|
||||
int dir = lua_tointeger(L, 4);
|
||||
time = e->followPath(p, speed, dir);
|
||||
}
|
||||
luaReturnNum(time);
|
||||
}
|
||||
|
||||
luaFunc(spawnIngredient)
|
||||
|
@ -4846,12 +4915,13 @@ luaFunc(getWallNormal)
|
|||
x = lua_tonumber(L, 1);
|
||||
y = lua_tonumber(L, 2);
|
||||
int range = lua_tointeger(L, 3);
|
||||
int obs = lua_tointeger(L, 4);
|
||||
if (range == 0)
|
||||
{
|
||||
range = 5;
|
||||
}
|
||||
if (!obs)
|
||||
obs = OT_BLOCKING;
|
||||
|
||||
Vector n = dsq->game->getWallNormal(Vector(x, y), range);
|
||||
Vector n = dsq->game->getWallNormal(Vector(x, y), range, NULL, obs);
|
||||
|
||||
luaReturnVec2(n.x, n.y);
|
||||
}
|
||||
|
@ -4905,6 +4975,21 @@ luaFunc(getStringFlag)
|
|||
luaReturnStr(dsq->continuity.getStringFlag(getString(L, 1)).c_str());
|
||||
}
|
||||
|
||||
luaFunc(node_setEmitter)
|
||||
{
|
||||
Path *p = path(L);
|
||||
if(p)
|
||||
p->setEmitter(getString(L, 2));
|
||||
luaReturnPtr(p->emitter);
|
||||
}
|
||||
|
||||
luaFunc(node_getEmitter)
|
||||
{
|
||||
Path *p = path(L);
|
||||
luaReturnPtr(p ? p->emitter : NULL);
|
||||
}
|
||||
|
||||
|
||||
luaFunc(node_setActive)
|
||||
{
|
||||
Path *p = path(L);
|
||||
|
@ -4912,6 +4997,13 @@ luaFunc(node_setActive)
|
|||
if (p)
|
||||
{
|
||||
p->active = v;
|
||||
if(p->emitter)
|
||||
{
|
||||
if(v)
|
||||
p->emitter->start();
|
||||
else
|
||||
p->emitter->stop();
|
||||
}
|
||||
}
|
||||
luaReturnNil();
|
||||
}
|
||||
|
@ -4933,6 +5025,14 @@ luaFunc(node_setCursorActivation)
|
|||
luaReturnNil();
|
||||
}
|
||||
|
||||
luaFunc(node_setActivationRange)
|
||||
{
|
||||
Path *p = path(L);
|
||||
if(p)
|
||||
p->activationRange = lua_tonumber(L, 2);
|
||||
luaReturnNil();
|
||||
}
|
||||
|
||||
luaFunc(node_setCatchActions)
|
||||
{
|
||||
Path *p = path(L);
|
||||
|
@ -5523,7 +5623,7 @@ luaFunc(entity_doElementInteraction)
|
|||
if (!touchWidth)
|
||||
touchWidth = 16;
|
||||
|
||||
ElementUpdateList& elems = dsq->game->elementUpdateList;
|
||||
ElementUpdateList& elems = dsq->game->elementInteractionList;
|
||||
for (ElementUpdateList::iterator it = elems.begin(); it != elems.end(); ++it)
|
||||
{
|
||||
(*it)->doInteraction(e, mult, touchWidth);
|
||||
|
@ -6027,7 +6127,7 @@ luaFunc(entity_setMaxSpeed)
|
|||
{
|
||||
Entity *e = entity(L);
|
||||
if (e)
|
||||
e->setMaxSpeed(lua_tointeger(L, 2));
|
||||
e->setMaxSpeed(lua_tonumber(L, 2));
|
||||
|
||||
luaReturnNil();
|
||||
}
|
||||
|
@ -6478,7 +6578,7 @@ luaFunc(playSfx)
|
|||
if (sfx.vol <= 0)
|
||||
sfx.vol = 1;
|
||||
sfx.loops = lua_tointeger(L, 4);
|
||||
if(lua_isnumber(L, 6) && lua_isnumber(L, 7))
|
||||
if(lua_isnumber(L, 5) && lua_isnumber(L, 6))
|
||||
{
|
||||
sfx.x = lua_tonumber(L, 5);
|
||||
sfx.y = lua_tonumber(L, 6);
|
||||
|
@ -7862,7 +7962,7 @@ luaFunc(entity_offsetUpdate)
|
|||
Entity *e = entity(L);
|
||||
if (e)
|
||||
{
|
||||
int uc = e->updateCull;
|
||||
float uc = e->updateCull;
|
||||
e->updateCull = -1;
|
||||
float t = float(rand()%10000)/1000.0f;
|
||||
e->update(t);
|
||||
|
@ -8385,6 +8485,44 @@ luaFunc(setGemPosition)
|
|||
luaReturnBool(result);
|
||||
}
|
||||
|
||||
luaFunc(setGemName)
|
||||
{
|
||||
int gemId = lua_tointeger(L, 1);
|
||||
bool result = false;
|
||||
|
||||
if(gemId >= 0 && gemId < dsq->continuity.gems.size())
|
||||
{
|
||||
Continuity::Gems::iterator it = dsq->continuity.gems.begin();
|
||||
std::advance(it, gemId);
|
||||
GemData& gem = *it;
|
||||
gem.name = getString(L, 2);
|
||||
result = true;
|
||||
}
|
||||
else
|
||||
debugLog("setGemName: invalid index");
|
||||
|
||||
luaReturnBool(result);
|
||||
}
|
||||
|
||||
luaFunc(setGemBlink)
|
||||
{
|
||||
int gemId = lua_tointeger(L, 1);
|
||||
bool result = false;
|
||||
|
||||
if(gemId >= 0 && gemId < dsq->continuity.gems.size())
|
||||
{
|
||||
Continuity::Gems::iterator it = dsq->continuity.gems.begin();
|
||||
std::advance(it, gemId);
|
||||
GemData& gem = *it;
|
||||
gem.blink = getBool(L, 2);
|
||||
result = true;
|
||||
}
|
||||
else
|
||||
debugLog("setGemBlink: invalid index");
|
||||
|
||||
luaReturnBool(result);
|
||||
}
|
||||
|
||||
luaFunc(removeGem)
|
||||
{
|
||||
int gemId = lua_tointeger(L, 1);
|
||||
|
@ -8647,7 +8785,7 @@ luaFunc(avatar_updatePosition)
|
|||
|
||||
luaFunc(avatar_toggleMovement)
|
||||
{
|
||||
dsq->game->avatar->toggleMovement((bool)lua_tointeger(L, 1));
|
||||
dsq->game->avatar->toggleMovement(getBool(L));
|
||||
luaReturnNil();
|
||||
}
|
||||
|
||||
|
@ -8729,6 +8867,43 @@ luaFunc(isShuttingDownGameState)
|
|||
luaReturnBool(dsq->game->isShuttingDownGameState());
|
||||
}
|
||||
|
||||
static void _fillPathfindTables(lua_State *L, VectorPath& path, int xs_idx, int ys_idx)
|
||||
{
|
||||
const unsigned num = path.getNumPathNodes();
|
||||
|
||||
if(lua_istable(L, xs_idx))
|
||||
lua_pushvalue(L, xs_idx);
|
||||
else
|
||||
lua_createtable(L, num, 0);
|
||||
|
||||
if(lua_istable(L, ys_idx))
|
||||
lua_pushvalue(L, ys_idx);
|
||||
else
|
||||
lua_createtable(L, num, 0);
|
||||
|
||||
// [..., xs, yx]
|
||||
for(unsigned i = 0; i < num; ++i)
|
||||
{
|
||||
const VectorPathNode *n = path.getPathNode(i);
|
||||
lua_pushnumber(L, n->value.x); // [..., xs, ys, x]
|
||||
lua_rawseti(L, -3, i+1); // [..., xs, ys]
|
||||
lua_pushnumber(L, n->value.y); // [..., xs, ys, y]
|
||||
lua_rawseti(L, -2, i+1); // [..., xs, ys]
|
||||
}
|
||||
// terminate tables
|
||||
lua_pushnil(L); // [..., xs, ys, nil]
|
||||
lua_rawseti(L, -3, num+1); // [..., xs, ys]
|
||||
lua_pushnil(L); // [..., xs, ys, nil]
|
||||
lua_rawseti(L, -2, num+1); // [..., xs, ys]
|
||||
}
|
||||
|
||||
static int _pathfindDelete(lua_State *L)
|
||||
{
|
||||
PathFinding::State *state = *(PathFinding::State**)luaL_checkudata(L, 1, "pathfinder");
|
||||
PathFinding::deleteFindPath(state);
|
||||
return 0;
|
||||
}
|
||||
|
||||
// startx, starty, endx, endy [, step, xtab, ytab, obsMask]
|
||||
luaFunc(findPath)
|
||||
{
|
||||
|
@ -8736,55 +8911,81 @@ luaFunc(findPath)
|
|||
Vector start(lua_tonumber(L, 1), lua_tonumber(L, 2));
|
||||
Vector end(lua_tonumber(L, 3), lua_tonumber(L, 4));
|
||||
ObsType obs = ObsType(lua_tointeger(L, 8));
|
||||
if(!dsq->pathFinding.generatePathSimple(path, start, end, lua_tointeger(L, 5), obs))
|
||||
if(!PathFinding::generatePathSimple(path, start, end, lua_tointeger(L, 5), obs))
|
||||
luaReturnBool(false);
|
||||
|
||||
const unsigned num = path.getNumPathNodes();
|
||||
lua_pushinteger(L, num);
|
||||
|
||||
if(lua_istable(L, 6))
|
||||
lua_pushvalue(L, 6);
|
||||
else
|
||||
lua_createtable(L, num, 0);
|
||||
|
||||
if(lua_istable(L, 7))
|
||||
lua_pushvalue(L, 7);
|
||||
else
|
||||
lua_createtable(L, num, 0);
|
||||
|
||||
// [true, xs, yx]
|
||||
|
||||
for(unsigned i = 0; i < num; ++i)
|
||||
{
|
||||
const VectorPathNode *n = path.getPathNode(i);
|
||||
lua_pushnumber(L, n->value.x); // [num, xs, ys, x]
|
||||
lua_rawseti(L, -3, i+1); // [num, xs, ys]
|
||||
lua_pushnumber(L, n->value.y); // [num, xs, ys, y]
|
||||
lua_rawseti(L, -2, i+1); // [num, xs, ys]
|
||||
}
|
||||
// terminate tables
|
||||
lua_pushnil(L); // [num xs, ys, nil]
|
||||
lua_rawseti(L, -3, num+1); // [num, xs, ys]
|
||||
lua_pushnil(L); // [num, xs, ys, nil]
|
||||
lua_rawseti(L, -2, num+1); // [num, xs, ys]
|
||||
_fillPathfindTables(L, path, 6, 7);
|
||||
|
||||
return 3; // found path?, x positions, y positions
|
||||
}
|
||||
|
||||
luaFunc(createFindPath)
|
||||
{
|
||||
PathFinding::State **statep = (PathFinding::State**)lua_newuserdata(L, sizeof(void*));
|
||||
*statep = PathFinding::initFindPath();
|
||||
luaL_getmetatable(L, "pathfinder");
|
||||
lua_setmetatable(L, -2);
|
||||
return 1;
|
||||
}
|
||||
|
||||
luaFunc(findPathBegin)
|
||||
{
|
||||
PathFinding::State *state = *(PathFinding::State**)luaL_checkudata(L, 1, "pathfinder");
|
||||
Vector start(lua_tonumber(L, 1), lua_tonumber(L, 2));
|
||||
Vector end(lua_tonumber(L, 3), lua_tonumber(L, 4));
|
||||
ObsType obs = ObsType(lua_tointeger(L, 8));
|
||||
PathFinding::beginFindPath(state, start, end, obs);
|
||||
luaReturnNil();
|
||||
}
|
||||
|
||||
luaFunc(findPathUpdate)
|
||||
{
|
||||
PathFinding::State *state = *(PathFinding::State**)luaL_checkudata(L, 1, "pathfinder");
|
||||
int limit = lua_tointeger(L, 2);
|
||||
bool done = PathFinding::updateFindPath(state, limit);
|
||||
luaReturnBool(done);
|
||||
}
|
||||
|
||||
luaFunc(findPathFinish)
|
||||
{
|
||||
PathFinding::State *state = *(PathFinding::State**)luaL_checkudata(L, 1, "pathfinder");
|
||||
VectorPath path;
|
||||
bool found = PathFinding::finishFindPath(state, path);
|
||||
if(!found)
|
||||
luaReturnBool(false);
|
||||
|
||||
lua_pushinteger(L, (int)path.getNumPathNodes());
|
||||
_fillPathfindTables(L, path, 2, 3);
|
||||
return 3;
|
||||
}
|
||||
|
||||
luaFunc(findPathGetStats)
|
||||
{
|
||||
PathFinding::State *state = *(PathFinding::State**)luaL_checkudata(L, 1, "pathfinder");
|
||||
unsigned stepsDone, nodesExpanded;
|
||||
PathFinding::getStats(state, stepsDone, nodesExpanded);
|
||||
lua_pushinteger(L, stepsDone);
|
||||
lua_pushinteger(L, nodesExpanded);
|
||||
return 2;
|
||||
}
|
||||
|
||||
luaFunc(castLine)
|
||||
{
|
||||
Vector v(lua_tonumber(L, 1), lua_tonumber(L, 2));
|
||||
Vector end(lua_tonumber(L, 3), lua_tonumber(L, 4));
|
||||
int tiletype = lua_tointeger(L, 5);
|
||||
if(!tiletype)
|
||||
tiletype = -1;
|
||||
tiletype = OT_BLOCKING;
|
||||
Vector step = end - v;
|
||||
int steps = step.getLength2D() / TILE_SIZE;
|
||||
step.setLength2D(TILE_SIZE);
|
||||
|
||||
for(int i = 0; i < steps; ++i)
|
||||
{
|
||||
if(dsq->game->isObstructed(TileVector(v), tiletype))
|
||||
if(dsq->game->getGridRaw(TileVector(v)) & tiletype)
|
||||
{
|
||||
lua_pushinteger(L, dsq->game->getGrid(TileVector(v)));
|
||||
lua_pushnumber(L, v.x);
|
||||
|
@ -8910,6 +9111,19 @@ luaFunc(learnRecipe)
|
|||
luaReturnNil();
|
||||
}
|
||||
|
||||
luaFunc(setBGGradient)
|
||||
{
|
||||
if(!dsq->game->grad)
|
||||
dsq->game->createGradient();
|
||||
Vector c1(lua_tonumber(L, 1), lua_tonumber(L, 2), lua_tonumber(L, 3));
|
||||
Vector c2(lua_tonumber(L, 4), lua_tonumber(L, 5), lua_tonumber(L, 6));
|
||||
if(getBool(L, 7))
|
||||
dsq->game->grad->makeHorizontal(c1, c2);
|
||||
else
|
||||
dsq->game->grad->makeVertical(c1, c2);
|
||||
luaReturnNil();
|
||||
}
|
||||
|
||||
luaFunc(createDebugText)
|
||||
{
|
||||
DebugFont *txt = new DebugFont(lua_tointeger(L, 2), getString(L, 1));
|
||||
|
@ -8967,6 +9181,12 @@ luaFunc(text_getHeight)
|
|||
luaReturnNum(txt ? txt->getHeight() : 0.0f);
|
||||
}
|
||||
|
||||
luaFunc(text_getStringWidth)
|
||||
{
|
||||
BaseText *txt = getText(L);
|
||||
luaReturnNum(txt ? txt->getStringWidth(getString(L, 2)) : 0.0f);
|
||||
}
|
||||
|
||||
luaFunc(loadShader)
|
||||
{
|
||||
int handle = 0;
|
||||
|
@ -9064,6 +9284,24 @@ luaFunc(pe_isRunning)
|
|||
luaReturnBool(pe && pe->isRunning());
|
||||
}
|
||||
|
||||
luaFunc(getPerformanceCounter)
|
||||
{
|
||||
#ifdef BBGE_BUILD_SDL2
|
||||
luaReturnNum((lua_Number)SDL_GetPerformanceCounter());
|
||||
#else
|
||||
luaReturnNum((lua_Number)SDL_GetTicks());
|
||||
#endif
|
||||
}
|
||||
|
||||
luaFunc(getPerformanceFreq)
|
||||
{
|
||||
#ifdef BBGE_BUILD_SDL2
|
||||
luaReturnNum((lua_Number)SDL_GetPerformanceFrequency());
|
||||
#else
|
||||
luaReturnNum((lua_Number)1000);
|
||||
#endif
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------
|
||||
|
||||
#define luaRegister(func) {#func, l_##func}
|
||||
|
@ -9078,6 +9316,8 @@ static const struct {
|
|||
{"loadfile", l_loadfile_caseinsensitive},
|
||||
|
||||
luaRegister(fileExists),
|
||||
luaRegister(getModName),
|
||||
luaRegister(getModPath),
|
||||
|
||||
luaRegister(debugBreak),
|
||||
luaRegister(setIgnoreAction),
|
||||
|
@ -9468,6 +9708,7 @@ static const struct {
|
|||
luaRegister(entity_stopInterpolating),
|
||||
|
||||
luaRegister(entity_followPath),
|
||||
luaRegister(entity_followPathSpeed),
|
||||
luaRegister(entity_isFollowingPath),
|
||||
luaRegister(entity_followEntity),
|
||||
luaRegister(entity_sound),
|
||||
|
@ -9580,6 +9821,8 @@ static const struct {
|
|||
|
||||
luaRegister(pickupGem),
|
||||
luaRegister(setGemPosition),
|
||||
luaRegister(setGemName),
|
||||
luaRegister(setGemBlink),
|
||||
luaRegister(removeGem),
|
||||
luaRegister(setBeacon),
|
||||
luaRegister(getBeacon),
|
||||
|
@ -9628,6 +9871,11 @@ static const struct {
|
|||
luaRegister(getObstruction),
|
||||
luaRegister(getGridRaw),
|
||||
luaRegister(findPath),
|
||||
luaRegister(createFindPath),
|
||||
luaRegister(findPathBegin),
|
||||
luaRegister(findPathUpdate),
|
||||
luaRegister(findPathFinish),
|
||||
luaRegister(findPathGetStats),
|
||||
luaRegister(castLine),
|
||||
luaRegister(getUserInputString),
|
||||
luaRegister(getMaxCameraValues),
|
||||
|
@ -9716,6 +9964,7 @@ static const struct {
|
|||
|
||||
luaRegister(entity_warpToNode),
|
||||
luaRegister(entity_moveToNode),
|
||||
luaRegister(entity_moveToNodeSpeed),
|
||||
|
||||
luaRegister(cam_toNode),
|
||||
luaRegister(cam_snap),
|
||||
|
@ -9730,7 +9979,9 @@ static const struct {
|
|||
luaRegister(entity_flipToVel),
|
||||
|
||||
luaRegister(entity_swimToNode),
|
||||
luaRegister(entity_swimToNodeSpeed),
|
||||
luaRegister(entity_swimToPosition),
|
||||
luaRegister(entity_swimToPositionSpeed),
|
||||
|
||||
|
||||
luaRegister(createShot),
|
||||
|
@ -9818,6 +10069,7 @@ static const struct {
|
|||
luaRegister(getNumberOfEntitiesNamed),
|
||||
|
||||
luaRegister(isNested),
|
||||
luaRegister(isSkippingCutscene),
|
||||
|
||||
luaRegister(entity_idle),
|
||||
luaRegister(entity_stopAllAnimations),
|
||||
|
@ -9870,6 +10122,7 @@ static const struct {
|
|||
luaRegister(entity_isName),
|
||||
|
||||
|
||||
luaRegister(node_setActivationRange),
|
||||
luaRegister(node_setCursorActivation),
|
||||
luaRegister(node_setCatchActions),
|
||||
|
||||
|
@ -9883,6 +10136,8 @@ static const struct {
|
|||
|
||||
luaRegister(node_setActive),
|
||||
luaRegister(node_isActive),
|
||||
luaRegister(node_setEmitter),
|
||||
luaRegister(node_getEmitter),
|
||||
|
||||
|
||||
luaRegister(setSceneColor),
|
||||
|
@ -10011,6 +10266,7 @@ static const struct {
|
|||
luaRegister(getScreenVirtualSize),
|
||||
luaRegister(isMiniMapCursorOkay),
|
||||
luaRegister(isShuttingDownGameState),
|
||||
luaRegister(setBGGradient),
|
||||
|
||||
luaRegister(inv_isFull),
|
||||
luaRegister(inv_getMaxAmount),
|
||||
|
@ -10034,6 +10290,7 @@ static const struct {
|
|||
luaRegister(text_setWidth),
|
||||
luaRegister(text_setAlign),
|
||||
luaRegister(text_getHeight),
|
||||
luaRegister(text_getStringWidth),
|
||||
|
||||
luaRegister(loadShader),
|
||||
luaRegister(createShader),
|
||||
|
@ -10052,6 +10309,7 @@ static const struct {
|
|||
luaRegister(isObject),
|
||||
luaRegister(isEntity),
|
||||
luaRegister(isScriptedEntity),
|
||||
luaRegister(isBone),
|
||||
luaRegister(isShot),
|
||||
luaRegister(isWeb),
|
||||
luaRegister(isIng),
|
||||
|
@ -10060,6 +10318,10 @@ static const struct {
|
|||
luaRegister(isShader),
|
||||
luaRegister(isParticleEffect),
|
||||
|
||||
luaRegister(getPerformanceCounter),
|
||||
luaRegister(getPerformanceFreq),
|
||||
|
||||
|
||||
|
||||
#undef MK_FUNC
|
||||
#undef MK_ALIAS
|
||||
|
@ -10881,6 +11143,13 @@ lua_State *ScriptInterface::createLuaVM()
|
|||
// In case a script errors outside of any protected environment, report and exit.
|
||||
lua_atpanic(state, l_panicHandler);
|
||||
|
||||
// Register Lua classes
|
||||
luaL_newmetatable(state, "pathfinder");
|
||||
lua_pushliteral(state, "__gc");
|
||||
lua_pushcfunction(state, _pathfindDelete);
|
||||
lua_settable(state, -3);
|
||||
lua_pop(state, 1);
|
||||
|
||||
// All done, return the new state.
|
||||
return state;
|
||||
}
|
||||
|
|
|
@ -153,6 +153,9 @@ void ScriptedEntity::initEmitter(int emit, const std::string &file)
|
|||
|
||||
void ScriptedEntity::startEmitter(int emit)
|
||||
{
|
||||
if(emit >= emitters.size())
|
||||
return;
|
||||
|
||||
if (emitters[emit])
|
||||
{
|
||||
emitters[emit]->start();
|
||||
|
@ -161,6 +164,9 @@ void ScriptedEntity::startEmitter(int emit)
|
|||
|
||||
void ScriptedEntity::stopEmitter(int emit)
|
||||
{
|
||||
if(emit >= emitters.size())
|
||||
return;
|
||||
|
||||
if (emitters[emit])
|
||||
{
|
||||
emitters[emit]->stop();
|
||||
|
|
|
@ -48,13 +48,11 @@ namespace WorldMapRenderNamespace
|
|||
VIS_WRITE = 1 // Uses render-to-texture instead
|
||||
};
|
||||
|
||||
VisMethod visMethod = VIS_VERTEX;
|
||||
const VisMethod visMethod = VIS_VERTEX;
|
||||
WorldMapRevealMethod revMethod = REVEAL_DEFAULT;
|
||||
|
||||
std::vector<Quad *> tiles;
|
||||
|
||||
std::vector<Quad *> particles;
|
||||
|
||||
Quad *activeQuad=0, *lastActiveQuad=0, *originalActiveQuad=0;
|
||||
Quad *lastVisQuad=0, *visQuad=0;
|
||||
WorldMapTile *lastVisTile=0;
|
||||
|
@ -512,6 +510,7 @@ static void tileDataToVis(WorldMapTile *tile, Vector **vis)
|
|||
|
||||
if (data != 0)
|
||||
{
|
||||
const float a = tile->prerevealed ? 0.4f : baseMapSegAlpha;
|
||||
const unsigned int rowSize = MAPVIS_SUBDIV/8;
|
||||
for (unsigned int y = 0; y < MAPVIS_SUBDIV; y++, data += rowSize)
|
||||
{
|
||||
|
@ -520,18 +519,19 @@ static void tileDataToVis(WorldMapTile *tile, Vector **vis)
|
|||
unsigned char dataByte = data[x/8];
|
||||
for (unsigned int x2 = 0; x2 < 8; x2++)
|
||||
{
|
||||
vis[x+x2][y].z = (dataByte & (1 << x2)) ? visibleMapSegAlpha : baseMapSegAlpha;
|
||||
vis[x+x2][y].z = (dataByte & (1 << x2)) ? visibleMapSegAlpha : a;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
const float a = tile->prerevealed ? 0.4f : baseMapSegAlpha;
|
||||
for (int x = 0; x < MAPVIS_SUBDIV; x++)
|
||||
{
|
||||
for (int y = 0; y < MAPVIS_SUBDIV; y++)
|
||||
{
|
||||
vis[x][y].z = baseMapSegAlpha;
|
||||
vis[x][y].z = a;
|
||||
}
|
||||
}
|
||||
return;
|
||||
|
@ -1342,7 +1342,7 @@ void WorldMapRender::addAllGems()
|
|||
for (Continuity::Gems::reverse_iterator i = dsq->continuity.gems.rbegin(); i != dsq->continuity.gems.rend(); i++)
|
||||
{
|
||||
GemMover *g = addGem(&(*i));
|
||||
if (c == dsq->continuity.gems.size()-1)
|
||||
if (c == dsq->continuity.gems.size()-1 || i->blink)
|
||||
g->setBlink(true);
|
||||
else
|
||||
g->setBlink(false);
|
||||
|
|
|
@ -547,13 +547,13 @@ tinyxml2::XMLError readXML(const std::string& fn, tinyxml2::XMLDocument& doc)
|
|||
return err;
|
||||
}
|
||||
|
||||
tinyxml2::XMLDocument *readXML(const std::string& fn, tinyxml2::XMLError *perr /* = 0 */)
|
||||
tinyxml2::XMLDocument *readXML(const std::string& fn, tinyxml2::XMLError *perr /* = 0 */, bool keepEmpty /* = false */)
|
||||
{
|
||||
tinyxml2::XMLDocument *doc = new tinyxml2::XMLDocument();
|
||||
tinyxml2::XMLError err = readXML(fn, *doc);
|
||||
if(perr)
|
||||
*perr = err;
|
||||
if(err != tinyxml2::XML_SUCCESS)
|
||||
if(err != tinyxml2::XML_SUCCESS && !keepEmpty)
|
||||
{
|
||||
delete doc;
|
||||
doc = NULL;
|
||||
|
|
|
@ -144,6 +144,7 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
|||
#include "ttvfs_stdio.h"
|
||||
|
||||
#include "tinyxml2.h"
|
||||
#include "Refcounted.h"
|
||||
|
||||
#ifdef BBGE_BUILD_LINUX
|
||||
# include <sys/types.h>
|
||||
|
@ -206,7 +207,7 @@ bool exists(const std::string &f, bool makeFatal = false, bool skipVFS = false);
|
|||
void errorLog(const std::string &s);
|
||||
void debugLog(const std::string &s);
|
||||
char *readFile(const std::string& path, unsigned long *size_ret = 0);
|
||||
tinyxml2::XMLDocument *readXML(const std::string& fn, tinyxml2::XMLError *perr = 0);
|
||||
tinyxml2::XMLDocument *readXML(const std::string& fn, tinyxml2::XMLError *perr = 0, bool keepEmpty = false);
|
||||
tinyxml2::XMLError readXML(const std::string& fn, tinyxml2::XMLDocument& doc);
|
||||
char *readCompressedFile(std::string path, unsigned long *size_ret = 0);
|
||||
void forEachFile(std::string path, std::string type, void callback(const std::string &filename, intptr_t param), intptr_t param);
|
||||
|
|
|
@ -14,6 +14,7 @@ public:
|
|||
virtual void setFontSize(int sz) = 0;
|
||||
virtual void setAlign(Align a) = 0;
|
||||
virtual float getHeight() = 0;
|
||||
virtual float getStringWidth(const std::string& text) = 0;
|
||||
|
||||
};
|
||||
|
||||
|
|
|
@ -45,11 +45,8 @@ void BmpFont::destroy()
|
|||
font.Destroy();
|
||||
loaded = false;
|
||||
}
|
||||
if (overrideTexture)
|
||||
{
|
||||
overrideTexture->removeRef();
|
||||
overrideTexture = 0;
|
||||
}
|
||||
|
||||
overrideTexture = NULL;
|
||||
}
|
||||
|
||||
void BmpFont::load(const std::string &file, float scale, bool loadTexture)
|
||||
|
@ -425,6 +422,30 @@ int BitmapText::getNumLines()
|
|||
return lines.size();
|
||||
}
|
||||
|
||||
float BitmapText::getStringWidth(const std::string& text)
|
||||
{
|
||||
std::string tmp;
|
||||
int maxsize = 0;
|
||||
tmp.reserve(text.length());
|
||||
for (size_t i = 0; i < text.size(); i++)
|
||||
{
|
||||
if(text[i] == '\n')
|
||||
{
|
||||
std::pair<int, int> dim;
|
||||
bmpFont->font.GetStringSize(tmp, &dim);
|
||||
maxsize = std::max(maxsize, dim.first);
|
||||
tmp.resize(0);
|
||||
}
|
||||
else
|
||||
tmp += text[i];
|
||||
}
|
||||
std::pair<int, int> dim;
|
||||
bmpFont->font.GetStringSize(tmp, &dim);
|
||||
maxsize = std::max(maxsize, dim.first);
|
||||
|
||||
return maxsize * bmpFont->scale;
|
||||
}
|
||||
|
||||
/*
|
||||
BitmapText::BitmapText() : RenderObject()
|
||||
{
|
||||
|
|
|
@ -48,7 +48,7 @@ struct BmpFont
|
|||
Vector fontTopColor;
|
||||
Vector fontBtmColor;
|
||||
|
||||
Texture *overrideTexture;
|
||||
CountedPtr<Texture> overrideTexture;
|
||||
};
|
||||
|
||||
class BitmapText : public BaseText
|
||||
|
@ -75,6 +75,7 @@ public:
|
|||
virtual float getHeight();
|
||||
void unloadDevice();
|
||||
void reloadDevice();
|
||||
virtual float getStringWidth(const std::string& text);
|
||||
|
||||
int getNumLines();
|
||||
protected:
|
||||
|
|
215
BBGE/Core.cpp
215
BBGE/Core.cpp
|
@ -2138,7 +2138,7 @@ void Core::enumerateScreenModes()
|
|||
SDL_GetDisplayMode(0, i, &mode);
|
||||
if (mode.w && mode.h && (mode.w > mode.h))
|
||||
{
|
||||
screenModes.push_back(ScreenMode(i, mode.w, mode.h));
|
||||
screenModes.push_back(ScreenMode(i, mode.w, mode.h, mode.refresh_rate));
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -2165,7 +2165,7 @@ void Core::enumerateScreenModes()
|
|||
{
|
||||
if (modes[i]->w > modes[i]->h)
|
||||
{
|
||||
screenModes.push_back(ScreenMode(i, modes[i]->w, modes[i]->h));
|
||||
screenModes.push_back(ScreenMode(i, modes[i]->w, modes[i]->h, 0));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -4240,26 +4240,13 @@ void Core::showBuffer()
|
|||
// when destroy is called on them
|
||||
void Core::clearResources()
|
||||
{
|
||||
std::vector<Resource*> deletedResources;
|
||||
int i;
|
||||
for (i = 0; i < resources.size(); i++)
|
||||
if(resources.size())
|
||||
{
|
||||
int j = 0;
|
||||
for (j = 0; j < deletedResources.size(); j++)
|
||||
{
|
||||
if (deletedResources[j] == resources[i])
|
||||
break;
|
||||
}
|
||||
if (j == deletedResources.size())
|
||||
{
|
||||
deletedResources.push_back (resources[i]);
|
||||
Resource *r = resources[i];
|
||||
r->destroy();
|
||||
delete r;
|
||||
}
|
||||
debugLog("Warning: The following resources were not cleared:");
|
||||
for(size_t i = 0; i < resources.size(); ++i)
|
||||
debugLog(resources[i]->name);
|
||||
resources.clear(); // nothing we can do; refcounting is messed up
|
||||
}
|
||||
resourceNames.clear();
|
||||
resources.clear();
|
||||
}
|
||||
|
||||
void Core::shutdownInputLibrary()
|
||||
|
@ -4408,20 +4395,7 @@ bool Core::exists(const std::string &filename)
|
|||
return ::exists(filename, false); // defined in Base.cpp
|
||||
}
|
||||
|
||||
Resource* Core::findResource(const std::string &name)
|
||||
{
|
||||
for (int i = 0; i < resources.size(); i++)
|
||||
{
|
||||
if (resources[i]->name == name)
|
||||
{
|
||||
return resources[i];
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
Texture* Core::findTexture(const std::string &name)
|
||||
CountedPtr<Texture> Core::findTexture(const std::string &name)
|
||||
{
|
||||
//stringToUpper(name);
|
||||
//std::ofstream out("texturefind.log");
|
||||
|
@ -4432,19 +4406,12 @@ Texture* Core::findTexture(const std::string &name)
|
|||
//NOTE: ensure all names are lowercase before this point
|
||||
if (resources[i]->name == name)
|
||||
{
|
||||
return (Texture*)resources[i];
|
||||
return resources[i];
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
std::string Core::getInternalTextureName(const std::string &name)
|
||||
{
|
||||
std::string n = name;
|
||||
stringToUpper(n);
|
||||
return n;
|
||||
}
|
||||
|
||||
// This handles unix/win32 relative paths: ./rel/path
|
||||
// Unix abs paths: /home/user/...
|
||||
// Win32 abs paths: C:/Stuff/.. and also C:\Stuff\...
|
||||
|
@ -4462,7 +4429,7 @@ std::string Core::getTextureLoadName(const std::string &texture)
|
|||
return loadName;
|
||||
}
|
||||
|
||||
Texture *Core::doTextureAdd(const std::string &texture, const std::string &loadName, std::string internalTextureName)
|
||||
std::pair<CountedPtr<Texture>, TextureLoadResult> Core::doTextureAdd(const std::string &texture, const std::string &loadName, std::string internalTextureName)
|
||||
{
|
||||
if (texture.empty() || !ISPATHROOT(texture))
|
||||
{
|
||||
|
@ -4479,48 +4446,37 @@ Texture *Core::doTextureAdd(const std::string &texture, const std::string &loadN
|
|||
}
|
||||
|
||||
stringToLowerUserData(internalTextureName);
|
||||
Texture *t = core->findTexture(internalTextureName);
|
||||
CountedPtr<Texture> t = core->findTexture(internalTextureName);
|
||||
if (t)
|
||||
{
|
||||
t->addRef();
|
||||
|
||||
Texture::textureError = TEXERR_OK;
|
||||
|
||||
/*
|
||||
std::ostringstream os;
|
||||
os << "reference texture: " << internalTextureName << " ref: " << t->getRef();
|
||||
debugLog(os.str());
|
||||
*/
|
||||
|
||||
//msg ("found texture " + internalTextureName);
|
||||
return t;
|
||||
}
|
||||
return std::make_pair(t, TEX_SUCCESS);
|
||||
|
||||
t = new Texture;
|
||||
t->name = internalTextureName;
|
||||
t->load(loadName);
|
||||
t->addRef();
|
||||
//resources.push_back (t);
|
||||
addResource(t);
|
||||
unsigned res = TEX_FAILED;
|
||||
|
||||
if (debugLogTextures)
|
||||
if(t->load(loadName))
|
||||
res |= (TEX_LOADED | TEX_SUCCESS);
|
||||
else
|
||||
{
|
||||
std::ostringstream os;
|
||||
os << "LOADED TEXTURE FROM DISK: [" << internalTextureName << "] ref: " << t->getRef() << " idx: " << resources.size()-1;
|
||||
debugLog(os.str());
|
||||
t->width = 64;
|
||||
t->height = 64;
|
||||
}
|
||||
|
||||
return t;
|
||||
return std::make_pair(t, (TextureLoadResult)res);
|
||||
}
|
||||
|
||||
Texture* Core::addTexture(const std::string &textureName)
|
||||
CountedPtr<Texture> Core::addTexture(const std::string &textureName, TextureLoadResult *pLoadResult /* = 0 */)
|
||||
{
|
||||
if (textureName.empty()) return 0;
|
||||
|
||||
BBGE_PROF(Core_addTexture);
|
||||
|
||||
Texture *texPointer = 0;
|
||||
if (textureName.empty())
|
||||
{
|
||||
if(pLoadResult)
|
||||
*pLoadResult = TEX_FAILED;
|
||||
return NULL;
|
||||
}
|
||||
|
||||
std::pair<CountedPtr<Texture>, TextureLoadResult> texResult;
|
||||
std::string texture = textureName;
|
||||
stringToLowerUserData(texture);
|
||||
std::string internalTextureName = texture;
|
||||
|
@ -4537,30 +4493,35 @@ Texture* Core::addTexture(const std::string &textureName)
|
|||
std::string ln = loadName;
|
||||
texture = secondaryTexturePath + texture;
|
||||
loadName = texture;
|
||||
texPointer = doTextureAdd(texture, loadName, internalTextureName);
|
||||
if (Texture::textureError != TEXERR_OK)
|
||||
{
|
||||
if (texPointer)
|
||||
{
|
||||
texPointer->destroy();
|
||||
texPointer = 0;
|
||||
}
|
||||
texPointer = doTextureAdd(t, ln, internalTextureName);
|
||||
}
|
||||
texResult = doTextureAdd(texture, loadName, internalTextureName);
|
||||
if (!texResult.second)
|
||||
texResult = doTextureAdd(t, ln, internalTextureName);
|
||||
}
|
||||
else
|
||||
texPointer = doTextureAdd(texture, loadName, internalTextureName);
|
||||
texResult = doTextureAdd(texture, loadName, internalTextureName);
|
||||
|
||||
return texPointer;
|
||||
addTexture(texResult.first.content());
|
||||
|
||||
if(debugLogTextures)
|
||||
{
|
||||
if (texResult.second & TEX_LOADED)
|
||||
{
|
||||
std::ostringstream os;
|
||||
os << "LOADED TEXTURE FROM DISK: [" << internalTextureName << "] idx: " << resources.size()-1;
|
||||
debugLog(os.str());
|
||||
}
|
||||
else if(!(texResult.second & TEX_SUCCESS))
|
||||
{
|
||||
std::ostringstream os;
|
||||
os << "FAILED TO LOAD TEXTURE: [" << internalTextureName << "] idx: " << resources.size()-1;
|
||||
debugLog(os.str());
|
||||
}
|
||||
}
|
||||
if(pLoadResult)
|
||||
*pLoadResult = texResult.second;
|
||||
return texResult.first;
|
||||
}
|
||||
|
||||
void Core::removeTexture(std::string texture)
|
||||
{
|
||||
//std::string internalName = baseTextureDirectory + texture;
|
||||
removeResource(texture, DESTROY);
|
||||
}
|
||||
|
||||
|
||||
void Core::addRenderObject(RenderObject *o, int layer)
|
||||
{
|
||||
if (!o) return;
|
||||
|
@ -4603,59 +4564,36 @@ void Core::reloadResources()
|
|||
onReloadResources();
|
||||
}
|
||||
|
||||
void Core::addResource(Resource *r)
|
||||
void Core::addTexture(Texture *r)
|
||||
{
|
||||
for(size_t i = 0; i < resources.size(); ++i)
|
||||
if(resources[i] == r)
|
||||
return;
|
||||
|
||||
resources.push_back(r);
|
||||
resourceNames.push_back(r->name);
|
||||
if (r->name.empty())
|
||||
{
|
||||
debugLog("Empty name resource added");
|
||||
}
|
||||
}
|
||||
|
||||
void Core::removeResource(std::string name, RemoveResource removeFlag)
|
||||
void Core::removeTexture(Texture *res)
|
||||
{
|
||||
//Resource *r = findResource(name);
|
||||
//int idx = 0;
|
||||
int i = 0;
|
||||
std::vector<Resource*>copy;
|
||||
copy = resources;
|
||||
resources.clear();
|
||||
std::vector<Texture*> copy;
|
||||
copy.swap(resources);
|
||||
|
||||
|
||||
std::vector <std::string> copyNames;
|
||||
copyNames = resourceNames;
|
||||
resourceNames.clear();
|
||||
|
||||
bool isDestroyed = false;
|
||||
|
||||
|
||||
for (i = 0; i < copy.size(); i++)
|
||||
for (size_t i = 0; i < copy.size(); ++i)
|
||||
{
|
||||
#ifdef _DEBUG
|
||||
std::string s = copy[i]->name;
|
||||
#endif
|
||||
if (!isDestroyed && copy[i]->name == name)
|
||||
if (copy[i] == res)
|
||||
{
|
||||
if (removeFlag == DESTROY)
|
||||
{
|
||||
copy[i]->destroy();
|
||||
delete copy[i];
|
||||
isDestroyed = true;
|
||||
}
|
||||
continue;
|
||||
}
|
||||
// also remove other entries of the same resource
|
||||
else if (isDestroyed && copyNames[i] == name)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
else
|
||||
{
|
||||
resources.push_back(copy[i]);
|
||||
resourceNames.push_back(copy[i]->name);
|
||||
copy[i]->destroy();
|
||||
copy[i] = copy.back();
|
||||
copy.pop_back();
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
resources.swap(copy);
|
||||
}
|
||||
|
||||
void Core::deleteRenderObjectMemory(RenderObject *r)
|
||||
|
@ -4709,25 +4647,6 @@ void Core::clearGarbage()
|
|||
}
|
||||
|
||||
garbage.clear();
|
||||
|
||||
// to clear resources
|
||||
for (std::vector<Resource*>::iterator i = resources.begin(); i != resources.end(); )
|
||||
{
|
||||
if ((*i)->getRef() == 0)
|
||||
{
|
||||
clearedGarbageFlag = true;
|
||||
delete (*i);
|
||||
i = resources.erase(i);
|
||||
continue;
|
||||
}
|
||||
|
||||
if ((*i)->getRef() < 0)
|
||||
{
|
||||
errorLog("Texture ref < 0");
|
||||
}
|
||||
|
||||
i++;
|
||||
}
|
||||
}
|
||||
|
||||
bool Core::canChangeState()
|
||||
|
|
31
BBGE/Core.h
31
BBGE/Core.h
|
@ -70,10 +70,10 @@ enum TimeUpdateType
|
|||
|
||||
struct ScreenMode
|
||||
{
|
||||
ScreenMode() { idx = x = y = 0; }
|
||||
ScreenMode(int i, int x, int y) : idx(i), x(x), y(y) {}
|
||||
ScreenMode() { idx = x = y = hz = 0; }
|
||||
ScreenMode(int i, int x, int y, int hz) : idx(i), x(x), y(y), hz(hz) {}
|
||||
|
||||
int idx, x, y;
|
||||
int idx, x, y, hz;
|
||||
};
|
||||
|
||||
struct CoreSettings
|
||||
|
@ -964,11 +964,6 @@ class Core : public ActionMapper, public StateManager
|
|||
{
|
||||
public:
|
||||
|
||||
enum RemoveResource
|
||||
{
|
||||
DESTROY = 0,
|
||||
NO_DESTROY
|
||||
};
|
||||
// init
|
||||
Core(const std::string &filesystem, const std::string& extraDataDir, int numRenderLayers, const std::string &appName="BBGE", int particleSize=1024, std::string userDataSubFolder="");
|
||||
void initPlatform(const std::string &filesystem);
|
||||
|
@ -1023,13 +1018,12 @@ public:
|
|||
void enable2D(int pixelScaleX=0, int pixelScaleY=0, bool forcePixelScale=false);
|
||||
void addRenderObject(RenderObject *o, int layer=0);
|
||||
void switchRenderObjectLayer(RenderObject *o, int toLayer);
|
||||
void addResource(Resource *r);
|
||||
Resource *findResource(const std::string &name);
|
||||
Texture *findTexture(const std::string &name);
|
||||
void removeResource(std::string name, RemoveResource removeFlag);
|
||||
void addTexture(Texture *r);
|
||||
CountedPtr<Texture> findTexture(const std::string &name);
|
||||
void removeTexture(Texture *res);
|
||||
void clearResources();
|
||||
|
||||
Texture *addTexture(const std::string &texture);
|
||||
void removeTexture(std::string texture);
|
||||
CountedPtr<Texture> addTexture(const std::string &texture, TextureLoadResult *pLoadResult = 0);
|
||||
|
||||
PostProcessingFX postProcessingFx;
|
||||
|
||||
|
@ -1047,7 +1041,6 @@ public:
|
|||
|
||||
void enqueueRenderObjectDeletion(RenderObject *object);
|
||||
void clearGarbage();
|
||||
void clearResources();
|
||||
|
||||
|
||||
bool isNested() { return nestedMains > 1; }
|
||||
|
@ -1103,8 +1096,7 @@ public:
|
|||
HINSTANCE hInstance; // Holds The Instance Of The Application
|
||||
#endif
|
||||
|
||||
std::vector<Resource*>resources;
|
||||
std::vector<std::string> resourceNames;
|
||||
std::vector<Texture*> resources;
|
||||
|
||||
RenderObjectLayer *getRenderObjectLayer(int i);
|
||||
std::vector <int> renderObjectLayerOrder;
|
||||
|
@ -1247,7 +1239,6 @@ public:
|
|||
|
||||
|
||||
Joystick joystick;
|
||||
std::string getInternalTextureName(const std::string &name);
|
||||
void setClearColor(const Vector &c);
|
||||
Vector getClearColor();
|
||||
int flipMouseButtons;
|
||||
|
@ -1337,7 +1328,7 @@ protected:
|
|||
|
||||
virtual void onReloadResources();
|
||||
|
||||
Texture* doTextureAdd(const std::string &texture, const std::string &name, std::string internalTextureName);
|
||||
std::pair<CountedPtr<Texture>, TextureLoadResult> doTextureAdd(const std::string &texture, const std::string &name, std::string internalTextureName);
|
||||
|
||||
void deleteRenderObjectMemory(RenderObject *r);
|
||||
bool _hasFocus;
|
||||
|
@ -1398,6 +1389,8 @@ protected:
|
|||
|
||||
int numSavedScreenshots;
|
||||
|
||||
CountedPtr<Texture> texError;
|
||||
|
||||
//unsigned int windowWidth, windowHeight;
|
||||
|
||||
|
||||
|
|
|
@ -52,6 +52,24 @@ float DebugFont::getHeight()
|
|||
return fontDrawSize * lines.size() * 1.5f; // vspc in render()
|
||||
}
|
||||
|
||||
float DebugFont::getStringWidth(const std::string& text)
|
||||
{
|
||||
int maxchars = 0;
|
||||
int c = 0;
|
||||
for (size_t i = 0; i < text.size(); i++)
|
||||
{
|
||||
if(text[i] == '\n')
|
||||
{
|
||||
maxchars = std::max(maxchars, c);
|
||||
c = 0;
|
||||
}
|
||||
else
|
||||
++c;
|
||||
}
|
||||
maxchars = std::max(maxchars, c);
|
||||
return float(fontDrawSize * maxchars);
|
||||
}
|
||||
|
||||
void DebugFont::formatText()
|
||||
{
|
||||
std::string text;
|
||||
|
|
|
@ -34,6 +34,7 @@ public:
|
|||
int getNumLines() { return lines.size(); }
|
||||
virtual void setAlign(Align align);
|
||||
virtual float getHeight();
|
||||
virtual float getStringWidth(const std::string& text);
|
||||
protected:
|
||||
int fontDrawSize, textWidth;
|
||||
void formatText();
|
||||
|
|
|
@ -630,7 +630,7 @@ class OpenALSound
|
|||
{
|
||||
public:
|
||||
OpenALSound(VFILE *_fp, const bool _looping); // ctor for ogg streamed from file
|
||||
OpenALSound(void *_data, long _size, const bool _looping); // ctor for ogg streamed from memory
|
||||
OpenALSound(void *_data, size_t _size, const bool _looping); // ctor for ogg streamed from memory
|
||||
OpenALSound(ALuint _bid, const bool _looping); // ctor for raw samples already assigned an opanAL buffer ID
|
||||
VFILE *getFile() const { return fp; }
|
||||
const void *getData() const { return data; }
|
||||
|
@ -647,7 +647,7 @@ public:
|
|||
private:
|
||||
VFILE * const fp;
|
||||
void * const data; // Only used if fp==NULL
|
||||
const long size; // Only used if fp==NULL
|
||||
const size_t size; // Only used if fp==NULL
|
||||
const bool looping;
|
||||
int refcount;
|
||||
const bool raw; // true if buffer holds raw PCM data
|
||||
|
@ -667,7 +667,7 @@ OpenALSound::OpenALSound(VFILE *_fp, const bool _looping)
|
|||
{
|
||||
}
|
||||
|
||||
OpenALSound::OpenALSound(void *_data, long _size, const bool _looping)
|
||||
OpenALSound::OpenALSound(void *_data, size_t _size, const bool _looping)
|
||||
: fp(NULL)
|
||||
, data(_data)
|
||||
, size(_size)
|
||||
|
@ -1436,6 +1436,11 @@ FMOD_RESULT OpenALSystem::createSound(const char *name_or_data, const FMOD_MODE
|
|||
VFILE *io = vfopen(core->adjustFilenameCase(fname).c_str(), "rb");
|
||||
if (io == NULL)
|
||||
return FMOD_ERR_INTERNAL;
|
||||
size_t filesize = 0;
|
||||
if(vfsize(io, &filesize))
|
||||
return FMOD_ERR_INTERNAL;
|
||||
if(!filesize)
|
||||
return FMOD_ERR_INTERNAL;
|
||||
|
||||
if (mode & FMOD_CREATESTREAM)
|
||||
{
|
||||
|
@ -1468,16 +1473,7 @@ FMOD_RESULT OpenALSystem::createSound(const char *name_or_data, const FMOD_MODE
|
|||
else
|
||||
{
|
||||
// Create streaming memory decoder
|
||||
vfseek(io, 0, SEEK_END);
|
||||
long size = vftell(io);
|
||||
if (vfseek(io, 0, SEEK_SET) != 0)
|
||||
{
|
||||
debugLog("Seek error on " + std::string(fname));
|
||||
vfclose(io);
|
||||
return FMOD_ERR_INTERNAL;
|
||||
}
|
||||
|
||||
void *data = malloc(size);
|
||||
void *data = malloc(filesize);
|
||||
if (data == NULL)
|
||||
{
|
||||
debugLog("Out of memory for " + std::string(fname));
|
||||
|
@ -1485,16 +1481,16 @@ FMOD_RESULT OpenALSystem::createSound(const char *name_or_data, const FMOD_MODE
|
|||
return FMOD_ERR_INTERNAL;
|
||||
}
|
||||
|
||||
long nread = vfread(data, 1, size, io);
|
||||
size_t nread = vfread(data, 1, filesize, io);
|
||||
vfclose(io);
|
||||
if (nread != size)
|
||||
if (nread != filesize)
|
||||
{
|
||||
debugLog("Failed to read data from " + std::string(fname));
|
||||
free(data);
|
||||
return FMOD_ERR_INTERNAL;
|
||||
}
|
||||
|
||||
*sound = (Sound *) new OpenALSound(data, size, (((mode & FMOD_LOOP_OFF) == 0) && (mode & FMOD_LOOP_NORMAL)));
|
||||
*sound = (Sound *) new OpenALSound(data, filesize, (((mode & FMOD_LOOP_OFF) == 0) && (mode & FMOD_LOOP_NORMAL)));
|
||||
retval = FMOD_OK;
|
||||
}
|
||||
|
||||
|
|
|
@ -7,7 +7,6 @@
|
|||
#endif
|
||||
|
||||
#ifdef BBGE_BUILD_MACOSX
|
||||
#include <Carbon/Carbon.h>
|
||||
#include <CoreFoundation/CFLocale.h>
|
||||
#include <CoreFoundation/CFString.h>
|
||||
|
||||
|
@ -112,13 +111,11 @@ std::string getSystemLocale()
|
|||
if ((buf = (CFStringRef)CFLocaleGetValue(locale, kCFLocaleLanguageCode)) != NULL)
|
||||
{
|
||||
localeStr = _CFToStdString(buf);
|
||||
CFRelease(buf);
|
||||
|
||||
if ((buf = (CFStringRef)CFLocaleGetValue(locale, kCFLocaleCountryCode)) != NULL)
|
||||
{
|
||||
localeStr += "_";
|
||||
localeStr += _CFToStdString(buf);
|
||||
CFRelease(buf);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -798,6 +798,11 @@ void Quad::onSetTexture()
|
|||
width = this->texture->width;
|
||||
height = this->texture->height;
|
||||
}
|
||||
else
|
||||
{
|
||||
width = 64;
|
||||
height = 64;
|
||||
}
|
||||
}
|
||||
|
||||
PauseQuad::PauseQuad() : Quad(), pauseLevel(0)
|
||||
|
|
95
BBGE/Refcounted.h
Normal file
95
BBGE/Refcounted.h
Normal file
|
@ -0,0 +1,95 @@
|
|||
#ifndef CG_CORE_REFCOUNTED_H
|
||||
#define CG_CORE_REFCOUNTED_H
|
||||
|
||||
#include <stddef.h>
|
||||
#include <assert.h>
|
||||
#include <algorithm>
|
||||
|
||||
|
||||
class Refcounted
|
||||
{
|
||||
protected:
|
||||
|
||||
Refcounted() : _refcount(0)
|
||||
{
|
||||
}
|
||||
virtual ~Refcounted()
|
||||
{
|
||||
assert(_refcount == 0 && "Object was deleted with refcount != 0");
|
||||
}
|
||||
|
||||
public:
|
||||
|
||||
inline void incref()
|
||||
{
|
||||
++_refcount;
|
||||
}
|
||||
inline void decref()
|
||||
{
|
||||
if (!--_refcount)
|
||||
delete this;
|
||||
}
|
||||
|
||||
private:
|
||||
unsigned _refcount;
|
||||
};
|
||||
|
||||
|
||||
template<typename T> class CountedPtr
|
||||
{
|
||||
public:
|
||||
inline ~CountedPtr()
|
||||
{
|
||||
if(_p)
|
||||
_p->decref();
|
||||
}
|
||||
inline CountedPtr() : _p(NULL)
|
||||
{}
|
||||
inline CountedPtr(T* p) : _p(p)
|
||||
{
|
||||
if(p)
|
||||
p->incref();
|
||||
}
|
||||
inline CountedPtr(const CountedPtr& ref) : _p(ref._p)
|
||||
{
|
||||
if (_p)
|
||||
_p->incref();
|
||||
}
|
||||
|
||||
// intentionally not a reference -- see http://stackoverflow.com/questions/3279543/what-is-the-copy-and-swap-idiom
|
||||
CountedPtr& operator=(CountedPtr ref)
|
||||
{
|
||||
CountedPtr::swap(*this, ref);
|
||||
return *this;
|
||||
}
|
||||
|
||||
const T* operator->() const { return _p; }
|
||||
T* operator->() { return _p; }
|
||||
|
||||
bool operator!() const { return !_p; }
|
||||
|
||||
// Safe for use in if statements
|
||||
operator bool() const { return !!_p; }
|
||||
|
||||
T* content () { return _p; }
|
||||
const T* content () const { return _p; }
|
||||
|
||||
bool operator<(const CountedPtr& ref) const { return _p < ref._p; }
|
||||
bool operator<=(const CountedPtr& ref) const { return _p <= ref._p; }
|
||||
bool operator==(const CountedPtr& ref) const { return _p == ref._p; }
|
||||
bool operator!=(const CountedPtr& ref) const { return _p != ref._p; }
|
||||
bool operator>=(const CountedPtr& ref) const { return _p >= ref._p; }
|
||||
bool operator>(const CountedPtr& ref) const { return _p > ref._p; }
|
||||
|
||||
inline static void swap(CountedPtr& a, CountedPtr& b)
|
||||
{
|
||||
std::swap(a._p, b._p);
|
||||
}
|
||||
|
||||
private:
|
||||
|
||||
T *_p;
|
||||
};
|
||||
|
||||
|
||||
#endif
|
|
@ -23,6 +23,12 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
|||
#include "MathFunctions.h"
|
||||
|
||||
#include <assert.h>
|
||||
#include <algorithm>
|
||||
|
||||
#ifdef BBGE_USE_GLM
|
||||
#include "glm/glm.hpp"
|
||||
#include "glm/gtx/transform.hpp"
|
||||
#endif
|
||||
|
||||
bool RenderObject::renderCollisionShape = false;
|
||||
int RenderObject::lastTextureApplied = 0;
|
||||
|
@ -291,24 +297,51 @@ Vector RenderObject::getInvRotPosition(const Vector &vec)
|
|||
#endif
|
||||
}
|
||||
|
||||
void RenderObject::matrixChain()
|
||||
#ifdef BBGE_USE_GLM
|
||||
static glm::mat4 matrixChain(const RenderObject *ro)
|
||||
{
|
||||
if (parent)
|
||||
parent->matrixChain();
|
||||
glm::mat4 tranformMatrix = glm::scale(
|
||||
glm::translate(
|
||||
glm::rotate(
|
||||
glm::translate(
|
||||
ro->getParent() ? matrixChain(ro->getParent()) : glm::mat4(1.0f),
|
||||
glm::vec3(ro->position.x+ro->offset.x, ro->position.y+ro->offset.y, 0)
|
||||
),
|
||||
ro->rotation.z + ro->rotationOffset.z,
|
||||
glm::vec3(0, 0, 1)
|
||||
),
|
||||
glm::vec3(ro->beforeScaleOffset.x, ro->beforeScaleOffset.y, 0.0f)
|
||||
),
|
||||
glm::vec3(ro->scale.x, ro->scale.y, 0.0f)
|
||||
);
|
||||
|
||||
if (ro->isfh())
|
||||
tranformMatrix *= glm::rotate(180.0f, 0.0f, 1.0f, 0.0f);
|
||||
|
||||
tranformMatrix *= glm::translate(ro->internalOffset.x, ro->internalOffset.y, 0.0f);
|
||||
|
||||
return tranformMatrix;
|
||||
}
|
||||
#else
|
||||
static void matrixChain(RenderObject *ro)
|
||||
{
|
||||
if (RenderObject *parent = ro->getParent())
|
||||
matrixChain(parent);
|
||||
|
||||
#ifdef BBGE_BUILD_OPENGL
|
||||
glTranslatef(position.x+offset.x, position.y+offset.y, 0);
|
||||
glRotatef(rotation.z+rotationOffset.z, 0, 0, 1);
|
||||
glTranslatef(beforeScaleOffset.x, beforeScaleOffset.y, 0);
|
||||
glScalef(scale.x, scale.y, 0);
|
||||
if (isfh())
|
||||
glTranslatef(ro->position.x+ro->offset.x, ro->position.y+ro->offset.y, 0);
|
||||
glRotatef(ro->rotation.z+ro->rotationOffset.z, 0, 0, 1);
|
||||
glTranslatef(ro->beforeScaleOffset.x, ro->beforeScaleOffset.y, 0);
|
||||
glScalef(ro->scale.x, ro->scale.y, 0);
|
||||
if (ro->isfh())
|
||||
{
|
||||
//glDisable(GL_CULL_FACE);
|
||||
glRotatef(180, 0, 1, 0);
|
||||
}
|
||||
glTranslatef(internalOffset.x, internalOffset.y, 0);
|
||||
glTranslatef(ro->internalOffset.x, ro->internalOffset.y, 0);
|
||||
#endif
|
||||
}
|
||||
#endif
|
||||
|
||||
float RenderObject::getWorldRotation()
|
||||
{
|
||||
|
@ -329,11 +362,19 @@ Vector RenderObject::getWorldPositionAndRotation()
|
|||
|
||||
Vector RenderObject::getWorldCollidePosition(const Vector &vec)
|
||||
{
|
||||
#ifdef BBGE_USE_GLM
|
||||
glm::mat4 transformMatrix = glm::translate(
|
||||
matrixChain(this),
|
||||
glm::vec3(collidePosition.x + vec.x, collidePosition.y + vec.y, 0.0f)
|
||||
);
|
||||
|
||||
return Vector(transformMatrix[3][0], transformMatrix[3][1], 0);
|
||||
#else
|
||||
#ifdef BBGE_BUILD_OPENGL
|
||||
glPushMatrix();
|
||||
glLoadIdentity();
|
||||
|
||||
matrixChain();
|
||||
matrixChain(this);
|
||||
glTranslatef(collidePosition.x+vec.x, collidePosition.y+vec.y, 0);
|
||||
|
||||
float m[16];
|
||||
|
@ -346,6 +387,7 @@ Vector RenderObject::getWorldCollidePosition(const Vector &vec)
|
|||
#elif BBGE_BUILD_DIRECTX
|
||||
return vec;
|
||||
#endif
|
||||
#endif
|
||||
}
|
||||
|
||||
void RenderObject::fhTo(bool fh)
|
||||
|
@ -415,11 +457,8 @@ void RenderObject::destroy()
|
|||
parent->removeChild(this);
|
||||
parent = 0;
|
||||
}
|
||||
if (texture)
|
||||
{
|
||||
texture->removeRef();
|
||||
texture = 0;
|
||||
}
|
||||
|
||||
texture = NULL;
|
||||
}
|
||||
|
||||
void RenderObject::copyProperties(RenderObject *target)
|
||||
|
@ -467,13 +506,29 @@ void RenderObject::toggleCull(bool value)
|
|||
|
||||
void RenderObject::moveToFront()
|
||||
{
|
||||
if (layer != -1)
|
||||
if(RenderObject *p = parent)
|
||||
{
|
||||
if(p->children.size() && p->children[0] != this)
|
||||
{
|
||||
p->removeChild(this);
|
||||
p->addChild(this, (ParentManaged)this->pm, RBP_NONE, CHILD_FRONT);
|
||||
}
|
||||
}
|
||||
else if (layer != -1)
|
||||
core->renderObjectLayers[this->layer].moveToFront(this);
|
||||
}
|
||||
|
||||
void RenderObject::moveToBack()
|
||||
{
|
||||
if (layer != -1)
|
||||
if(RenderObject *p = parent)
|
||||
{
|
||||
if(p->children.size() && p->children[p->children.size()-1] != this)
|
||||
{
|
||||
p->removeChild(this);
|
||||
p->addChild(this, (ParentManaged)this->pm, RBP_NONE, CHILD_BACK);
|
||||
}
|
||||
}
|
||||
else if (layer != -1)
|
||||
core->renderObjectLayers[this->layer].moveToBack(this);
|
||||
}
|
||||
|
||||
|
@ -1099,26 +1154,6 @@ void RenderObject::lookAt(const Vector &pos, float t, float minAngle, float maxA
|
|||
rotation.interpolateTo(Vector(0,0,angle), t);
|
||||
}
|
||||
|
||||
void RenderObject::removeAllChildren()
|
||||
{
|
||||
if (!children.empty())
|
||||
{
|
||||
removeChild(children.front());
|
||||
removeAllChildren();
|
||||
}
|
||||
}
|
||||
|
||||
void RenderObject::recursivelyRemoveEveryChild()
|
||||
{
|
||||
if (!children.empty())
|
||||
{
|
||||
RenderObject *child = (children.front());
|
||||
child->recursivelyRemoveEveryChild();
|
||||
removeChild(child);
|
||||
recursivelyRemoveEveryChild();
|
||||
}
|
||||
}
|
||||
|
||||
void RenderObject::update(float dt)
|
||||
{
|
||||
if (ignoreUpdate)
|
||||
|
@ -1149,8 +1184,14 @@ void RenderObject::update(float dt)
|
|||
|
||||
void RenderObject::removeChild(RenderObject *r)
|
||||
{
|
||||
children.remove(r);
|
||||
r->parent = 0;
|
||||
Children::iterator oldend = children.end();
|
||||
Children::iterator newend = std::remove(children.begin(), oldend, r);
|
||||
if(oldend != newend)
|
||||
{
|
||||
children.resize(std::distance(children.begin(), newend));
|
||||
return;
|
||||
}
|
||||
|
||||
for (Children::iterator i = children.begin(); i != children.end(); i++)
|
||||
{
|
||||
|
@ -1301,29 +1342,6 @@ void RenderObject::onUpdate(float dt)
|
|||
// updateCullVariables();
|
||||
}
|
||||
|
||||
void RenderObject::propogateAlpha()
|
||||
{
|
||||
/*
|
||||
if (!shareAlphaWithChildren) return;
|
||||
for (int i = 0; i < children.size(); i++)
|
||||
{
|
||||
children[i]->alpha = this->alpha * children[i]->parentAlphaModifier.getValue();
|
||||
children[i]->propogateAlpha();
|
||||
}
|
||||
|
||||
*/
|
||||
/*
|
||||
if (shareAlphaWithChildren && !children.empty())
|
||||
{
|
||||
for (int i = 0; i < children.size(); i++)
|
||||
{
|
||||
|
||||
//children[i]->alpha = this->alpha * children[i]->parentAlphaModifier.getValue();
|
||||
}
|
||||
}
|
||||
*/
|
||||
}
|
||||
|
||||
void RenderObject::unloadDevice()
|
||||
{
|
||||
for (Children::iterator i = children.begin(); i != children.end(); i++)
|
||||
|
@ -1340,23 +1358,21 @@ void RenderObject::reloadDevice()
|
|||
}
|
||||
}
|
||||
|
||||
void RenderObject::setTexture(const std::string &n)
|
||||
bool RenderObject::setTexture(const std::string &n)
|
||||
{
|
||||
std::string name = n;
|
||||
stringToLowerUserData(name);
|
||||
|
||||
if (name.empty())
|
||||
return;
|
||||
return false;
|
||||
|
||||
if(texture && texture->name == core->getInternalTextureName(name))
|
||||
return; // no texture change
|
||||
if(texture && name == texture->name)
|
||||
return true; // no texture change
|
||||
|
||||
Texture *oldtex = texture;
|
||||
Texture *t = core->addTexture(name);
|
||||
setTexturePointer(t, NO_ADD_REF);
|
||||
|
||||
if (oldtex)
|
||||
oldtex->removeRef();
|
||||
TextureLoadResult res = TEX_FAILED;
|
||||
CountedPtr<Texture> tex = core->addTexture(name, &res);
|
||||
setTexturePointer(tex);
|
||||
return !!tex && res != TEX_FAILED;
|
||||
}
|
||||
|
||||
float RenderObject::getSortDepth()
|
||||
|
@ -1375,7 +1391,7 @@ void RenderObject::addChild(RenderObject *r, ParentManaged pm, RenderBeforeParen
|
|||
if (order == CHILD_BACK)
|
||||
children.push_back(r);
|
||||
else
|
||||
children.push_front(r);
|
||||
children.insert(children.begin(), r);
|
||||
|
||||
r->pm = pm;
|
||||
|
||||
|
@ -1407,15 +1423,6 @@ void RenderObject::setOverrideCullRadius(float ovr)
|
|||
overrideCullRadiusSqr = ovr * ovr;
|
||||
}
|
||||
|
||||
void RenderObject::propogateParentManagedStatic()
|
||||
{
|
||||
for (Children::iterator i = children.begin(); i != children.end(); i++)
|
||||
{
|
||||
(*i)->pm = PM_STATIC;
|
||||
(*i)->propogateParentManagedStatic();
|
||||
}
|
||||
}
|
||||
|
||||
bool RenderObject::isCoordinateInRadius(const Vector &pos, float r)
|
||||
{
|
||||
Vector d = pos-getRealPosition();
|
||||
|
|
|
@ -83,21 +83,16 @@ public:
|
|||
|
||||
static RenderObjectLayer *rlayer;
|
||||
|
||||
enum AddRefChoice { NO_ADD_REF = 0, ADD_REF = 1};
|
||||
|
||||
void setTexturePointer(Texture *t, AddRefChoice addRefChoice)
|
||||
void setTexturePointer(CountedPtr<Texture> t)
|
||||
{
|
||||
this->texture = t;
|
||||
if (addRefChoice == ADD_REF)
|
||||
texture->addRef();
|
||||
onSetTexture();
|
||||
}
|
||||
|
||||
void setStateDataObject(StateData *state);
|
||||
void setTexture(const std::string &name);
|
||||
bool setTexture(const std::string &name);
|
||||
|
||||
void toggleAlpha(float t = 0.2);
|
||||
void matrixChain();
|
||||
|
||||
virtual void update(float dt);
|
||||
bool isDead() const {return _dead;}
|
||||
|
@ -134,8 +129,8 @@ public:
|
|||
virtual void flipHorizontal();
|
||||
virtual void flipVertical();
|
||||
|
||||
bool isfh() { return _fh; }
|
||||
bool isfv() { return _fv; }
|
||||
bool isfh() const { return _fh; }
|
||||
bool isfv() const { return _fv; }
|
||||
|
||||
// recursive
|
||||
bool isfhr();
|
||||
|
@ -167,8 +162,6 @@ public:
|
|||
|
||||
void addChild(RenderObject *r, ParentManaged pm, RenderBeforeParent rbp = RBP_NONE, ChildOrder order = CHILD_BACK);
|
||||
void removeChild(RenderObject *r);
|
||||
void removeAllChildren();
|
||||
void recursivelyRemoveEveryChild();
|
||||
|
||||
Vector getRealPosition();
|
||||
Vector getRealScale();
|
||||
|
@ -241,7 +234,7 @@ public:
|
|||
InterpolatedVector offset, rotationOffset, internalOffset, beforeScaleOffset;
|
||||
InterpolatedVector velocity, gravity;
|
||||
|
||||
Texture *texture;
|
||||
CountedPtr<Texture> texture;
|
||||
|
||||
//int mode;
|
||||
|
||||
|
@ -273,13 +266,13 @@ public:
|
|||
bool shareColorWithChildren;
|
||||
|
||||
bool cull;
|
||||
int updateCull;
|
||||
float updateCull;
|
||||
int layer;
|
||||
|
||||
InterpolatedVector *positionSnapTo;
|
||||
|
||||
//DestroyType destroyType;
|
||||
typedef std::list<RenderObject*> Children;
|
||||
typedef std::vector<RenderObject*> Children;
|
||||
Children children, childGarbage;
|
||||
|
||||
//Flags flags;
|
||||
|
@ -312,10 +305,6 @@ protected:
|
|||
virtual void deathNotify(RenderObject *r);
|
||||
virtual void onEndOfLife() {}
|
||||
|
||||
// spread parentManagedStatic flag to the entire child tree
|
||||
void propogateParentManagedStatic();
|
||||
void propogateAlpha();
|
||||
|
||||
inline void updateLife(float dt)
|
||||
{
|
||||
if (decayRate > 0)
|
||||
|
|
|
@ -1,28 +0,0 @@
|
|||
/*
|
||||
Copyright (C) 2007, 2010 - Bit-Blot
|
||||
|
||||
This file is part of Aquaria.
|
||||
|
||||
Aquaria 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.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
*/
|
||||
#include "Resource.h"
|
||||
#include "Core.h"
|
||||
|
||||
|
||||
void Resource::destroy()
|
||||
{
|
||||
core->removeResource(this->name, Core::NO_DESTROY);
|
||||
}
|
|
@ -1,57 +0,0 @@
|
|||
/*
|
||||
Copyright (C) 2007, 2010 - Bit-Blot
|
||||
|
||||
This file is part of Aquaria.
|
||||
|
||||
Aquaria 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.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
*/
|
||||
#ifndef __resource__
|
||||
#define __resource__
|
||||
|
||||
#include "Base.h"
|
||||
|
||||
class Resource
|
||||
{
|
||||
public:
|
||||
Resource()
|
||||
{
|
||||
ref = 0;
|
||||
}
|
||||
~Resource()
|
||||
{
|
||||
destroy();
|
||||
}
|
||||
virtual void destroy();
|
||||
|
||||
void addRef()
|
||||
{
|
||||
ref++;
|
||||
}
|
||||
void removeRef()
|
||||
{
|
||||
ref--;
|
||||
if (ref == 0)
|
||||
destroy();
|
||||
}
|
||||
int getRef() { return ref; }
|
||||
std::string name;
|
||||
virtual void reload() {}
|
||||
virtual void unload() {}
|
||||
protected:
|
||||
int ref;
|
||||
};
|
||||
|
||||
#endif
|
|
@ -34,13 +34,13 @@ std::string SkeletalSprite::secondaryAnimationPath = "";
|
|||
|
||||
static std::map<std::string, XMLDocument*> skelCache;
|
||||
|
||||
static XMLDocument *_retrieveSkeletalXML(const std::string& name)
|
||||
static XMLDocument *_retrieveSkeletalXML(const std::string& name, bool keepEmpty)
|
||||
{
|
||||
std::map<std::string, XMLDocument*>::iterator it = skelCache.find(name);
|
||||
if(it != skelCache.end())
|
||||
return it->second;
|
||||
|
||||
XMLDocument *doc = readXML(name);
|
||||
XMLDocument *doc = readXML(name, NULL, keepEmpty);
|
||||
if(doc)
|
||||
skelCache[name] = doc;
|
||||
|
||||
|
@ -49,6 +49,8 @@ static XMLDocument *_retrieveSkeletalXML(const std::string& name)
|
|||
|
||||
void SkeletalSprite::clearCache()
|
||||
{
|
||||
for(std::map<std::string, XMLDocument*>::iterator it = skelCache.begin(); it != skelCache.end(); ++it)
|
||||
delete it->second;
|
||||
skelCache.clear();
|
||||
}
|
||||
|
||||
|
@ -869,7 +871,7 @@ bool SkeletalSprite::saveSkeletal(const std::string &fn)
|
|||
}
|
||||
|
||||
int i = 0;
|
||||
XMLDocument *xml = _retrieveSkeletalXML(file);
|
||||
XMLDocument *xml = _retrieveSkeletalXML(file, true);
|
||||
xml->Clear();
|
||||
|
||||
XMLElement *animationLayers = xml->NewElement("AnimationLayers");
|
||||
|
@ -1144,16 +1146,10 @@ void SkeletalSprite::prevAnimation()
|
|||
void SkeletalSprite::deleteBones()
|
||||
{
|
||||
bones.clear();
|
||||
if (!children.empty())
|
||||
for(Children::iterator it = children.begin(); it != children.end(); ++it)
|
||||
{
|
||||
// remove child had better be recursive
|
||||
Bone *b = (Bone*)children.front();
|
||||
//removeChild(b);
|
||||
b->destroy();
|
||||
delete b;
|
||||
deleteBones();
|
||||
(*it)->safeKill();
|
||||
}
|
||||
children.clear();
|
||||
bones.clear();
|
||||
}
|
||||
|
||||
|
@ -1185,10 +1181,15 @@ void SkeletalSprite::loadSkin(const std::string &fn)
|
|||
|
||||
if (!exists(file))
|
||||
{
|
||||
errorLog("Could not load skin[" + file + "]");
|
||||
errorLog("Could not load skin[" + file + "] - File not found.");
|
||||
return;
|
||||
}
|
||||
XMLDocument *d = _retrieveSkeletalXML(file, false);
|
||||
if(!d)
|
||||
{
|
||||
errorLog("Could not load skin[" + file + "] - Malformed XML.");
|
||||
return;
|
||||
}
|
||||
XMLDocument *d = _retrieveSkeletalXML(file);
|
||||
|
||||
XMLElement *bonesXml = d->FirstChildElement("Bones");
|
||||
if (bonesXml)
|
||||
|
@ -1290,10 +1291,7 @@ void SkeletalSprite::loadSkeletal(const std::string &fn)
|
|||
filenameLoaded = "";
|
||||
loaded = false;
|
||||
stopAnimation();
|
||||
for (int i = 0; i < animLayers.size(); i++)
|
||||
{
|
||||
animLayers[i].currentAnimation = 0;
|
||||
}
|
||||
animLayers.clear();
|
||||
deleteBones();
|
||||
|
||||
|
||||
|
@ -1321,7 +1319,7 @@ void SkeletalSprite::loadSkeletal(const std::string &fn)
|
|||
|
||||
file = core->adjustFilenameCase(file);
|
||||
|
||||
XMLDocument *xml = _retrieveSkeletalXML(file);
|
||||
XMLDocument *xml = _retrieveSkeletalXML(file, false);
|
||||
if(!xml)
|
||||
{
|
||||
filenameLoaded = "";
|
||||
|
|
|
@ -28,7 +28,6 @@ StateMachine::StateMachine ()
|
|||
enqueuedState = nextState = prevState = currentState = STATE_NONE;
|
||||
|
||||
stateCounter = 0;
|
||||
currentStateData = enqueuedStateData = 0;
|
||||
}
|
||||
|
||||
int StateMachine::getState()
|
||||
|
@ -46,7 +45,7 @@ int StateMachine::getPrevState()
|
|||
return prevState;
|
||||
}
|
||||
|
||||
void StateMachine::perform(int state, float time, void *stateData)
|
||||
void StateMachine::perform(int state, float time)
|
||||
{
|
||||
//debugLog("in perform");
|
||||
stateExtraDT = 0;
|
||||
|
@ -56,33 +55,30 @@ void StateMachine::perform(int state, float time, void *stateData)
|
|||
|
||||
// do this to prevent scripts from repeating endlessly when running main loops
|
||||
enqueuedState = STATE_NONE;
|
||||
enqueuedStateData = 0;
|
||||
|
||||
onExitState(currentState);
|
||||
stateCounter = 0;
|
||||
stateTime = time;
|
||||
currentState = state;
|
||||
nextState = STATE_NONE;
|
||||
this->currentStateData = stateData;
|
||||
//debugLog("onActionInit");
|
||||
onEnterState(currentState);
|
||||
|
||||
//debugLog("done");
|
||||
}
|
||||
|
||||
void StateMachine::setState(int state, float time, bool force, void *stateData)
|
||||
void StateMachine::setState(int state, float time, bool force)
|
||||
{
|
||||
if (canSetState(state))
|
||||
{
|
||||
if (force)
|
||||
{
|
||||
perform(state, time, stateData);
|
||||
perform(state, time);
|
||||
}
|
||||
else
|
||||
{
|
||||
enqueuedState = state;
|
||||
enqueuedTime = time;
|
||||
enqueuedStateData = stateData;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -140,64 +136,9 @@ void StateMachine::onUpdate (float dt)
|
|||
}
|
||||
if (enqueuedState != STATE_NONE)
|
||||
{
|
||||
perform(enqueuedState, enqueuedTime, enqueuedStateData);
|
||||
perform(enqueuedState, enqueuedTime);
|
||||
enqueuedState = STATE_NONE;
|
||||
enqueuedTime = -1;
|
||||
}
|
||||
}
|
||||
|
||||
void StateMachine::addCooldown(int state, float time)
|
||||
{
|
||||
Cooldown c;
|
||||
c.state = state;
|
||||
c.timer.start(time);
|
||||
cooldowns.push_back(c);
|
||||
}
|
||||
|
||||
bool StateMachine::isCooldown(int state)
|
||||
{
|
||||
for (Cooldowns::iterator i = cooldowns.begin(); i != cooldowns.end(); i++)
|
||||
{
|
||||
if ((*i).state == state && (*i).timer.isActive())
|
||||
{
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
void StateMachine::removeCooldown(int state)
|
||||
{
|
||||
for (Cooldowns::iterator i = cooldowns.begin(); i != cooldowns.end(); i++)
|
||||
{
|
||||
if ((*i).state == state)
|
||||
{
|
||||
cooldowns.erase(i);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void StateMachine::updateCooldowns(float dt)
|
||||
{
|
||||
std::queue<int> coolqueue;
|
||||
|
||||
for (Cooldowns::iterator i = cooldowns.begin(); i != cooldowns.end(); i++)
|
||||
{
|
||||
Cooldown *c = &((*i));
|
||||
if (c->timer.updateCheck(dt)) {
|
||||
coolqueue.push(c->state);
|
||||
}
|
||||
}
|
||||
|
||||
while (!coolqueue.empty())
|
||||
{
|
||||
removeCooldown(coolqueue.back());
|
||||
coolqueue.pop();
|
||||
}
|
||||
}
|
||||
|
||||
void StateMachine::clearCooldowns()
|
||||
{
|
||||
cooldowns.clear();
|
||||
}
|
||||
|
|
|
@ -23,20 +23,13 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
|||
|
||||
#include "Base.h"
|
||||
|
||||
struct Cooldown
|
||||
{
|
||||
int state;
|
||||
Timer timer;
|
||||
};
|
||||
typedef std::list<Cooldown> Cooldowns;
|
||||
|
||||
class StateMachine
|
||||
{
|
||||
public:
|
||||
StateMachine ();
|
||||
virtual ~StateMachine() {}
|
||||
|
||||
void setState(int state, float time = -1, bool force = false, void* stateData=0);
|
||||
void setState(int state, float time = -1, bool force = false);
|
||||
void stopState(int state);
|
||||
bool isState(int state);
|
||||
int getState();
|
||||
|
@ -51,15 +44,8 @@ public:
|
|||
};
|
||||
virtual bool canSetState(int state);
|
||||
|
||||
void addCooldown(int state, float time);
|
||||
void removeCooldown(int state);
|
||||
void updateCooldowns(float dt);
|
||||
bool isCooldown(int state);
|
||||
void clearCooldowns();
|
||||
protected:
|
||||
void *currentStateData;
|
||||
void *enqueuedStateData;
|
||||
void perform(int state, float time = -1, void *stateData=0);
|
||||
void perform(int state, float time = -1);
|
||||
virtual void onEnterState(int state);
|
||||
virtual void onExitState(int state);
|
||||
|
||||
|
@ -71,7 +57,6 @@ protected:
|
|||
{ stateCounter = 0; }
|
||||
|
||||
private:
|
||||
Cooldowns cooldowns;
|
||||
float stateCounter;
|
||||
|
||||
};
|
||||
|
|
|
@ -54,9 +54,8 @@ bool Texture::useMipMaps = true;
|
|||
#endif
|
||||
*/
|
||||
|
||||
TexErr Texture::textureError = TEXERR_OK;
|
||||
|
||||
Texture::Texture() : Resource()
|
||||
Texture::Texture()
|
||||
{
|
||||
#ifdef BBGE_BUILD_OPENGL
|
||||
textures[0] = 0;
|
||||
|
@ -69,7 +68,6 @@ Texture::Texture() : Resource()
|
|||
repeat = false;
|
||||
repeating = false;
|
||||
pngSetStandardOrientation(0);
|
||||
|
||||
ow = oh = -1;
|
||||
}
|
||||
|
||||
|
@ -151,7 +149,6 @@ void Texture::write(int tx, int ty, int w, int h, const unsigned char *pixels)
|
|||
|
||||
void Texture::unload()
|
||||
{
|
||||
Resource::unload();
|
||||
#ifdef BBGE_BUILD_OPENGL
|
||||
if (textures[0])
|
||||
{
|
||||
|
@ -166,8 +163,6 @@ void Texture::unload()
|
|||
|
||||
glDeleteTextures(1, &textures[0]);
|
||||
textures[0] = 0;
|
||||
|
||||
//removeRef();
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
@ -185,10 +180,7 @@ void Texture::destroy()
|
|||
}
|
||||
#endif
|
||||
|
||||
if (!core->isShuttingDown())
|
||||
core->removeTexture(this->name);
|
||||
|
||||
// Resource::destroy();
|
||||
core->removeTexture(this);
|
||||
}
|
||||
|
||||
int Texture::getPixelWidth()
|
||||
|
@ -255,8 +247,6 @@ int Texture::getPixelHeight()
|
|||
|
||||
void Texture::reload()
|
||||
{
|
||||
Resource::reload();
|
||||
|
||||
debugLog("RELOADING TEXTURE: " + name + " with loadName " + loadName + "...");
|
||||
|
||||
unload();
|
||||
|
@ -270,15 +260,12 @@ void Texture::reload()
|
|||
debugLog("DONE");
|
||||
}
|
||||
|
||||
void Texture::load(std::string file)
|
||||
bool Texture::load(std::string file)
|
||||
{
|
||||
Texture::textureError = TEXERR_OK;
|
||||
|
||||
if (file.size()<4)
|
||||
{
|
||||
errorLog("Texture Name is Empty or Too Short");
|
||||
Texture::textureError = TEXERR_FILENOTFOUND;
|
||||
return;
|
||||
return false;
|
||||
}
|
||||
|
||||
stringToLowerUserData(file);
|
||||
|
@ -332,7 +319,7 @@ void Texture::load(std::string file)
|
|||
{
|
||||
|
||||
#ifdef BBGE_BUILD_OPENGL
|
||||
loadPNG(file);
|
||||
return loadPNG(file);
|
||||
#endif
|
||||
|
||||
#ifdef BBGE_BUILD_DIRECTX
|
||||
|
@ -353,18 +340,15 @@ void Texture::load(std::string file)
|
|||
}
|
||||
else if (post == "zga")
|
||||
{
|
||||
loadZGA(file);
|
||||
return loadZGA(file);
|
||||
}
|
||||
else if (post == "tga")
|
||||
{
|
||||
loadTGA(file);
|
||||
return loadTGA(file);
|
||||
}
|
||||
else
|
||||
{
|
||||
debugLog("unknown image file type: " + file);
|
||||
Texture::textureError = TEXERR_FILENOTFOUND;
|
||||
width = 64;
|
||||
height = 64;
|
||||
}
|
||||
}
|
||||
else
|
||||
|
@ -372,10 +356,8 @@ void Texture::load(std::string file)
|
|||
// load default image / leave white
|
||||
if (core->debugLogTextures)
|
||||
debugLog("***Could not find texture: " + file);
|
||||
Texture::textureError = TEXERR_FILENOTFOUND;
|
||||
width = 64;
|
||||
height = 64;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
void Texture::apply(bool repeatOverride)
|
||||
|
@ -411,18 +393,10 @@ void Texture::unbind()
|
|||
{
|
||||
}
|
||||
|
||||
#ifdef BBGE_BUILD_OPENGL
|
||||
|
||||
void Texture::setID(int id)
|
||||
bool Texture::loadPNG(const std::string &file)
|
||||
{
|
||||
textures[0] = id;
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
void Texture::loadPNG(const std::string &file)
|
||||
{
|
||||
if (file.empty()) return;
|
||||
if (file.empty()) return false;
|
||||
bool good = false;
|
||||
|
||||
#ifdef BBGE_BUILD_OPENGL
|
||||
|
||||
|
@ -430,7 +404,7 @@ void Texture::loadPNG(const std::string &file)
|
|||
pngInfo info;
|
||||
|
||||
int pngType = PNG_ALPHA;
|
||||
|
||||
|
||||
if (format != 0)
|
||||
{
|
||||
if (format == GL_LUMINANCE_ALPHA)
|
||||
|
@ -455,30 +429,29 @@ void Texture::loadPNG(const std::string &file)
|
|||
{
|
||||
width = info.Width;
|
||||
height = info.Height;
|
||||
good = true;
|
||||
}
|
||||
else
|
||||
{
|
||||
fail:
|
||||
|
||||
debugLog("Can't load PNG file: " + file);
|
||||
width = 64;
|
||||
height = 64;
|
||||
Texture::textureError = TEXERR_FILENOTFOUND;
|
||||
}
|
||||
|
||||
if(memptr)
|
||||
delete [] memptr;
|
||||
|
||||
#endif
|
||||
return good;
|
||||
}
|
||||
|
||||
// internal load functions
|
||||
void Texture::loadTGA(const std::string &file)
|
||||
bool Texture::loadTGA(const std::string &file)
|
||||
{
|
||||
loadTGA(TGAload(file.c_str()));
|
||||
return loadTGA(TGAload(file.c_str()));
|
||||
}
|
||||
|
||||
void Texture::loadZGA(const std::string &file)
|
||||
bool Texture::loadZGA(const std::string &file)
|
||||
{
|
||||
unsigned long size = 0;
|
||||
char *buf = readCompressedFile(file, &size);
|
||||
|
@ -486,15 +459,15 @@ void Texture::loadZGA(const std::string &file)
|
|||
if (!tga)
|
||||
{
|
||||
debugLog("Can't load ZGA File: " + file);
|
||||
return;
|
||||
return false;
|
||||
}
|
||||
loadTGA(tga);
|
||||
return loadTGA(tga);
|
||||
}
|
||||
|
||||
void Texture::loadTGA(ImageTGA *imageTGA)
|
||||
bool Texture::loadTGA(ImageTGA *imageTGA)
|
||||
{
|
||||
if (!imageTGA)
|
||||
return;
|
||||
return false;
|
||||
|
||||
glGenTextures(1, &textures[0]);
|
||||
glBindTexture(GL_TEXTURE_2D, textures[0]);
|
||||
|
@ -512,6 +485,8 @@ void Texture::loadTGA(ImageTGA *imageTGA)
|
|||
if (imageTGA->data)
|
||||
delete[] (imageTGA->data);
|
||||
free (imageTGA);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -21,7 +21,14 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
|||
#ifndef __texture__
|
||||
#define __texture__
|
||||
|
||||
#include "Resource.h"
|
||||
#include "Base.h"
|
||||
|
||||
enum TextureLoadResult
|
||||
{
|
||||
TEX_FAILED = 0x00,
|
||||
TEX_SUCCESS = 0x01,
|
||||
TEX_LOADED = 0x02,
|
||||
};
|
||||
|
||||
struct ImageTGA
|
||||
{
|
||||
|
@ -31,24 +38,16 @@ struct ImageTGA
|
|||
unsigned char *data; // The image pixel data
|
||||
};
|
||||
|
||||
enum TexErr
|
||||
{
|
||||
TEXERR_OK = 0,
|
||||
TEXERR_FILENOTFOUND = 1,
|
||||
TEXERR_MAX
|
||||
};
|
||||
|
||||
class Texture : public Resource
|
||||
class Texture : public Refcounted
|
||||
{
|
||||
public:
|
||||
Texture();
|
||||
~Texture();
|
||||
|
||||
void load(std::string file);
|
||||
bool load(std::string file);
|
||||
void apply(bool repeatOverride=false);
|
||||
void unbind();
|
||||
void unload();
|
||||
void setLayer(int layer);
|
||||
|
||||
int getPixelWidth();
|
||||
int getPixelHeight();
|
||||
|
@ -67,7 +66,6 @@ public:
|
|||
#ifdef BBGE_BUILD_OPENGL
|
||||
static GLint filter;
|
||||
static GLint format;
|
||||
void setID (int id);
|
||||
GLuint textures[1];
|
||||
#endif
|
||||
#ifdef BBGE_BUILD_DIRECTX
|
||||
|
@ -76,26 +74,26 @@ public:
|
|||
|
||||
void reload();
|
||||
|
||||
static TexErr textureError;
|
||||
|
||||
void write(int tx, int ty, int w, int h, const unsigned char *pixels);
|
||||
void read(int tx, int ty, int w, int h, unsigned char *pixels);
|
||||
|
||||
unsigned char *getBufferAndSize(int *w, int *h, unsigned int *size); // returned memory must be free()'d
|
||||
|
||||
std::string name;
|
||||
|
||||
protected:
|
||||
std::string loadName;
|
||||
|
||||
// internal load functions
|
||||
void loadPNG(const std::string &file);
|
||||
void loadTGA(const std::string &file);
|
||||
void loadZGA(const std::string &file);
|
||||
void loadTGA(ImageTGA *tga);
|
||||
bool loadPNG(const std::string &file);
|
||||
bool loadTGA(const std::string &file);
|
||||
bool loadZGA(const std::string &file);
|
||||
bool loadTGA(ImageTGA *tga);
|
||||
|
||||
int ow, oh;
|
||||
|
||||
};
|
||||
|
||||
#define UNREFTEX(x) if (x) {x->removeRef(); x=0;}
|
||||
#define UNREFTEX(x) if (x) {x = NULL;}
|
||||
|
||||
#endif
|
||||
|
|
|
@ -31,6 +31,7 @@ OPTION(AQUARIA_DEMO_BUILD "Demo Build?" FALSE)
|
|||
OPTION(AQUARIA_USE_VFS "Use Virtual File System? Required for some additional features." TRUE)
|
||||
|
||||
OPTION(AQUARIA_USE_SDL2 "Use SDL2" FALSE)
|
||||
OPTION(AQUARIA_USE_GLM "Use GLM for matrix math" TRUE)
|
||||
|
||||
# No Steamworks SDK for Linux at the moment. Roll our own achievements.
|
||||
ADD_DEFINITIONS(-DBBGE_BUILD_ACHIEVEMENTS_INTERNAL=1)
|
||||
|
@ -303,6 +304,10 @@ IF(AQUARIA_USE_SDL2)
|
|||
ADD_DEFINITIONS(-DBBGE_BUILD_SDL2=1)
|
||||
ENDIF(AQUARIA_USE_SDL2)
|
||||
|
||||
IF(AQUARIA_USE_GLM)
|
||||
ADD_DEFINITIONS(-DBBGE_USE_GLM=1)
|
||||
ENDIF(AQUARIA_USE_GLM)
|
||||
|
||||
IF(AQUARIA_DEMO_BUILD)
|
||||
message(STATUS "Demo build.")
|
||||
ADD_DEFINITIONS(-DAQUARIA_DEMO=1)
|
||||
|
@ -482,7 +487,6 @@ SET(BBGE_SRCS
|
|||
${BBGEDIR}/RenderObject.cpp
|
||||
${BBGEDIR}/RenderObjectLayer.cpp
|
||||
${BBGEDIR}/RenderRect.cpp
|
||||
${BBGEDIR}/Resource.cpp
|
||||
${BBGEDIR}/RoundedRect.cpp
|
||||
${BBGEDIR}/ScreenTransition.cpp
|
||||
${BBGEDIR}/ScriptObject.cpp
|
||||
|
@ -714,7 +718,7 @@ ENDIF(WIN32)
|
|||
IF(MACOSX)
|
||||
SET(OPTIONAL_LIBS ${OPTIONAL_LIBS} "-framework Carbon")
|
||||
SET(OPTIONAL_LIBS ${OPTIONAL_LIBS} "-framework Cocoa")
|
||||
SET(OPTIONAL_LIBS ${OPTIONAL_LIBS} "-framework OpenAL")
|
||||
#SET(OPTIONAL_LIBS ${OPTIONAL_LIBS} "-framework OpenAL")
|
||||
ENDIF(MACOSX)
|
||||
|
||||
IF(HAIKU)
|
||||
|
|
Binary file not shown.
Binary file not shown.
43
ExternalLibs/glm/CMakeLists.txt
Normal file
43
ExternalLibs/glm/CMakeLists.txt
Normal file
|
@ -0,0 +1,43 @@
|
|||
set(NAME glm)
|
||||
|
||||
file(GLOB ROOT_SOURCE *.cpp)
|
||||
file(GLOB ROOT_INLINE *.inl)
|
||||
file(GLOB ROOT_HEADER *.hpp)
|
||||
|
||||
file(GLOB_RECURSE CORE_SOURCE ./core/*.cpp)
|
||||
file(GLOB_RECURSE CORE_INLINE ./core/*.inl)
|
||||
file(GLOB_RECURSE CORE_HEADER ./core/*.hpp)
|
||||
|
||||
file(GLOB_RECURSE GTC_SOURCE ./gtc/*.cpp)
|
||||
file(GLOB_RECURSE GTC_INLINE ./gtc/*.inl)
|
||||
file(GLOB_RECURSE GTC_HEADER ./gtc/*.hpp)
|
||||
|
||||
file(GLOB_RECURSE GTX_SOURCE ./gtx/*.cpp)
|
||||
file(GLOB_RECURSE GTX_INLINE ./gtx/*.inl)
|
||||
file(GLOB_RECURSE GTX_HEADER ./gtx/*.hpp)
|
||||
|
||||
file(GLOB_RECURSE VIRTREV_SOURCE ./virtrev/*.cpp)
|
||||
file(GLOB_RECURSE VIRTREV_INLINE ./virtrev/*.inl)
|
||||
file(GLOB_RECURSE VIRTREV_HEADER ./virtrev/*.hpp)
|
||||
|
||||
source_group("Core Files" FILES ${CORE_SOURCE})
|
||||
source_group("Core Files" FILES ${CORE_INLINE})
|
||||
source_group("Core Files" FILES ${CORE_HEADER})
|
||||
source_group("GTC Files" FILES ${GTC_SOURCE})
|
||||
source_group("GTC Files" FILES ${GTC_INLINE})
|
||||
source_group("GTC Files" FILES ${GTC_HEADER})
|
||||
source_group("GTX Files" FILES ${GTX_SOURCE})
|
||||
source_group("GTX Files" FILES ${GTX_INLINE})
|
||||
source_group("GTX Files" FILES ${GTX_HEADER})
|
||||
source_group("VIRTREV Files" FILES ${VIRTREV_SOURCE})
|
||||
source_group("VIRTREV Files" FILES ${VIRTREV_INLINE})
|
||||
source_group("VIRTREV Files" FILES ${VIRTREV_HEADER})
|
||||
|
||||
include_directories(${CMAKE_CURRENT_SOURCE_DIR}/..)
|
||||
|
||||
add_executable(${NAME}
|
||||
${ROOT_SOURCE} ${ROOT_INLINE} ${ROOT_HEADER}
|
||||
${CORE_SOURCE} ${CORE_INLINE} ${CORE_HEADER}
|
||||
${GTC_SOURCE} ${GTC_INLINE} ${GTC_HEADER}
|
||||
${GTX_SOURCE} ${GTX_INLINE} ${GTX_HEADER}
|
||||
${VIRTREV_SOURCE} ${VIRTREV_INLINE} ${VIRTREV_HEADER})
|
356
ExternalLibs/glm/core/_detail.hpp
Normal file
356
ExternalLibs/glm/core/_detail.hpp
Normal file
|
@ -0,0 +1,356 @@
|
|||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// OpenGL Mathematics Copyright (c) 2005 - 2011 G-Truc Creation (www.g-truc.net)
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// Created : 2008-07-24
|
||||
// Updated : 2008-08-31
|
||||
// Licence : This source is under MIT License
|
||||
// File : glm/core/_detail.hpp
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#ifndef glm_core_detail
|
||||
#define glm_core_detail
|
||||
|
||||
#include "setup.hpp"
|
||||
#include <cassert>
|
||||
|
||||
namespace glm{
|
||||
namespace detail
|
||||
{
|
||||
class thalf;
|
||||
|
||||
#if(__STDC_VERSION__ >= 199901L) // C99 detected, 64 bit types available
|
||||
typedef int64_t sint64;
|
||||
typedef uint64_t uint64;
|
||||
#elif(GLM_COMPILER & GLM_COMPILER_VC)
|
||||
typedef signed __int64 sint64;
|
||||
typedef unsigned __int64 uint64;
|
||||
#elif(GLM_COMPILER & (GLM_COMPILER_GCC | GLM_COMPILER_LLVM_GCC | GLM_COMPILER_CLANG))
|
||||
__extension__ typedef signed long long sint64;
|
||||
__extension__ typedef unsigned long long uint64;
|
||||
#elif(GLM_COMPILER & GLM_COMPILER_BC)
|
||||
typedef Int64 sint64;
|
||||
typedef Uint64 uint64;
|
||||
#else//unknown compiler
|
||||
typedef signed long long sint64;
|
||||
typedef unsigned long long uint64;
|
||||
#endif//GLM_COMPILER
|
||||
|
||||
template<bool C>
|
||||
struct If
|
||||
{
|
||||
template<typename F, typename T>
|
||||
static GLM_FUNC_QUALIFIER T apply(F functor, const T& val)
|
||||
{
|
||||
return functor(val);
|
||||
}
|
||||
};
|
||||
|
||||
template<>
|
||||
struct If<false>
|
||||
{
|
||||
template<typename F, typename T>
|
||||
static GLM_FUNC_QUALIFIER T apply(F, const T& val)
|
||||
{
|
||||
return val;
|
||||
}
|
||||
};
|
||||
|
||||
//template <typename T>
|
||||
//struct traits
|
||||
//{
|
||||
// static const bool is_signed = false;
|
||||
// static const bool is_float = false;
|
||||
// static const bool is_vector = false;
|
||||
// static const bool is_matrix = false;
|
||||
// static const bool is_genType = false;
|
||||
// static const bool is_genIType = false;
|
||||
// static const bool is_genUType = false;
|
||||
//};
|
||||
|
||||
//template <>
|
||||
//struct traits<half>
|
||||
//{
|
||||
// static const bool is_float = true;
|
||||
// static const bool is_genType = true;
|
||||
//};
|
||||
|
||||
//template <>
|
||||
//struct traits<float>
|
||||
//{
|
||||
// static const bool is_float = true;
|
||||
// static const bool is_genType = true;
|
||||
//};
|
||||
|
||||
//template <>
|
||||
//struct traits<double>
|
||||
//{
|
||||
// static const bool is_float = true;
|
||||
// static const bool is_genType = true;
|
||||
//};
|
||||
|
||||
//template <typename genType>
|
||||
//struct desc
|
||||
//{
|
||||
// typedef genType type;
|
||||
// typedef genType * pointer;
|
||||
// typedef genType const* const_pointer;
|
||||
// typedef genType const *const const_pointer_const;
|
||||
// typedef genType *const pointer_const;
|
||||
// typedef genType & reference;
|
||||
// typedef genType const& const_reference;
|
||||
// typedef genType const& param_type;
|
||||
|
||||
// typedef typename genType::value_type value_type;
|
||||
// typedef typename genType::size_type size_type;
|
||||
// static const typename size_type value_size;
|
||||
//};
|
||||
|
||||
//template <typename genType>
|
||||
//const typename desc<genType>::size_type desc<genType>::value_size = genType::value_size();
|
||||
|
||||
union uif32
|
||||
{
|
||||
GLM_FUNC_QUALIFIER uif32() :
|
||||
i(0)
|
||||
{}
|
||||
|
||||
GLM_FUNC_QUALIFIER uif32(float f) :
|
||||
f(f)
|
||||
{}
|
||||
|
||||
GLM_FUNC_QUALIFIER uif32(unsigned int i) :
|
||||
i(i)
|
||||
{}
|
||||
|
||||
float f;
|
||||
unsigned int i;
|
||||
};
|
||||
|
||||
union uif64
|
||||
{
|
||||
GLM_FUNC_QUALIFIER uif64() :
|
||||
i(0)
|
||||
{}
|
||||
|
||||
GLM_FUNC_QUALIFIER uif64(double f) :
|
||||
f(f)
|
||||
{}
|
||||
|
||||
GLM_FUNC_QUALIFIER uif64(uint64 i) :
|
||||
i(i)
|
||||
{}
|
||||
|
||||
double f;
|
||||
uint64 i;
|
||||
};
|
||||
|
||||
typedef uif32 uif;
|
||||
|
||||
//////////////////
|
||||
// int
|
||||
|
||||
template <typename T>
|
||||
struct is_int
|
||||
{
|
||||
enum is_int_enum
|
||||
{
|
||||
_YES = 0,
|
||||
_NO = 1
|
||||
};
|
||||
};
|
||||
|
||||
#define GLM_DETAIL_IS_INT(T) \
|
||||
template <> \
|
||||
struct is_int<T> \
|
||||
{ \
|
||||
enum is_int_enum \
|
||||
{ \
|
||||
_YES = 1, \
|
||||
_NO = 0 \
|
||||
}; \
|
||||
}
|
||||
|
||||
//////////////////
|
||||
// uint
|
||||
|
||||
template <typename T>
|
||||
struct is_uint
|
||||
{
|
||||
enum is_uint_enum
|
||||
{
|
||||
_YES = 0,
|
||||
_NO = 1
|
||||
};
|
||||
};
|
||||
|
||||
#define GLM_DETAIL_IS_UINT(T) \
|
||||
template <> \
|
||||
struct is_uint<T> \
|
||||
{ \
|
||||
enum is_uint_enum \
|
||||
{ \
|
||||
_YES = 1, \
|
||||
_NO = 0 \
|
||||
}; \
|
||||
}
|
||||
|
||||
//GLM_DETAIL_IS_UINT(unsigned long long)
|
||||
|
||||
//////////////////
|
||||
// float
|
||||
|
||||
template <typename T>
|
||||
struct is_float
|
||||
{
|
||||
enum is_float_enum
|
||||
{
|
||||
_YES = 0,
|
||||
_NO = 1
|
||||
};
|
||||
};
|
||||
|
||||
#define GLM_DETAIL_IS_FLOAT(T) \
|
||||
template <> \
|
||||
struct is_float<T> \
|
||||
{ \
|
||||
enum is_float_enum \
|
||||
{ \
|
||||
_YES = 1, \
|
||||
_NO = 0 \
|
||||
}; \
|
||||
}
|
||||
|
||||
//////////////////
|
||||
// bool
|
||||
|
||||
template <typename T>
|
||||
struct is_bool
|
||||
{
|
||||
enum is_bool_enum
|
||||
{
|
||||
_YES = 0,
|
||||
_NO = 1
|
||||
};
|
||||
};
|
||||
|
||||
template <>
|
||||
struct is_bool<bool>
|
||||
{
|
||||
enum is_bool_enum
|
||||
{
|
||||
_YES = 1,
|
||||
_NO = 0
|
||||
};
|
||||
};
|
||||
|
||||
//////////////////
|
||||
// vector
|
||||
|
||||
template <typename T>
|
||||
struct is_vector
|
||||
{
|
||||
enum is_vector_enum
|
||||
{
|
||||
_YES = 0,
|
||||
_NO = 1
|
||||
};
|
||||
};
|
||||
|
||||
# define GLM_DETAIL_IS_VECTOR(TYPE) \
|
||||
template <typename T> \
|
||||
struct is_vector<TYPE<T> > \
|
||||
{ \
|
||||
enum is_vector_enum \
|
||||
{ \
|
||||
_YES = 1, \
|
||||
_NO = 0 \
|
||||
}; \
|
||||
}
|
||||
|
||||
//////////////////
|
||||
// matrix
|
||||
|
||||
template <typename T>
|
||||
struct is_matrix
|
||||
{
|
||||
enum is_matrix_enum
|
||||
{
|
||||
_YES = 0,
|
||||
_NO = 1
|
||||
};
|
||||
};
|
||||
|
||||
#define GLM_DETAIL_IS_MATRIX(T) \
|
||||
template <> \
|
||||
struct is_matrix \
|
||||
{ \
|
||||
enum is_matrix_enum \
|
||||
{ \
|
||||
_YES = 1, \
|
||||
_NO = 0 \
|
||||
}; \
|
||||
}
|
||||
|
||||
//////////////////
|
||||
// type
|
||||
|
||||
template <typename T>
|
||||
struct type
|
||||
{
|
||||
enum type_enum
|
||||
{
|
||||
is_float = is_float<T>::_YES,
|
||||
is_int = is_int<T>::_YES,
|
||||
is_uint = is_uint<T>::_YES,
|
||||
is_bool = is_bool<T>::_YES
|
||||
};
|
||||
};
|
||||
|
||||
//////////////////
|
||||
// type
|
||||
|
||||
typedef signed char int8;
|
||||
typedef signed short int16;
|
||||
typedef signed int int32;
|
||||
typedef detail::sint64 int64;
|
||||
|
||||
typedef unsigned char uint8;
|
||||
typedef unsigned short uint16;
|
||||
typedef unsigned int uint32;
|
||||
typedef detail::uint64 uint64;
|
||||
|
||||
typedef detail::thalf float16;
|
||||
typedef float float32;
|
||||
typedef double float64;
|
||||
|
||||
}//namespace detail
|
||||
}//namespace glm
|
||||
|
||||
#if((GLM_COMPILER & GLM_COMPILER_VC) && (GLM_COMPILER >= GLM_COMPILER_VC2005))
|
||||
# define GLM_DEPRECATED __declspec(deprecated)
|
||||
# define GLM_ALIGN(x) __declspec(align(x))
|
||||
# define GLM_ALIGNED_STRUCT(x) __declspec(align(x)) struct
|
||||
# define GLM_RESTRICT __declspec(restrict)
|
||||
# define GLM_RESTRICT_VAR __restrict
|
||||
#elif((GLM_COMPILER & (GLM_COMPILER_GCC | GLM_COMPILER_LLVM_GCC)) && (GLM_COMPILER >= GLM_COMPILER_GCC31))
|
||||
# define GLM_DEPRECATED __attribute__((__deprecated__))
|
||||
# define GLM_ALIGN(x) __attribute__((aligned(x)))
|
||||
# define GLM_ALIGNED_STRUCT(x) struct __attribute__((aligned(x)))
|
||||
# if(GLM_COMPILER >= GLM_COMPILER_GCC33)
|
||||
# define GLM_RESTRICT __restrict__
|
||||
# define GLM_RESTRICT_VAR __restrict__
|
||||
# else
|
||||
# define GLM_RESTRICT
|
||||
# define GLM_RESTRICT_VAR
|
||||
# endif
|
||||
# define GLM_RESTRICT __restrict__
|
||||
# define GLM_RESTRICT_VAR __restrict__
|
||||
#else
|
||||
# define GLM_DEPRECATED
|
||||
# define GLM_ALIGN
|
||||
# define GLM_ALIGNED_STRUCT(x)
|
||||
# define GLM_RESTRICT
|
||||
# define GLM_RESTRICT_VAR
|
||||
#endif//GLM_COMPILER
|
||||
|
||||
#endif//glm_core_detail
|
18
ExternalLibs/glm/core/_fixes.hpp
Normal file
18
ExternalLibs/glm/core/_fixes.hpp
Normal file
|
@ -0,0 +1,18 @@
|
|||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// OpenGL Mathematics Copyright (c) 2005 - 2011 G-Truc Creation (www.g-truc.net)
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// Created : 2011-02-21
|
||||
// Updated : 2011-02-21
|
||||
// Licence : This source is under MIT License
|
||||
// File : glm/core/_fixes.hpp
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
//! Workaround for compatibility with other libraries
|
||||
#ifdef max
|
||||
#undef max
|
||||
#endif
|
||||
|
||||
//! Workaround for compatibility with other libraries
|
||||
#ifdef min
|
||||
#undef min
|
||||
#endif
|
1085
ExternalLibs/glm/core/_swizzle.hpp
Normal file
1085
ExternalLibs/glm/core/_swizzle.hpp
Normal file
File diff suppressed because it is too large
Load diff
20
ExternalLibs/glm/core/_swizzle.inl
Normal file
20
ExternalLibs/glm/core/_swizzle.inl
Normal file
|
@ -0,0 +1,20 @@
|
|||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// OpenGL Mathematics Copyright (c) 2005 - 2011 G-Truc Creation (www.g-truc.net)
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// Created : 2006-04-27
|
||||
// Updated : 2006-04-27
|
||||
// Licence : This source is under MIT License
|
||||
// File : _swizzle.inl
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#ifndef __swizzle_inl__
|
||||
#define __swizzle_inl__
|
||||
|
||||
#include "./_swizzle.h"
|
||||
|
||||
namespace glm
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
#endif//__swizzle_inl__
|
20
ExternalLibs/glm/core/dummy.cpp
Normal file
20
ExternalLibs/glm/core/dummy.cpp
Normal file
|
@ -0,0 +1,20 @@
|
|||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// OpenGL Mathematics Copyright (c) 2005 - 2011 G-Truc Creation (www.g-truc.net)
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// Created : 2011-01-19
|
||||
// Updated : 2011-01-19
|
||||
// Licence : This source is under MIT License
|
||||
// File : glm/setup.hpp
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// GLM is a header only library. There is nothing to compile.
|
||||
// dummy.cpp exist only a wordaround for CMake file.
|
||||
|
||||
#include "../glm.hpp"
|
||||
#include "../ext.hpp"
|
||||
|
||||
//#error "GLM is a header only library"
|
||||
|
||||
int main()
|
||||
{
|
||||
|
||||
}
|
343
ExternalLibs/glm/core/func_common.hpp
Normal file
343
ExternalLibs/glm/core/func_common.hpp
Normal file
|
@ -0,0 +1,343 @@
|
|||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// OpenGL Mathematics Copyright (c) 2005 - 2011 G-Truc Creation (www.g-truc.net)
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// Created : 2008-03-08
|
||||
// Updated : 2010-01-26
|
||||
// Licence : This source is under MIT License
|
||||
// File : glm/core/func_common.hpp
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#ifndef glm_core_func_common
|
||||
#define glm_core_func_common
|
||||
|
||||
#include "_fixes.hpp"
|
||||
|
||||
namespace glm
|
||||
{
|
||||
namespace test{
|
||||
void main_core_func_common();
|
||||
}//namespace test
|
||||
|
||||
namespace core{
|
||||
namespace function{
|
||||
//! Define common functions from Section 8.3 of GLSL 1.30.8 specification. Included in glm namespace.
|
||||
namespace common{
|
||||
|
||||
/// \addtogroup core_funcs
|
||||
///@{
|
||||
|
||||
//! Returns x if x >= 0; otherwise, it returns -x.
|
||||
//!
|
||||
//! \li <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/abs.xml">GLSL abs man page</a>
|
||||
//! \li GLSL 1.30.08 specification, section 8.3
|
||||
template <typename genFIType>
|
||||
genFIType abs(genFIType const & x);
|
||||
|
||||
//! Returns 1.0 if x > 0, 0.0 if x == 0, or -1.0 if x < 0.
|
||||
//!
|
||||
//! \li <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/sign.xml">GLSL sign man page</a>
|
||||
//! \li GLSL 1.30.08 specification, section 8.3
|
||||
template <typename genFIType>
|
||||
genFIType sign(genFIType const & x);
|
||||
|
||||
//! Returns a value equal to the nearest integer that is less then or equal to x.
|
||||
//!
|
||||
//! \li <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/floor.xml">GLSL floor man page</a>
|
||||
//! \li GLSL 1.30.08 specification, section 8.3
|
||||
template <typename genType>
|
||||
genType floor(genType const & x);
|
||||
|
||||
//! Returns a value equal to the nearest integer to x
|
||||
//! whose absolute value is not larger than the absolute value of x.
|
||||
//!
|
||||
//! \li <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/trunc.xml">GLSL trunc man page</a>
|
||||
//! \li GLSL 1.30.08 specification, section 8.3
|
||||
template <typename genType>
|
||||
genType trunc(genType const & x);
|
||||
|
||||
//! Returns a value equal to the nearest integer to x.
|
||||
//! The fraction 0.5 will round in a direction chosen by the
|
||||
//! implementation, presumably the direction that is fastest.
|
||||
//! This includes the possibility that round(x) returns the
|
||||
//! same value as roundEven(x) for all values of x.
|
||||
//!
|
||||
//! \li <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/round.xml">GLSL round man page</a>
|
||||
//! \li GLSL 1.30.08 specification, section 8.3
|
||||
template <typename genType>
|
||||
genType round(genType const & x);
|
||||
|
||||
//! Returns a value equal to the nearest integer to x.
|
||||
//! A fractional part of 0.5 will round toward the nearest even
|
||||
//! integer. (Both 3.5 and 4.5 for x will return 4.0.)
|
||||
//!
|
||||
//! \li <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/roundEven.xml">GLSL roundEven man page</a>
|
||||
//! \li GLSL 1.30.08 specification, section 8.3
|
||||
template <typename genType>
|
||||
genType roundEven(genType const & x);
|
||||
|
||||
//! Returns a value equal to the nearest integer
|
||||
//! that is greater than or equal to x.
|
||||
//!
|
||||
//! \li <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/ceil.xml">GLSL ceil man page</a>
|
||||
//! \li GLSL 1.30.08 specification, section 8.3
|
||||
template <typename genType>
|
||||
genType ceil(genType const & x);
|
||||
|
||||
//! Return x - floor(x).
|
||||
//!
|
||||
//! \li <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/fract.xml">GLSL fract man page</a>
|
||||
//! \li GLSL 1.30.08 specification, section 8.3
|
||||
template <typename genType>
|
||||
genType fract(genType const & x);
|
||||
|
||||
//! Modulus. Returns x - y * floor(x / y)
|
||||
//! for each component in x using the floating point value y.
|
||||
//!
|
||||
//! \li <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/mod.xml">GLSL mod man page</a>
|
||||
//! \li GLSL 1.30.08 specification, section 8.3
|
||||
template <typename genType>
|
||||
genType mod(
|
||||
genType const & x,
|
||||
genType const & y);
|
||||
|
||||
//! Modulus. Returns x - y * floor(x / y)
|
||||
//! for each component in x using the floating point value y.
|
||||
//!
|
||||
//! \li <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/mod.xml">GLSL mod man page</a>
|
||||
//! \li GLSL 1.30.08 specification, section 8.3
|
||||
template <typename genType>
|
||||
genType mod(
|
||||
genType const & x,
|
||||
typename genType::value_type const & y);
|
||||
|
||||
//! Returns the fractional part of x and sets i to the integer
|
||||
//! part (as a whole number floating point value). Both the
|
||||
//! return value and the output parameter will have the same
|
||||
//! sign as x.
|
||||
//!
|
||||
//! \li <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/modf.xml">GLSL modf man page</a>
|
||||
//! \li GLSL 1.30.08 specification, section 8.3
|
||||
template <typename genType>
|
||||
genType modf(
|
||||
genType const & x,
|
||||
genType & i);
|
||||
|
||||
//! Returns y if y < x; otherwise, it returns x.
|
||||
//!
|
||||
//! \li <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/min.xml">GLSL min man page</a>
|
||||
//! \li GLSL 1.30.08 specification, section 8.3
|
||||
template <typename genType>
|
||||
genType min(
|
||||
genType const & x,
|
||||
genType const & y);
|
||||
|
||||
template <typename genType>
|
||||
genType min(
|
||||
genType const & x,
|
||||
typename genType::value_type const & y);
|
||||
|
||||
//! Returns y if x < y; otherwise, it returns x.
|
||||
//!
|
||||
//! \li <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/max.xml">GLSL max man page</a>
|
||||
//! \li GLSL 1.30.08 specification, section 8.3
|
||||
template <typename genType>
|
||||
genType max(
|
||||
genType const & x,
|
||||
genType const & y);
|
||||
|
||||
template <typename genType>
|
||||
genType max(
|
||||
genType const & x,
|
||||
typename genType::value_type const & y);
|
||||
|
||||
//! Returns min(max(x, minVal), maxVal) for each component in x
|
||||
//! using the floating-point values minVal and maxVal.
|
||||
//!
|
||||
//! \li <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/clamp.xml">GLSL clamp man page</a>
|
||||
//! \li GLSL 1.30.08 specification, section 8.3
|
||||
template <typename genType>
|
||||
genType clamp(
|
||||
genType const & x,
|
||||
genType const & minVal,
|
||||
genType const & maxVal);
|
||||
|
||||
template <typename genType>
|
||||
genType clamp(
|
||||
genType const & x,
|
||||
typename genType::value_type const & minVal,
|
||||
typename genType::value_type const & maxVal);
|
||||
|
||||
//! \return If genTypeU is a floating scalar or vector:
|
||||
//! Returns x * (1.0 - a) + y * a, i.e., the linear blend of
|
||||
//! x and y using the floating-point value a.
|
||||
//! The value for a is not restricted to the range [0, 1].
|
||||
//!
|
||||
//! \return If genTypeU is a boolean scalar or vector:
|
||||
//! Selects which vector each returned component comes
|
||||
//! from. For a component of a that is false, the
|
||||
//! corresponding component of x is returned. For a
|
||||
//! component of a that is true, the corresponding
|
||||
//! component of y is returned. Components of x and y that
|
||||
//! are not selected are allowed to be invalid floating point
|
||||
//! values and will have no effect on the results. Thus, this
|
||||
//! provides different functionality than
|
||||
//! genType mix(genType x, genType y, genType(a))
|
||||
//! where a is a Boolean vector.
|
||||
//!
|
||||
//! \li <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/mix.xml">GLSL mix man page</a>
|
||||
//! \li GLSL 1.30.08 specification, section 8.3
|
||||
//!
|
||||
//! \param[in] x Floating point scalar or vector.
|
||||
//! \param[in] y Floating point scalar or vector.
|
||||
//! \param[in] a Floating point or boolean scalar or vector.
|
||||
//!
|
||||
// \todo Test when 'a' is a boolean.
|
||||
template <typename genTypeT, typename genTypeU>
|
||||
genTypeT mix(genTypeT const & x, genTypeT const & y, genTypeU const & a);
|
||||
|
||||
//! Returns 0.0 if x < edge, otherwise it returns 1.0.
|
||||
//!
|
||||
//! \li <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/step.xml">GLSL step man page</a>
|
||||
//! \li GLSL 1.30.08 specification, section 8.3
|
||||
template <typename genType>
|
||||
genType step(
|
||||
genType const & edge,
|
||||
genType const & x);
|
||||
|
||||
template <typename genType>
|
||||
genType step(
|
||||
typename genType::value_type const & edge,
|
||||
genType const & x);
|
||||
|
||||
//! Returns 0.0 if x <= edge0 and 1.0 if x >= edge1 and
|
||||
//! performs smooth Hermite interpolation between 0 and 1
|
||||
//! when edge0 < x < edge1. This is useful in cases where
|
||||
//! you would want a threshold function with a smooth
|
||||
//! transition. This is equivalent to:
|
||||
//! genType t;
|
||||
//! t = clamp ((x – edge0) / (edge1 – edge0), 0, 1);
|
||||
//! return t * t * (3 – 2 * t);
|
||||
//! Results are undefined if edge0 >= edge1.
|
||||
//!
|
||||
//! \li <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/smoothstep.xml">GLSL smoothstep man page</a>
|
||||
//! \li GLSL 1.30.08 specification, section 8.3
|
||||
template <typename genType>
|
||||
genType smoothstep(
|
||||
genType const & edge0,
|
||||
genType const & edge1,
|
||||
genType const & x);
|
||||
|
||||
template <typename genType>
|
||||
genType smoothstep(
|
||||
typename genType::value_type const & edge0,
|
||||
typename genType::value_type const & edge1,
|
||||
genType const & x);
|
||||
|
||||
//! Returns true if x holds a NaN (not a number)
|
||||
//! representation in the underlying implementation's set of
|
||||
//! floating point representations. Returns false otherwise,
|
||||
//! including for implementations with no NaN
|
||||
//! representations.
|
||||
//!
|
||||
//! \li <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/isnan.xml">GLSL isnan man page</a>
|
||||
//! \li GLSL 1.30.08 specification, section 8.3
|
||||
template <typename genType>
|
||||
typename genType::bool_type isnan(genType const & x);
|
||||
|
||||
//! Returns true if x holds a positive infinity or negative
|
||||
//! infinity representation in the underlying implementation's
|
||||
//! set of floating point representations. Returns false
|
||||
//! otherwise, including for implementations with no infinity
|
||||
//! representations.
|
||||
//!
|
||||
//! \li <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/isinf.xml">GLSL isinf man page</a>
|
||||
//! \li GLSL 1.30.08 specification, section 8.3
|
||||
template <typename genType>
|
||||
typename genType::bool_type isinf(genType const & x);
|
||||
|
||||
//! Returns a signed integer value representing
|
||||
//! the encoding of a floating-point value. The floatingpoint
|
||||
//! value's bit-level representation is preserved.
|
||||
//!
|
||||
//! \li <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/floatBitsToInt.xml">GLSL floatBitsToInt man page</a>
|
||||
//! \li GLSL 4.00.08 specification, section 8.3
|
||||
template <typename genType, typename genIType>
|
||||
genIType floatBitsToInt(genType const & value);
|
||||
|
||||
//! Returns a unsigned integer value representing
|
||||
//! the encoding of a floating-point value. The floatingpoint
|
||||
//! value's bit-level representation is preserved.
|
||||
//!
|
||||
//! \li <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/floatBitsToUint.xml">GLSL floatBitsToUint man page</a>
|
||||
//! \li GLSL 4.00.08 specification, section 8.3
|
||||
template <typename genType, typename genUType>
|
||||
genUType floatBitsToUint(genType const & value);
|
||||
|
||||
//! Returns a floating-point value corresponding to a signed
|
||||
//! integer encoding of a floating-point value.
|
||||
//! If an inf or NaN is passed in, it will not signal, and the
|
||||
//! resulting floating point value is unspecified. Otherwise,
|
||||
//! the bit-level representation is preserved.
|
||||
//!
|
||||
//! \li <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/intBitsToFloat.xml">GLSL intBitsToFloat man page</a>
|
||||
//! \li GLSL 4.00.08 specification, section 8.3
|
||||
template <typename genType, typename genIType>
|
||||
genType intBitsToFloat(genIType const & value);
|
||||
|
||||
//! Returns a floating-point value corresponding to a
|
||||
//! unsigned integer encoding of a floating-point value.
|
||||
//! If an inf or NaN is passed in, it will not signal, and the
|
||||
//! resulting floating point value is unspecified. Otherwise,
|
||||
//! the bit-level representation is preserved.
|
||||
//!
|
||||
//! \li <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/uintBitsToFloat.xml">GLSL uintBitsToFloat man page</a>
|
||||
//! \li GLSL 4.00.08 specification, section 8.3
|
||||
template <typename genType, typename genUType>
|
||||
genType uintBitsToFloat(genUType const & value);
|
||||
|
||||
//! Computes and returns a * b + c.
|
||||
//!
|
||||
//! \li <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/fma.xml">GLSL fma man page</a>
|
||||
//! \li GLSL 4.00.08 specification, section 8.3
|
||||
template <typename genType>
|
||||
genType fma(genType const & a, genType const & b, genType const & c);
|
||||
|
||||
//! Splits x into a floating-point significand in the range
|
||||
//! [0.5, 1.0) and an integral exponent of two, such that:
|
||||
//! x = significand * exp(2, exponent)
|
||||
//!
|
||||
//! The significand is returned by the function and the
|
||||
//! exponent is returned in the parameter exp. For a
|
||||
//! floating-point value of zero, the significant and exponent
|
||||
//! are both zero. For a floating-point value that is an
|
||||
//! infinity or is not a number, the results are undefined.
|
||||
//!
|
||||
//! \li <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/frexp.xml">GLSL frexp man page</a>
|
||||
//! \li GLSL 4.00.08 specification, section 8.3
|
||||
template <typename genType, typename genIType>
|
||||
genType frexp(genType const & x, genIType & exp);
|
||||
|
||||
//! Builds a floating-point number from x and the
|
||||
//! corresponding integral exponent of two in exp, returning:
|
||||
//! significand * exp(2, exponent)
|
||||
//!
|
||||
//! If this product is too large to be represented in the
|
||||
//! floating-point type, the result is undefined.
|
||||
//!
|
||||
//! \li <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/ldexp.xml">GLSL ldexp man page</a>;
|
||||
//! \li GLSL 4.00.08 specification, section 8.3
|
||||
template <typename genType, typename genIType>
|
||||
genType ldexp(genType const & x, genIType const & exp);
|
||||
|
||||
///@}
|
||||
|
||||
}//namespace common
|
||||
}//namespace function
|
||||
}//namespace core
|
||||
|
||||
using namespace core::function::common;
|
||||
}//namespace glm
|
||||
|
||||
#include "func_common.inl"
|
||||
|
||||
#endif//glm_core_func_common
|
1577
ExternalLibs/glm/core/func_common.inl
Normal file
1577
ExternalLibs/glm/core/func_common.inl
Normal file
File diff suppressed because it is too large
Load diff
90
ExternalLibs/glm/core/func_exponential.hpp
Normal file
90
ExternalLibs/glm/core/func_exponential.hpp
Normal file
|
@ -0,0 +1,90 @@
|
|||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// OpenGL Mathematics Copyright (c) 2005 - 2011 G-Truc Creation (www.g-truc.net)
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// Created : 2008-08-08
|
||||
// Updated : 2010-02-04
|
||||
// Licence : This source is under MIT License
|
||||
// File : glm/core/func_exponential.hpp
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#ifndef glm_core_func_exponential
|
||||
#define glm_core_func_exponential
|
||||
|
||||
namespace glm
|
||||
{
|
||||
namespace test{
|
||||
void main_core_func_exponential();
|
||||
}//namespace test
|
||||
|
||||
namespace core{
|
||||
namespace function{
|
||||
//! Define all exponential functions from Section 8.2 of GLSL 1.30.8 specification. Included in glm namespace.
|
||||
namespace exponential{
|
||||
|
||||
/// \addtogroup core_funcs
|
||||
///@{
|
||||
|
||||
//! Returns x raised to the y power.
|
||||
//!
|
||||
//! \li <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/pow.xml">GLSL pow man page</a>
|
||||
//! \li GLSL 1.30.08 specification, section 8.2
|
||||
template <typename genType>
|
||||
genType pow(genType const & x, genType const & y);
|
||||
|
||||
//! Returns the natural exponentiation of x, i.e., e^x.
|
||||
//!
|
||||
//! \li <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/exp.xml">GLSL exp man page</a>
|
||||
//! \li GLSL 1.30.08 specification, section 8.2
|
||||
template <typename genType>
|
||||
genType exp(genType const & x);
|
||||
|
||||
//! Returns the natural logarithm of x, i.e.,
|
||||
//! returns the value y which satisfies the equation x = e^y.
|
||||
//! Results are undefined if x <= 0.
|
||||
//!
|
||||
//! \li <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/log.xml">GLSL log man page</a>
|
||||
//! \li GLSL 1.30.08 specification, section 8.2
|
||||
template <typename genType>
|
||||
genType log(genType const & x);
|
||||
|
||||
//! Returns 2 raised to the x power.
|
||||
//!
|
||||
//! \li <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/exp2.xml">GLSL exp2 man page</a>
|
||||
//! \li GLSL 1.30.08 specification, section 8.2
|
||||
template <typename genType>
|
||||
genType exp2(genType const & x);
|
||||
|
||||
//! Returns the base 2 log of x, i.e., returns the value y,
|
||||
//! which satisfies the equation x = 2 ^ y.
|
||||
//!
|
||||
//! \li <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/log2.xml">GLSL log2 man page</a>
|
||||
//! \li GLSL 1.30.08 specification, section 8.2
|
||||
template <typename genType>
|
||||
genType log2(genType const & x);
|
||||
|
||||
//! Returns the positive square root of x.
|
||||
//!
|
||||
//! \li <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/sqrt.xml">GLSL sqrt man page</a>
|
||||
//! \li GLSL 1.30.08 specification, section 8.2
|
||||
template <typename genType>
|
||||
genType sqrt(genType const & x);
|
||||
|
||||
//! Returns the reciprocal of the positive square root of x.
|
||||
//!
|
||||
//! \li <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/inversesqrt.xml">GLSL inversesqrt man page</a>
|
||||
//! \li GLSL 1.30.08 specification, section 8.2
|
||||
template <typename genType>
|
||||
genType inversesqrt(genType const & x);
|
||||
|
||||
///@}
|
||||
|
||||
}//namespace exponential
|
||||
}//namespace function
|
||||
}//namespace core
|
||||
|
||||
using namespace core::function::exponential;
|
||||
}//namespace glm
|
||||
|
||||
#include "func_exponential.inl"
|
||||
|
||||
#endif//glm_core_func_exponential
|
358
ExternalLibs/glm/core/func_exponential.inl
Normal file
358
ExternalLibs/glm/core/func_exponential.inl
Normal file
|
@ -0,0 +1,358 @@
|
|||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// OpenGL Mathematics Copyright (c) 2005 - 2011 G-Truc Creation (www.g-truc.net)
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// Created : 2008-08-03
|
||||
// Updated : 2010-02-04
|
||||
// Licence : This source is under MIT License
|
||||
// File : glm/core/func_exponential.inl
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
namespace glm
|
||||
{
|
||||
namespace core{
|
||||
namespace function{
|
||||
namespace exponential{
|
||||
|
||||
// pow
|
||||
template <typename genType>
|
||||
GLM_FUNC_QUALIFIER genType pow
|
||||
(
|
||||
genType const & x,
|
||||
genType const & y
|
||||
)
|
||||
{
|
||||
GLM_STATIC_ASSERT(detail::type<genType>::is_float, "'pow' only accept floating-point input");
|
||||
|
||||
return ::std::pow(x, y);
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
GLM_FUNC_QUALIFIER detail::tvec2<T> pow
|
||||
(
|
||||
detail::tvec2<T> const & x,
|
||||
detail::tvec2<T> const & y
|
||||
)
|
||||
{
|
||||
return detail::tvec2<T>(
|
||||
pow(x.x, y.x),
|
||||
pow(x.y, y.y));
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
GLM_FUNC_QUALIFIER detail::tvec3<T> pow
|
||||
(
|
||||
detail::tvec3<T> const & x,
|
||||
detail::tvec3<T> const & y
|
||||
)
|
||||
{
|
||||
return detail::tvec3<T>(
|
||||
pow(x.x, y.x),
|
||||
pow(x.y, y.y),
|
||||
pow(x.z, y.z));
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
GLM_FUNC_QUALIFIER detail::tvec4<T> pow
|
||||
(
|
||||
detail::tvec4<T> const & x,
|
||||
detail::tvec4<T> const & y
|
||||
)
|
||||
{
|
||||
return detail::tvec4<T>(
|
||||
pow(x.x, y.x),
|
||||
pow(x.y, y.y),
|
||||
pow(x.z, y.z),
|
||||
pow(x.w, y.w));
|
||||
}
|
||||
|
||||
// exp
|
||||
template <typename genType>
|
||||
GLM_FUNC_QUALIFIER genType exp
|
||||
(
|
||||
genType const & x
|
||||
)
|
||||
{
|
||||
GLM_STATIC_ASSERT(detail::type<genType>::is_float, "'exp' only accept floating-point input");
|
||||
|
||||
return ::std::exp(x);
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
GLM_FUNC_QUALIFIER detail::tvec2<T> exp
|
||||
(
|
||||
detail::tvec2<T> const & x
|
||||
)
|
||||
{
|
||||
return detail::tvec2<T>(
|
||||
exp(x.x),
|
||||
exp(x.y));
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
GLM_FUNC_QUALIFIER detail::tvec3<T> exp
|
||||
(
|
||||
detail::tvec3<T> const & x
|
||||
)
|
||||
{
|
||||
return detail::tvec3<T>(
|
||||
exp(x.x),
|
||||
exp(x.y),
|
||||
exp(x.z));
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
GLM_FUNC_QUALIFIER detail::tvec4<T> exp
|
||||
(
|
||||
detail::tvec4<T> const & x
|
||||
)
|
||||
{
|
||||
return detail::tvec4<T>(
|
||||
exp(x.x),
|
||||
exp(x.y),
|
||||
exp(x.z),
|
||||
exp(x.w));
|
||||
}
|
||||
|
||||
// log
|
||||
template <typename genType>
|
||||
GLM_FUNC_QUALIFIER genType log
|
||||
(
|
||||
genType const & x
|
||||
)
|
||||
{
|
||||
GLM_STATIC_ASSERT(detail::type<genType>::is_float, "'log' only accept floating-point input");
|
||||
|
||||
return ::std::log(x);
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
GLM_FUNC_QUALIFIER detail::tvec2<T> log
|
||||
(
|
||||
detail::tvec2<T> const & x
|
||||
)
|
||||
{
|
||||
return detail::tvec2<T>(
|
||||
log(x.x),
|
||||
log(x.y));
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
GLM_FUNC_QUALIFIER detail::tvec3<T> log
|
||||
(
|
||||
detail::tvec3<T> const & x
|
||||
)
|
||||
{
|
||||
return detail::tvec3<T>(
|
||||
log(x.x),
|
||||
log(x.y),
|
||||
log(x.z));
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
GLM_FUNC_QUALIFIER detail::tvec4<T> log
|
||||
(
|
||||
detail::tvec4<T> const & x
|
||||
)
|
||||
{
|
||||
return detail::tvec4<T>(
|
||||
log(x.x),
|
||||
log(x.y),
|
||||
log(x.z),
|
||||
log(x.w));
|
||||
}
|
||||
|
||||
//exp2, ln2 = 0.69314718055994530941723212145818f
|
||||
template <typename genType>
|
||||
GLM_FUNC_QUALIFIER genType exp2
|
||||
(
|
||||
genType const & x
|
||||
)
|
||||
{
|
||||
GLM_STATIC_ASSERT(detail::type<genType>::is_float, "'exp2' only accept floating-point input");
|
||||
|
||||
return ::std::exp(genType(0.69314718055994530941723212145818) * x);
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
GLM_FUNC_QUALIFIER detail::tvec2<T> exp2
|
||||
(
|
||||
detail::tvec2<T> const & x
|
||||
)
|
||||
{
|
||||
return detail::tvec2<T>(
|
||||
exp2(x.x),
|
||||
exp2(x.y));
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
GLM_FUNC_QUALIFIER detail::tvec3<T> exp2
|
||||
(
|
||||
detail::tvec3<T> const & x
|
||||
)
|
||||
{
|
||||
return detail::tvec3<T>(
|
||||
exp2(x.x),
|
||||
exp2(x.y),
|
||||
exp2(x.z));
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
GLM_FUNC_QUALIFIER detail::tvec4<T> exp2
|
||||
(
|
||||
detail::tvec4<T> const & x
|
||||
)
|
||||
{
|
||||
return detail::tvec4<T>(
|
||||
exp2(x.x),
|
||||
exp2(x.y),
|
||||
exp2(x.z),
|
||||
exp2(x.w));
|
||||
}
|
||||
|
||||
// log2, ln2 = 0.69314718055994530941723212145818f
|
||||
template <typename genType>
|
||||
GLM_FUNC_QUALIFIER genType log2
|
||||
(
|
||||
genType const & x
|
||||
)
|
||||
{
|
||||
GLM_STATIC_ASSERT(detail::type<genType>::is_float, "'log2' only accept floating-point input");
|
||||
|
||||
return ::std::log(x) / genType(0.69314718055994530941723212145818);
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
GLM_FUNC_QUALIFIER detail::tvec2<T> log2
|
||||
(
|
||||
detail::tvec2<T> const & x
|
||||
)
|
||||
{
|
||||
return detail::tvec2<T>(
|
||||
log2(x.x),
|
||||
log2(x.y));
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
GLM_FUNC_QUALIFIER detail::tvec3<T> log2
|
||||
(
|
||||
detail::tvec3<T> const & x
|
||||
)
|
||||
{
|
||||
return detail::tvec3<T>(
|
||||
log2(x.x),
|
||||
log2(x.y),
|
||||
log2(x.z));
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
GLM_FUNC_QUALIFIER detail::tvec4<T> log2
|
||||
(
|
||||
detail::tvec4<T> const & x
|
||||
)
|
||||
{
|
||||
return detail::tvec4<T>(
|
||||
log2(x.x),
|
||||
log2(x.y),
|
||||
log2(x.z),
|
||||
log2(x.w));
|
||||
}
|
||||
|
||||
// sqrt
|
||||
template <typename genType>
|
||||
GLM_FUNC_QUALIFIER genType sqrt
|
||||
(
|
||||
genType const & x
|
||||
)
|
||||
{
|
||||
GLM_STATIC_ASSERT(detail::type<genType>::is_float, "'sqrt' only accept floating-point input");
|
||||
|
||||
return genType(::std::sqrt(x));
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
GLM_FUNC_QUALIFIER detail::tvec2<T> sqrt
|
||||
(
|
||||
detail::tvec2<T> const & x
|
||||
)
|
||||
{
|
||||
return detail::tvec2<T>(
|
||||
sqrt(x.x),
|
||||
sqrt(x.y));
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
GLM_FUNC_QUALIFIER detail::tvec3<T> sqrt
|
||||
(
|
||||
detail::tvec3<T> const & x
|
||||
)
|
||||
{
|
||||
return detail::tvec3<T>(
|
||||
sqrt(x.x),
|
||||
sqrt(x.y),
|
||||
sqrt(x.z));
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
GLM_FUNC_QUALIFIER detail::tvec4<T> sqrt
|
||||
(
|
||||
detail::tvec4<T> const & x
|
||||
)
|
||||
{
|
||||
return detail::tvec4<T>(
|
||||
sqrt(x.x),
|
||||
sqrt(x.y),
|
||||
sqrt(x.z),
|
||||
sqrt(x.w));
|
||||
}
|
||||
|
||||
template <typename genType>
|
||||
GLM_FUNC_QUALIFIER genType inversesqrt
|
||||
(
|
||||
genType const & x
|
||||
)
|
||||
{
|
||||
GLM_STATIC_ASSERT(detail::type<genType>::is_float, "'inversesqrt' only accept floating-point input");
|
||||
|
||||
return genType(1) / ::std::sqrt(x);
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
GLM_FUNC_QUALIFIER detail::tvec2<T> inversesqrt
|
||||
(
|
||||
detail::tvec2<T> const & x
|
||||
)
|
||||
{
|
||||
return detail::tvec2<T>(
|
||||
inversesqrt(x.x),
|
||||
inversesqrt(x.y));
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
GLM_FUNC_QUALIFIER detail::tvec3<T> inversesqrt
|
||||
(
|
||||
detail::tvec3<T> const & x
|
||||
)
|
||||
{
|
||||
return detail::tvec3<T>(
|
||||
inversesqrt(x.x),
|
||||
inversesqrt(x.y),
|
||||
inversesqrt(x.z));
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
GLM_FUNC_QUALIFIER detail::tvec4<T> inversesqrt
|
||||
(
|
||||
detail::tvec4<T> const & x
|
||||
)
|
||||
{
|
||||
return detail::tvec4<T>(
|
||||
inversesqrt(x.x),
|
||||
inversesqrt(x.y),
|
||||
inversesqrt(x.z),
|
||||
inversesqrt(x.w));
|
||||
}
|
||||
|
||||
}//namespace exponential
|
||||
}//namespace function
|
||||
}//namespace core
|
||||
}//namespace glm
|
113
ExternalLibs/glm/core/func_geometric.hpp
Normal file
113
ExternalLibs/glm/core/func_geometric.hpp
Normal file
|
@ -0,0 +1,113 @@
|
|||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// OpenGL Mathematics Copyright (c) 2005 - 2011 G-Truc Creation (www.g-truc.net)
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// Created : 2008-08-03
|
||||
// Updated : 2010-02-04
|
||||
// Licence : This source is under MIT License
|
||||
// File : glm/core/func_geometric.hpp
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#ifndef glm_core_func_geometric
|
||||
#define glm_core_func_geometric
|
||||
|
||||
namespace glm
|
||||
{
|
||||
namespace test{
|
||||
void main_core_func_geometric();
|
||||
}//namespace test
|
||||
|
||||
namespace core{
|
||||
namespace function{
|
||||
//! Define all geometric functions from Section 8.4 of GLSL 1.30.8 specification. Included in glm namespace.
|
||||
namespace geometric{
|
||||
|
||||
/// \addtogroup core_funcs
|
||||
///@{
|
||||
|
||||
//! Returns the length of x, i.e., sqrt(x * x).
|
||||
//!
|
||||
//! \li <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/length.xml">GLSL length man page</a>
|
||||
//! \li GLSL 1.30.08 specification, section 8.4
|
||||
template <typename genType>
|
||||
typename genType::value_type length(
|
||||
genType const & x);
|
||||
|
||||
//! Returns the distance betwwen p0 and p1, i.e., length(p0 - p1).
|
||||
//!
|
||||
//! \li <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/distance.xml">GLSL distance man page</a>
|
||||
//! \li GLSL 1.30.08 specification, section 8.4
|
||||
template <typename genType>
|
||||
typename genType::value_type distance(
|
||||
genType const & p0,
|
||||
genType const & p1);
|
||||
|
||||
//! Returns the dot product of x and y, i.e., result = x * y.
|
||||
//!
|
||||
//! \li <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/dot.xml">GLSL dot man page</a>
|
||||
//! \li GLSL 1.30.08 specification, section 8.4
|
||||
template <typename genType>
|
||||
typename genType::value_type dot(
|
||||
genType const & x,
|
||||
genType const & y);
|
||||
|
||||
//! Returns the cross product of x and y.
|
||||
//!
|
||||
//! \li <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/cross.xml">GLSL cross man page</a>
|
||||
//! \li GLSL 1.30.08 specification, section 8.4
|
||||
template <typename T>
|
||||
detail::tvec3<T> cross(
|
||||
detail::tvec3<T> const & x,
|
||||
detail::tvec3<T> const & y);
|
||||
|
||||
//! Returns a vector in the same direction as x but with length of 1.
|
||||
//!
|
||||
//! \li <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/normalize.xml">GLSL normalize man page</a>
|
||||
//! \li GLSL 1.30.08 specification, section 8.4
|
||||
template <typename genType>
|
||||
genType normalize(
|
||||
genType const & x);
|
||||
|
||||
//! If dot(Nref, I) < 0.0, return N, otherwise, return -N.
|
||||
//!
|
||||
//! \li <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/faceforward.xml">GLSL faceforward man page</a>
|
||||
//! \li GLSL 1.30.08 specification, section 8.4
|
||||
template <typename genType>
|
||||
genType faceforward(
|
||||
genType const & N,
|
||||
genType const & I,
|
||||
genType const & Nref);
|
||||
|
||||
//! For the incident vector I and surface orientation N,
|
||||
//! returns the reflection direction : result = I - 2.0 * dot(N, I) * N.
|
||||
//!
|
||||
//! \li <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/reflect.xml">GLSL reflect man page</a>
|
||||
//! \li GLSL 1.30.08 specification, section 8.4
|
||||
template <typename genType>
|
||||
genType reflect(
|
||||
genType const & I,
|
||||
genType const & N);
|
||||
|
||||
//! For the incident vector I and surface normal N,
|
||||
//! and the ratio of indices of refraction eta,
|
||||
//! return the refraction vector.
|
||||
//!
|
||||
//! \li <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/refract.xml">GLSL refract man page</a>
|
||||
//! \li GLSL 1.30.08 specification, section 8.4
|
||||
template <typename genType>
|
||||
genType refract(
|
||||
genType const & I,
|
||||
genType const & N,
|
||||
typename genType::value_type const & eta);
|
||||
|
||||
///@}
|
||||
|
||||
}//namespace geometric
|
||||
}//namespace function
|
||||
}//namespace core
|
||||
|
||||
using namespace core::function::geometric;
|
||||
}//namespace glm
|
||||
|
||||
#include "func_geometric.inl"
|
||||
|
||||
#endif//glm_core_func_geometric
|
290
ExternalLibs/glm/core/func_geometric.inl
Normal file
290
ExternalLibs/glm/core/func_geometric.inl
Normal file
|
@ -0,0 +1,290 @@
|
|||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// OpenGL Mathematics Copyright (c) 2005 - 2011 G-Truc Creation (www.g-truc.net)
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// Created : 2008-08-03
|
||||
// Updated : 2010-02-04
|
||||
// Licence : This source is under MIT License
|
||||
// File : glm/core/func_geometric.inl
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
namespace glm
|
||||
{
|
||||
namespace core{
|
||||
namespace function{
|
||||
namespace geometric{
|
||||
|
||||
// length
|
||||
template <typename genType>
|
||||
GLM_FUNC_QUALIFIER genType length
|
||||
(
|
||||
genType const & x
|
||||
)
|
||||
{
|
||||
GLM_STATIC_ASSERT(detail::type<genType>::is_float, "'length' only accept floating-point inputs");
|
||||
|
||||
genType sqr = x * x;
|
||||
return sqrt(sqr);
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
GLM_FUNC_QUALIFIER typename detail::tvec2<T>::value_type length
|
||||
(
|
||||
detail::tvec2<T> const & v
|
||||
)
|
||||
{
|
||||
GLM_STATIC_ASSERT(detail::type<T>::is_float, "'length' only accept floating-point inputs");
|
||||
|
||||
typename detail::tvec2<T>::value_type sqr = v.x * v.x + v.y * v.y;
|
||||
return sqrt(sqr);
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
GLM_FUNC_QUALIFIER typename detail::tvec3<T>::value_type length
|
||||
(
|
||||
detail::tvec3<T> const & v
|
||||
)
|
||||
{
|
||||
GLM_STATIC_ASSERT(detail::type<T>::is_float, "'length' only accept floating-point inputs");
|
||||
|
||||
typename detail::tvec3<T>::value_type sqr = v.x * v.x + v.y * v.y + v.z * v.z;
|
||||
return sqrt(sqr);
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
GLM_FUNC_QUALIFIER typename detail::tvec4<T>::value_type length
|
||||
(
|
||||
detail::tvec4<T> const & v
|
||||
)
|
||||
{
|
||||
GLM_STATIC_ASSERT(detail::type<T>::is_float, "'length' only accept floating-point inputs");
|
||||
|
||||
typename detail::tvec4<T>::value_type sqr = v.x * v.x + v.y * v.y + v.z * v.z + v.w * v.w;
|
||||
return sqrt(sqr);
|
||||
}
|
||||
|
||||
// distance
|
||||
template <typename genType>
|
||||
GLM_FUNC_QUALIFIER genType distance
|
||||
(
|
||||
genType const & p0,
|
||||
genType const & p1
|
||||
)
|
||||
{
|
||||
GLM_STATIC_ASSERT(detail::type<genType>::is_float, "'distance' only accept floating-point inputs");
|
||||
|
||||
return length(p1 - p0);
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
GLM_FUNC_QUALIFIER typename detail::tvec2<T>::value_type distance
|
||||
(
|
||||
detail::tvec2<T> const & p0,
|
||||
detail::tvec2<T> const & p1
|
||||
)
|
||||
{
|
||||
GLM_STATIC_ASSERT(detail::type<T>::is_float, "'distance' only accept floating-point inputs");
|
||||
|
||||
return length(p1 - p0);
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
GLM_FUNC_QUALIFIER typename detail::tvec3<T>::value_type distance
|
||||
(
|
||||
detail::tvec3<T> const & p0,
|
||||
detail::tvec3<T> const & p1
|
||||
)
|
||||
{
|
||||
GLM_STATIC_ASSERT(detail::type<T>::is_float, "'distance' only accept floating-point inputs");
|
||||
|
||||
return length(p1 - p0);
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
GLM_FUNC_QUALIFIER typename detail::tvec4<T>::value_type distance
|
||||
(
|
||||
detail::tvec4<T> const & p0,
|
||||
detail::tvec4<T> const & p1
|
||||
)
|
||||
{
|
||||
GLM_STATIC_ASSERT(detail::type<T>::is_float, "'distance' only accept floating-point inputs");
|
||||
|
||||
return length(p1 - p0);
|
||||
}
|
||||
|
||||
// dot
|
||||
template <typename genType>
|
||||
GLM_FUNC_QUALIFIER genType dot
|
||||
(
|
||||
genType const & x,
|
||||
genType const & y
|
||||
)
|
||||
{
|
||||
GLM_STATIC_ASSERT(detail::type<genType>::is_float, "'dot' only accept floating-point inputs");
|
||||
|
||||
return x * y;
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
GLM_FUNC_QUALIFIER typename detail::tvec2<T>::value_type dot
|
||||
(
|
||||
detail::tvec2<T> const & x,
|
||||
detail::tvec2<T> const & y
|
||||
)
|
||||
{
|
||||
GLM_STATIC_ASSERT(detail::type<T>::is_float, "'dot' only accept floating-point inputs");
|
||||
|
||||
return x.x * y.x + x.y * y.y;
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
GLM_FUNC_QUALIFIER T dot
|
||||
(
|
||||
detail::tvec3<T> const & x,
|
||||
detail::tvec3<T> const & y
|
||||
)
|
||||
{
|
||||
GLM_STATIC_ASSERT(detail::type<T>::is_float, "'dot' only accept floating-point inputs");
|
||||
|
||||
return x.x * y.x + x.y * y.y + x.z * y.z;
|
||||
}
|
||||
/* // SSE3
|
||||
GLM_FUNC_QUALIFIER float dot(const tvec4<float>& x, const tvec4<float>& y)
|
||||
{
|
||||
float Result;
|
||||
__asm
|
||||
{
|
||||
mov esi, x
|
||||
mov edi, y
|
||||
movaps xmm0, [esi]
|
||||
mulps xmm0, [edi]
|
||||
haddps( _xmm0, _xmm0 )
|
||||
haddps( _xmm0, _xmm0 )
|
||||
movss Result, xmm0
|
||||
}
|
||||
return Result;
|
||||
}
|
||||
*/
|
||||
template <typename T>
|
||||
GLM_FUNC_QUALIFIER T dot
|
||||
(
|
||||
detail::tvec4<T> const & x,
|
||||
detail::tvec4<T> const & y
|
||||
)
|
||||
{
|
||||
GLM_STATIC_ASSERT(detail::type<T>::is_float, "'dot' only accept floating-point inputs");
|
||||
|
||||
return x.x * y.x + x.y * y.y + x.z * y.z + x.w * y.w;
|
||||
}
|
||||
|
||||
// cross
|
||||
template <typename T>
|
||||
GLM_FUNC_QUALIFIER detail::tvec3<T> cross
|
||||
(
|
||||
detail::tvec3<T> const & x,
|
||||
detail::tvec3<T> const & y
|
||||
)
|
||||
{
|
||||
GLM_STATIC_ASSERT(detail::type<T>::is_float, "'cross' only accept floating-point inputs");
|
||||
|
||||
return detail::tvec3<T>(
|
||||
x.y * y.z - y.y * x.z,
|
||||
x.z * y.x - y.z * x.x,
|
||||
x.x * y.y - y.x * x.y);
|
||||
}
|
||||
|
||||
// normalize
|
||||
template <typename genType>
|
||||
GLM_FUNC_QUALIFIER genType normalize
|
||||
(
|
||||
genType const & x
|
||||
)
|
||||
{
|
||||
GLM_STATIC_ASSERT(detail::type<genType>::is_float, "'normalize' only accept floating-point inputs");
|
||||
|
||||
return x < genType(0) ? genType(-1) : genType(1);
|
||||
}
|
||||
|
||||
// According to issue 10 GLSL 1.10 specification, if length(x) == 0 then result is undefine and generate an error
|
||||
template <typename T>
|
||||
GLM_FUNC_QUALIFIER detail::tvec2<T> normalize
|
||||
(
|
||||
detail::tvec2<T> const & x
|
||||
)
|
||||
{
|
||||
GLM_STATIC_ASSERT(detail::type<T>::is_float, "'normalize' only accept floating-point inputs");
|
||||
|
||||
typename detail::tvec2<T>::value_type sqr = x.x * x.x + x.y * x.y;
|
||||
return x * inversesqrt(sqr);
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
GLM_FUNC_QUALIFIER detail::tvec3<T> normalize
|
||||
(
|
||||
detail::tvec3<T> const & x
|
||||
)
|
||||
{
|
||||
GLM_STATIC_ASSERT(detail::type<T>::is_float, "'normalize' only accept floating-point inputs");
|
||||
|
||||
typename detail::tvec3<T>::value_type sqr = x.x * x.x + x.y * x.y + x.z * x.z;
|
||||
return x * inversesqrt(sqr);
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
GLM_FUNC_QUALIFIER detail::tvec4<T> normalize
|
||||
(
|
||||
detail::tvec4<T> const & x
|
||||
)
|
||||
{
|
||||
GLM_STATIC_ASSERT(detail::type<T>::is_float, "'normalize' only accept floating-point inputs");
|
||||
|
||||
typename detail::tvec4<T>::value_type sqr = x.x * x.x + x.y * x.y + x.z * x.z + x.w * x.w;
|
||||
return x * inversesqrt(sqr);
|
||||
}
|
||||
|
||||
// faceforward
|
||||
template <typename genType>
|
||||
GLM_FUNC_QUALIFIER genType faceforward
|
||||
(
|
||||
genType const & N,
|
||||
genType const & I,
|
||||
genType const & Nref
|
||||
)
|
||||
{
|
||||
return dot(Nref, I) < 0 ? N : -N;
|
||||
}
|
||||
|
||||
// reflect
|
||||
template <typename genType>
|
||||
genType reflect
|
||||
(
|
||||
genType const & I,
|
||||
genType const & N
|
||||
)
|
||||
{
|
||||
return I - N * dot(N, I) * float(2);
|
||||
}
|
||||
|
||||
// refract
|
||||
template <typename genType>
|
||||
GLM_FUNC_QUALIFIER genType refract
|
||||
(
|
||||
genType const & I,
|
||||
genType const & N,
|
||||
typename genType::value_type const & eta
|
||||
)
|
||||
{
|
||||
//It could be a vector
|
||||
//GLM_STATIC_ASSERT(detail::type<genType>::is_float);
|
||||
|
||||
typename genType::value_type dotValue = dot(N, I);
|
||||
typename genType::value_type k = typename genType::value_type(1) - eta * eta * (typename genType::value_type(1) - dotValue * dotValue);
|
||||
if(k < typename genType::value_type(0))
|
||||
return genType(0);
|
||||
else
|
||||
return eta * I - (eta * dotValue + sqrt(k)) * N;
|
||||
}
|
||||
|
||||
}//namespace geometric
|
||||
}//namespace function
|
||||
}//namespace core
|
||||
}//namespace glm
|
162
ExternalLibs/glm/core/func_integer.hpp
Normal file
162
ExternalLibs/glm/core/func_integer.hpp
Normal file
|
@ -0,0 +1,162 @@
|
|||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// OpenGL Mathematics Copyright (c) 2005 - 2011 G-Truc Creation (www.g-truc.net)
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// Created : 2010-03-17
|
||||
// Updated : 2010-03-31
|
||||
// Licence : This source is under MIT License
|
||||
// File : glm/core/func_integer.hpp
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#ifndef glm_core_func_integer
|
||||
#define glm_core_func_integer
|
||||
|
||||
namespace glm
|
||||
{
|
||||
namespace test{
|
||||
void main_core_func_integer();
|
||||
}//namespace test
|
||||
|
||||
namespace core{
|
||||
namespace function{
|
||||
//! Define integer functions from Section 8.8 of GLSL 4.00.8 specification.
|
||||
namespace integer{
|
||||
|
||||
/// \addtogroup core_funcs
|
||||
///@{
|
||||
|
||||
//! Adds 32-bit unsigned integer x and y, returning the sum
|
||||
//! modulo pow(2, 32). The value carry is set to 0 if the sum was
|
||||
//! less than pow(2, 32), or to 1 otherwise.
|
||||
//!
|
||||
//! \li <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/uaddCarry.xml">GLSL uaddCarry man page</a>
|
||||
//! \li GLSL 4.00.08 specification, section 8.8
|
||||
template <typename genUType>
|
||||
genUType uaddCarry(
|
||||
genUType const & x,
|
||||
genUType const & y,
|
||||
genUType & carry);
|
||||
|
||||
//! Subtracts the 32-bit unsigned integer y from x, returning
|
||||
//! the difference if non-negative, or pow(2, 32) plus the difference
|
||||
//! otherwise. The value borrow is set to 0 if x >= y, or to 1 otherwise.
|
||||
//!
|
||||
//! \li <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/usubBorrow.xml">GLSL usubBorrow man page</a>
|
||||
//! \li GLSL 4.00.08 specification, section 8.8
|
||||
template <typename genUType>
|
||||
genUType usubBorrow(
|
||||
genUType const & x,
|
||||
genUType const & y,
|
||||
genUType & borrow);
|
||||
|
||||
//! Multiplies 32-bit integers x and y, producing a 64-bit
|
||||
//! result. The 32 least-significant bits are returned in lsb.
|
||||
//! The 32 most-significant bits are returned in msb.
|
||||
//!
|
||||
//! \li <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/umulExtended.xml">GLSL umulExtended man page</a>
|
||||
//! \li GLSL 4.00.08 specification, section 8.8
|
||||
template <typename genUType>
|
||||
void umulExtended(
|
||||
genUType const & x,
|
||||
genUType const & y,
|
||||
genUType & msb,
|
||||
genUType & lsb);
|
||||
|
||||
//! Multiplies 32-bit integers x and y, producing a 64-bit
|
||||
//! result. The 32 least-significant bits are returned in lsb.
|
||||
//! The 32 most-significant bits are returned in msb.
|
||||
//!
|
||||
//! \li <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/imulExtended.xml">GLSL imulExtended man page</a>
|
||||
//! \li GLSL 4.00.08 specification, section 8.8
|
||||
template <typename genIType>
|
||||
void imulExtended(
|
||||
genIType const & x,
|
||||
genIType const & y,
|
||||
genIType & msb,
|
||||
genIType & lsb);
|
||||
|
||||
//! Extracts bits [offset, offset + bits - 1] from value,
|
||||
//! returning them in the least significant bits of the result.
|
||||
//! For unsigned data types, the most significant bits of the
|
||||
//! result will be set to zero. For signed data types, the
|
||||
//! most significant bits will be set to the value of bit offset + base – 1.
|
||||
//!
|
||||
//! If bits is zero, the result will be zero. The result will be
|
||||
//! undefined if offset or bits is negative, or if the sum of
|
||||
//! offset and bits is greater than the number of bits used
|
||||
//! to store the operand.
|
||||
//!
|
||||
//! \li <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/bitfieldExtract.xml">GLSL bitfieldExtract man page</a>
|
||||
//! \li GLSL 4.00.08 specification, section 8.8
|
||||
template <typename genIUType>
|
||||
genIUType bitfieldExtract(
|
||||
genIUType const & Value,
|
||||
int const & Offset,
|
||||
int const & Bits);
|
||||
|
||||
//! Returns the insertion the bits least-significant bits of insert into base.
|
||||
//!
|
||||
//! The result will have bits [offset, offset + bits - 1] taken
|
||||
//! from bits [0, bits – 1] of insert, and all other bits taken
|
||||
//! directly from the corresponding bits of base. If bits is
|
||||
//! zero, the result will simply be base. The result will be
|
||||
//! undefined if offset or bits is negative, or if the sum of
|
||||
//! offset and bits is greater than the number of bits used to
|
||||
//! store the operand.
|
||||
//!
|
||||
//! \li <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/bitfieldInsert.xml">GLSL bitfieldInsert man page</a>
|
||||
//! \li GLSL 4.00.08 specification, section 8.8
|
||||
template <typename genIUType>
|
||||
genIUType bitfieldInsert(
|
||||
genIUType const & Base,
|
||||
genIUType const & Insert,
|
||||
int const & Offset,
|
||||
int const & Bits);
|
||||
|
||||
//! Returns the reversal of the bits of value.
|
||||
//! The bit numbered n of the result will be taken from bit (bits - 1) - n of value,
|
||||
//! where bits is the total number of bits used to represent value.
|
||||
//!
|
||||
//! \li <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/bitfieldReverse.xml">GLSL bitfieldReverse man page</a>
|
||||
//! \li GLSL 4.00.08 specification, section 8.8
|
||||
template <typename genIUType>
|
||||
genIUType bitfieldReverse(genIUType const & value);
|
||||
|
||||
//! Returns the number of bits set to 1 in the binary representation of value.
|
||||
//!
|
||||
//! \li <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/bitCount.xml">GLSL bitCount man page</a>
|
||||
//! \li GLSL 4.00.08 specification, section 8.8
|
||||
template <typename T, template <typename> class C>
|
||||
typename C<T>::signed_type bitCount(C<T> const & Value);
|
||||
|
||||
//! Returns the bit number of the least significant bit set to
|
||||
//! 1 in the binary representation of value.
|
||||
//! If value is zero, -1 will be returned.
|
||||
//!
|
||||
//! \li <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/findLSB.xml">GLSL findLSB man page</a>
|
||||
//! \li GLSL 4.00.08 specification, section 8.8
|
||||
template <typename T, template <typename> class C>
|
||||
typename C<T>::signed_type findLSB(C<T> const & Value);
|
||||
|
||||
//! Returns the bit number of the most significant bit in the binary representation of value.
|
||||
//! For positive integers, the result will be the bit number of the most significant bit set to 1.
|
||||
//! For negative integers, the result will be the bit number of the most significant
|
||||
//! bit set to 0. For a value of zero or negative one, -1 will be returned.
|
||||
//!
|
||||
//! \li <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/findMSB.xml">GLSL findMSB man page</a>
|
||||
//! \li GLSL 4.00.08 specification, section 8.8
|
||||
template <typename T, template <typename> class C>
|
||||
typename C<T>::signed_type findMSB(C<T> const & Value);
|
||||
|
||||
///@}
|
||||
|
||||
}//namespace integer
|
||||
}//namespace function
|
||||
}//namespace core
|
||||
|
||||
using namespace core::function::integer;
|
||||
}//namespace glm
|
||||
|
||||
#include "func_integer.inl"
|
||||
|
||||
#endif//glm_core_func_integer
|
||||
|
597
ExternalLibs/glm/core/func_integer.inl
Normal file
597
ExternalLibs/glm/core/func_integer.inl
Normal file
|
@ -0,0 +1,597 @@
|
|||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// OpenGL Mathematics Copyright (c) 2005 - 2011 G-Truc Creation (www.g-truc.net)
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// Created : 2010-03-17
|
||||
// Updated : 2010-03-31
|
||||
// Licence : This source is under MIT License
|
||||
// File : glm/core/func_integer.inl
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
namespace glm
|
||||
{
|
||||
namespace detail
|
||||
{
|
||||
|
||||
}//namespace detail
|
||||
|
||||
namespace core{
|
||||
namespace function{
|
||||
namespace integer
|
||||
{
|
||||
// uaddCarry
|
||||
template <typename genUType>
|
||||
GLM_FUNC_QUALIFIER genUType uaddCarry
|
||||
(
|
||||
genUType const & x,
|
||||
genUType const & y,
|
||||
genUType & Carry
|
||||
)
|
||||
{
|
||||
detail::highp_uint_t Value64 = detail::highp_uint_t(x) + detail::highp_uint_t(y);
|
||||
genUType Result = genUType(Value64 % (detail::highp_uint_t(1) << detail::highp_uint_t(32)));
|
||||
Carry = (Value64 % (detail::highp_uint_t(1) << detail::highp_uint_t(32))) > 1 ? 1 : 0;
|
||||
return Result;
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
GLM_FUNC_QUALIFIER detail::tvec2<T> uaddCarry
|
||||
(
|
||||
detail::tvec2<T> const & x,
|
||||
detail::tvec2<T> const & y,
|
||||
detail::tvec2<T> & Carry
|
||||
)
|
||||
{
|
||||
return detail::tvec2<T>(
|
||||
uaddCarry(x[0], y[0], Carry[0]),
|
||||
uaddCarry(x[1], y[1], Carry[1]));
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
GLM_FUNC_QUALIFIER detail::tvec3<T> uaddCarry
|
||||
(
|
||||
detail::tvec3<T> const & x,
|
||||
detail::tvec3<T> const & y,
|
||||
detail::tvec3<T> & Carry
|
||||
)
|
||||
{
|
||||
return detail::tvec3<T>(
|
||||
uaddCarry(x[0], y[0], Carry[0]),
|
||||
uaddCarry(x[1], y[1], Carry[1]),
|
||||
uaddCarry(x[2], y[2], Carry[2]));
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
GLM_FUNC_QUALIFIER detail::tvec4<T> uaddCarry
|
||||
(
|
||||
detail::tvec4<T> const & x,
|
||||
detail::tvec4<T> const & y,
|
||||
detail::tvec4<T> & Carry
|
||||
)
|
||||
{
|
||||
return detail::tvec4<T>(
|
||||
uaddCarry(x[0], y[0], Carry[0]),
|
||||
uaddCarry(x[1], y[1], Carry[1]),
|
||||
uaddCarry(x[2], y[2], Carry[2]),
|
||||
uaddCarry(x[3], y[3], Carry[3]));
|
||||
}
|
||||
|
||||
// usubBorrow
|
||||
template <typename genUType>
|
||||
GLM_FUNC_QUALIFIER genUType usubBorrow
|
||||
(
|
||||
genUType const & x,
|
||||
genUType const & y,
|
||||
genUType & Borrow
|
||||
)
|
||||
{
|
||||
Borrow = x >= y ? 0 : 1;
|
||||
if(x > y)
|
||||
return genUType(detail::highp_int_t(x) - detail::highp_int_t(y));
|
||||
else
|
||||
return genUType(detail::highp_int_t(1) << detail::highp_int_t(32) + detail::highp_int_t(x) - detail::highp_int_t(y));
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
GLM_FUNC_QUALIFIER detail::tvec2<T> usubBorrow
|
||||
(
|
||||
detail::tvec2<T> const & x,
|
||||
detail::tvec2<T> const & y,
|
||||
detail::tvec2<T> & Borrow
|
||||
)
|
||||
{
|
||||
return detail::tvec2<T>(
|
||||
usubBorrow(x[0], y[0], Borrow[0]),
|
||||
usubBorrow(x[1], y[1], Borrow[1]));
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
GLM_FUNC_QUALIFIER detail::tvec3<T> usubBorrow
|
||||
(
|
||||
detail::tvec3<T> const & x,
|
||||
detail::tvec3<T> const & y,
|
||||
detail::tvec3<T> & Borrow
|
||||
)
|
||||
{
|
||||
return detail::tvec3<T>(
|
||||
usubBorrow(x[0], y[0], Borrow[0]),
|
||||
usubBorrow(x[1], y[1], Borrow[1]),
|
||||
usubBorrow(x[2], y[2], Borrow[2]));
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
GLM_FUNC_QUALIFIER detail::tvec4<T> usubBorrow
|
||||
(
|
||||
detail::tvec4<T> const & x,
|
||||
detail::tvec4<T> const & y,
|
||||
detail::tvec4<T> & Borrow
|
||||
)
|
||||
{
|
||||
return detail::tvec4<T>(
|
||||
usubBorrow(x[0], y[0], Borrow[0]),
|
||||
usubBorrow(x[1], y[1], Borrow[1]),
|
||||
usubBorrow(x[2], y[2], Borrow[2]),
|
||||
usubBorrow(x[3], y[3], Borrow[3]));
|
||||
}
|
||||
|
||||
// umulExtended
|
||||
template <typename genUType>
|
||||
GLM_FUNC_QUALIFIER void umulExtended
|
||||
(
|
||||
genUType const & x,
|
||||
genUType const & y,
|
||||
genUType & msb,
|
||||
genUType & lsb
|
||||
)
|
||||
{
|
||||
detail::highp_uint_t ValueX64 = x;
|
||||
detail::highp_uint_t ValueY64 = y;
|
||||
detail::highp_uint_t Value64 = ValueX64 * ValueY64;
|
||||
msb = *(genUType*)&genUType(Value64 & ((detail::highp_uint_t(1) << detail::highp_uint_t(32)) - detail::highp_uint_t(1)));
|
||||
lsb = *(genUType*)&genUType(Value64 >> detail::highp_uint_t(32));
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
GLM_FUNC_QUALIFIER detail::tvec2<T> umulExtended
|
||||
(
|
||||
detail::tvec2<T> const & x,
|
||||
detail::tvec2<T> const & y,
|
||||
detail::tvec2<T> & msb,
|
||||
detail::tvec2<T> & lsb
|
||||
)
|
||||
{
|
||||
return detail::tvec2<T>(
|
||||
umulExtended(x[0], y[0], msb, lsb),
|
||||
umulExtended(x[1], y[1], msb, lsb));
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
GLM_FUNC_QUALIFIER detail::tvec3<T> umulExtended
|
||||
(
|
||||
detail::tvec3<T> const & x,
|
||||
detail::tvec3<T> const & y,
|
||||
detail::tvec3<T> & msb,
|
||||
detail::tvec3<T> & lsb
|
||||
)
|
||||
{
|
||||
return detail::tvec3<T>(
|
||||
umulExtended(x[0], y[0], msb, lsb),
|
||||
umulExtended(x[1], y[1], msb, lsb),
|
||||
umulExtended(x[2], y[2], msb, lsb));
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
GLM_FUNC_QUALIFIER detail::tvec4<T> umulExtended
|
||||
(
|
||||
detail::tvec4<T> const & x,
|
||||
detail::tvec4<T> const & y,
|
||||
detail::tvec4<T> & msb,
|
||||
detail::tvec4<T> & lsb
|
||||
)
|
||||
{
|
||||
return detail::tvec4<T>(
|
||||
umulExtended(x[0], y[0], msb, lsb),
|
||||
umulExtended(x[1], y[1], msb, lsb),
|
||||
umulExtended(x[2], y[2], msb, lsb),
|
||||
umulExtended(x[3], y[3], msb, lsb));
|
||||
}
|
||||
|
||||
// imulExtended
|
||||
template <typename genIType>
|
||||
GLM_FUNC_QUALIFIER void imulExtended
|
||||
(
|
||||
genIType const & x,
|
||||
genIType const & y,
|
||||
genIType & msb,
|
||||
genIType & lsb
|
||||
)
|
||||
{
|
||||
detail::highp_int_t ValueX64 = x;
|
||||
detail::highp_int_t ValueY64 = y;
|
||||
detail::highp_int_t Value64 = ValueX64 * ValueY64;
|
||||
msb = *(genIType*)&genIType(Value64 & ((detail::highp_uint_t(1) << detail::highp_uint_t(32)) - detail::highp_uint_t(1)));
|
||||
lsb = *(genIType*)&genIType(Value64 >> detail::highp_uint_t(32));
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
GLM_FUNC_QUALIFIER detail::tvec2<T> imulExtended
|
||||
(
|
||||
detail::tvec2<T> const & x,
|
||||
detail::tvec2<T> const & y,
|
||||
detail::tvec2<T> & msb,
|
||||
detail::tvec2<T> & lsb
|
||||
)
|
||||
{
|
||||
return detail::tvec2<T>(
|
||||
imulExtended(x[0], y[0], msb, lsb),
|
||||
imulExtended(x[1], y[1], msb, lsb));
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
GLM_FUNC_QUALIFIER detail::tvec3<T> imulExtended
|
||||
(
|
||||
detail::tvec3<T> const & x,
|
||||
detail::tvec3<T> const & y,
|
||||
detail::tvec3<T> & msb,
|
||||
detail::tvec3<T> & lsb
|
||||
)
|
||||
{
|
||||
return detail::tvec3<T>(
|
||||
imulExtended(x[0], y[0], msb, lsb),
|
||||
imulExtended(x[1], y[1], msb, lsb),
|
||||
imulExtended(x[2], y[2], msb, lsb));
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
GLM_FUNC_QUALIFIER detail::tvec4<T> imulExtended
|
||||
(
|
||||
detail::tvec4<T> const & x,
|
||||
detail::tvec4<T> const & y,
|
||||
detail::tvec4<T> & msb,
|
||||
detail::tvec4<T> & lsb
|
||||
)
|
||||
{
|
||||
return detail::tvec4<T>(
|
||||
imulExtended(x[0], y[0], msb, lsb),
|
||||
imulExtended(x[1], y[1], msb, lsb),
|
||||
imulExtended(x[2], y[2], msb, lsb),
|
||||
imulExtended(x[3], y[3], msb, lsb));
|
||||
}
|
||||
|
||||
// bitfieldExtract
|
||||
template <typename genIUType>
|
||||
GLM_FUNC_QUALIFIER genIUType bitfieldExtract
|
||||
(
|
||||
genIUType const & Value,
|
||||
int const & Offset,
|
||||
int const & Bits
|
||||
)
|
||||
{
|
||||
int GenSize = int(sizeof(genIUType)) << int(3);
|
||||
|
||||
assert(Offset + Bits <= GenSize);
|
||||
|
||||
genIUType ShiftLeft = Bits ? Value << (GenSize - (Bits + Offset)) : genIUType(0);
|
||||
genIUType ShiftBack = ShiftLeft >> genIUType(GenSize - Bits);
|
||||
|
||||
return ShiftBack;
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
GLM_FUNC_QUALIFIER detail::tvec2<T> bitfieldExtract
|
||||
(
|
||||
detail::tvec2<T> const & Value,
|
||||
int const & Offset,
|
||||
int const & Bits
|
||||
)
|
||||
{
|
||||
return detail::tvec2<T>(
|
||||
bitfieldExtract(Value[0]),
|
||||
bitfieldExtract(Value[1]));
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
GLM_FUNC_QUALIFIER detail::tvec3<T> bitfieldExtract
|
||||
(
|
||||
detail::tvec3<T> const & Value,
|
||||
int const & Offset,
|
||||
int const & Bits
|
||||
)
|
||||
{
|
||||
return detail::tvec3<T>(
|
||||
bitfieldExtract(Value[0]),
|
||||
bitfieldExtract(Value[1]),
|
||||
bitfieldExtract(Value[2]));
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
GLM_FUNC_QUALIFIER detail::tvec4<T> bitfieldExtract
|
||||
(
|
||||
detail::tvec4<T> const & Value,
|
||||
int const & Offset,
|
||||
int const & Bits
|
||||
)
|
||||
{
|
||||
return detail::tvec4<T>(
|
||||
bitfieldExtract(Value[0]),
|
||||
bitfieldExtract(Value[1]),
|
||||
bitfieldExtract(Value[2]),
|
||||
bitfieldExtract(Value[3]));
|
||||
}
|
||||
|
||||
// bitfieldInsert
|
||||
template <typename genIUType>
|
||||
GLM_FUNC_QUALIFIER genIUType bitfieldInsert
|
||||
(
|
||||
genIUType const & Base,
|
||||
genIUType const & Insert,
|
||||
int const & Offset,
|
||||
int const & Bits
|
||||
)
|
||||
{
|
||||
GLM_STATIC_ASSERT(std::numeric_limits<genIUType>::is_integer, "'bitfieldInsert' only accept integer values");
|
||||
assert(Offset + Bits <= sizeof(genIUType));
|
||||
|
||||
if(Bits == 0)
|
||||
return Base;
|
||||
|
||||
genIUType Mask = 0;
|
||||
for(int Bit = Offset; Bit < Offset + Bits; ++Bit)
|
||||
Mask |= (1 << Bit);
|
||||
|
||||
return (Base & ~Mask) | (Insert & Mask);
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
GLM_FUNC_QUALIFIER detail::tvec2<T> bitfieldInsert
|
||||
(
|
||||
detail::tvec2<T> const & Base,
|
||||
detail::tvec2<T> const & Insert,
|
||||
int const & Offset,
|
||||
int const & Bits
|
||||
)
|
||||
{
|
||||
return detail::tvec2<T>(
|
||||
bitfieldInsert(Base[0], Insert[0], Offset, Bits),
|
||||
bitfieldInsert(Base[1], Insert[1], Offset, Bits));
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
GLM_FUNC_QUALIFIER detail::tvec3<T> bitfieldInsert
|
||||
(
|
||||
detail::tvec3<T> const & Base,
|
||||
detail::tvec3<T> const & Insert,
|
||||
int const & Offset,
|
||||
int const & Bits
|
||||
)
|
||||
{
|
||||
return detail::tvec3<T>(
|
||||
bitfieldInsert(Base[0], Insert[0], Offset, Bits),
|
||||
bitfieldInsert(Base[1], Insert[1], Offset, Bits),
|
||||
bitfieldInsert(Base[2], Insert[2], Offset, Bits));
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
GLM_FUNC_QUALIFIER detail::tvec4<T> bitfieldInsert
|
||||
(
|
||||
detail::tvec4<T> const & Base,
|
||||
detail::tvec4<T> const & Insert,
|
||||
int const & Offset,
|
||||
int const & Bits
|
||||
)
|
||||
{
|
||||
return detail::tvec4<T>(
|
||||
bitfieldInsert(Base[0], Insert[0], Offset, Bits),
|
||||
bitfieldInsert(Base[1], Insert[1], Offset, Bits),
|
||||
bitfieldInsert(Base[2], Insert[2], Offset, Bits),
|
||||
bitfieldInsert(Base[3], Insert[3], Offset, Bits));
|
||||
}
|
||||
|
||||
// bitfieldReverse
|
||||
template <typename genIUType>
|
||||
GLM_FUNC_QUALIFIER genIUType bitfieldReverse(genIUType const & Value)
|
||||
{
|
||||
GLM_STATIC_ASSERT(std::numeric_limits<genIUType>::is_integer, "'bitfieldReverse' only accept integer values");
|
||||
|
||||
genIUType Out = 0;
|
||||
std::size_t BitSize = sizeof(genIUType) * 8;
|
||||
for(std::size_t i = 0; i < BitSize; ++i)
|
||||
if(Value & (genIUType(1) << i))
|
||||
Out |= genIUType(1) << (BitSize - 1 - i);
|
||||
return Out;
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
GLM_FUNC_QUALIFIER detail::tvec2<T> bitfieldReverse
|
||||
(
|
||||
detail::tvec2<T> const & value
|
||||
)
|
||||
{
|
||||
return detail::tvec2<T>(
|
||||
bitfieldReverse(value[0]),
|
||||
bitfieldReverse(value[1]));
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
GLM_FUNC_QUALIFIER detail::tvec3<T> bitfieldReverse
|
||||
(
|
||||
detail::tvec3<T> const & value
|
||||
)
|
||||
{
|
||||
return detail::tvec3<T>(
|
||||
bitfieldReverse(value[0]),
|
||||
bitfieldReverse(value[1]),
|
||||
bitfieldReverse(value[2]));
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
GLM_FUNC_QUALIFIER detail::tvec4<T> bitfieldReverse
|
||||
(
|
||||
detail::tvec4<T> const & value
|
||||
)
|
||||
{
|
||||
return detail::tvec4<T>(
|
||||
bitfieldReverse(value[0]),
|
||||
bitfieldReverse(value[1]),
|
||||
bitfieldReverse(value[2]),
|
||||
bitfieldReverse(value[3]));
|
||||
}
|
||||
|
||||
// bitCount
|
||||
template <typename genIUType>
|
||||
GLM_FUNC_QUALIFIER int bitCount(genIUType const & Value)
|
||||
{
|
||||
GLM_STATIC_ASSERT(std::numeric_limits<genIUType>::is_integer, "'bitCount' only accept integer values");
|
||||
|
||||
int Count = 0;
|
||||
for(std::size_t i = 0; i < sizeof(genIUType) * std::size_t(8); ++i)
|
||||
{
|
||||
if(Value & (1 << i))
|
||||
++Count;
|
||||
}
|
||||
return Count;
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
GLM_FUNC_QUALIFIER detail::tvec2<int> bitCount
|
||||
(
|
||||
detail::tvec2<T> const & value
|
||||
)
|
||||
{
|
||||
return detail::tvec2<int>(
|
||||
bitCount(value[0]),
|
||||
bitCount(value[1]));
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
GLM_FUNC_QUALIFIER detail::tvec3<int> bitCount
|
||||
(
|
||||
detail::tvec3<T> const & value
|
||||
)
|
||||
{
|
||||
return detail::tvec3<int>(
|
||||
bitCount(value[0]),
|
||||
bitCount(value[1]),
|
||||
bitCount(value[2]));
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
GLM_FUNC_QUALIFIER detail::tvec4<int> bitCount
|
||||
(
|
||||
detail::tvec4<T> const & value
|
||||
)
|
||||
{
|
||||
return detail::tvec4<int>(
|
||||
bitCount(value[0]),
|
||||
bitCount(value[1]),
|
||||
bitCount(value[2]),
|
||||
bitCount(value[3]));
|
||||
}
|
||||
|
||||
// findLSB
|
||||
template <typename genIUType>
|
||||
GLM_FUNC_QUALIFIER int findLSB
|
||||
(
|
||||
genIUType const & Value
|
||||
)
|
||||
{
|
||||
GLM_STATIC_ASSERT(std::numeric_limits<genIUType>::is_integer, "'findLSB' only accept integer values");
|
||||
if(Value == 0)
|
||||
return -1;
|
||||
|
||||
genIUType Bit;
|
||||
for(Bit = genIUType(0); !(Value & (1 << Bit)); ++Bit){}
|
||||
return Bit;
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
GLM_FUNC_QUALIFIER detail::tvec2<int> findLSB
|
||||
(
|
||||
detail::tvec2<T> const & value
|
||||
)
|
||||
{
|
||||
return detail::tvec2<int>(
|
||||
findLSB(value[0]),
|
||||
findLSB(value[1]));
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
GLM_FUNC_QUALIFIER detail::tvec3<int> findLSB
|
||||
(
|
||||
detail::tvec3<T> const & value
|
||||
)
|
||||
{
|
||||
return detail::tvec3<int>(
|
||||
findLSB(value[0]),
|
||||
findLSB(value[1]),
|
||||
findLSB(value[2]));
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
GLM_FUNC_QUALIFIER detail::tvec4<int> findLSB
|
||||
(
|
||||
detail::tvec4<T> const & value
|
||||
)
|
||||
{
|
||||
return detail::tvec4<int>(
|
||||
findLSB(value[0]),
|
||||
findLSB(value[1]),
|
||||
findLSB(value[2]),
|
||||
findLSB(value[3]));
|
||||
}
|
||||
|
||||
// findMSB
|
||||
template <typename genIUType>
|
||||
GLM_FUNC_QUALIFIER int findMSB
|
||||
(
|
||||
genIUType const & Value
|
||||
)
|
||||
{
|
||||
GLM_STATIC_ASSERT(std::numeric_limits<genIUType>::is_integer, "'findMSB' only accept integer values");
|
||||
if(Value == 0)
|
||||
return -1;
|
||||
|
||||
genIUType bit = genIUType(-1);
|
||||
for(genIUType tmp = Value; tmp; tmp >>= 1, ++bit){}
|
||||
return bit;
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
GLM_FUNC_QUALIFIER detail::tvec2<int> findMSB
|
||||
(
|
||||
detail::tvec2<T> const & value
|
||||
)
|
||||
{
|
||||
return detail::tvec2<int>(
|
||||
findMSB(value[0]),
|
||||
findMSB(value[1]));
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
GLM_FUNC_QUALIFIER detail::tvec3<int> findMSB
|
||||
(
|
||||
detail::tvec3<T> const & value
|
||||
)
|
||||
{
|
||||
return detail::tvec3<int>(
|
||||
findMSB(value[0]),
|
||||
findMSB(value[1]),
|
||||
findMSB(value[2]));
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
GLM_FUNC_QUALIFIER detail::tvec4<int> findMSB
|
||||
(
|
||||
detail::tvec4<T> const & value
|
||||
)
|
||||
{
|
||||
return detail::tvec4<int>(
|
||||
findMSB(value[0]),
|
||||
findMSB(value[1]),
|
||||
findMSB(value[2]),
|
||||
findMSB(value[3]));
|
||||
}
|
||||
|
||||
}//namespace integer
|
||||
}//namespace function
|
||||
}//namespace core
|
||||
}//namespace glm
|
115
ExternalLibs/glm/core/func_matrix.hpp
Normal file
115
ExternalLibs/glm/core/func_matrix.hpp
Normal file
|
@ -0,0 +1,115 @@
|
|||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// OpenGL Mathematics Copyright (c) 2005 - 2011 G-Truc Creation (www.g-truc.net)
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// Created : 2008-08-03
|
||||
// Updated : 2010-02-04
|
||||
// Licence : This source is under MIT License
|
||||
// File : glm/core/func_matrix.hpp
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#ifndef glm_core_func_matrix
|
||||
#define glm_core_func_matrix
|
||||
|
||||
namespace glm
|
||||
{
|
||||
namespace test{
|
||||
void main_core_func_matrix();
|
||||
}//namespace test
|
||||
|
||||
namespace core{
|
||||
namespace function{
|
||||
//! Define all matrix functions from Section 8.5 of GLSL 1.30.8 specification. Included in glm namespace.
|
||||
namespace matrix{
|
||||
|
||||
/// \addtogroup core_funcs
|
||||
///@{
|
||||
|
||||
//! Multiply matrix x by matrix y component-wise, i.e.,
|
||||
//! result[i][j] is the scalar product of x[i][j] and y[i][j].
|
||||
//!
|
||||
//! \li <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/matrixCompMult.xml">GLSL matrixCompMult man page</a>
|
||||
//! \li GLSL 1.30.08 specification, section 8.5
|
||||
template <typename matType>
|
||||
matType matrixCompMult(
|
||||
matType const & x,
|
||||
matType const & y);
|
||||
|
||||
//! Treats the first parameter c as a column vector
|
||||
//! and the second parameter r as a row vector
|
||||
//! and does a linear algebraic matrix multiply c * r.
|
||||
//!
|
||||
//! \li <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/outerProduct.xml">GLSL outerProduct man page</a>
|
||||
//! \li GLSL 1.30.08 specification, section 8.5
|
||||
template <typename vecType, typename matType>
|
||||
matType outerProduct(
|
||||
vecType const & c,
|
||||
vecType const & r);
|
||||
|
||||
//! Returns the transposed matrix of x
|
||||
//!
|
||||
//! \li <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/transpose.xml">GLSL transpose man page</a>
|
||||
//! \li GLSL 1.30.08 specification, section 8.5
|
||||
template <typename matType>
|
||||
typename matType::transpose_type transpose(
|
||||
matType const & x);
|
||||
|
||||
//! Return the determinant of a mat2 matrix.
|
||||
//!
|
||||
//! \li <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/determinant.xml">GLSL determinant man page</a>
|
||||
//! \li GLSL 1.30.08 specification, section 8.5
|
||||
template <typename T>
|
||||
typename detail::tmat2x2<T>::value_type determinant(
|
||||
detail::tmat2x2<T> const & m);
|
||||
|
||||
//! Return the determinant of a mat3 matrix.
|
||||
//!
|
||||
//! \li <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/determinant.xml">GLSL determinant man page</a>
|
||||
//! \li GLSL 1.30.08 specification, section 8.5
|
||||
template <typename T>
|
||||
typename detail::tmat3x3<T>::value_type determinant(
|
||||
detail::tmat3x3<T> const & m);
|
||||
|
||||
//! Return the determinant of a mat4 matrix.
|
||||
//!
|
||||
//! \li <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/determinant.xml">GLSL determinant man page</a>
|
||||
//! \li GLSL 1.30.08 specification, section 8.5
|
||||
template <typename T>
|
||||
typename detail::tmat4x4<T>::value_type determinant(
|
||||
detail::tmat4x4<T> const & m);
|
||||
|
||||
//! Return the inverse of a mat2 matrix.
|
||||
//!
|
||||
//! \li <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/inverse.xml">GLSL inverse man page</a>
|
||||
//! \li GLSL 1.40.07 specification, section 8.5
|
||||
template <typename T>
|
||||
detail::tmat2x2<T> inverse(
|
||||
detail::tmat2x2<T> const & m);
|
||||
|
||||
//! Return the inverse of a mat3 matrix.
|
||||
//!
|
||||
//! \li <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/inverse.xml">GLSL inverse man page</a>
|
||||
//! \li GLSL 1.40.07 specification, section 8.5
|
||||
template <typename T>
|
||||
detail::tmat3x3<T> inverse(
|
||||
detail::tmat3x3<T> const & m);
|
||||
|
||||
//! Return the inverse of a mat4 matrix.
|
||||
//!
|
||||
//! \li <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/inverse.xml">GLSL inverse man page</a>
|
||||
//! \li GLSL 1.40.07 specification, section 8.5
|
||||
template <typename T>
|
||||
detail::tmat4x4<T> inverse(
|
||||
detail::tmat4x4<T> const & m);
|
||||
|
||||
///@}
|
||||
|
||||
}//namespace matrix
|
||||
}//namespace function
|
||||
}//namespace core
|
||||
|
||||
using namespace core::function::matrix;
|
||||
}//namespace glm
|
||||
|
||||
#include "func_matrix.inl"
|
||||
|
||||
#endif//glm_core_func_matrix
|
571
ExternalLibs/glm/core/func_matrix.inl
Normal file
571
ExternalLibs/glm/core/func_matrix.inl
Normal file
|
@ -0,0 +1,571 @@
|
|||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// OpenGL Mathematics Copyright (c) 2005 - 2011 G-Truc Creation (www.g-truc.net)
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// Created : 2008-03-08
|
||||
// Updated : 2010-02-04
|
||||
// Licence : This source is under MIT License
|
||||
// File : glm/core/func_matrix.inl
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
namespace glm
|
||||
{
|
||||
namespace core{
|
||||
namespace function{
|
||||
namespace matrix{
|
||||
|
||||
// matrixCompMult
|
||||
template <typename matType>
|
||||
GLM_FUNC_QUALIFIER matType matrixCompMult
|
||||
(
|
||||
matType const & x,
|
||||
matType const & y
|
||||
)
|
||||
{
|
||||
GLM_STATIC_ASSERT(detail::type<typename matType::value_type>::is_float, "'matrixCompMult' only accept floating-point inputs");
|
||||
|
||||
matType result(matType::null);
|
||||
for(typename matType::size_type i = 0; i < matType::col_size(); ++i)
|
||||
result[i] = x[i] * y[i];
|
||||
return result;
|
||||
}
|
||||
|
||||
// outerProduct
|
||||
template <typename T>
|
||||
GLM_FUNC_QUALIFIER detail::tmat2x2<T> outerProduct
|
||||
(
|
||||
detail::tvec2<T> const & c,
|
||||
detail::tvec2<T> const & r
|
||||
)
|
||||
{
|
||||
GLM_STATIC_ASSERT(detail::type<T>::is_float, "'outerProduct' only accept floating-point inputs");
|
||||
|
||||
detail::tmat2x2<T> m(detail::tmat2x2<T>::null);
|
||||
m[0][0] = c[0] * r[0];
|
||||
m[0][1] = c[1] * r[0];
|
||||
m[1][0] = c[0] * r[1];
|
||||
m[1][1] = c[1] * r[1];
|
||||
return m;
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
GLM_FUNC_QUALIFIER detail::tmat3x3<T> outerProduct
|
||||
(
|
||||
detail::tvec3<T> const & c,
|
||||
detail::tvec3<T> const & r
|
||||
)
|
||||
{
|
||||
GLM_STATIC_ASSERT(detail::type<T>::is_float, "'outerProduct' only accept floating-point inputs");
|
||||
|
||||
detail::tmat3x3<T> m(detail::tmat3x3<T>::null);
|
||||
for(typename detail::tmat3x3<T>::size_type i = 0; i < detail::tmat3x3<T>::col_size(); ++i)
|
||||
m[i] = c * r[i];
|
||||
return m;
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
GLM_FUNC_QUALIFIER detail::tmat4x4<T> outerProduct
|
||||
(
|
||||
detail::tvec4<T> const & c,
|
||||
detail::tvec4<T> const & r
|
||||
)
|
||||
{
|
||||
GLM_STATIC_ASSERT(detail::type<T>::is_float, "'outerProduct' only accept floating-point inputs");
|
||||
|
||||
detail::tmat4x4<T> m(detail::tmat4x4<T>::null);
|
||||
for(typename detail::tmat4x4<T>::size_type i = 0; i < detail::tmat4x4<T>::col_size(); ++i)
|
||||
m[i] = c * r[i];
|
||||
return m;
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
GLM_FUNC_QUALIFIER detail::tmat2x3<T> outerProduct
|
||||
(
|
||||
detail::tvec3<T> const & c,
|
||||
detail::tvec2<T> const & r
|
||||
)
|
||||
{
|
||||
GLM_STATIC_ASSERT(detail::type<T>::is_float, "'outerProduct' only accept floating-point inputs");
|
||||
|
||||
detail::tmat2x3<T> m(detail::tmat2x3<T>::null);
|
||||
m[0][0] = c.x * r.x;
|
||||
m[0][1] = c.y * r.x;
|
||||
m[0][2] = c.z * r.x;
|
||||
m[1][0] = c.x * r.y;
|
||||
m[1][1] = c.y * r.y;
|
||||
m[1][2] = c.z * r.y;
|
||||
return m;
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
GLM_FUNC_QUALIFIER detail::tmat3x2<T> outerProduct
|
||||
(
|
||||
detail::tvec2<T> const & c,
|
||||
detail::tvec3<T> const & r
|
||||
)
|
||||
{
|
||||
GLM_STATIC_ASSERT(detail::type<T>::is_float, "'outerProduct' only accept floating-point inputs");
|
||||
|
||||
detail::tmat3x2<T> m(detail::tmat3x2<T>::null);
|
||||
m[0][0] = c.x * r.x;
|
||||
m[0][1] = c.y * r.x;
|
||||
m[1][0] = c.x * r.y;
|
||||
m[1][1] = c.y * r.y;
|
||||
m[2][0] = c.x * r.z;
|
||||
m[2][1] = c.y * r.z;
|
||||
return m;
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
GLM_FUNC_QUALIFIER detail::tmat2x4<T> outerProduct
|
||||
(
|
||||
detail::tvec2<T> const & c,
|
||||
detail::tvec4<T> const & r
|
||||
)
|
||||
{
|
||||
GLM_STATIC_ASSERT(detail::type<T>::is_float, "'outerProduct' only accept floating-point inputs");
|
||||
|
||||
detail::tmat2x4<T> m(detail::tmat2x4<T>::null);
|
||||
m[0][0] = c.x * r.x;
|
||||
m[0][1] = c.y * r.x;
|
||||
m[0][2] = c.z * r.x;
|
||||
m[0][3] = c.w * r.x;
|
||||
m[1][0] = c.x * r.y;
|
||||
m[1][1] = c.y * r.y;
|
||||
m[1][2] = c.z * r.y;
|
||||
m[1][3] = c.w * r.y;
|
||||
return m;
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
GLM_FUNC_QUALIFIER detail::tmat4x2<T> outerProduct
|
||||
(
|
||||
detail::tvec4<T> const & c,
|
||||
detail::tvec2<T> const & r
|
||||
)
|
||||
{
|
||||
GLM_STATIC_ASSERT(detail::type<T>::is_float, "'outerProduct' only accept floating-point inputs");
|
||||
|
||||
detail::tmat4x2<T> m(detail::tmat4x2<T>::null);
|
||||
m[0][0] = c.x * r.x;
|
||||
m[0][1] = c.y * r.x;
|
||||
m[1][0] = c.x * r.y;
|
||||
m[1][1] = c.y * r.y;
|
||||
m[2][0] = c.x * r.z;
|
||||
m[2][1] = c.y * r.z;
|
||||
m[3][0] = c.x * r.w;
|
||||
m[3][1] = c.y * r.w;
|
||||
return m;
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
GLM_FUNC_QUALIFIER detail::tmat3x4<T> outerProduct
|
||||
(
|
||||
detail::tvec4<T> const & c,
|
||||
detail::tvec3<T> const & r
|
||||
)
|
||||
{
|
||||
GLM_STATIC_ASSERT(detail::type<T>::is_float, "'outerProduct' only accept floating-point inputs");
|
||||
|
||||
detail::tmat3x4<T> m(detail::tmat3x4<T>::null);
|
||||
m[0][0] = c.x * r.x;
|
||||
m[0][1] = c.y * r.x;
|
||||
m[0][2] = c.z * r.x;
|
||||
m[0][3] = c.w * r.x;
|
||||
m[1][0] = c.x * r.y;
|
||||
m[1][1] = c.y * r.y;
|
||||
m[1][2] = c.z * r.y;
|
||||
m[1][3] = c.w * r.y;
|
||||
m[2][0] = c.x * r.z;
|
||||
m[2][1] = c.y * r.z;
|
||||
m[2][2] = c.z * r.z;
|
||||
m[2][3] = c.w * r.z;
|
||||
return m;
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
GLM_FUNC_QUALIFIER detail::tmat4x3<T> outerProduct
|
||||
(
|
||||
detail::tvec3<T> const & c,
|
||||
detail::tvec4<T> const & r
|
||||
)
|
||||
{
|
||||
GLM_STATIC_ASSERT(detail::type<T>::is_float, "'outerProduct' only accept floating-point inputs");
|
||||
|
||||
detail::tmat4x3<T> m(detail::tmat4x3<T>::null);
|
||||
m[0][0] = c.x * r.x;
|
||||
m[0][1] = c.y * r.x;
|
||||
m[0][2] = c.z * r.x;
|
||||
m[1][0] = c.x * r.y;
|
||||
m[1][1] = c.y * r.y;
|
||||
m[1][2] = c.z * r.y;
|
||||
m[2][0] = c.x * r.z;
|
||||
m[2][1] = c.y * r.z;
|
||||
m[2][2] = c.z * r.z;
|
||||
m[3][0] = c.x * r.w;
|
||||
m[3][1] = c.y * r.w;
|
||||
m[3][2] = c.z * r.w;
|
||||
return m;
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
GLM_FUNC_QUALIFIER detail::tmat2x2<T> transpose
|
||||
(
|
||||
detail::tmat2x2<T> const & m
|
||||
)
|
||||
{
|
||||
GLM_STATIC_ASSERT(detail::type<T>::is_float, "'transpose' only accept floating-point inputs");
|
||||
|
||||
detail::tmat2x2<T> result(detail::tmat2x2<T>::null);
|
||||
result[0][0] = m[0][0];
|
||||
result[0][1] = m[1][0];
|
||||
result[1][0] = m[0][1];
|
||||
result[1][1] = m[1][1];
|
||||
return result;
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
GLM_FUNC_QUALIFIER detail::tmat3x3<T> transpose
|
||||
(
|
||||
detail::tmat3x3<T> const & m
|
||||
)
|
||||
{
|
||||
GLM_STATIC_ASSERT(detail::type<T>::is_float, "'transpose' only accept floating-point inputs");
|
||||
|
||||
detail::tmat3x3<T> result(detail::tmat3x3<T>::null);
|
||||
result[0][0] = m[0][0];
|
||||
result[0][1] = m[1][0];
|
||||
result[0][2] = m[2][0];
|
||||
|
||||
result[1][0] = m[0][1];
|
||||
result[1][1] = m[1][1];
|
||||
result[1][2] = m[2][1];
|
||||
|
||||
result[2][0] = m[0][2];
|
||||
result[2][1] = m[1][2];
|
||||
result[2][2] = m[2][2];
|
||||
return result;
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
GLM_FUNC_QUALIFIER detail::tmat4x4<T> transpose
|
||||
(
|
||||
detail::tmat4x4<T> const & m
|
||||
)
|
||||
{
|
||||
GLM_STATIC_ASSERT(detail::type<T>::is_float, "'transpose' only accept floating-point inputs");
|
||||
|
||||
detail::tmat4x4<T> result(detail::tmat4x4<T>::null);
|
||||
result[0][0] = m[0][0];
|
||||
result[0][1] = m[1][0];
|
||||
result[0][2] = m[2][0];
|
||||
result[0][3] = m[3][0];
|
||||
|
||||
result[1][0] = m[0][1];
|
||||
result[1][1] = m[1][1];
|
||||
result[1][2] = m[2][1];
|
||||
result[1][3] = m[3][1];
|
||||
|
||||
result[2][0] = m[0][2];
|
||||
result[2][1] = m[1][2];
|
||||
result[2][2] = m[2][2];
|
||||
result[2][3] = m[3][2];
|
||||
|
||||
result[3][0] = m[0][3];
|
||||
result[3][1] = m[1][3];
|
||||
result[3][2] = m[2][3];
|
||||
result[3][3] = m[3][3];
|
||||
return result;
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
GLM_FUNC_QUALIFIER detail::tmat2x3<T> transpose
|
||||
(
|
||||
detail::tmat3x2<T> const & m
|
||||
)
|
||||
{
|
||||
GLM_STATIC_ASSERT(detail::type<T>::is_float, "'transpose' only accept floating-point inputs");
|
||||
|
||||
detail::tmat2x3<T> result(detail::tmat2x3<T>::null);
|
||||
result[0][0] = m[0][0];
|
||||
result[0][1] = m[1][0];
|
||||
result[0][2] = m[2][0];
|
||||
result[1][0] = m[0][1];
|
||||
result[1][1] = m[1][1];
|
||||
result[1][2] = m[2][1];
|
||||
return result;
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
GLM_FUNC_QUALIFIER detail::tmat3x2<T> transpose
|
||||
(
|
||||
detail::tmat2x3<T> const & m
|
||||
)
|
||||
{
|
||||
GLM_STATIC_ASSERT(detail::type<T>::is_float, "'transpose' only accept floating-point inputs");
|
||||
|
||||
detail::tmat3x2<T> result(detail::tmat3x2<T>::null);
|
||||
result[0][0] = m[0][0];
|
||||
result[0][1] = m[1][0];
|
||||
result[1][0] = m[0][1];
|
||||
result[1][1] = m[1][1];
|
||||
result[2][0] = m[0][2];
|
||||
result[2][1] = m[1][2];
|
||||
return result;
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
GLM_FUNC_QUALIFIER detail::tmat2x4<T> transpose
|
||||
(
|
||||
detail::tmat4x2<T> const & m
|
||||
)
|
||||
{
|
||||
GLM_STATIC_ASSERT(detail::type<T>::is_float, "'transpose' only accept floating-point inputs");
|
||||
|
||||
detail::tmat2x4<T> result(detail::tmat2x4<T>::null);
|
||||
result[0][0] = m[0][0];
|
||||
result[0][1] = m[1][0];
|
||||
result[0][2] = m[2][0];
|
||||
result[0][3] = m[3][0];
|
||||
result[1][0] = m[0][1];
|
||||
result[1][1] = m[1][1];
|
||||
result[1][2] = m[2][1];
|
||||
result[1][3] = m[3][1];
|
||||
return result;
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
GLM_FUNC_QUALIFIER detail::tmat4x2<T> transpose
|
||||
(
|
||||
detail::tmat2x4<T> const & m
|
||||
)
|
||||
{
|
||||
GLM_STATIC_ASSERT(detail::type<T>::is_float, "'transpose' only accept floating-point inputs");
|
||||
|
||||
detail::tmat4x2<T> result(detail::tmat4x2<T>::null);
|
||||
result[0][0] = m[0][0];
|
||||
result[0][1] = m[1][0];
|
||||
result[1][0] = m[0][1];
|
||||
result[1][1] = m[1][1];
|
||||
result[2][0] = m[0][2];
|
||||
result[2][1] = m[1][2];
|
||||
result[3][0] = m[0][3];
|
||||
result[3][1] = m[1][3];
|
||||
return result;
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
GLM_FUNC_QUALIFIER detail::tmat3x4<T> transpose
|
||||
(
|
||||
detail::tmat4x3<T> const & m
|
||||
)
|
||||
{
|
||||
GLM_STATIC_ASSERT(detail::type<T>::is_float, "'transpose' only accept floating-point inputs");
|
||||
|
||||
detail::tmat3x4<T> result(detail::tmat3x4<T>::null);
|
||||
result[0][0] = m[0][0];
|
||||
result[0][1] = m[1][0];
|
||||
result[0][2] = m[2][0];
|
||||
result[0][3] = m[3][0];
|
||||
result[1][0] = m[0][1];
|
||||
result[1][1] = m[1][1];
|
||||
result[1][2] = m[2][1];
|
||||
result[1][3] = m[3][1];
|
||||
result[2][0] = m[0][2];
|
||||
result[2][1] = m[1][2];
|
||||
result[2][2] = m[2][2];
|
||||
result[2][3] = m[3][2];
|
||||
return result;
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
GLM_FUNC_QUALIFIER detail::tmat4x3<T> transpose
|
||||
(
|
||||
detail::tmat3x4<T> const & m
|
||||
)
|
||||
{
|
||||
GLM_STATIC_ASSERT(detail::type<T>::is_float, "'transpose' only accept floating-point inputs");
|
||||
|
||||
detail::tmat4x3<T> result(detail::tmat4x3<T>::null);
|
||||
result[0][0] = m[0][0];
|
||||
result[0][1] = m[1][0];
|
||||
result[0][2] = m[2][0];
|
||||
result[1][0] = m[0][1];
|
||||
result[1][1] = m[1][1];
|
||||
result[1][2] = m[2][1];
|
||||
result[2][0] = m[0][2];
|
||||
result[2][1] = m[1][2];
|
||||
result[2][2] = m[2][2];
|
||||
result[3][0] = m[0][3];
|
||||
result[3][1] = m[1][3];
|
||||
result[3][2] = m[2][3];
|
||||
return result;
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
GLM_FUNC_QUALIFIER typename detail::tmat2x2<T>::value_type determinant
|
||||
(
|
||||
detail::tmat2x2<T> const & m
|
||||
)
|
||||
{
|
||||
GLM_STATIC_ASSERT(detail::type<T>::is_float, "'determinant' only accept floating-point inputs");
|
||||
|
||||
return m[0][0] * m[1][1] - m[1][0] * m[0][1];
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
GLM_FUNC_QUALIFIER typename detail::tmat3x3<T>::value_type determinant
|
||||
(
|
||||
detail::tmat3x3<T> const & m
|
||||
)
|
||||
{
|
||||
GLM_STATIC_ASSERT(detail::type<T>::is_float, "'determinant' only accept floating-point inputs");
|
||||
|
||||
return
|
||||
+ m[0][0] * (m[1][1] * m[2][2] - m[2][1] * m[1][2])
|
||||
- m[1][0] * (m[0][1] * m[2][2] - m[2][1] * m[0][2])
|
||||
+ m[2][0] * (m[0][1] * m[1][2] - m[1][1] * m[0][2]);
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
GLM_FUNC_QUALIFIER typename detail::tmat4x4<T>::value_type determinant
|
||||
(
|
||||
detail::tmat4x4<T> const & m
|
||||
)
|
||||
{
|
||||
GLM_STATIC_ASSERT(detail::type<T>::is_float, "'determinant' only accept floating-point inputs");
|
||||
|
||||
T SubFactor00 = m[2][2] * m[3][3] - m[3][2] * m[2][3];
|
||||
T SubFactor01 = m[2][1] * m[3][3] - m[3][1] * m[2][3];
|
||||
T SubFactor02 = m[2][1] * m[3][2] - m[3][1] * m[2][2];
|
||||
T SubFactor03 = m[2][0] * m[3][3] - m[3][0] * m[2][3];
|
||||
T SubFactor04 = m[2][0] * m[3][2] - m[3][0] * m[2][2];
|
||||
T SubFactor05 = m[2][0] * m[3][1] - m[3][0] * m[2][1];
|
||||
|
||||
detail::tvec4<T> DetCof(
|
||||
+ (m[1][1] * SubFactor00 - m[1][2] * SubFactor01 + m[1][3] * SubFactor02),
|
||||
- (m[1][0] * SubFactor00 - m[1][2] * SubFactor03 + m[1][3] * SubFactor04),
|
||||
+ (m[1][0] * SubFactor01 - m[1][1] * SubFactor03 + m[1][3] * SubFactor05),
|
||||
- (m[1][0] * SubFactor02 - m[1][1] * SubFactor04 + m[1][2] * SubFactor05));
|
||||
|
||||
return m[0][0] * DetCof[0]
|
||||
+ m[0][1] * DetCof[1]
|
||||
+ m[0][2] * DetCof[2]
|
||||
+ m[0][3] * DetCof[3];
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
GLM_FUNC_QUALIFIER detail::tmat2x2<T> inverse
|
||||
(
|
||||
detail::tmat2x2<T> const & m
|
||||
)
|
||||
{
|
||||
GLM_STATIC_ASSERT(detail::type<T>::is_float, "'inverse' only accept floating-point inputs");
|
||||
|
||||
//valType Determinant = m[0][0] * m[1][1] - m[1][0] * m[0][1];
|
||||
T Determinant = determinant(m);
|
||||
|
||||
detail::tmat2x2<T> Inverse(
|
||||
+ m[1][1] / Determinant,
|
||||
- m[0][1] / Determinant,
|
||||
- m[1][0] / Determinant,
|
||||
+ m[0][0] / Determinant);
|
||||
|
||||
return Inverse;
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
GLM_FUNC_QUALIFIER detail::tmat3x3<T> inverse
|
||||
(
|
||||
detail::tmat3x3<T> const & m
|
||||
)
|
||||
{
|
||||
GLM_STATIC_ASSERT(detail::type<T>::is_float, "'inverse' only accept floating-point inputs");
|
||||
|
||||
//valType Determinant = m[0][0] * (m[1][1] * m[2][2] - m[2][1] * m[1][2])
|
||||
// - m[1][0] * (m[0][1] * m[2][2] - m[2][1] * m[0][2])
|
||||
// + m[2][0] * (m[0][1] * m[1][2] - m[1][1] * m[0][2]);
|
||||
|
||||
T Determinant = determinant(m);
|
||||
|
||||
detail::tmat3x3<T> Inverse(detail::tmat3x3<T>::null);
|
||||
Inverse[0][0] = + (m[1][1] * m[2][2] - m[2][1] * m[1][2]);
|
||||
Inverse[1][0] = - (m[1][0] * m[2][2] - m[2][0] * m[1][2]);
|
||||
Inverse[2][0] = + (m[1][0] * m[2][1] - m[2][0] * m[1][1]);
|
||||
Inverse[0][1] = - (m[0][1] * m[2][2] - m[2][1] * m[0][2]);
|
||||
Inverse[1][1] = + (m[0][0] * m[2][2] - m[2][0] * m[0][2]);
|
||||
Inverse[2][1] = - (m[0][0] * m[2][1] - m[2][0] * m[0][1]);
|
||||
Inverse[0][2] = + (m[0][1] * m[1][2] - m[1][1] * m[0][2]);
|
||||
Inverse[1][2] = - (m[0][0] * m[1][2] - m[1][0] * m[0][2]);
|
||||
Inverse[2][2] = + (m[0][0] * m[1][1] - m[1][0] * m[0][1]);
|
||||
Inverse /= Determinant;
|
||||
|
||||
return Inverse;
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
GLM_FUNC_QUALIFIER detail::tmat4x4<T> inverse
|
||||
(
|
||||
detail::tmat4x4<T> const & m
|
||||
)
|
||||
{
|
||||
GLM_STATIC_ASSERT(detail::type<T>::is_float, "'inverse' only accept floating-point inputs");
|
||||
|
||||
T Coef00 = m[2][2] * m[3][3] - m[3][2] * m[2][3];
|
||||
T Coef02 = m[1][2] * m[3][3] - m[3][2] * m[1][3];
|
||||
T Coef03 = m[1][2] * m[2][3] - m[2][2] * m[1][3];
|
||||
|
||||
T Coef04 = m[2][1] * m[3][3] - m[3][1] * m[2][3];
|
||||
T Coef06 = m[1][1] * m[3][3] - m[3][1] * m[1][3];
|
||||
T Coef07 = m[1][1] * m[2][3] - m[2][1] * m[1][3];
|
||||
|
||||
T Coef08 = m[2][1] * m[3][2] - m[3][1] * m[2][2];
|
||||
T Coef10 = m[1][1] * m[3][2] - m[3][1] * m[1][2];
|
||||
T Coef11 = m[1][1] * m[2][2] - m[2][1] * m[1][2];
|
||||
|
||||
T Coef12 = m[2][0] * m[3][3] - m[3][0] * m[2][3];
|
||||
T Coef14 = m[1][0] * m[3][3] - m[3][0] * m[1][3];
|
||||
T Coef15 = m[1][0] * m[2][3] - m[2][0] * m[1][3];
|
||||
|
||||
T Coef16 = m[2][0] * m[3][2] - m[3][0] * m[2][2];
|
||||
T Coef18 = m[1][0] * m[3][2] - m[3][0] * m[1][2];
|
||||
T Coef19 = m[1][0] * m[2][2] - m[2][0] * m[1][2];
|
||||
|
||||
T Coef20 = m[2][0] * m[3][1] - m[3][0] * m[2][1];
|
||||
T Coef22 = m[1][0] * m[3][1] - m[3][0] * m[1][1];
|
||||
T Coef23 = m[1][0] * m[2][1] - m[2][0] * m[1][1];
|
||||
|
||||
detail::tvec4<T> const SignA(+1, -1, +1, -1);
|
||||
detail::tvec4<T> const SignB(-1, +1, -1, +1);
|
||||
|
||||
detail::tvec4<T> Fac0(Coef00, Coef00, Coef02, Coef03);
|
||||
detail::tvec4<T> Fac1(Coef04, Coef04, Coef06, Coef07);
|
||||
detail::tvec4<T> Fac2(Coef08, Coef08, Coef10, Coef11);
|
||||
detail::tvec4<T> Fac3(Coef12, Coef12, Coef14, Coef15);
|
||||
detail::tvec4<T> Fac4(Coef16, Coef16, Coef18, Coef19);
|
||||
detail::tvec4<T> Fac5(Coef20, Coef20, Coef22, Coef23);
|
||||
|
||||
detail::tvec4<T> Vec0(m[1][0], m[0][0], m[0][0], m[0][0]);
|
||||
detail::tvec4<T> Vec1(m[1][1], m[0][1], m[0][1], m[0][1]);
|
||||
detail::tvec4<T> Vec2(m[1][2], m[0][2], m[0][2], m[0][2]);
|
||||
detail::tvec4<T> Vec3(m[1][3], m[0][3], m[0][3], m[0][3]);
|
||||
|
||||
detail::tvec4<T> Inv0 = SignA * (Vec1 * Fac0 - Vec2 * Fac1 + Vec3 * Fac2);
|
||||
detail::tvec4<T> Inv1 = SignB * (Vec0 * Fac0 - Vec2 * Fac3 + Vec3 * Fac4);
|
||||
detail::tvec4<T> Inv2 = SignA * (Vec0 * Fac1 - Vec1 * Fac3 + Vec3 * Fac5);
|
||||
detail::tvec4<T> Inv3 = SignB * (Vec0 * Fac2 - Vec1 * Fac4 + Vec2 * Fac5);
|
||||
|
||||
detail::tmat4x4<T> Inverse(Inv0, Inv1, Inv2, Inv3);
|
||||
|
||||
detail::tvec4<T> Row0(Inverse[0][0], Inverse[1][0], Inverse[2][0], Inverse[3][0]);
|
||||
|
||||
T Determinant = glm::dot(m[0], Row0);
|
||||
|
||||
Inverse /= Determinant;
|
||||
|
||||
return Inverse;
|
||||
}
|
||||
|
||||
}//namespace matrix
|
||||
}//namespace function
|
||||
}//namespace core
|
||||
}//namespace glm
|
66
ExternalLibs/glm/core/func_noise.hpp
Normal file
66
ExternalLibs/glm/core/func_noise.hpp
Normal file
|
@ -0,0 +1,66 @@
|
|||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// OpenGL Mathematics Copyright (c) 2005 - 2011 G-Truc Creation (www.g-truc.net)
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// Created : 2008-08-01
|
||||
// Updated : 2008-09-10
|
||||
// Licence : This source is under MIT License
|
||||
// File : glm/core/func_noise.hpp
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#ifndef glm_core_func_noise
|
||||
#define glm_core_func_noise
|
||||
|
||||
namespace glm
|
||||
{
|
||||
namespace test{
|
||||
void main_core_func_noise();
|
||||
}//namespace test
|
||||
|
||||
namespace core{
|
||||
namespace function{
|
||||
// Define all noise functions from Section 8.9 of GLSL 1.30.8 specification. Included in glm namespace.
|
||||
namespace noise{
|
||||
|
||||
/// \addtogroup core_funcs
|
||||
///@{
|
||||
|
||||
//! Returns a 1D noise value based on the input value x.
|
||||
//!
|
||||
//! \li <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/noise1.xml">GLSL noise1 man page</a>
|
||||
//! \li GLSL 1.30.08 specification, section 8.9
|
||||
template <typename genType>
|
||||
typename genType::value_type noise1(genType const & x);
|
||||
|
||||
//! Returns a 2D noise value based on the input value x.
|
||||
//!
|
||||
//! \li <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/noise2.xml">GLSL noise2 man page</a>
|
||||
//! \li GLSL 1.30.08 specification, section 8.9
|
||||
template <typename genType>
|
||||
detail::tvec2<typename genType::value_type> noise2(genType const & x);
|
||||
|
||||
//! Returns a 3D noise value based on the input value x.
|
||||
//!
|
||||
//! \li <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/noise3.xml">GLSL noise3 man page</a>
|
||||
//! \li GLSL 1.30.08 specification, section 8.9
|
||||
template <typename genType>
|
||||
detail::tvec3<typename genType::value_type> noise3(genType const & x);
|
||||
|
||||
//! Returns a 4D noise value based on the input value x.
|
||||
//!
|
||||
//! \li <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/noise4.xml">GLSL noise4 man page</a>
|
||||
//! \li GLSL 1.30.08 specification, section 8.9
|
||||
template <typename genType>
|
||||
detail::tvec4<typename genType::value_type> noise4(genType const & x);
|
||||
|
||||
///@}
|
||||
|
||||
}//namespace noise
|
||||
}//namespace function
|
||||
}//namespace core
|
||||
|
||||
using namespace core::function::noise;
|
||||
}//namespace glm
|
||||
|
||||
#include "func_noise.inl"
|
||||
|
||||
#endif//glm_core_func_noise
|
21
ExternalLibs/glm/core/func_noise.inl
Normal file
21
ExternalLibs/glm/core/func_noise.inl
Normal file
|
@ -0,0 +1,21 @@
|
|||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// OpenGL Mathematics Copyright (c) 2005 - 2011 G-Truc Creation (www.g-truc.net)
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// Created : 2008-08-01
|
||||
// Updated : 2011-04-14
|
||||
// Licence : This source is under MIT License
|
||||
// File : glm/core/func_noise.inl
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
namespace glm
|
||||
{
|
||||
namespace core{
|
||||
namespace function{
|
||||
namespace noise{
|
||||
|
||||
|
||||
|
||||
}//namespace noise
|
||||
}//namespace function
|
||||
}//namespace core
|
||||
}//namespace glm
|
136
ExternalLibs/glm/core/func_packing.hpp
Normal file
136
ExternalLibs/glm/core/func_packing.hpp
Normal file
|
@ -0,0 +1,136 @@
|
|||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// OpenGL Mathematics Copyright (c) 2005 - 2011 G-Truc Creation (www.g-truc.net)
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// Created : 2010-03-17
|
||||
// Updated : 2010-03-17
|
||||
// Licence : This source is under MIT License
|
||||
// File : glm/core/func_packing.hpp
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#ifndef glm_core_func_packing
|
||||
#define glm_core_func_packing
|
||||
|
||||
namespace glm
|
||||
{
|
||||
namespace test{
|
||||
void main_core_func_packing();
|
||||
}//namespace test
|
||||
|
||||
namespace core{
|
||||
namespace function{
|
||||
//! Define packing functions from section 8.4 floating-point pack and unpack functions of GLSL 4.00.8 specification
|
||||
namespace packing
|
||||
{
|
||||
/// \addtogroup core_funcs
|
||||
///@{
|
||||
|
||||
//! First, converts each component of the normalized floating-point value v into 8- or 16-bit integer values.
|
||||
//! Then, the results are packed into the returned 32-bit unsigned integer.
|
||||
//!
|
||||
//! The conversion for component c of v to fixed point is done as follows:
|
||||
//! packUnorm2x16: round(clamp(c, 0, +1) * 65535.0)
|
||||
//!
|
||||
//! The first component of the vector will be written to the least significant bits of the output;
|
||||
//! the last component will be written to the most significant bits.
|
||||
//!
|
||||
//! \li <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/packUnorm2x16.xml">GLSL packUnorm2x16 man page</a>
|
||||
//! \li GLSL 4.00.08 specification, section 8.4
|
||||
detail::uint32 packUnorm2x16(detail::tvec2<detail::float32> const & v);
|
||||
|
||||
//! First, converts each component of the normalized floating-point value v into 8- or 16-bit integer values.
|
||||
//! Then, the results are packed into the returned 32-bit unsigned integer.
|
||||
//!
|
||||
//! The conversion for component c of v to fixed point is done as follows:
|
||||
//! packUnorm4x8: round(clamp(c, 0, +1) * 255.0)
|
||||
//!
|
||||
//! The first component of the vector will be written to the least significant bits of the output;
|
||||
//! the last component will be written to the most significant bits.
|
||||
//!
|
||||
//! \li <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/packUnorm4x8.xml">GLSL packUnorm4x8 man page</a>
|
||||
//! \li GLSL 4.00.08 specification, section 8.4
|
||||
detail::uint32 packUnorm4x8(detail::tvec4<detail::float32> const & v);
|
||||
|
||||
//! First, converts each component of the normalized floating-point value v into 8- or 16-bit integer values.
|
||||
//! Then, the results are packed into the returned 32-bit unsigned integer.
|
||||
//!
|
||||
//! The conversion for component c of v to fixed point is done as follows:
|
||||
//! packSnorm4x8: round(clamp(c, -1, +1) * 127.0)
|
||||
//!
|
||||
//! The first component of the vector will be written to the least significant bits of the output;
|
||||
//! the last component will be written to the most significant bits.
|
||||
//!
|
||||
//! \li <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/packSnorm4x8.xml">GLSL packSnorm4x8 man page</a>
|
||||
//! \li GLSL 4.00.08 specification, section 8.4
|
||||
detail::uint32 packSnorm4x8(detail::tvec4<detail::float32> const & v);
|
||||
|
||||
//! First, unpacks a single 32-bit unsigned integer p into a pair of 16-bit unsigned integers, four 8-bit unsigned integers, or four 8-bit signed integers.
|
||||
//! Then, each component is converted to a normalized floating-point value to generate the returned two- or four-component vector.
|
||||
//!
|
||||
//! The conversion for unpacked fixed-point value f to floating point is done as follows:
|
||||
//! unpackUnorm2x16: f / 65535.0
|
||||
//!
|
||||
//! The first component of the returned vector will be extracted from the least significant bits of the input;
|
||||
//! the last component will be extracted from the most significant bits.
|
||||
//!
|
||||
//! \li <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/unpackUnorm2x16.xml">GLSL unpackUnorm2x16 man page</a>
|
||||
//! \li GLSL 4.00.08 specification, section 8.4
|
||||
detail::tvec2<detail::float32> unpackUnorm2x16(detail::uint32 const & p);
|
||||
|
||||
//! First, unpacks a single 32-bit unsigned integer p into a pair of 16-bit unsigned integers, four 8-bit unsigned integers, or four 8-bit signed integers.
|
||||
//! Then, each component is converted to a normalized floating-point value to generate the returned two- or four-component vector.
|
||||
//!
|
||||
//! The conversion for unpacked fixed-point value f to floating point is done as follows:
|
||||
//! unpackUnorm4x8: f / 255.0
|
||||
//!
|
||||
//! The first component of the returned vector will be extracted from the least significant bits of the input;
|
||||
//! the last component will be extracted from the most significant bits.
|
||||
//!
|
||||
//! \li <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/unpackUnorm4x8.xml">GLSL unpackUnorm4x8 man page</a>
|
||||
//! \li GLSL 4.00.08 specification, section 8.4
|
||||
detail::tvec4<detail::float32> unpackUnorm4x8(detail::uint32 const & p);
|
||||
|
||||
//! First, unpacks a single 32-bit unsigned integer p into a pair of 16-bit unsigned integers, four 8-bit unsigned integers, or four 8-bit signed integers.
|
||||
//! Then, each component is converted to a normalized floating-point value to generate the returned two- or four-component vector.
|
||||
//!
|
||||
//! The conversion for unpacked fixed-point value f to floating point is done as follows:
|
||||
//! unpackSnorm4x8: clamp(f / 127.0, -1, +1)
|
||||
//!
|
||||
//! The first component of the returned vector will be extracted from the least significant bits of the input;
|
||||
//! the last component will be extracted from the most significant bits.
|
||||
//!
|
||||
//! \li <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/unpackSnorm4x8.xml">GLSL unpackSnorm4x8 man page</a>
|
||||
//! \li GLSL 4.00.08 specification, section 8.4
|
||||
detail::tvec4<detail::float32> unpackSnorm4x8(detail::uint32 const & p);
|
||||
|
||||
//! Returns a double-precision value obtained by packing the components of v into a 64-bit value.
|
||||
//! If an IEEE 754 Inf or NaN is created, it will not signal, and the resulting floating point value is unspecified.
|
||||
//! Otherwise, the bit- level representation of v is preserved.
|
||||
//! The first vector component specifies the 32 least significant bits;
|
||||
//! the second component specifies the 32 most significant bits.
|
||||
//!
|
||||
//! \li <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/packDouble2x32.xml">GLSL packDouble2x32 man page</a>
|
||||
//! \li GLSL 4.00.08 specification, section 8.4
|
||||
double packDouble2x32(detail::tvec2<detail::uint32> const & v);
|
||||
|
||||
//! Returns a two-component unsigned integer vector representation of v.
|
||||
//! The bit-level representation of v is preserved.
|
||||
//! The first component of the vector contains the 32 least significant bits of the double;
|
||||
//! the second component consists the 32 most significant bits.
|
||||
//!
|
||||
//! \li <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/unpackDouble2x32.xml">GLSL unpackDouble2x32 man page</a>
|
||||
//! \li GLSL 4.00.08 specification, section 8.4
|
||||
detail::tvec2<detail::uint32> unpackDouble2x32(double const & v);
|
||||
|
||||
///@}
|
||||
|
||||
}//namespace packing
|
||||
}//namespace function
|
||||
}//namespace core
|
||||
|
||||
using namespace core::function::packing;
|
||||
}//namespace glm
|
||||
|
||||
#include "func_packing.inl"
|
||||
|
||||
#endif//glm_core_func_packing
|
||||
|
94
ExternalLibs/glm/core/func_packing.inl
Normal file
94
ExternalLibs/glm/core/func_packing.inl
Normal file
|
@ -0,0 +1,94 @@
|
|||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// OpenGL Mathematics Copyright (c) 2005 - 2011 G-Truc Creation (www.g-truc.net)
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// Created : 2010-03-17
|
||||
// Updated : 2010-03-17
|
||||
// Licence : This source is under MIT License
|
||||
// File : glm/core/func_packing.inl
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
namespace glm
|
||||
{
|
||||
namespace detail
|
||||
{
|
||||
|
||||
}//namespace detail
|
||||
|
||||
namespace core{
|
||||
namespace function{
|
||||
namespace packing
|
||||
{
|
||||
GLM_FUNC_QUALIFIER detail::uint32 packUnorm2x16(detail::tvec2<detail::float32> const & v)
|
||||
{
|
||||
detail::uint16 A((detail::uint16)round(clamp(v.x, 0.0f, 1.0f) * 65535.0f));
|
||||
detail::uint16 B((detail::uint16)round(clamp(v.y, 0.0f, 1.0f) * 65535.0f));
|
||||
return detail::uint32((B << 16) | A);
|
||||
}
|
||||
|
||||
GLM_FUNC_QUALIFIER detail::uint32 packUnorm4x8(detail::tvec4<detail::float32> const & v)
|
||||
{
|
||||
detail::uint8 A((detail::uint8)round(clamp(v.x, 0.0f, 1.0f) * 255.0f));
|
||||
detail::uint8 B((detail::uint8)round(clamp(v.y, 0.0f, 1.0f) * 255.0f));
|
||||
detail::uint8 C((detail::uint8)round(clamp(v.z, 0.0f, 1.0f) * 255.0f));
|
||||
detail::uint8 D((detail::uint8)round(clamp(v.w, 0.0f, 1.0f) * 255.0f));
|
||||
return detail::uint32((D << 24) | (C << 16) | (B << 8) | A);
|
||||
}
|
||||
|
||||
GLM_FUNC_QUALIFIER detail::uint32 packSnorm4x8(detail::tvec4<detail::float32> const & v)
|
||||
{
|
||||
detail::uint8 A((detail::uint8)round(clamp(v.x,-1.0f, 1.0f) * 255.0f));
|
||||
detail::uint8 B((detail::uint8)round(clamp(v.y,-1.0f, 1.0f) * 255.0f));
|
||||
detail::uint8 C((detail::uint8)round(clamp(v.z,-1.0f, 1.0f) * 255.0f));
|
||||
detail::uint8 D((detail::uint8)round(clamp(v.w,-1.0f, 1.0f) * 255.0f));
|
||||
return detail::uint32((D << 24) | (C << 16) | (B << 8) | A);
|
||||
}
|
||||
|
||||
GLM_FUNC_QUALIFIER detail::tvec2<detail::float32> unpackUnorm2x16(detail::uint32 const & p)
|
||||
{
|
||||
detail::uint16 A(detail::uint16(p >> 0));
|
||||
detail::uint16 B(detail::uint16(p >> 16));
|
||||
return detail::tvec2<detail::float32>(
|
||||
A * 1.0f / 65535.0f,
|
||||
B * 1.0f / 65535.0f);
|
||||
}
|
||||
|
||||
GLM_FUNC_QUALIFIER detail::tvec4<detail::float32> unpackUnorm4x8(detail::uint32 const & p)
|
||||
{
|
||||
detail::uint8 A(detail::uint8(p >> 0));
|
||||
detail::uint8 B(detail::uint8(p >> 8));
|
||||
detail::uint8 C(detail::uint8(p >> 16));
|
||||
detail::uint8 D(detail::uint8(p >> 24));
|
||||
return detail::tvec4<detail::float32>(
|
||||
A * 1.0f / 255.0f,
|
||||
B * 1.0f / 255.0f,
|
||||
C * 1.0f / 255.0f,
|
||||
D * 1.0f / 255.0f);
|
||||
}
|
||||
|
||||
GLM_FUNC_QUALIFIER detail::tvec4<detail::float32> unpackSnorm4x8(detail::uint32 const & p)
|
||||
{
|
||||
detail::uint8 A(detail::uint8(p >> 0));
|
||||
detail::uint8 B(detail::uint8(p >> 8));
|
||||
detail::uint8 C(detail::uint8(p >> 16));
|
||||
detail::uint8 D(detail::uint8(p >> 24));
|
||||
return clamp(detail::tvec4<detail::float32>(
|
||||
A * 1.0f / 127.0f,
|
||||
B * 1.0f / 127.0f,
|
||||
C * 1.0f / 127.0f,
|
||||
D * 1.0f / 127.0f), -1.0f, 1.0f);
|
||||
}
|
||||
|
||||
GLM_FUNC_QUALIFIER double packDouble2x32(detail::tvec2<detail::uint32> const & v)
|
||||
{
|
||||
return *(double*)&v;
|
||||
}
|
||||
|
||||
GLM_FUNC_QUALIFIER detail::tvec2<detail::uint32> unpackDouble2x32(double const & v)
|
||||
{
|
||||
return *(detail::tvec2<detail::uint32>*)&v;
|
||||
}
|
||||
|
||||
}//namespace packing
|
||||
}//namespace function
|
||||
}//namespace core
|
||||
}//namespace glm
|
160
ExternalLibs/glm/core/func_trigonometric.hpp
Normal file
160
ExternalLibs/glm/core/func_trigonometric.hpp
Normal file
|
@ -0,0 +1,160 @@
|
|||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// OpenGL Mathematics Copyright (c) 2005 - 2011 G-Truc Creation (www.g-truc.net)
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// Created : 2008-08-01
|
||||
// Updated : 2008-09-10
|
||||
// Licence : This source is under MIT License
|
||||
// File : glm/core/func_trigonometric.hpp
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#ifndef glm_core_func_trigonometric
|
||||
#define glm_core_func_trigonometric
|
||||
|
||||
namespace glm
|
||||
{
|
||||
namespace test{
|
||||
void main_core_func_trigonometric();
|
||||
}//namespace test
|
||||
|
||||
namespace core{
|
||||
namespace function{
|
||||
//! Define Angle and trigonometry functions
|
||||
//! from Section 8.1 of GLSL 1.30.8 specification.
|
||||
//! Included in glm namespace.
|
||||
namespace trigonometric{
|
||||
|
||||
/// \addtogroup core_funcs
|
||||
///@{
|
||||
|
||||
//! Converts degrees to radians and returns the result.
|
||||
//!
|
||||
//! \li <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/radians.xml">GLSL radians man page</a>
|
||||
//! \li GLSL 1.30.08 specification, section 8.1
|
||||
template <typename genType>
|
||||
genType radians(genType const & degrees);
|
||||
|
||||
//! Converts radians to degrees and returns the result.
|
||||
//!
|
||||
//! \li <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/degrees.xml">GLSL degrees man page</a>
|
||||
//! \li GLSL 1.30.08 specification, section 8.1
|
||||
template <typename genType>
|
||||
genType degrees(genType const & radians);
|
||||
|
||||
//! The standard trigonometric sine function.
|
||||
//! The values returned by this function will range from [-1, 1].
|
||||
//!
|
||||
//! \li <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/sin.xml">GLSL sin man page</a>
|
||||
//! \li GLSL 1.30.08 specification, section 8.1
|
||||
template <typename genType>
|
||||
genType sin(genType const & angle);
|
||||
|
||||
//! The standard trigonometric cosine function.
|
||||
//! The values returned by this function will range from [-1, 1].
|
||||
//!
|
||||
//! \li <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/cos.xml">GLSL cos man page</a>
|
||||
//! \li GLSL 1.30.08 specification, section 8.1
|
||||
template <typename genType>
|
||||
genType cos(genType const & angle);
|
||||
|
||||
//! The standard trigonometric tangent function.
|
||||
//!
|
||||
//! \li <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/tan.xml">GLSL tan man page</a>
|
||||
//! \li GLSL 1.30.08 specification, section 8.1
|
||||
template <typename genType>
|
||||
genType tan(genType const & angle);
|
||||
|
||||
//! Arc sine. Returns an angle whose sine is x.
|
||||
//! The range of values returned by this function is [-PI/2, PI/2].
|
||||
//! Results are undefined if |x| > 1.
|
||||
//!
|
||||
//! \li <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/asin.xml">GLSL asin man page</a>
|
||||
//! \li GLSL 1.30.08 specification, section 8.1
|
||||
template <typename genType>
|
||||
genType asin(genType const & x);
|
||||
|
||||
//! Arc cosine. Returns an angle whose sine is x.
|
||||
//! The range of values returned by this function is [0, PI].
|
||||
//! Results are undefined if |x| > 1.
|
||||
//!
|
||||
//! \li <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/acos.xml">GLSL acos man page</a>
|
||||
//! \li GLSL 1.30.08 specification, section 8.1
|
||||
template <typename genType>
|
||||
genType acos(genType const & x);
|
||||
|
||||
//! Arc tangent. Returns an angle whose tangent is y/x.
|
||||
//! The signs of x and y are used to determine what
|
||||
//! quadrant the angle is in. The range of values returned
|
||||
//! by this function is [-PI, PI]. Results are undefined
|
||||
//! if x and y are both 0.
|
||||
//!
|
||||
//! \li <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/atan.xml">GLSL atan man page</a>
|
||||
//! \li GLSL 1.30.08 specification, section 8.1
|
||||
template <typename genType>
|
||||
genType atan(genType const & y, genType const & x);
|
||||
|
||||
//! Arc tangent. Returns an angle whose tangent is y_over_x.
|
||||
//! The range of values returned by this function is [-PI/2, PI/2].
|
||||
//!
|
||||
//! \li <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/atan.xml">GLSL atan man page</a>
|
||||
//! \li GLSL 1.30.08 specification, section 8.1
|
||||
template <typename genType>
|
||||
genType atan(genType const & y_over_x);
|
||||
|
||||
//! Returns the hyperbolic sine function, (exp(x) - exp(-x)) / 2
|
||||
//!
|
||||
//! \li <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/sinh.xml">GLSL sinh man page</a>
|
||||
//! \li GLSL 1.30.08 specification, section 8.1
|
||||
template <typename genType>
|
||||
genType sinh(genType const & angle);
|
||||
|
||||
//! Returns the hyperbolic cosine function, (exp(x) + exp(-x)) / 2
|
||||
//!
|
||||
//! \li <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/cosh.xml">GLSL cosh man page</a>
|
||||
//! \li GLSL 1.30.08 specification, section 8.1
|
||||
template <typename genType>
|
||||
genType cosh(genType const & angle);
|
||||
|
||||
//! Returns the hyperbolic tangent function, sinh(angle) / cosh(angle)
|
||||
//!
|
||||
//! \li <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/tanh.xml">GLSL tanh man page</a>
|
||||
//! \li GLSL 1.30.08 specification, section 8.1
|
||||
template <typename genType>
|
||||
genType tanh(genType const & angle);
|
||||
|
||||
//! Arc hyperbolic sine; returns the inverse of sinh.
|
||||
//!
|
||||
//! \li <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/asinh.xml">GLSL asinh man page</a>
|
||||
//! \li GLSL 1.30.08 specification, section 8.1
|
||||
template <typename genType>
|
||||
genType asinh(genType const & x);
|
||||
|
||||
//! Arc hyperbolic cosine; returns the non-negative inverse
|
||||
//! of cosh. Results are undefined if x < 1.
|
||||
//!
|
||||
//! \li <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/acosh.xml">GLSL acosh man page</a>
|
||||
//! \li GLSL 1.30.08 specification, section 8.1
|
||||
template <typename genType>
|
||||
genType acosh(genType const & x);
|
||||
|
||||
//! Arc hyperbolic tangent; returns the inverse of tanh.
|
||||
//! Results are undefined if abs(x) >= 1.
|
||||
//!
|
||||
//! \li <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/atanh.xml">GLSL atanh man page</a>
|
||||
//! \li GLSL 1.30.08 specification, section 8.1
|
||||
template <typename genType>
|
||||
genType atanh(genType const & x);
|
||||
|
||||
///@}
|
||||
|
||||
}//namespace trigonometric
|
||||
}//namespace function
|
||||
}//namespace core
|
||||
|
||||
using namespace core::function::trigonometric;
|
||||
}//namespace glm
|
||||
|
||||
#include "func_trigonometric.inl"
|
||||
|
||||
#endif//glm_core_func_trigonometric
|
||||
|
||||
|
745
ExternalLibs/glm/core/func_trigonometric.inl
Normal file
745
ExternalLibs/glm/core/func_trigonometric.inl
Normal file
|
@ -0,0 +1,745 @@
|
|||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// OpenGL Mathematics Copyright (c) 2005 - 2011 G-Truc Creation (www.g-truc.net)
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// Created : 2008-08-03
|
||||
// Updated : 2008-09-14
|
||||
// Licence : This source is under MIT License
|
||||
// File : glm/core/func_trigonometric.inl
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
namespace glm
|
||||
{
|
||||
namespace core{
|
||||
namespace function{
|
||||
namespace trigonometric{
|
||||
|
||||
// radians
|
||||
template <typename genType>
|
||||
GLM_FUNC_QUALIFIER genType radians
|
||||
(
|
||||
genType const & degrees
|
||||
)
|
||||
{
|
||||
GLM_STATIC_ASSERT(detail::type<genType>::is_float, "'radians' only accept floating-point input");
|
||||
|
||||
const genType pi = genType(3.1415926535897932384626433832795);
|
||||
return degrees * (pi / genType(180));
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
GLM_FUNC_QUALIFIER detail::tvec2<T> radians
|
||||
(
|
||||
detail::tvec2<T> const & degrees
|
||||
)
|
||||
{
|
||||
return detail::tvec2<T>(
|
||||
radians(degrees.x),
|
||||
radians(degrees.y));
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
GLM_FUNC_QUALIFIER detail::tvec3<T> radians
|
||||
(
|
||||
detail::tvec3<T> const & degrees
|
||||
)
|
||||
{
|
||||
return detail::tvec3<T>(
|
||||
radians(degrees.x),
|
||||
radians(degrees.y),
|
||||
radians(degrees.z));
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
GLM_FUNC_QUALIFIER detail::tvec4<T> radians
|
||||
(
|
||||
detail::tvec4<T> const & degrees
|
||||
)
|
||||
{
|
||||
return detail::tvec4<T>(
|
||||
radians(degrees.x),
|
||||
radians(degrees.y),
|
||||
radians(degrees.z),
|
||||
radians(degrees.w));
|
||||
}
|
||||
|
||||
// degrees
|
||||
template <typename genType>
|
||||
GLM_FUNC_QUALIFIER genType degrees
|
||||
(
|
||||
genType const & radians
|
||||
)
|
||||
{
|
||||
GLM_STATIC_ASSERT(detail::type<genType>::is_float, "'degrees' only accept floating-point input");
|
||||
|
||||
const genType pi = genType(3.1415926535897932384626433832795);
|
||||
return radians * (genType(180) / pi);
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
GLM_FUNC_QUALIFIER detail::tvec2<T> degrees
|
||||
(
|
||||
detail::tvec2<T> const & radians
|
||||
)
|
||||
{
|
||||
return detail::tvec2<T>(
|
||||
degrees(radians.x),
|
||||
degrees(radians.y));
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
GLM_FUNC_QUALIFIER detail::tvec3<T> degrees
|
||||
(
|
||||
detail::tvec3<T> const & radians
|
||||
)
|
||||
{
|
||||
return detail::tvec3<T>(
|
||||
degrees(radians.x),
|
||||
degrees(radians.y),
|
||||
degrees(radians.z));
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
GLM_FUNC_QUALIFIER detail::tvec4<T> degrees
|
||||
(
|
||||
detail::tvec4<T> const & radians
|
||||
)
|
||||
{
|
||||
return detail::tvec4<T>(
|
||||
degrees(radians.x),
|
||||
degrees(radians.y),
|
||||
degrees(radians.z),
|
||||
degrees(radians.w));
|
||||
}
|
||||
|
||||
// sin
|
||||
template <typename genType>
|
||||
GLM_FUNC_QUALIFIER genType sin
|
||||
(
|
||||
genType const & angle
|
||||
)
|
||||
{
|
||||
GLM_STATIC_ASSERT(detail::type<genType>::is_float, "'sin' only accept floating-point input");
|
||||
|
||||
return ::std::sin(angle);
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
GLM_FUNC_QUALIFIER detail::tvec2<T> sin
|
||||
(
|
||||
detail::tvec2<T> const & angle
|
||||
)
|
||||
{
|
||||
return detail::tvec2<T>(
|
||||
sin(angle.x),
|
||||
sin(angle.y));
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
GLM_FUNC_QUALIFIER detail::tvec3<T> sin
|
||||
(
|
||||
detail::tvec3<T> const & angle
|
||||
)
|
||||
{
|
||||
return detail::tvec3<T>(
|
||||
sin(angle.x),
|
||||
sin(angle.y),
|
||||
sin(angle.z));
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
GLM_FUNC_QUALIFIER detail::tvec4<T> sin
|
||||
(
|
||||
detail::tvec4<T> const & angle
|
||||
)
|
||||
{
|
||||
return detail::tvec4<T>(
|
||||
sin(angle.x),
|
||||
sin(angle.y),
|
||||
sin(angle.z),
|
||||
sin(angle.w));
|
||||
}
|
||||
|
||||
// cos
|
||||
template <typename genType>
|
||||
GLM_FUNC_QUALIFIER genType cos(genType const & angle)
|
||||
{
|
||||
GLM_STATIC_ASSERT(detail::type<genType>::is_float, "'cos' only accept floating-point input");
|
||||
|
||||
return ::std::cos(angle);
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
GLM_FUNC_QUALIFIER detail::tvec2<T> cos
|
||||
(
|
||||
detail::tvec2<T> const & angle
|
||||
)
|
||||
{
|
||||
return detail::tvec2<T>(
|
||||
cos(angle.x),
|
||||
cos(angle.y));
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
GLM_FUNC_QUALIFIER detail::tvec3<T> cos
|
||||
(
|
||||
detail::tvec3<T> const & angle
|
||||
)
|
||||
{
|
||||
return detail::tvec3<T>(
|
||||
cos(angle.x),
|
||||
cos(angle.y),
|
||||
cos(angle.z));
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
GLM_FUNC_QUALIFIER detail::tvec4<T> cos
|
||||
(
|
||||
detail::tvec4<T> const & angle
|
||||
)
|
||||
{
|
||||
return detail::tvec4<T>(
|
||||
cos(angle.x),
|
||||
cos(angle.y),
|
||||
cos(angle.z),
|
||||
cos(angle.w));
|
||||
}
|
||||
|
||||
// tan
|
||||
template <typename genType>
|
||||
GLM_FUNC_QUALIFIER genType tan
|
||||
(
|
||||
genType const & angle
|
||||
)
|
||||
{
|
||||
GLM_STATIC_ASSERT(detail::type<genType>::is_float, "'tan' only accept floating-point input");
|
||||
|
||||
return ::std::tan(angle);
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
GLM_FUNC_QUALIFIER detail::tvec2<T> tan
|
||||
(
|
||||
detail::tvec2<T> const & angle
|
||||
)
|
||||
{
|
||||
return detail::tvec2<T>(
|
||||
tan(angle.x),
|
||||
tan(angle.y));
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
GLM_FUNC_QUALIFIER detail::tvec3<T> tan
|
||||
(
|
||||
detail::tvec3<T> const & angle
|
||||
)
|
||||
{
|
||||
return detail::tvec3<T>(
|
||||
tan(angle.x),
|
||||
tan(angle.y),
|
||||
tan(angle.z));
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
GLM_FUNC_QUALIFIER detail::tvec4<T> tan
|
||||
(
|
||||
detail::tvec4<T> const & angle
|
||||
)
|
||||
{
|
||||
return detail::tvec4<T>(
|
||||
tan(angle.x),
|
||||
tan(angle.y),
|
||||
tan(angle.z),
|
||||
tan(angle.w));
|
||||
}
|
||||
|
||||
// asin
|
||||
template <typename genType>
|
||||
GLM_FUNC_QUALIFIER genType asin
|
||||
(
|
||||
genType const & x
|
||||
)
|
||||
{
|
||||
GLM_STATIC_ASSERT(detail::type<genType>::is_float, "'asin' only accept floating-point input");
|
||||
|
||||
return ::std::asin(x);
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
GLM_FUNC_QUALIFIER detail::tvec2<T> asin
|
||||
(
|
||||
detail::tvec2<T> const & x
|
||||
)
|
||||
{
|
||||
return detail::tvec2<T>(
|
||||
asin(x.x),
|
||||
asin(x.y));
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
GLM_FUNC_QUALIFIER detail::tvec3<T> asin
|
||||
(
|
||||
detail::tvec3<T> const & x
|
||||
)
|
||||
{
|
||||
return detail::tvec3<T>(
|
||||
asin(x.x),
|
||||
asin(x.y),
|
||||
asin(x.z));
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
GLM_FUNC_QUALIFIER detail::tvec4<T> asin
|
||||
(
|
||||
detail::tvec4<T> const & x
|
||||
)
|
||||
{
|
||||
return detail::tvec4<T>(
|
||||
asin(x.x),
|
||||
asin(x.y),
|
||||
asin(x.z),
|
||||
asin(x.w));
|
||||
}
|
||||
|
||||
// acos
|
||||
template <typename genType>
|
||||
GLM_FUNC_QUALIFIER genType acos
|
||||
(
|
||||
genType const & x
|
||||
)
|
||||
{
|
||||
GLM_STATIC_ASSERT(detail::type<genType>::is_float, "'acos' only accept floating-point input");
|
||||
|
||||
return ::std::acos(x);
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
GLM_FUNC_QUALIFIER detail::tvec2<T> acos
|
||||
(
|
||||
detail::tvec2<T> const & x
|
||||
)
|
||||
{
|
||||
return detail::tvec2<T>(
|
||||
acos(x.x),
|
||||
acos(x.y));
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
GLM_FUNC_QUALIFIER detail::tvec3<T> acos
|
||||
(
|
||||
detail::tvec3<T> const & x
|
||||
)
|
||||
{
|
||||
return detail::tvec3<T>(
|
||||
acos(x.x),
|
||||
acos(x.y),
|
||||
acos(x.z));
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
GLM_FUNC_QUALIFIER detail::tvec4<T> acos
|
||||
(
|
||||
detail::tvec4<T> const & x
|
||||
)
|
||||
{
|
||||
return detail::tvec4<T>(
|
||||
acos(x.x),
|
||||
acos(x.y),
|
||||
acos(x.z),
|
||||
acos(x.w));
|
||||
}
|
||||
|
||||
// atan
|
||||
template <typename genType>
|
||||
GLM_FUNC_QUALIFIER genType atan
|
||||
(
|
||||
genType const & y,
|
||||
genType const & x
|
||||
)
|
||||
{
|
||||
GLM_STATIC_ASSERT(detail::type<genType>::is_float, "'atan' only accept floating-point input");
|
||||
|
||||
return ::std::atan2(y, x);
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
GLM_FUNC_QUALIFIER detail::tvec2<T> atan
|
||||
(
|
||||
detail::tvec2<T> const & y,
|
||||
detail::tvec2<T> const & x
|
||||
)
|
||||
{
|
||||
return detail::tvec2<T>(
|
||||
atan(y.x, x.x),
|
||||
atan(y.y, x.y));
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
GLM_FUNC_QUALIFIER detail::tvec3<T> atan
|
||||
(
|
||||
detail::tvec3<T> const & y,
|
||||
detail::tvec3<T> const & x
|
||||
)
|
||||
{
|
||||
return detail::tvec3<T>(
|
||||
atan(y.x, x.x),
|
||||
atan(y.y, x.y),
|
||||
atan(y.z, x.z));
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
GLM_FUNC_QUALIFIER detail::tvec4<T> atan
|
||||
(
|
||||
detail::tvec4<T> const & y,
|
||||
detail::tvec4<T> const & x
|
||||
)
|
||||
{
|
||||
return detail::tvec4<T>(
|
||||
atan(y.x, x.x),
|
||||
atan(y.y, x.y),
|
||||
atan(y.z, x.z),
|
||||
atan(y.w, x.w));
|
||||
}
|
||||
|
||||
template <typename genType>
|
||||
GLM_FUNC_QUALIFIER genType atan
|
||||
(
|
||||
genType const & x
|
||||
)
|
||||
{
|
||||
GLM_STATIC_ASSERT(detail::type<genType>::is_float, "'atan' only accept floating-point input");
|
||||
|
||||
return ::std::atan(x);
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
GLM_FUNC_QUALIFIER detail::tvec2<T> atan
|
||||
(
|
||||
detail::tvec2<T> const & x
|
||||
)
|
||||
{
|
||||
return detail::tvec2<T>(
|
||||
atan(x.x),
|
||||
atan(x.y));
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
GLM_FUNC_QUALIFIER detail::tvec3<T> atan
|
||||
(
|
||||
detail::tvec3<T> const & x
|
||||
)
|
||||
{
|
||||
return detail::tvec3<T>(
|
||||
atan(x.x),
|
||||
atan(x.y),
|
||||
atan(x.z));
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
GLM_FUNC_QUALIFIER detail::tvec4<T> atan
|
||||
(
|
||||
detail::tvec4<T> const & x
|
||||
)
|
||||
{
|
||||
return detail::tvec4<T>(
|
||||
atan(x.x),
|
||||
atan(x.y),
|
||||
atan(x.z),
|
||||
atan(x.w));
|
||||
}
|
||||
|
||||
// sinh
|
||||
template <typename genType>
|
||||
GLM_FUNC_QUALIFIER genType sinh
|
||||
(
|
||||
genType const & angle
|
||||
)
|
||||
{
|
||||
GLM_STATIC_ASSERT(detail::type<genType>::is_float, "'sinh' only accept floating-point input");
|
||||
|
||||
return std::sinh(angle);
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
GLM_FUNC_QUALIFIER detail::tvec2<T> sinh
|
||||
(
|
||||
detail::tvec2<T> const & angle
|
||||
)
|
||||
{
|
||||
return detail::tvec2<T>(
|
||||
sinh(angle.x),
|
||||
sinh(angle.y));
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
GLM_FUNC_QUALIFIER detail::tvec3<T> sinh
|
||||
(
|
||||
detail::tvec3<T> const & angle
|
||||
)
|
||||
{
|
||||
return detail::tvec3<T>(
|
||||
sinh(angle.x),
|
||||
sinh(angle.y),
|
||||
sinh(angle.z));
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
GLM_FUNC_QUALIFIER detail::tvec4<T> sinh
|
||||
(
|
||||
detail::tvec4<T> const & angle
|
||||
)
|
||||
{
|
||||
return detail::tvec4<T>(
|
||||
sinh(angle.x),
|
||||
sinh(angle.y),
|
||||
sinh(angle.z),
|
||||
sinh(angle.w));
|
||||
}
|
||||
|
||||
// cosh
|
||||
template <typename genType>
|
||||
GLM_FUNC_QUALIFIER genType cosh
|
||||
(
|
||||
genType const & angle
|
||||
)
|
||||
{
|
||||
GLM_STATIC_ASSERT(detail::type<genType>::is_float, "'cosh' only accept floating-point input");
|
||||
|
||||
return std::cosh(angle);
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
GLM_FUNC_QUALIFIER detail::tvec2<T> cosh
|
||||
(
|
||||
detail::tvec2<T> const & angle
|
||||
)
|
||||
{
|
||||
return detail::tvec2<T>(
|
||||
cosh(angle.x),
|
||||
cosh(angle.y));
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
GLM_FUNC_QUALIFIER detail::tvec3<T> cosh
|
||||
(
|
||||
detail::tvec3<T> const & angle
|
||||
)
|
||||
{
|
||||
return detail::tvec3<T>(
|
||||
cosh(angle.x),
|
||||
cosh(angle.y),
|
||||
cosh(angle.z));
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
GLM_FUNC_QUALIFIER detail::tvec4<T> cosh
|
||||
(
|
||||
detail::tvec4<T> const & angle
|
||||
)
|
||||
{
|
||||
return detail::tvec4<T>(
|
||||
cosh(angle.x),
|
||||
cosh(angle.y),
|
||||
cosh(angle.z),
|
||||
cosh(angle.w));
|
||||
}
|
||||
|
||||
// tanh
|
||||
template <typename genType>
|
||||
GLM_FUNC_QUALIFIER genType tanh
|
||||
(
|
||||
genType const & angle
|
||||
)
|
||||
{
|
||||
GLM_STATIC_ASSERT(detail::type<genType>::is_float, "'tanh' only accept floating-point input");
|
||||
|
||||
return std::tanh(angle);
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
GLM_FUNC_QUALIFIER detail::tvec2<T> tanh
|
||||
(
|
||||
detail::tvec2<T> const & angle
|
||||
)
|
||||
{
|
||||
return detail::tvec2<T>(
|
||||
tanh(angle.x),
|
||||
tanh(angle.y));
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
GLM_FUNC_QUALIFIER detail::tvec3<T> tanh
|
||||
(
|
||||
detail::tvec3<T> const & angle
|
||||
)
|
||||
{
|
||||
return detail::tvec3<T>(
|
||||
tanh(angle.x),
|
||||
tanh(angle.y),
|
||||
tanh(angle.z));
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
GLM_FUNC_QUALIFIER detail::tvec4<T> tanh
|
||||
(
|
||||
detail::tvec4<T> const & angle
|
||||
)
|
||||
{
|
||||
return detail::tvec4<T>(
|
||||
tanh(angle.x),
|
||||
tanh(angle.y),
|
||||
tanh(angle.z),
|
||||
tanh(angle.w));
|
||||
}
|
||||
|
||||
// asinh
|
||||
template <typename genType>
|
||||
GLM_FUNC_QUALIFIER genType asinh
|
||||
(
|
||||
genType const & x
|
||||
)
|
||||
{
|
||||
GLM_STATIC_ASSERT(detail::type<genType>::is_float, "'asinh' only accept floating-point input");
|
||||
|
||||
return (x < genType(0) ? genType(-1) : (x > genType(0) ? genType(1) : genType(0))) * log(abs(x) + sqrt(genType(1) + x * x));
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
GLM_FUNC_QUALIFIER detail::tvec2<T> asinh
|
||||
(
|
||||
detail::tvec2<T> const & x
|
||||
)
|
||||
{
|
||||
return detail::tvec2<T>(
|
||||
asinh(x.x),
|
||||
asinh(x.y));
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
GLM_FUNC_QUALIFIER detail::tvec3<T> asinh
|
||||
(
|
||||
detail::tvec3<T> const & x
|
||||
)
|
||||
{
|
||||
return detail::tvec3<T>(
|
||||
asinh(x.x),
|
||||
asinh(x.y),
|
||||
asinh(x.z));
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
GLM_FUNC_QUALIFIER detail::tvec4<T> asinh
|
||||
(
|
||||
detail::tvec4<T> const & x
|
||||
)
|
||||
{
|
||||
return detail::tvec4<T>(
|
||||
asinh(x.x),
|
||||
asinh(x.y),
|
||||
asinh(x.z),
|
||||
asinh(x.w));
|
||||
}
|
||||
|
||||
// acosh
|
||||
template <typename genType>
|
||||
GLM_FUNC_QUALIFIER genType acosh
|
||||
(
|
||||
genType const & x
|
||||
)
|
||||
{
|
||||
GLM_STATIC_ASSERT(detail::type<genType>::is_float, "'acosh' only accept floating-point input");
|
||||
|
||||
if(x < genType(1))
|
||||
return genType(0);
|
||||
return log(x + sqrt(x * x - genType(1)));
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
GLM_FUNC_QUALIFIER detail::tvec2<T> acosh
|
||||
(
|
||||
detail::tvec2<T> const & x
|
||||
)
|
||||
{
|
||||
return detail::tvec2<T>(
|
||||
acosh(x.x),
|
||||
acosh(x.y));
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
GLM_FUNC_QUALIFIER detail::tvec3<T> acosh
|
||||
(
|
||||
detail::tvec3<T> const & x
|
||||
)
|
||||
{
|
||||
return detail::tvec3<T>(
|
||||
acosh(x.x),
|
||||
acosh(x.y),
|
||||
acosh(x.z));
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
GLM_FUNC_QUALIFIER detail::tvec4<T> acosh
|
||||
(
|
||||
detail::tvec4<T> const & x
|
||||
)
|
||||
{
|
||||
return detail::tvec4<T>(
|
||||
acosh(x.x),
|
||||
acosh(x.y),
|
||||
acosh(x.z),
|
||||
acosh(x.w));
|
||||
}
|
||||
|
||||
// atanh
|
||||
template <typename genType>
|
||||
GLM_FUNC_QUALIFIER genType atanh
|
||||
(
|
||||
genType const & x
|
||||
)
|
||||
{
|
||||
GLM_STATIC_ASSERT(detail::type<genType>::is_float, "'atanh' only accept floating-point input");
|
||||
|
||||
if(abs(x) >= genType(1))
|
||||
return 0;
|
||||
return genType(0.5) * log((genType(1) + x) / (genType(1) - x));
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
GLM_FUNC_QUALIFIER detail::tvec2<T> atanh
|
||||
(
|
||||
detail::tvec2<T> const & x
|
||||
)
|
||||
{
|
||||
return detail::tvec2<T>(
|
||||
atanh(x.x),
|
||||
atanh(x.y));
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
GLM_FUNC_QUALIFIER detail::tvec3<T> atanh
|
||||
(
|
||||
detail::tvec3<T> const & x
|
||||
)
|
||||
{
|
||||
return detail::tvec3<T>(
|
||||
atanh(x.x),
|
||||
atanh(x.y),
|
||||
atanh(x.z));
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
GLM_FUNC_QUALIFIER detail::tvec4<T> atanh
|
||||
(
|
||||
detail::tvec4<T> const & x
|
||||
)
|
||||
{
|
||||
return detail::tvec4<T>(
|
||||
atanh(x.x),
|
||||
atanh(x.y),
|
||||
atanh(x.z),
|
||||
atanh(x.w));
|
||||
}
|
||||
|
||||
}//namespace trigonometric
|
||||
}//namespace function
|
||||
}//namespace core
|
||||
}//namespace glm
|
219
ExternalLibs/glm/core/func_vector_relational.hpp
Normal file
219
ExternalLibs/glm/core/func_vector_relational.hpp
Normal file
|
@ -0,0 +1,219 @@
|
|||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// OpenGL Mathematics Copyright (c) 2005 - 2011 G-Truc Creation (www.g-truc.net)
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// Created : 2008-08-03
|
||||
// Updated : 2008-09-09
|
||||
// Licence : This source is under MIT License
|
||||
// File : glm/core/func_vector_relational.hpp
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#ifndef glm_core_func_vector_relational
|
||||
#define glm_core_func_vector_relational
|
||||
|
||||
#include "_detail.hpp"
|
||||
|
||||
namespace glm
|
||||
{
|
||||
namespace test{
|
||||
void main_core_func_vector_relational();
|
||||
}//namespace test
|
||||
|
||||
namespace core{
|
||||
namespace function{
|
||||
//! Define vector relational functions from Section 8.6 of GLSL 1.30.8 specification.
|
||||
//! Included in glm namespace.
|
||||
namespace vector_relational
|
||||
{
|
||||
/// \addtogroup core_funcs
|
||||
///@{
|
||||
|
||||
//! Returns the component-wise comparison result of x < y.
|
||||
//!
|
||||
//! \li <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/lessThan.xml">GLSL lessThan man page</a>
|
||||
//! \li GLSL 1.30.08 specification, section 8.6
|
||||
template <typename T, template <typename> class vecType>
|
||||
GLM_FUNC_QUALIFIER typename vecType<T>::bool_type lessThan
|
||||
(
|
||||
vecType<T> const & x,
|
||||
vecType<T> const & y
|
||||
)
|
||||
{
|
||||
GLM_STATIC_ASSERT(detail::is_vector<vecType<T> >::_YES,
|
||||
"Invalid template instantiation of 'lessThan', GLM vector types required");
|
||||
GLM_STATIC_ASSERT(detail::is_bool<T>::_NO,
|
||||
"Invalid template instantiation of 'lessThan', GLM vector types required floating-point or integer value types vectors");
|
||||
|
||||
typename vecType<bool>::bool_type Result(vecType<bool>::null);
|
||||
for(typename vecType<bool>::size_type i = 0; i < vecType<bool>::value_size(); ++i)
|
||||
Result[i] = x[i] < y[i];
|
||||
|
||||
return Result;
|
||||
}
|
||||
|
||||
//! Returns the component-wise comparison of result x <= y.
|
||||
//!
|
||||
//! \li <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/lessThanEqual.xml">GLSL lessThanEqual man page</a>
|
||||
//! \li GLSL 1.30.08 specification, section 8.6
|
||||
template <typename T, template <typename> class vecType>
|
||||
GLM_FUNC_QUALIFIER typename vecType<T>::bool_type lessThanEqual
|
||||
(
|
||||
vecType<T> const & x,
|
||||
vecType<T> const & y
|
||||
)
|
||||
{
|
||||
GLM_STATIC_ASSERT(detail::is_vector<vecType<T> >::_YES,
|
||||
"Invalid template instantiation of 'lessThanEqual', GLM vector types required");
|
||||
GLM_STATIC_ASSERT(detail::is_bool<T>::_NO,
|
||||
"Invalid template instantiation of 'lessThanEqual', GLM vector types required floating-point or integer value types vectors");
|
||||
|
||||
typename vecType<bool>::bool_type Result(vecType<bool>::null);
|
||||
for(typename vecType<bool>::size_type i = 0; i < vecType<bool>::value_size(); ++i)
|
||||
Result[i] = x[i] <= y[i];
|
||||
return Result;
|
||||
}
|
||||
|
||||
//! Returns the component-wise comparison of result x > y.
|
||||
//!
|
||||
//! \li <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/greaterThan.xml">GLSL greaterThan man page</a>
|
||||
//! \li GLSL 1.30.08 specification, section 8.6
|
||||
template <typename T, template <typename> class vecType>
|
||||
GLM_FUNC_QUALIFIER typename vecType<T>::bool_type greaterThan
|
||||
(
|
||||
vecType<T> const & x,
|
||||
vecType<T> const & y
|
||||
)
|
||||
{
|
||||
GLM_STATIC_ASSERT(detail::is_vector<vecType<T> >::_YES,
|
||||
"Invalid template instantiation of 'greaterThan', GLM vector types required");
|
||||
GLM_STATIC_ASSERT(detail::is_bool<T>::_NO,
|
||||
"Invalid template instantiation of 'greaterThan', GLM vector types required floating-point or integer value types vectors");
|
||||
|
||||
typename vecType<bool>::bool_type Result(vecType<bool>::null);
|
||||
for(typename vecType<bool>::size_type i = 0; i < vecType<bool>::value_size(); ++i)
|
||||
Result[i] = x[i] > y[i];
|
||||
return Result;
|
||||
}
|
||||
|
||||
//! Returns the component-wise comparison of result x >= y.
|
||||
//!
|
||||
//! \li <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/greaterThanEqual.xml">GLSL greaterThanEqual man page</a>
|
||||
//! \li GLSL 1.30.08 specification, section 8.6
|
||||
template <typename T, template <typename> class vecType>
|
||||
GLM_FUNC_QUALIFIER typename vecType<T>::bool_type greaterThanEqual
|
||||
(
|
||||
vecType<T> const & x,
|
||||
vecType<T> const & y
|
||||
)
|
||||
{
|
||||
GLM_STATIC_ASSERT(detail::is_vector<vecType<T> >::_YES,
|
||||
"Invalid template instantiation of 'greaterThanEqual', GLM vector types required");
|
||||
GLM_STATIC_ASSERT(detail::is_bool<T>::_NO,
|
||||
"Invalid template instantiation of 'greaterThanEqual', GLM vector types required floating-point or integer value types vectors");
|
||||
|
||||
typename vecType<bool>::bool_type Result(vecType<bool>::null);
|
||||
for(typename vecType<bool>::size_type i = 0; i < vecType<bool>::value_size(); ++i)
|
||||
Result[i] = x[i] >= y[i];
|
||||
return Result;
|
||||
}
|
||||
|
||||
//! Returns the component-wise comparison of result x == y.
|
||||
//!
|
||||
//! \li <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/equal.xml">GLSL equal man page</a>
|
||||
//! \li GLSL 1.30.08 specification, section 8.6
|
||||
template <typename T, template <typename> class vecType>
|
||||
GLM_FUNC_QUALIFIER typename vecType<T>::bool_type equal
|
||||
(
|
||||
vecType<T> const & x,
|
||||
vecType<T> const & y
|
||||
)
|
||||
{
|
||||
GLM_STATIC_ASSERT(detail::is_vector<vecType<T> >::_YES,
|
||||
"Invalid template instantiation of 'equal', GLM vector types required");
|
||||
|
||||
typename vecType<bool>::bool_type Result(vecType<bool>::null);
|
||||
for(typename vecType<bool>::size_type i = 0; i < vecType<bool>::value_size(); ++i)
|
||||
Result[i] = x[i] == y[i];
|
||||
return Result;
|
||||
}
|
||||
|
||||
//! Returns the component-wise comparison of result x != y.
|
||||
//!
|
||||
//! \li <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/notEqual.xml">GLSL notEqual man page</a>
|
||||
//! \li GLSL 1.30.08 specification, section 8.6
|
||||
template <typename T, template <typename> class vecType>
|
||||
GLM_FUNC_QUALIFIER typename vecType<T>::bool_type notEqual
|
||||
(
|
||||
vecType<T> const & x,
|
||||
vecType<T> const & y
|
||||
)
|
||||
{
|
||||
GLM_STATIC_ASSERT(detail::is_vector<vecType<T> >::_YES,
|
||||
"Invalid template instantiation of 'notEqual', GLM vector types required");
|
||||
|
||||
typename vecType<bool>::bool_type Result(vecType<bool>::null);
|
||||
for(typename vecType<bool>::size_type i = 0; i < vecType<bool>::value_size(); ++i)
|
||||
Result[i] = x[i] != y[i];
|
||||
return Result;
|
||||
}
|
||||
|
||||
//! Returns true if any component of x is true.
|
||||
//!
|
||||
//! \li <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/any.xml">GLSL any man page</a>
|
||||
//! \li GLSL 1.30.08 specification, section 8.6
|
||||
template <template <typename> class vecType>
|
||||
GLM_FUNC_QUALIFIER bool any(vecType<bool> const & v)
|
||||
{
|
||||
GLM_STATIC_ASSERT(detail::is_vector<vecType<bool> >::_YES,
|
||||
"Invalid template instantiation of 'any', GLM boolean vector types required");
|
||||
|
||||
bool Result = false;
|
||||
for(typename vecType<bool>::size_type i = 0; i < vecType<bool>::value_size(); ++i)
|
||||
Result = Result || v[i];
|
||||
return Result;
|
||||
}
|
||||
|
||||
//! Returns true if all components of x are true.
|
||||
//!
|
||||
//! \li <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/all.xml">GLSL all man page</a>
|
||||
//! \li GLSL 1.30.08 specification, section 8.6
|
||||
template <template <typename> class vecType>
|
||||
GLM_FUNC_QUALIFIER bool all(vecType<bool> const & v)
|
||||
{
|
||||
GLM_STATIC_ASSERT(detail::is_vector<vecType<bool> >::_YES,
|
||||
"Invalid template instantiation of 'all', GLM boolean vector types required");
|
||||
|
||||
bool Result = true;
|
||||
for(typename vecType<bool>::size_type i = 0; i < vecType<bool>::value_size(); ++i)
|
||||
Result = Result && v[i];
|
||||
return Result;
|
||||
}
|
||||
|
||||
//! Returns the component-wise logical complement of x.
|
||||
//! /!\ Because of language incompatibilities between C++ and GLSL, GLM defines the function not but not_ instead.
|
||||
//!
|
||||
//! \li <a href="http://www.opengl.org/sdk/docs/manglsl/xhtml/not.xml">GLSL not man page</a>
|
||||
//! \li GLSL 1.30.08 specification, section 8.6
|
||||
template <template <typename> class vecType>
|
||||
GLM_FUNC_QUALIFIER vecType<bool> not_(vecType<bool> const & v)
|
||||
{
|
||||
GLM_STATIC_ASSERT(detail::is_vector<vecType<bool> >::_YES,
|
||||
"Invalid template instantiation of 'not_', GLM vector types required");
|
||||
|
||||
typename vecType<bool>::bool_type Result(vecType<bool>::null);
|
||||
for(typename vecType<bool>::size_type i = 0; i < vecType<bool>::value_size(); ++i)
|
||||
Result[i] = !v[i];
|
||||
return Result;
|
||||
}
|
||||
|
||||
///@}
|
||||
|
||||
}//namespace vector_relational
|
||||
}//namespace function
|
||||
}//namespace core
|
||||
|
||||
using namespace core::function::vector_relational;
|
||||
}//namespace glm
|
||||
|
||||
#include "func_vector_relational.inl"
|
||||
|
||||
#endif//glm_core_func_vector_relational
|
20
ExternalLibs/glm/core/func_vector_relational.inl
Normal file
20
ExternalLibs/glm/core/func_vector_relational.inl
Normal file
|
@ -0,0 +1,20 @@
|
|||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// OpenGL Mathematics Copyright (c) 2005 - 2011 G-Truc Creation (www.g-truc.net)
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// Created : 2008-08-03
|
||||
// Updated : 2008-09-14
|
||||
// Licence : This source is under MIT License
|
||||
// File : glm/core/func_vector_relational.inl
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
namespace glm
|
||||
{
|
||||
namespace core{
|
||||
namespace function{
|
||||
namespace vector_relational{
|
||||
|
||||
}//namespace vector_relational
|
||||
}//namespace function
|
||||
}//namespace core
|
||||
}//namespace glm
|
||||
|
21
ExternalLibs/glm/core/hint.hpp
Normal file
21
ExternalLibs/glm/core/hint.hpp
Normal file
|
@ -0,0 +1,21 @@
|
|||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// OpenGL Mathematics Copyright (c) 2005 - 2011 G-Truc Creation (www.g-truc.net)
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// Created : 2008-08-14
|
||||
// Updated : 2008-08-14
|
||||
// Licence : This source is under MIT License
|
||||
// File : glm/core/hint.hpp
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#ifndef glm_core_type
|
||||
#define glm_core_type
|
||||
|
||||
namespace glm
|
||||
{
|
||||
// Use dont_care, nicest and fastest to optimize implementations.
|
||||
class dont_care {};
|
||||
class nicest {};
|
||||
class fastest {};
|
||||
};
|
||||
|
||||
#endif//glm_core_type
|
70
ExternalLibs/glm/core/intrinsic_common.hpp
Normal file
70
ExternalLibs/glm/core/intrinsic_common.hpp
Normal file
|
@ -0,0 +1,70 @@
|
|||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// OpenGL Mathematics Copyright (c) 2005 - 2011 G-Truc Creation (www.g-truc.net)
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// Created : 2009-05-11
|
||||
// Updated : 2009-05-11
|
||||
// Licence : This source is under MIT License
|
||||
// File : glm/core/intrinsic_common.hpp
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#ifndef glm_detail_intrinsic_common
|
||||
#define glm_detail_intrinsic_common
|
||||
|
||||
#include "setup.hpp"
|
||||
|
||||
#if((GLM_ARCH & GLM_ARCH_SSE2) != GLM_ARCH_SSE2)
|
||||
# error "SSE2 instructions not supported or enabled"
|
||||
#else
|
||||
|
||||
namespace glm{
|
||||
namespace detail
|
||||
{
|
||||
__m128 sse_abs_ps(__m128 x);
|
||||
|
||||
__m128 sse_sgn_ps(__m128 x);
|
||||
|
||||
//floor
|
||||
__m128 sse_flr_ps(__m128 v);
|
||||
|
||||
//trunc
|
||||
__m128 sse_trc_ps(__m128 v);
|
||||
|
||||
//round
|
||||
__m128 sse_nd_ps(__m128 v);
|
||||
|
||||
//roundEven
|
||||
__m128 sse_rde_ps(__m128 v);
|
||||
|
||||
__m128 sse_rnd_ps(__m128 x);
|
||||
|
||||
__m128 sse_ceil_ps(__m128 v);
|
||||
|
||||
__m128 sse_frc_ps(__m128 x);
|
||||
|
||||
__m128 sse_mod_ps(__m128 x, __m128 y);
|
||||
|
||||
__m128 sse_modf_ps(__m128 x, __m128i & i);
|
||||
|
||||
//GLM_FUNC_QUALIFIER __m128 sse_min_ps(__m128 x, __m128 y)
|
||||
|
||||
//GLM_FUNC_QUALIFIER __m128 sse_max_ps(__m128 x, __m128 y)
|
||||
|
||||
__m128 sse_clp_ps(__m128 v, __m128 minVal, __m128 maxVal);
|
||||
|
||||
__m128 sse_mix_ps(__m128 v1, __m128 v2, __m128 a);
|
||||
|
||||
__m128 sse_stp_ps(__m128 edge, __m128 x);
|
||||
|
||||
__m128 sse_ssp_ps(__m128 edge0, __m128 edge1, __m128 x);
|
||||
|
||||
__m128 sse_nan_ps(__m128 x);
|
||||
|
||||
__m128 sse_inf_ps(__m128 x);
|
||||
|
||||
}//namespace detail
|
||||
}//namespace glm
|
||||
|
||||
#include "intrinsic_common.inl"
|
||||
|
||||
#endif//GLM_ARCH
|
||||
#endif//glm_detail_intrinsic_common
|
277
ExternalLibs/glm/core/intrinsic_common.inl
Normal file
277
ExternalLibs/glm/core/intrinsic_common.inl
Normal file
|
@ -0,0 +1,277 @@
|
|||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// OpenGL Mathematics Copyright (c) 2005 - 2011 G-Truc Creation (www.g-truc.net)
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// Created : 2009-05-08
|
||||
// Updated : 2009-05-08
|
||||
// Licence : This source is under MIT License
|
||||
// File : glm/core/intrinsic_common.inl
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
namespace glm{
|
||||
namespace detail{
|
||||
|
||||
union ieee754_QNAN
|
||||
{
|
||||
const float f;
|
||||
struct i
|
||||
{
|
||||
const unsigned int mantissa:23, exp:8, sign:1;
|
||||
};
|
||||
|
||||
ieee754_QNAN() : f(0.0)/*, mantissa(0x7FFFFF), exp(0xFF), sign(0x0)*/ {}
|
||||
};
|
||||
|
||||
static const __m128 zero = _mm_setzero_ps();
|
||||
static const __m128 one = _mm_set_ps1(1.0f);
|
||||
static const __m128 minus_one = _mm_set_ps1(-1.0f);
|
||||
static const __m128 two = _mm_set_ps1(2.0f);
|
||||
static const __m128 three = _mm_set_ps1(3.0f);
|
||||
static const __m128 pi = _mm_set_ps1(3.1415926535897932384626433832795f);
|
||||
static const __m128 hundred_eighty = _mm_set_ps1(180.f);
|
||||
static const __m128 pi_over_hundred_eighty = _mm_set_ps1(0.017453292519943295769236907684886f);
|
||||
static const __m128 hundred_eighty_over_pi = _mm_set_ps1(57.295779513082320876798154814105f);
|
||||
|
||||
static const ieee754_QNAN absMask;
|
||||
static const __m128 abs4Mask = _mm_set_ps1(absMask.f);
|
||||
|
||||
static const __m128 _epi32_sign_mask = _mm_castsi128_ps(_mm_set1_epi32(0x80000000));
|
||||
//static const __m128 _epi32_inv_sign_mask = _mm_castsi128_ps(_mm_set1_epi32(0x7FFFFFFF));
|
||||
//static const __m128 _epi32_mant_mask = _mm_castsi128_ps(_mm_set1_epi32(0x7F800000));
|
||||
//static const __m128 _epi32_inv_mant_mask = _mm_castsi128_ps(_mm_set1_epi32(0x807FFFFF));
|
||||
//static const __m128 _epi32_min_norm_pos = _mm_castsi128_ps(_mm_set1_epi32(0x00800000));
|
||||
static const __m128 _epi32_0 = _mm_set_ps1(0);
|
||||
static const __m128 _epi32_1 = _mm_set_ps1(1);
|
||||
static const __m128 _epi32_2 = _mm_set_ps1(2);
|
||||
static const __m128 _epi32_3 = _mm_set_ps1(3);
|
||||
static const __m128 _epi32_4 = _mm_set_ps1(4);
|
||||
static const __m128 _epi32_5 = _mm_set_ps1(5);
|
||||
static const __m128 _epi32_6 = _mm_set_ps1(6);
|
||||
static const __m128 _epi32_7 = _mm_set_ps1(7);
|
||||
static const __m128 _epi32_8 = _mm_set_ps1(8);
|
||||
static const __m128 _epi32_9 = _mm_set_ps1(9);
|
||||
static const __m128 _epi32_127 = _mm_set_ps1(127);
|
||||
//static const __m128 _epi32_ninf = _mm_castsi128_ps(_mm_set1_epi32(0xFF800000));
|
||||
//static const __m128 _epi32_pinf = _mm_castsi128_ps(_mm_set1_epi32(0x7F800000));
|
||||
|
||||
static const __m128 _ps_1_3 = _mm_set_ps1(0.33333333333333333333333333333333f);
|
||||
static const __m128 _ps_0p5 = _mm_set_ps1(0.5f);
|
||||
static const __m128 _ps_1 = _mm_set_ps1(1.0f);
|
||||
static const __m128 _ps_m1 = _mm_set_ps1(-1.0f);
|
||||
static const __m128 _ps_2 = _mm_set_ps1(2.0f);
|
||||
static const __m128 _ps_3 = _mm_set_ps1(3.0f);
|
||||
static const __m128 _ps_127 = _mm_set_ps1(127.0f);
|
||||
static const __m128 _ps_255 = _mm_set_ps1(255.0f);
|
||||
static const __m128 _ps_2pow23 = _mm_set_ps1(8388608.0f);
|
||||
|
||||
static const __m128 _ps_1_0_0_0 = _mm_set_ps(1.0f, 0.0f, 0.0f, 0.0f);
|
||||
static const __m128 _ps_0_1_0_0 = _mm_set_ps(0.0f, 1.0f, 0.0f, 0.0f);
|
||||
static const __m128 _ps_0_0_1_0 = _mm_set_ps(0.0f, 0.0f, 1.0f, 0.0f);
|
||||
static const __m128 _ps_0_0_0_1 = _mm_set_ps(0.0f, 0.0f, 0.0f, 1.0f);
|
||||
|
||||
static const __m128 _ps_pi = _mm_set_ps1(3.1415926535897932384626433832795f);
|
||||
static const __m128 _ps_pi2 = _mm_set_ps1(6.283185307179586476925286766560f);
|
||||
static const __m128 _ps_2_pi = _mm_set_ps1(0.63661977236758134307553505349006f);
|
||||
static const __m128 _ps_pi_2 = _mm_set_ps1(1.5707963267948966192313216916398f);
|
||||
static const __m128 _ps_4_pi = _mm_set_ps1(1.2732395447351626861510701069801f);
|
||||
static const __m128 _ps_pi_4 = _mm_set_ps1(0.78539816339744830961566084581988f);
|
||||
|
||||
static const __m128 _ps_sincos_p0 = _mm_set_ps1(0.15707963267948963959e1f);
|
||||
static const __m128 _ps_sincos_p1 = _mm_set_ps1(-0.64596409750621907082e0f);
|
||||
static const __m128 _ps_sincos_p2 = _mm_set_ps1(0.7969262624561800806e-1f);
|
||||
static const __m128 _ps_sincos_p3 = _mm_set_ps1(-0.468175413106023168e-2f);
|
||||
static const __m128 _ps_tan_p0 = _mm_set_ps1(-1.79565251976484877988e7f);
|
||||
static const __m128 _ps_tan_p1 = _mm_set_ps1(1.15351664838587416140e6f);
|
||||
static const __m128 _ps_tan_p2 = _mm_set_ps1(-1.30936939181383777646e4f);
|
||||
static const __m128 _ps_tan_q0 = _mm_set_ps1(-5.38695755929454629881e7f);
|
||||
static const __m128 _ps_tan_q1 = _mm_set_ps1(2.50083801823357915839e7f);
|
||||
static const __m128 _ps_tan_q2 = _mm_set_ps1(-1.32089234440210967447e6f);
|
||||
static const __m128 _ps_tan_q3 = _mm_set_ps1(1.36812963470692954678e4f);
|
||||
static const __m128 _ps_tan_poleval = _mm_set_ps1(3.68935e19f);
|
||||
static const __m128 _ps_atan_t0 = _mm_set_ps1(-0.91646118527267623468e-1f);
|
||||
static const __m128 _ps_atan_t1 = _mm_set_ps1(-0.13956945682312098640e1f);
|
||||
static const __m128 _ps_atan_t2 = _mm_set_ps1(-0.94393926122725531747e2f);
|
||||
static const __m128 _ps_atan_t3 = _mm_set_ps1(0.12888383034157279340e2f);
|
||||
static const __m128 _ps_atan_s0 = _mm_set_ps1(0.12797564625607904396e1f);
|
||||
static const __m128 _ps_atan_s1 = _mm_set_ps1(0.21972168858277355914e1f);
|
||||
static const __m128 _ps_atan_s2 = _mm_set_ps1(0.68193064729268275701e1f);
|
||||
static const __m128 _ps_atan_s3 = _mm_set_ps1(0.28205206687035841409e2f);
|
||||
|
||||
static const __m128 _ps_exp_hi = _mm_set_ps1(88.3762626647949f);
|
||||
static const __m128 _ps_exp_lo = _mm_set_ps1(-88.3762626647949f);
|
||||
static const __m128 _ps_exp_rln2 = _mm_set_ps1(1.4426950408889634073599f);
|
||||
static const __m128 _ps_exp_p0 = _mm_set_ps1(1.26177193074810590878e-4f);
|
||||
static const __m128 _ps_exp_p1 = _mm_set_ps1(3.02994407707441961300e-2f);
|
||||
static const __m128 _ps_exp_q0 = _mm_set_ps1(3.00198505138664455042e-6f);
|
||||
static const __m128 _ps_exp_q1 = _mm_set_ps1(2.52448340349684104192e-3f);
|
||||
static const __m128 _ps_exp_q2 = _mm_set_ps1(2.27265548208155028766e-1f);
|
||||
static const __m128 _ps_exp_q3 = _mm_set_ps1(2.00000000000000000009e0f);
|
||||
static const __m128 _ps_exp_c1 = _mm_set_ps1(6.93145751953125e-1f);
|
||||
static const __m128 _ps_exp_c2 = _mm_set_ps1(1.42860682030941723212e-6f);
|
||||
static const __m128 _ps_exp2_hi = _mm_set_ps1(127.4999961853f);
|
||||
static const __m128 _ps_exp2_lo = _mm_set_ps1(-127.4999961853f);
|
||||
static const __m128 _ps_exp2_p0 = _mm_set_ps1(2.30933477057345225087e-2f);
|
||||
static const __m128 _ps_exp2_p1 = _mm_set_ps1(2.02020656693165307700e1f);
|
||||
static const __m128 _ps_exp2_p2 = _mm_set_ps1(1.51390680115615096133e3f);
|
||||
static const __m128 _ps_exp2_q0 = _mm_set_ps1(2.33184211722314911771e2f);
|
||||
static const __m128 _ps_exp2_q1 = _mm_set_ps1(4.36821166879210612817e3f);
|
||||
static const __m128 _ps_log_p0 = _mm_set_ps1(-7.89580278884799154124e-1f);
|
||||
static const __m128 _ps_log_p1 = _mm_set_ps1(1.63866645699558079767e1f);
|
||||
static const __m128 _ps_log_p2 = _mm_set_ps1(-6.41409952958715622951e1f);
|
||||
static const __m128 _ps_log_q0 = _mm_set_ps1(-3.56722798256324312549e1f);
|
||||
static const __m128 _ps_log_q1 = _mm_set_ps1(3.12093766372244180303e2f);
|
||||
static const __m128 _ps_log_q2 = _mm_set_ps1(-7.69691943550460008604e2f);
|
||||
static const __m128 _ps_log_c0 = _mm_set_ps1(0.693147180559945f);
|
||||
static const __m128 _ps_log2_c0 = _mm_set_ps1(1.44269504088896340735992f);
|
||||
|
||||
GLM_FUNC_QUALIFIER __m128 sse_abs_ps(__m128 x)
|
||||
{
|
||||
return _mm_and_ps(glm::detail::abs4Mask, x);
|
||||
}
|
||||
|
||||
GLM_FUNC_QUALIFIER __m128 sse_sgn_ps(__m128 x)
|
||||
{
|
||||
__m128 Neg = _mm_set1_ps(-1.0f);
|
||||
__m128 Pos = _mm_set1_ps(1.0f);
|
||||
|
||||
__m128 Cmp0 = _mm_cmplt_ps(x, zero);
|
||||
__m128 Cmp1 = _mm_cmpgt_ps(x, zero);
|
||||
|
||||
__m128 And0 = _mm_and_ps(Cmp0, Neg);
|
||||
__m128 And1 = _mm_and_ps(Cmp1, Pos);
|
||||
|
||||
return _mm_or_ps(And0, And1);
|
||||
}
|
||||
|
||||
//floor
|
||||
GLM_FUNC_QUALIFIER __m128 sse_flr_ps(__m128 x)
|
||||
{
|
||||
__m128 rnd0 = sse_rnd_ps(x);
|
||||
__m128 cmp0 = _mm_cmplt_ps(x, rnd0);
|
||||
__m128 and0 = _mm_and_ps(cmp0, glm::detail::_ps_1);
|
||||
__m128 sub0 = _mm_sub_ps(rnd0, and0);
|
||||
return sub0;
|
||||
}
|
||||
|
||||
//trunc
|
||||
/*
|
||||
GLM_FUNC_QUALIFIER __m128 _mm_trc_ps(__m128 v)
|
||||
{
|
||||
return __m128();
|
||||
}
|
||||
*/
|
||||
//round
|
||||
GLM_FUNC_QUALIFIER __m128 sse_rnd_ps(__m128 x)
|
||||
{
|
||||
__m128 and0 = _mm_and_ps(glm::detail::_epi32_sign_mask, x);
|
||||
__m128 or0 = _mm_or_ps(and0, glm::detail::_ps_2pow23);
|
||||
__m128 add0 = _mm_add_ps(x, or0);
|
||||
__m128 sub0 = _mm_sub_ps(add0, or0);
|
||||
return sub0;
|
||||
}
|
||||
|
||||
//roundEven
|
||||
GLM_FUNC_QUALIFIER __m128 sse_rde_ps(__m128 x)
|
||||
{
|
||||
__m128 and0 = _mm_and_ps(glm::detail::_epi32_sign_mask, x);
|
||||
__m128 or0 = _mm_or_ps(and0, glm::detail::_ps_2pow23);
|
||||
__m128 add0 = _mm_add_ps(x, or0);
|
||||
__m128 sub0 = _mm_sub_ps(add0, or0);
|
||||
return sub0;
|
||||
}
|
||||
|
||||
GLM_FUNC_QUALIFIER __m128 sse_ceil_ps(__m128 x)
|
||||
{
|
||||
__m128 rnd0 = sse_rnd_ps(x);
|
||||
__m128 cmp0 = _mm_cmpgt_ps(x, rnd0);
|
||||
__m128 and0 = _mm_and_ps(cmp0, glm::detail::_ps_1);
|
||||
__m128 add0 = _mm_add_ps(rnd0, and0);
|
||||
return add0;
|
||||
}
|
||||
|
||||
GLM_FUNC_QUALIFIER __m128 sse_frc_ps(__m128 x)
|
||||
{
|
||||
__m128 flr0 = sse_flr_ps(x);
|
||||
__m128 sub0 = _mm_sub_ps(x, flr0);
|
||||
return sub0;
|
||||
}
|
||||
|
||||
GLM_FUNC_QUALIFIER __m128 sse_mod_ps(__m128 x, __m128 y)
|
||||
{
|
||||
__m128 div0 = _mm_div_ps(x, y);
|
||||
__m128 flr0 = sse_flr_ps(div0);
|
||||
__m128 mul0 = _mm_mul_ps(y, flr0);
|
||||
__m128 sub0 = _mm_sub_ps(x, mul0);
|
||||
return sub0;
|
||||
}
|
||||
|
||||
GLM_FUNC_QUALIFIER __m128 sse_modf_ps(__m128 x, __m128i & i)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
//GLM_FUNC_QUALIFIER __m128 _mm_min_ps(__m128 x, __m128 y)
|
||||
|
||||
//GLM_FUNC_QUALIFIER __m128 _mm_max_ps(__m128 x, __m128 y)
|
||||
|
||||
GLM_FUNC_QUALIFIER __m128 sse_clp_ps(__m128 v, __m128 minVal, __m128 maxVal)
|
||||
{
|
||||
__m128 min0 = _mm_min_ps(v, maxVal);
|
||||
__m128 max0 = _mm_max_ps(min0, minVal);
|
||||
return max0;
|
||||
}
|
||||
|
||||
GLM_FUNC_QUALIFIER __m128 sse_mix_ps(__m128 v1, __m128 v2, __m128 a)
|
||||
{
|
||||
__m128 sub0 = _mm_sub_ps(glm::detail::one, a);
|
||||
__m128 mul0 = _mm_mul_ps(v1, sub0);
|
||||
__m128 mul1 = _mm_mul_ps(v2, a);
|
||||
__m128 add0 = _mm_add_ps(mul0, mul1);
|
||||
return add0;
|
||||
}
|
||||
|
||||
GLM_FUNC_QUALIFIER __m128 sse_stp_ps(__m128 edge, __m128 x)
|
||||
{
|
||||
__m128 cmp = _mm_cmple_ps(x, edge);
|
||||
if(_mm_movemask_ps(cmp) == 0)
|
||||
return glm::detail::one;
|
||||
else
|
||||
return glm::detail::zero;
|
||||
}
|
||||
|
||||
GLM_FUNC_QUALIFIER __m128 sse_ssp_ps(__m128 edge0, __m128 edge1, __m128 x)
|
||||
{
|
||||
__m128 sub0 = _mm_sub_ps(x, edge0);
|
||||
__m128 sub1 = _mm_sub_ps(edge1, edge0);
|
||||
__m128 div0 = _mm_sub_ps(sub0, sub1);
|
||||
__m128 clp0 = sse_clp_ps(div0, glm::detail::zero, glm::detail::one);
|
||||
__m128 mul0 = _mm_mul_ps(glm::detail::two, clp0);
|
||||
__m128 sub2 = _mm_sub_ps(glm::detail::three, mul0);
|
||||
__m128 mul1 = _mm_mul_ps(clp0, clp0);
|
||||
__m128 mul2 = _mm_mul_ps(mul1, sub2);
|
||||
return mul2;
|
||||
}
|
||||
|
||||
GLM_FUNC_QUALIFIER __m128 sse_nan_ps(__m128 x)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
GLM_FUNC_QUALIFIER __m128 sse_inf_ps(__m128 x)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
// SSE scalar reciprocal sqrt using rsqrt op, plus one Newton-Rhaphson iteration
|
||||
// By Elan Ruskin, http://assemblyrequired.crashworks.org/
|
||||
GLM_FUNC_QUALIFIER __m128 sse_sqrt_wip_ss(__m128 const & x)
|
||||
{
|
||||
__m128 recip = _mm_rsqrt_ss(x); // "estimate" opcode
|
||||
const static __m128 three = {3, 3, 3, 3}; // aligned consts for fast load
|
||||
const static __m128 half = {0.5,0.5,0.5,0.5};
|
||||
__m128 halfrecip = _mm_mul_ss(half, recip);
|
||||
__m128 threeminus_xrr = _mm_sub_ss(three, _mm_mul_ss(x, _mm_mul_ss (recip, recip)));
|
||||
return _mm_mul_ss( halfrecip, threeminus_xrr);
|
||||
}
|
||||
|
||||
}//namespace detail
|
||||
}//namespace glms
|
60
ExternalLibs/glm/core/intrinsic_exponential.hpp
Normal file
60
ExternalLibs/glm/core/intrinsic_exponential.hpp
Normal file
|
@ -0,0 +1,60 @@
|
|||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// OpenGL Mathematics Copyright (c) 2005 - 2011 G-Truc Creation (www.g-truc.net)
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// Created : 2009-05-11
|
||||
// Updated : 2009-05-11
|
||||
// Licence : This source is under MIT License
|
||||
// File : glm/core/intrinsic_exponential.hpp
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#ifndef glm_detail_intrinsic_exponential
|
||||
#define glm_detail_intrinsic_exponential
|
||||
|
||||
#include "setup.hpp"
|
||||
|
||||
#if((GLM_ARCH & GLM_ARCH_SSE2) != GLM_ARCH_SSE2)
|
||||
# error "SSE2 instructions not supported or enabled"
|
||||
#else
|
||||
|
||||
namespace glm{
|
||||
namespace detail
|
||||
{
|
||||
/*
|
||||
GLM_FUNC_QUALIFIER __m128 sse_rsqrt_nr_ss(__m128 const x)
|
||||
{
|
||||
__m128 recip = _mm_rsqrt_ss( x ); // "estimate" opcode
|
||||
const static __m128 three = { 3, 3, 3, 3 }; // aligned consts for fast load
|
||||
const static __m128 half = { 0.5,0.5,0.5,0.5 };
|
||||
__m128 halfrecip = _mm_mul_ss( half, recip );
|
||||
__m128 threeminus_xrr = _mm_sub_ss( three, _mm_mul_ss( x, _mm_mul_ss ( recip, recip ) ) );
|
||||
return _mm_mul_ss( halfrecip, threeminus_xrr );
|
||||
}
|
||||
|
||||
GLM_FUNC_QUALIFIER __m128 sse_normalize_fast_ps( float * RESTRICT vOut, float * RESTRICT vIn )
|
||||
{
|
||||
__m128 x = _mm_load_ss(&vIn[0]);
|
||||
__m128 y = _mm_load_ss(&vIn[1]);
|
||||
__m128 z = _mm_load_ss(&vIn[2]);
|
||||
|
||||
const __m128 l = // compute x*x + y*y + z*z
|
||||
_mm_add_ss(
|
||||
_mm_add_ss( _mm_mul_ss(x,x),
|
||||
_mm_mul_ss(y,y)
|
||||
),
|
||||
_mm_mul_ss( z, z )
|
||||
);
|
||||
|
||||
|
||||
const __m128 rsqt = _mm_rsqrt_nr_ss( l );
|
||||
_mm_store_ss( &vOut[0] , _mm_mul_ss( rsqt, x ) );
|
||||
_mm_store_ss( &vOut[1] , _mm_mul_ss( rsqt, y ) );
|
||||
_mm_store_ss( &vOut[2] , _mm_mul_ss( rsqt, z ) );
|
||||
|
||||
return _mm_mul_ss( l , rsqt );
|
||||
}
|
||||
*/
|
||||
}//namespace detail
|
||||
}//namespace glm
|
||||
|
||||
#endif//GLM_ARCH
|
||||
#endif//glm_detail_intrinsic_exponential
|
0
ExternalLibs/glm/core/intrinsic_exponential.inl
Normal file
0
ExternalLibs/glm/core/intrinsic_exponential.inl
Normal file
57
ExternalLibs/glm/core/intrinsic_geometric.hpp
Normal file
57
ExternalLibs/glm/core/intrinsic_geometric.hpp
Normal file
|
@ -0,0 +1,57 @@
|
|||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// OpenGL Mathematics Copyright (c) 2005 - 2011 G-Truc Creation (www.g-truc.net)
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// Created : 2009-05-08
|
||||
// Updated : 2009-05-08
|
||||
// Licence : This source is under MIT License
|
||||
// File : glm/core/intrinsic_geometric.hpp
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#ifndef glm_core_intrinsic_geometric
|
||||
#define glm_core_intrinsic_geometric
|
||||
|
||||
#include "setup.hpp"
|
||||
|
||||
#if((GLM_ARCH & GLM_ARCH_SSE2) != GLM_ARCH_SSE2)
|
||||
# error "SSE2 instructions not supported or enabled"
|
||||
#else
|
||||
|
||||
#include "intrinsic_common.hpp"
|
||||
|
||||
namespace glm{
|
||||
namespace detail
|
||||
{
|
||||
//length
|
||||
__m128 sse_len_ps(__m128 x);
|
||||
|
||||
//distance
|
||||
__m128 sse_dst_ps(__m128 p0, __m128 p1);
|
||||
|
||||
//dot
|
||||
__m128 sse_dot_ps(__m128 v1, __m128 v2);
|
||||
|
||||
// SSE1
|
||||
__m128 sse_dot_ss(__m128 v1, __m128 v2);
|
||||
|
||||
//cross
|
||||
__m128 sse_xpd_ps(__m128 v1, __m128 v2);
|
||||
|
||||
//normalize
|
||||
__m128 sse_nrm_ps(__m128 v);
|
||||
|
||||
//faceforward
|
||||
__m128 sse_ffd_ps(__m128 N, __m128 I, __m128 Nref);
|
||||
|
||||
//reflect
|
||||
__m128 sse_rfe_ps(__m128 I, __m128 N);
|
||||
|
||||
//refract
|
||||
__m128 sse_rfa_ps(__m128 I, __m128 N, __m128 eta);
|
||||
|
||||
}//namespace detail
|
||||
}//namespace glm
|
||||
|
||||
#include "intrinsic_geometric.inl"
|
||||
|
||||
#endif//GLM_ARCH
|
||||
#endif//glm_core_intrinsic_geometric
|
123
ExternalLibs/glm/core/intrinsic_geometric.inl
Normal file
123
ExternalLibs/glm/core/intrinsic_geometric.inl
Normal file
|
@ -0,0 +1,123 @@
|
|||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// OpenGL Mathematics Copyright (c) 2005 - 2011 G-Truc Creation (www.g-truc.net)
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// Created : 2009-05-08
|
||||
// Updated : 2009-05-08
|
||||
// Licence : This source is under MIT License
|
||||
// File : glm/core/intrinsic_geometric.inl
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
namespace glm{
|
||||
namespace detail{
|
||||
|
||||
//length
|
||||
GLM_FUNC_QUALIFIER __m128 sse_len_ps(__m128 x)
|
||||
{
|
||||
__m128 dot0 = sse_dot_ps(x, x);
|
||||
__m128 sqt0 = _mm_sqrt_ps(dot0);
|
||||
return sqt0;
|
||||
}
|
||||
|
||||
//distance
|
||||
GLM_FUNC_QUALIFIER __m128 sse_dst_ps(__m128 p0, __m128 p1)
|
||||
{
|
||||
__m128 sub0 = _mm_sub_ps(p0, p1);
|
||||
__m128 len0 = sse_len_ps(sub0);
|
||||
return len0;
|
||||
}
|
||||
|
||||
//dot
|
||||
GLM_FUNC_QUALIFIER __m128 sse_dot_ps(__m128 v1, __m128 v2)
|
||||
{
|
||||
__m128 mul0 = _mm_mul_ps(v1, v2);
|
||||
__m128 swp0 = _mm_shuffle_ps(mul0, mul0, _MM_SHUFFLE(2, 3, 0, 1));
|
||||
__m128 add0 = _mm_add_ps(mul0, swp0);
|
||||
__m128 swp1 = _mm_shuffle_ps(add0, add0, _MM_SHUFFLE(0, 1, 2, 3));
|
||||
__m128 add1 = _mm_add_ps(add0, swp1);
|
||||
return add1;
|
||||
}
|
||||
|
||||
// SSE1
|
||||
GLM_FUNC_QUALIFIER __m128 sse_dot_ss(__m128 v1, __m128 v2)
|
||||
{
|
||||
__m128 mul0 = _mm_mul_ps(v1, v2);
|
||||
__m128 mov0 = _mm_movehl_ps(mul0, mul0);
|
||||
__m128 add0 = _mm_add_ps(mov0, mul0);
|
||||
__m128 swp1 = _mm_shuffle_ps(add0, add0, 1);
|
||||
__m128 add1 = _mm_add_ss(add0, swp1);
|
||||
return add1;
|
||||
}
|
||||
|
||||
//cross
|
||||
GLM_FUNC_QUALIFIER __m128 sse_xpd_ps(__m128 v1, __m128 v2)
|
||||
{
|
||||
__m128 swp0 = _mm_shuffle_ps(v1, v1, _MM_SHUFFLE(3, 0, 2, 1));
|
||||
__m128 swp1 = _mm_shuffle_ps(v1, v1, _MM_SHUFFLE(3, 1, 0, 2));
|
||||
__m128 swp2 = _mm_shuffle_ps(v2, v2, _MM_SHUFFLE(3, 0, 2, 1));
|
||||
__m128 swp3 = _mm_shuffle_ps(v2, v2, _MM_SHUFFLE(3, 1, 0, 2));
|
||||
__m128 mul0 = _mm_mul_ps(swp0, swp3);
|
||||
__m128 mul1 = _mm_mul_ps(swp1, swp2);
|
||||
__m128 sub0 = _mm_sub_ps(mul0, mul1);
|
||||
return sub0;
|
||||
}
|
||||
|
||||
//normalize
|
||||
GLM_FUNC_QUALIFIER __m128 sse_nrm_ps(__m128 v)
|
||||
{
|
||||
__m128 dot0 = sse_dot_ps(v, v);
|
||||
__m128 isr0 = _mm_rsqrt_ps(dot0);
|
||||
__m128 mul0 = _mm_mul_ps(v, isr0);
|
||||
return mul0;
|
||||
}
|
||||
|
||||
//faceforward
|
||||
GLM_FUNC_QUALIFIER __m128 sse_ffd_ps(__m128 N, __m128 I, __m128 Nref)
|
||||
{
|
||||
//__m128 dot0 = _mm_dot_ps(v, v);
|
||||
//__m128 neg0 = _mm_neg_ps(N);
|
||||
//__m128 sgn0 = _mm_sgn_ps(dot0);
|
||||
//__m128 mix0 = _mm_mix_ps(N, neg0, sgn0);
|
||||
//return mix0;
|
||||
|
||||
__m128 dot0 = sse_dot_ps(Nref, I);
|
||||
__m128 sgn0 = sse_sgn_ps(dot0);
|
||||
__m128 mul0 = _mm_mul_ps(sgn0, glm::detail::minus_one);
|
||||
__m128 mul1 = _mm_mul_ps(N, mul0);
|
||||
return mul1;
|
||||
}
|
||||
|
||||
//reflect
|
||||
GLM_FUNC_QUALIFIER __m128 sse_rfe_ps(__m128 I, __m128 N)
|
||||
{
|
||||
__m128 dot0 = sse_dot_ps(N, I);
|
||||
__m128 mul0 = _mm_mul_ps(N, dot0);
|
||||
__m128 mul1 = _mm_mul_ps(mul0, glm::detail::two);
|
||||
__m128 sub0 = _mm_sub_ps(I, mul1);
|
||||
return sub0;
|
||||
}
|
||||
|
||||
//refract
|
||||
GLM_FUNC_QUALIFIER __m128 sse_rfa_ps(__m128 I, __m128 N, __m128 eta)
|
||||
{
|
||||
__m128 dot0 = sse_dot_ps(N, I);
|
||||
__m128 mul0 = _mm_mul_ps(eta, eta);
|
||||
__m128 mul1 = _mm_mul_ps(dot0, dot0);
|
||||
__m128 sub0 = _mm_sub_ps(glm::detail::one, mul0);
|
||||
__m128 sub1 = _mm_sub_ps(glm::detail::one, mul1);
|
||||
__m128 mul2 = _mm_mul_ps(sub0, sub1);
|
||||
|
||||
if(_mm_movemask_ps(_mm_cmplt_ss(mul2, glm::detail::zero)) == 0)
|
||||
return glm::detail::zero;
|
||||
|
||||
__m128 sqt0 = _mm_sqrt_ps(mul2);
|
||||
__m128 mul3 = _mm_mul_ps(eta, dot0);
|
||||
__m128 add0 = _mm_add_ps(mul3, sqt0);
|
||||
__m128 mul4 = _mm_mul_ps(add0, N);
|
||||
__m128 mul5 = _mm_mul_ps(eta, I);
|
||||
__m128 sub2 = _mm_sub_ps(mul5, mul4);
|
||||
|
||||
return sub2;
|
||||
}
|
||||
|
||||
}//namespace detail
|
||||
}//namespace glm
|
50
ExternalLibs/glm/core/intrinsic_matrix.hpp
Normal file
50
ExternalLibs/glm/core/intrinsic_matrix.hpp
Normal file
|
@ -0,0 +1,50 @@
|
|||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// OpenGL Mathematics Copyright (c) 2005 - 2011 G-Truc Creation (www.g-truc.net)
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// Created : 2009-06-05
|
||||
// Updated : 2009-06-05
|
||||
// Licence : This source is under MIT License
|
||||
// File : glm/core/intrinsic_common.hpp
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#ifndef glm_detail_intrinsic_matrix
|
||||
#define glm_detail_intrinsic_matrix
|
||||
|
||||
#include "setup.hpp"
|
||||
|
||||
#if((GLM_ARCH & GLM_ARCH_SSE2) != GLM_ARCH_SSE2)
|
||||
# error "SSE2 instructions not supported or enabled"
|
||||
#else
|
||||
|
||||
#include "intrinsic_geometric.hpp"
|
||||
|
||||
namespace glm{
|
||||
namespace detail
|
||||
{
|
||||
void sse_add_ps(__m128 in1[4], __m128 in2[4], __m128 out[4]);
|
||||
|
||||
void sse_sub_ps(__m128 in1[4], __m128 in2[4], __m128 out[4]);
|
||||
|
||||
__m128 sse_mul_ps(__m128 m[4], __m128 v);
|
||||
|
||||
__m128 sse_mul_ps(__m128 v, __m128 m[4]);
|
||||
|
||||
void sse_mul_ps(__m128 const in1[4], __m128 const in2[4], __m128 out[4]);
|
||||
|
||||
void sse_transpose_ps(__m128 const in[4], __m128 out[4]);
|
||||
|
||||
void sse_inverse_ps(__m128 const in[4], __m128 out[4]);
|
||||
|
||||
void sse_rotate_ps(__m128 const in[4], float Angle, float const v[3], __m128 out[4]);
|
||||
|
||||
__m128 sse_det_ps(__m128 const m[4]);
|
||||
|
||||
__m128 sse_slow_det_ps(__m128 const m[4]);
|
||||
|
||||
}//namespace detail
|
||||
}//namespace glm
|
||||
|
||||
#include "intrinsic_matrix.inl"
|
||||
|
||||
#endif//GLM_ARCH
|
||||
#endif//glm_detail_intrinsic_matrix
|
1075
ExternalLibs/glm/core/intrinsic_matrix.inl
Normal file
1075
ExternalLibs/glm/core/intrinsic_matrix.inl
Normal file
File diff suppressed because it is too large
Load diff
29
ExternalLibs/glm/core/intrinsic_trigonometric.hpp
Normal file
29
ExternalLibs/glm/core/intrinsic_trigonometric.hpp
Normal file
|
@ -0,0 +1,29 @@
|
|||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// OpenGL Mathematics Copyright (c) 2005 - 2011 G-Truc Creation (www.g-truc.net)
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// Created : 2009-06-09
|
||||
// Updated : 2009-06-09
|
||||
// Licence : This source is under MIT License
|
||||
// File : glm/core/intrinsic_trigonometric.hpp
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#ifndef glm_detail_intrinsic_trigonometric
|
||||
#define glm_detail_intrinsic_trigonometric
|
||||
|
||||
#include "setup.hpp"
|
||||
|
||||
#if((GLM_ARCH & GLM_ARCH_SSE2) != GLM_ARCH_SSE2)
|
||||
# error "SSE2 instructions not supported or enabled"
|
||||
#else
|
||||
|
||||
namespace glm{
|
||||
namespace detail
|
||||
{
|
||||
|
||||
}//namespace detail
|
||||
}//namespace glm
|
||||
|
||||
#include "intrinsic_trigonometric.inl"
|
||||
|
||||
#endif//GLM_ARCH
|
||||
#endif//glm_detail_intrinsic_trigonometric
|
0
ExternalLibs/glm/core/intrinsic_trigonometric.inl
Normal file
0
ExternalLibs/glm/core/intrinsic_trigonometric.inl
Normal file
29
ExternalLibs/glm/core/intrinsic_vector_relational.hpp
Normal file
29
ExternalLibs/glm/core/intrinsic_vector_relational.hpp
Normal file
|
@ -0,0 +1,29 @@
|
|||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// OpenGL Mathematics Copyright (c) 2005 - 2011 G-Truc Creation (www.g-truc.net)
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// Created : 2009-06-09
|
||||
// Updated : 2009-06-09
|
||||
// Licence : This source is under MIT License
|
||||
// File : glm/core/intrinsic_vector_relational.hpp
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#ifndef glm_detail_intrinsic_vector_relational
|
||||
#define glm_detail_intrinsic_vector_relational
|
||||
|
||||
#include "setup.hpp"
|
||||
|
||||
#if((GLM_ARCH & GLM_ARCH_SSE2) != GLM_ARCH_SSE2)
|
||||
# error "SSE2 instructions not supported or enabled"
|
||||
#else
|
||||
|
||||
namespace glm{
|
||||
namespace detail
|
||||
{
|
||||
|
||||
}//namespace detail
|
||||
}//namespace glm
|
||||
|
||||
#include "intrinsic_vector_relational.inl"
|
||||
|
||||
#endif//GLM_ARCH
|
||||
#endif//glm_detail_intrinsic_vector_relational
|
347
ExternalLibs/glm/core/intrinsic_vector_relational.inl
Normal file
347
ExternalLibs/glm/core/intrinsic_vector_relational.inl
Normal file
|
@ -0,0 +1,347 @@
|
|||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// OpenGL Mathematics Copyright (c) 2005 - 2011 G-Truc Creation (www.g-truc.net)
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// Created : 2009-06-09
|
||||
// Updated : 2009-06-09
|
||||
// Licence : This source is under MIT License
|
||||
// File : glm/core/intrinsic_vector_relational.inl
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
//// lessThan
|
||||
//template <typename valType>
|
||||
//GLM_FUNC_QUALIFIER typename detail::tvec2<valType>::bool_type lessThan
|
||||
//(
|
||||
// detail::tvec2<valType> const & x,
|
||||
// detail::tvec2<valType> const & y
|
||||
//)
|
||||
//{
|
||||
// GLM_STATIC_ASSERT(
|
||||
// detail::type<valType>::is_float ||
|
||||
// detail::type<valType>::is_int ||
|
||||
// detail::type<valType>::is_uint);
|
||||
//
|
||||
// return typename detail::tvec2<bool>::bool_type(x.x < y.x, x.y < y.y);
|
||||
//}
|
||||
//
|
||||
//template <typename valType>
|
||||
//GLM_FUNC_QUALIFIER typename detail::tvec3<valType>::bool_type lessThan
|
||||
//(
|
||||
// detail::tvec3<valType> const & x,
|
||||
// detail::tvec3<valType> const & y
|
||||
//)
|
||||
//{
|
||||
// GLM_STATIC_ASSERT(
|
||||
// detail::type<valType>::is_float ||
|
||||
// detail::type<valType>::is_int ||
|
||||
// detail::type<valType>::is_uint);
|
||||
//
|
||||
// return typename detail::tvec3<bool>::bool_type(x.x < y.x, x.y < y.y, x.z < y.z);
|
||||
//}
|
||||
//
|
||||
//template <typename valType>
|
||||
//GLM_FUNC_QUALIFIER typename detail::tvec4<valType>::bool_type lessThan
|
||||
//(
|
||||
// detail::tvec4<valType> const & x,
|
||||
// detail::tvec4<valType> const & y
|
||||
//)
|
||||
//{
|
||||
// GLM_STATIC_ASSERT(
|
||||
// detail::type<valType>::is_float ||
|
||||
// detail::type<valType>::is_int ||
|
||||
// detail::type<valType>::is_uint);
|
||||
//
|
||||
// return typename detail::tvec4<bool>::bool_type(x.x < y.x, x.y < y.y, x.z < y.z, x.w < y.w);
|
||||
//}
|
||||
//
|
||||
//// lessThanEqual
|
||||
//template <typename valType>
|
||||
//GLM_FUNC_QUALIFIER typename detail::tvec2<valType>::bool_type lessThanEqual
|
||||
//(
|
||||
// detail::tvec2<valType> const & x,
|
||||
// detail::tvec2<valType> const & y
|
||||
//)
|
||||
//{
|
||||
// GLM_STATIC_ASSERT(
|
||||
// detail::type<valType>::is_float ||
|
||||
// detail::type<valType>::is_int ||
|
||||
// detail::type<valType>::is_uint);
|
||||
//
|
||||
// return typename detail::tvec2<bool>::bool_type(x.x <= y.x, x.y <= y.y);
|
||||
//}
|
||||
//
|
||||
//template <typename valType>
|
||||
//GLM_FUNC_QUALIFIER typename detail::tvec3<valType>::bool_type lessThanEqual
|
||||
//(
|
||||
// detail::tvec3<valType> const & x,
|
||||
// detail::tvec3<valType> const & y
|
||||
//)
|
||||
//{
|
||||
// GLM_STATIC_ASSERT(
|
||||
// detail::type<valType>::is_float ||
|
||||
// detail::type<valType>::is_int ||
|
||||
// detail::type<valType>::is_uint);
|
||||
//
|
||||
// return typename detail::tvec3<bool>::bool_type(x.x <= y.x, x.y <= y.y, x.z <= y.z);
|
||||
//}
|
||||
//
|
||||
//template <typename valType>
|
||||
//GLM_FUNC_QUALIFIER typename detail::tvec4<valType>::bool_type lessThanEqual
|
||||
//(
|
||||
// detail::tvec4<valType> const & x,
|
||||
// detail::tvec4<valType> const & y
|
||||
//)
|
||||
//{
|
||||
// GLM_STATIC_ASSERT(
|
||||
// detail::type<valType>::is_float ||
|
||||
// detail::type<valType>::is_int ||
|
||||
// detail::type<valType>::is_uint);
|
||||
//
|
||||
// return typename detail::tvec4<bool>::bool_type(x.x <= y.x, x.y <= y.y, x.z <= y.z, x.w <= y.w);
|
||||
//}
|
||||
//
|
||||
//// greaterThan
|
||||
//template <typename valType>
|
||||
//GLM_FUNC_QUALIFIER typename detail::tvec2<valType>::bool_type greaterThan
|
||||
//(
|
||||
// detail::tvec2<valType> const & x,
|
||||
// detail::tvec2<valType> const & y
|
||||
//)
|
||||
//{
|
||||
// GLM_STATIC_ASSERT(
|
||||
// detail::type<valType>::is_float ||
|
||||
// detail::type<valType>::is_int ||
|
||||
// detail::type<valType>::is_uint);
|
||||
//
|
||||
// return typename detail::tvec2<bool>::bool_type(x.x > y.x, x.y > y.y);
|
||||
//}
|
||||
//
|
||||
//template <typename valType>
|
||||
//GLM_FUNC_QUALIFIER typename detail::tvec3<valType>::bool_type greaterThan
|
||||
//(
|
||||
// detail::tvec3<valType> const & x,
|
||||
// detail::tvec3<valType> const & y
|
||||
//)
|
||||
//{
|
||||
// GLM_STATIC_ASSERT(
|
||||
// detail::type<valType>::is_float ||
|
||||
// detail::type<valType>::is_int ||
|
||||
// detail::type<valType>::is_uint);
|
||||
//
|
||||
// return typename detail::tvec3<bool>::bool_type(x.x > y.x, x.y > y.y, x.z > y.z);
|
||||
//}
|
||||
//
|
||||
//template <typename valType>
|
||||
//GLM_FUNC_QUALIFIER typename detail::tvec4<valType>::bool_type greaterThan
|
||||
//(
|
||||
// detail::tvec4<valType> const & x,
|
||||
// detail::tvec4<valType> const & y
|
||||
//)
|
||||
//{
|
||||
// GLM_STATIC_ASSERT(
|
||||
// detail::type<valType>::is_float ||
|
||||
// detail::type<valType>::is_int ||
|
||||
// detail::type<valType>::is_uint);
|
||||
//
|
||||
// return typename detail::tvec4<bool>::bool_type(x.x > y.x, x.y > y.y, x.z > y.z, x.w > y.w);
|
||||
//}
|
||||
//
|
||||
//// greaterThanEqual
|
||||
//template <typename valType>
|
||||
//GLM_FUNC_QUALIFIER typename detail::tvec2<valType>::bool_type greaterThanEqual
|
||||
//(
|
||||
// detail::tvec2<valType> const & x,
|
||||
// detail::tvec2<valType> const & y
|
||||
//)
|
||||
//{
|
||||
// GLM_STATIC_ASSERT(
|
||||
// detail::type<valType>::is_float ||
|
||||
// detail::type<valType>::is_int ||
|
||||
// detail::type<valType>::is_uint);
|
||||
//
|
||||
// return typename detail::tvec2<bool>::bool_type(x.x >= y.x, x.y >= y.y);
|
||||
//}
|
||||
//
|
||||
//template <typename valType>
|
||||
//GLM_FUNC_QUALIFIER typename detail::tvec3<valType>::bool_type greaterThanEqual
|
||||
//(
|
||||
// detail::tvec3<valType> const & x,
|
||||
// detail::tvec3<valType> const & y
|
||||
//)
|
||||
//{
|
||||
// GLM_STATIC_ASSERT(
|
||||
// detail::type<valType>::is_float ||
|
||||
// detail::type<valType>::is_int ||
|
||||
// detail::type<valType>::is_uint);
|
||||
//
|
||||
// return typename detail::tvec3<bool>::bool_type(x.x >= y.x, x.y >= y.y, x.z >= y.z);
|
||||
//}
|
||||
//
|
||||
//template <typename valType>
|
||||
//GLM_FUNC_QUALIFIER typename detail::tvec4<valType>::bool_type greaterThanEqual
|
||||
//(
|
||||
// detail::tvec4<valType> const & x,
|
||||
// detail::tvec4<valType> const & y
|
||||
//)
|
||||
//{
|
||||
// GLM_STATIC_ASSERT(
|
||||
// detail::type<valType>::is_float ||
|
||||
// detail::type<valType>::is_int ||
|
||||
// detail::type<valType>::is_uint);
|
||||
//
|
||||
// return typename detail::tvec4<bool>::bool_type(x.x >= y.x, x.y >= y.y, x.z >= y.z, x.w >= y.w);
|
||||
//}
|
||||
//
|
||||
//// equal
|
||||
//template <typename valType>
|
||||
//GLM_FUNC_QUALIFIER typename detail::tvec2<valType>::bool_type equal
|
||||
//(
|
||||
// detail::tvec2<valType> const & x,
|
||||
// detail::tvec2<valType> const & y
|
||||
//)
|
||||
//{
|
||||
// GLM_STATIC_ASSERT(
|
||||
// detail::type<valType>::is_float ||
|
||||
// detail::type<valType>::is_int ||
|
||||
// detail::type<valType>::is_uint ||
|
||||
// detail::type<valType>::is_bool);
|
||||
//
|
||||
// return typename detail::tvec2<valType>::bool_type(x.x == y.x, x.y == y.y);
|
||||
//}
|
||||
//
|
||||
//template <typename valType>
|
||||
//GLM_FUNC_QUALIFIER typename detail::tvec3<valType>::bool_type equal
|
||||
//(
|
||||
// detail::tvec3<valType> const & x,
|
||||
// detail::tvec3<valType> const & y
|
||||
//)
|
||||
//{
|
||||
// GLM_STATIC_ASSERT(
|
||||
// detail::type<valType>::is_float ||
|
||||
// detail::type<valType>::is_int ||
|
||||
// detail::type<valType>::is_uint ||
|
||||
// detail::type<valType>::is_bool);
|
||||
//
|
||||
// return typename detail::tvec3<valType>::bool_type(x.x == y.x, x.y == y.y, x.z == y.z);
|
||||
//}
|
||||
//
|
||||
//template <typename valType>
|
||||
//GLM_FUNC_QUALIFIER typename detail::tvec4<valType>::bool_type equal
|
||||
//(
|
||||
// detail::tvec4<valType> const & x,
|
||||
// detail::tvec4<valType> const & y
|
||||
//)
|
||||
//{
|
||||
// GLM_STATIC_ASSERT(
|
||||
// detail::type<valType>::is_float ||
|
||||
// detail::type<valType>::is_int ||
|
||||
// detail::type<valType>::is_uint ||
|
||||
// detail::type<valType>::is_bool);
|
||||
//
|
||||
// return typename detail::tvec4<valType>::bool_type(x.x == y.x, x.y == y.y, x.z == y.z, x.w == y.w);
|
||||
//}
|
||||
//
|
||||
//// notEqual
|
||||
//template <typename valType>
|
||||
//GLM_FUNC_QUALIFIER typename detail::tvec2<valType>::bool_type notEqual
|
||||
//(
|
||||
// detail::tvec2<valType> const & x,
|
||||
// detail::tvec2<valType> const & y
|
||||
//)
|
||||
//{
|
||||
// GLM_STATIC_ASSERT(
|
||||
// detail::type<valType>::is_float ||
|
||||
// detail::type<valType>::is_int ||
|
||||
// detail::type<valType>::is_uint ||
|
||||
// detail::type<valType>::is_bool);
|
||||
//
|
||||
// return typename detail::tvec2<valType>::bool_type(x.x != y.x, x.y != y.y);
|
||||
//}
|
||||
//
|
||||
//template <typename valType>
|
||||
//GLM_FUNC_QUALIFIER typename detail::tvec3<valType>::bool_type notEqual
|
||||
//(
|
||||
// detail::tvec3<valType> const & x,
|
||||
// detail::tvec3<valType> const & y
|
||||
//)
|
||||
//{
|
||||
// GLM_STATIC_ASSERT(
|
||||
// detail::type<valType>::is_float ||
|
||||
// detail::type<valType>::is_int ||
|
||||
// detail::type<valType>::is_uint ||
|
||||
// detail::type<valType>::is_bool);
|
||||
//
|
||||
// return typename detail::tvec3<valType>::bool_type(x.x != y.x, x.y != y.y, x.z != y.z);
|
||||
//}
|
||||
//
|
||||
//template <typename valType>
|
||||
//GLM_FUNC_QUALIFIER typename detail::tvec4<valType>::bool_type notEqual
|
||||
//(
|
||||
// detail::tvec4<valType> const & x,
|
||||
// detail::tvec4<valType> const & y
|
||||
//)
|
||||
//{
|
||||
// GLM_STATIC_ASSERT(
|
||||
// detail::type<valType>::is_float ||
|
||||
// detail::type<valType>::is_int ||
|
||||
// detail::type<valType>::is_uint ||
|
||||
// detail::type<valType>::is_bool);
|
||||
//
|
||||
// return typename detail::tvec4<valType>::bool_type(x.x != y.x, x.y != y.y, x.z != y.z, x.w != y.w);
|
||||
//}
|
||||
//
|
||||
//// any
|
||||
//GLM_FUNC_QUALIFIER bool any(detail::tvec2<bool> const & x)
|
||||
//{
|
||||
// return x.x || x.y;
|
||||
//}
|
||||
//
|
||||
//GLM_FUNC_QUALIFIER bool any(detail::tvec3<bool> const & x)
|
||||
//{
|
||||
// return x.x || x.y || x.z;
|
||||
//}
|
||||
//
|
||||
//GLM_FUNC_QUALIFIER bool any(detail::tvec4<bool> const & x)
|
||||
//{
|
||||
// return x.x || x.y || x.z || x.w;
|
||||
//}
|
||||
//
|
||||
//// all
|
||||
//GLM_FUNC_QUALIFIER bool all(const detail::tvec2<bool>& x)
|
||||
//{
|
||||
// return x.x && x.y;
|
||||
//}
|
||||
//
|
||||
//GLM_FUNC_QUALIFIER bool all(const detail::tvec3<bool>& x)
|
||||
//{
|
||||
// return x.x && x.y && x.z;
|
||||
//}
|
||||
//
|
||||
//GLM_FUNC_QUALIFIER bool all(const detail::tvec4<bool>& x)
|
||||
//{
|
||||
// return x.x && x.y && x.z && x.w;
|
||||
//}
|
||||
//
|
||||
//// not
|
||||
//GLM_FUNC_QUALIFIER detail::tvec2<bool>::bool_type not_
|
||||
//(
|
||||
// detail::tvec2<bool> const & v
|
||||
//)
|
||||
//{
|
||||
// return detail::tvec2<bool>::bool_type(!v.x, !v.y);
|
||||
//}
|
||||
//
|
||||
//GLM_FUNC_QUALIFIER detail::tvec3<bool>::bool_type not_
|
||||
//(
|
||||
// detail::tvec3<bool> const & v
|
||||
//)
|
||||
//{
|
||||
// return detail::tvec3<bool>::bool_type(!v.x, !v.y, !v.z);
|
||||
//}
|
||||
//
|
||||
//GLM_FUNC_QUALIFIER detail::tvec4<bool>::bool_type not_
|
||||
//(
|
||||
// detail::tvec4<bool> const & v
|
||||
//)
|
||||
//{
|
||||
// return detail::tvec4<bool>::bool_type(!v.x, !v.y, !v.z, !v.w);
|
||||
//}
|
478
ExternalLibs/glm/core/setup.hpp
Normal file
478
ExternalLibs/glm/core/setup.hpp
Normal file
|
@ -0,0 +1,478 @@
|
|||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// OpenGL Mathematics Copyright (c) 2005 - 2011 G-Truc Creation (www.g-truc.net)
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// Created : 2006-11-13
|
||||
// Updated : 2011-01-26
|
||||
// Licence : This source is under MIT License
|
||||
// File : glm/setup.hpp
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#ifndef glm_setup
|
||||
#define glm_setup
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// Version
|
||||
|
||||
#define GLM_VERSION 92
|
||||
#define GLM_VERSION_MAJOR 0
|
||||
#define GLM_VERSION_MINOR 9
|
||||
#define GLM_VERSION_PATCH 2
|
||||
#define GLM_VERSION_REVISION 1
|
||||
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// Compiler
|
||||
|
||||
// User defines: GLM_FORCE_COMPILER_UNKNOWN
|
||||
// TODO ? __llvm__
|
||||
|
||||
#define GLM_COMPILER_UNKNOWN 0x00000000
|
||||
|
||||
// Visual C++ defines
|
||||
#define GLM_COMPILER_VC 0x01000000
|
||||
#define GLM_COMPILER_VC2 0x01000010
|
||||
#define GLM_COMPILER_VC4 0x01000020
|
||||
#define GLM_COMPILER_VC5 0x01000030
|
||||
#define GLM_COMPILER_VC6 0x01000040
|
||||
#define GLM_COMPILER_VC2002 0x01000050
|
||||
#define GLM_COMPILER_VC2003 0x01000060
|
||||
#define GLM_COMPILER_VC2005 0x01000070
|
||||
#define GLM_COMPILER_VC2008 0x01000080
|
||||
#define GLM_COMPILER_VC2010 0x01000090
|
||||
#define GLM_COMPILER_VC2011 0x010000A0
|
||||
|
||||
// GCC defines
|
||||
#define GLM_COMPILER_GCC 0x02000000
|
||||
#define GLM_COMPILER_GCC_LLVM 0x02000000
|
||||
#define GLM_COMPILER_GCC_CLANG 0x02000000
|
||||
#define GLM_COMPILER_GCC30 0x02000010
|
||||
#define GLM_COMPILER_GCC31 0x02000020
|
||||
#define GLM_COMPILER_GCC32 0x02000030
|
||||
#define GLM_COMPILER_GCC33 0x02000040
|
||||
#define GLM_COMPILER_GCC34 0x02000050
|
||||
#define GLM_COMPILER_GCC35 0x02000060
|
||||
#define GLM_COMPILER_GCC40 0x02000070
|
||||
#define GLM_COMPILER_GCC41 0x02000080
|
||||
#define GLM_COMPILER_GCC42 0x02000090
|
||||
#define GLM_COMPILER_GCC43 0x020000A0
|
||||
#define GLM_COMPILER_GCC44 0x020000B0
|
||||
#define GLM_COMPILER_GCC45 0x020000C0
|
||||
#define GLM_COMPILER_GCC46 0x020000D0
|
||||
#define GLM_COMPILER_GCC47 0x020000E0
|
||||
#define GLM_COMPILER_GCC48 0x020000F0
|
||||
#define GLM_COMPILER_GCC49 0x02000100
|
||||
#define GLM_COMPILER_GCC50 0x02000200
|
||||
|
||||
// G++ command line to display defined
|
||||
// echo "" | g++ -E -dM -x c++ - | sort
|
||||
|
||||
// Borland C++ defines. How to identify BC?
|
||||
#define GLM_COMPILER_BC 0x04000000
|
||||
#define GLM_COMPILER_BCB4 0x04000100
|
||||
#define GLM_COMPILER_BCB5 0x04000200
|
||||
#define GLM_COMPILER_BCB6 0x04000300
|
||||
//#define GLM_COMPILER_BCBX 0x04000400 // What's the version value?
|
||||
#define GLM_COMPILER_BCB2009 0x04000500
|
||||
|
||||
// CodeWarrior
|
||||
#define GLM_COMPILER_CODEWARRIOR 0x08000000
|
||||
|
||||
// CUDA
|
||||
#define GLM_COMPILER_CUDA 0x10000000
|
||||
#define GLM_COMPILER_CUDA30 0x10000010
|
||||
#define GLM_COMPILER_CUDA31 0x10000020
|
||||
#define GLM_COMPILER_CUDA32 0x10000030
|
||||
#define GLM_COMPILER_CUDA40 0x10000040
|
||||
|
||||
// Clang
|
||||
#define GLM_COMPILER_CLANG 0x20000000
|
||||
#define GLM_COMPILER_CLANG26 0x20000010
|
||||
#define GLM_COMPILER_CLANG27 0x20000020
|
||||
#define GLM_COMPILER_CLANG28 0x20000030
|
||||
#define GLM_COMPILER_CLANG29 0x20000040
|
||||
|
||||
// LLVM GCC
|
||||
#define GLM_COMPILER_LLVM_GCC 0x40000000
|
||||
|
||||
// Build model
|
||||
#define GLM_MODEL_32 0x00000010
|
||||
#define GLM_MODEL_64 0x00000020
|
||||
|
||||
// Force generic C++ compiler
|
||||
#ifdef GLM_FORCE_COMPILER_UNKNOWN
|
||||
# define GLM_COMPILER GLM_COMPILER_UNKNOWN
|
||||
|
||||
// CUDA
|
||||
#elif defined(__CUDACC__)
|
||||
# define GLM_COMPILER GLM_COMPILER_CUDA
|
||||
|
||||
// Visual C++
|
||||
#elif defined(_MSC_VER)
|
||||
# if _MSC_VER == 900
|
||||
# define GLM_COMPILER GLM_COMPILER_VC2
|
||||
# elif _MSC_VER == 1000
|
||||
# define GLM_COMPILER GLM_COMPILER_VC4
|
||||
# elif _MSC_VER == 1100
|
||||
# define GLM_COMPILER GLM_COMPILER_VC5
|
||||
# elif _MSC_VER == 1200
|
||||
# define GLM_COMPILER GLM_COMPILER_VC6
|
||||
# elif _MSC_VER == 1300
|
||||
# define GLM_COMPILER GLM_COMPILER_VC2002
|
||||
# elif _MSC_VER == 1310
|
||||
# define GLM_COMPILER GLM_COMPILER_VC2003
|
||||
# elif _MSC_VER == 1400
|
||||
# define GLM_COMPILER GLM_COMPILER_VC2005
|
||||
# elif _MSC_VER == 1500
|
||||
# define GLM_COMPILER GLM_COMPILER_VC2008
|
||||
# elif _MSC_VER == 1600
|
||||
# define GLM_COMPILER GLM_COMPILER_VC2010
|
||||
# elif _MSC_VER == 1700
|
||||
# define GLM_COMPILER GLM_COMPILER_VC2011
|
||||
# else//_MSC_VER
|
||||
# define GLM_COMPILER GLM_COMPILER_VC
|
||||
# endif//_MSC_VER
|
||||
|
||||
// G++
|
||||
#elif defined(__GNUC__) || defined(__llvm__) || defined(__clang__)
|
||||
# if defined (__llvm__)
|
||||
# pragma message("LLVM")
|
||||
# define GLM_COMPILER_GCC_EXTRA GLM_COMPILER_GCC_LLVM
|
||||
# elif defined (__clang__)
|
||||
# pragma message("CLANG")
|
||||
# define GLM_COMPILER_GCC_EXTRA GLM_COMPILER_GCC_CLANG
|
||||
# else
|
||||
# pragma message("GCC")
|
||||
# define GLM_COMPILER_GCC_EXTRA 0
|
||||
# endif
|
||||
#
|
||||
# if (__GNUC__ == 3) && (__GNUC_MINOR__ == 2)
|
||||
# define GLM_COMPILER GLM_COMPILER_GCC32
|
||||
# elif (__GNUC__ == 3) && (__GNUC_MINOR__ == 3)
|
||||
# define GLM_COMPILER GLM_COMPILER_GCC33
|
||||
# elif (__GNUC__ == 3) && (__GNUC_MINOR__ == 4)
|
||||
# define GLM_COMPILER GLM_COMPILER_GCC34
|
||||
# elif (__GNUC__ == 3) && (__GNUC_MINOR__ == 5)
|
||||
# define GLM_COMPILER GLM_COMPILER_GCC35
|
||||
# elif (__GNUC__ == 4) && (__GNUC_MINOR__ == 0)
|
||||
# define GLM_COMPILER (GLM_COMPILER_GCC40 | GLM_COMPILER_GCC_EXTRA)
|
||||
# elif (__GNUC__ == 4) && (__GNUC_MINOR__ == 1)
|
||||
# define GLM_COMPILER (GLM_COMPILER_GCC41 | GLM_COMPILER_GCC_EXTRA)
|
||||
# elif (__GNUC__ == 4) && (__GNUC_MINOR__ == 2)
|
||||
# define GLM_COMPILER (GLM_COMPILER_GCC42 | GLM_COMPILER_GCC_EXTRA)
|
||||
# elif (__GNUC__ == 4) && (__GNUC_MINOR__ == 3)
|
||||
# define GLM_COMPILER (GLM_COMPILER_GCC43 | GLM_COMPILER_GCC_EXTRA)
|
||||
# elif (__GNUC__ == 4) && (__GNUC_MINOR__ == 4)
|
||||
# define GLM_COMPILER (GLM_COMPILER_GCC44 | GLM_COMPILER_GCC_EXTRA)
|
||||
# elif (__GNUC__ == 4) && (__GNUC_MINOR__ == 5)
|
||||
# define GLM_COMPILER (GLM_COMPILER_GCC45 | GLM_COMPILER_GCC_EXTRA)
|
||||
# elif (__GNUC__ == 4) && (__GNUC_MINOR__ == 6)
|
||||
# define GLM_COMPILER (GLM_COMPILER_GCC46 | GLM_COMPILER_GCC_EXTRA)
|
||||
# elif (__GNUC__ == 4) && (__GNUC_MINOR__ == 7)
|
||||
# define GLM_COMPILER (GLM_COMPILER_GCC47 | GLM_COMPILER_GCC_EXTRA)
|
||||
# elif (__GNUC__ == 4) && (__GNUC_MINOR__ == 8)
|
||||
# define GLM_COMPILER (GLM_COMPILER_GCC48 | GLM_COMPILER_GCC_EXTRA)
|
||||
# elif (__GNUC__ == 4) && (__GNUC_MINOR__ == 9)
|
||||
# define GLM_COMPILER (GLM_COMPILER_GCC49 | GLM_COMPILER_GCC_EXTRA)
|
||||
# elif (__GNUC__ == 5) && (__GNUC_MINOR__ == 0)
|
||||
# define GLM_COMPILER (GLM_COMPILER_GCC50 | GLM_COMPILER_GCC_EXTRA)
|
||||
# else
|
||||
# define GLM_COMPILER (GLM_COMPILER_GCC | GLM_COMPILER_GCC_EXTRA)
|
||||
# endif
|
||||
|
||||
// Borland C++
|
||||
#elif defined(_BORLANDC_)
|
||||
# if defined(VER125)
|
||||
# define GLM_COMPILER GLM_COMPILER_BCB4
|
||||
# elif defined(VER130)
|
||||
# define GLM_COMPILER GLM_COMPILER_BCB5
|
||||
# elif defined(VER140)
|
||||
# define GLM_COMPILER GLM_COMPILER_BCB6
|
||||
# elif defined(VER200)
|
||||
# define GLM_COMPILER GLM_COMPILER_BCB2009
|
||||
# else
|
||||
# define GLM_COMPILER GLM_COMPILER_BC
|
||||
# endif
|
||||
|
||||
// Codewarrior
|
||||
#elif defined(__MWERKS__)
|
||||
# define GLM_COMPILER GLM_COMPILER_CODEWARRIOR
|
||||
|
||||
#else
|
||||
# define GLM_COMPILER GLM_COMPILER_UNKNOWN
|
||||
#endif
|
||||
|
||||
#ifndef GLM_COMPILER
|
||||
#error "GLM_COMPILER undefined, your compiler may not be supported by GLM. Add #define GLM_COMPILER 0 to ignore this message."
|
||||
#endif//GLM_COMPILER
|
||||
|
||||
// Report compiler detection
|
||||
#if(defined(GLM_MESSAGES) && !defined(GLM_MESSAGE_COMPILER_DISPLAYED))
|
||||
# define GLM_MESSAGE_COMPILER_DISPLAYED
|
||||
# if(GLM_COMPILER & GLM_COMPILER_CUDA)
|
||||
# pragma message("GLM: CUDA compiler detected")
|
||||
# elif(GLM_COMPILER & GLM_COMPILER_VC)
|
||||
# pragma message("GLM: Visual C++ compiler detected")
|
||||
# elif(GLM_COMPILER & GLM_COMPILER_CLANG)
|
||||
# pragma message("GLM: Clang compiler detected")
|
||||
# elif(GLM_COMPILER & GLM_COMPILER_LLVM_GCC)
|
||||
# pragma message("GLM: LLVM GCC compiler detected")
|
||||
# elif(GLM_COMPILER & GLM_COMPILER_GCC)
|
||||
# if(GLM_COMPILER & GLM_COMPILER_GCC_LLVM)
|
||||
# pragma message("GLM: LLVM GCC compiler detected")
|
||||
# elif(GLM_COMPILER & GLM_COMPILER_GCC_CLANG)
|
||||
# pragma message("GLM: CLANG compiler detected")
|
||||
# else
|
||||
# pragma message("GLM: GCC compiler detected")
|
||||
# endif
|
||||
# elif(GLM_COMPILER & GLM_COMPILER_BC)
|
||||
# pragma message("GLM: Borland compiler detected but not supported")
|
||||
# elif(GLM_COMPILER & GLM_COMPILER_CODEWARRIOR)
|
||||
# pragma message("GLM: Codewarrior compiler detected but not supported")
|
||||
# else
|
||||
# pragma message("GLM: Compiler not detected")
|
||||
# endif
|
||||
#endif//GLM_MESSAGE
|
||||
|
||||
/////////////////
|
||||
// Build model //
|
||||
|
||||
#if(GLM_COMPILER & GLM_COMPILER_VC)
|
||||
# if defined(_M_X64)
|
||||
# define GLM_MODEL GLM_MODEL_64
|
||||
# else
|
||||
# define GLM_MODEL GLM_MODEL_32
|
||||
# endif//_M_X64
|
||||
#elif(GLM_COMPILER & GLM_COMPILER_GCC)
|
||||
# if(defined(__WORDSIZE) && (__WORDSIZE == 64)) || defined(__arch64__) || defined(__LP64__) || defined(__x86_64__)
|
||||
# define GLM_MODEL GLM_MODEL_64
|
||||
# else
|
||||
# define GLM_MODEL GLM_MODEL_32
|
||||
# endif//
|
||||
#else
|
||||
# define GLM_MODEL GLM_MODEL_32
|
||||
#endif//
|
||||
|
||||
#if(!defined(GLM_MODEL) && GLM_COMPILER != 0)
|
||||
#error "GLM_MODEL undefined, your compiler may not be supported by GLM. Add #define GLM_MODEL 0 to ignore this message."
|
||||
#endif//GLM_MODEL
|
||||
|
||||
#if(defined(GLM_MESSAGES) && !defined(GLM_MESSAGE_MODEL_DISPLAYED))
|
||||
# define GLM_MESSAGE_MODEL_DISPLAYED
|
||||
# if(GLM_MODEL == GLM_MODEL_64)
|
||||
# pragma message("GLM: 64 bits model")
|
||||
# elif(GLM_MODEL == GLM_MODEL_32)
|
||||
# pragma message("GLM: 32 bits model")
|
||||
# endif//GLM_MODEL
|
||||
#endif//GLM_MESSAGE
|
||||
|
||||
/////////////////
|
||||
// C++ Version //
|
||||
|
||||
// User defines: GLM_FORCE_CXX98
|
||||
|
||||
#define GLM_LANG_CXX 0
|
||||
#define GLM_LANG_CXX98 1
|
||||
#define GLM_LANG_CXX0X 2
|
||||
#define GLM_LANG_CXXMS 3
|
||||
#define GLM_LANG_CXXGNU 4
|
||||
|
||||
#if(defined(GLM_FORCE_CXX98))
|
||||
# define GLM_LANG GLM_LANG_CXX98
|
||||
#elif(((GLM_COMPILER & GLM_COMPILER_GCC) == GLM_COMPILER_GCC) && defined(__GXX_EXPERIMENTAL_CXX0X__)) // -std=c++0x or -std=gnu++0x
|
||||
# define GLM_LANG GLM_LANG_CXX0X
|
||||
#elif(GLM_COMPILER == GLM_COMPILER_VC2010) //_MSC_EXTENSIONS for MS language extensions
|
||||
# define GLM_LANG GLM_LANG_CXX0X
|
||||
#elif(((GLM_COMPILER & GLM_COMPILER_GCC) == GLM_COMPILER_GCC) && defined(__STRICT_ANSI__))
|
||||
# define GLM_LANG GLM_LANG_CXX98
|
||||
#elif(((GLM_COMPILER & GLM_COMPILER_VC) == GLM_COMPILER_VC) && !defined(_MSC_EXTENSIONS))
|
||||
# define GLM_LANG GLM_LANG_CXX98
|
||||
#else
|
||||
# define GLM_LANG GLM_LANG_CXX
|
||||
#endif
|
||||
|
||||
#if(defined(GLM_MESSAGES) && !defined(GLM_MESSAGE_LANG_DISPLAYED))
|
||||
# define GLM_MESSAGE_LANG_DISPLAYED
|
||||
# if(GLM_LANG == GLM_LANG_CXX98)
|
||||
# pragma message("GLM: C++98")
|
||||
# elif(GLM_LANG == GLM_LANG_CXX0X)
|
||||
# pragma message("GLM: C++0x")
|
||||
# endif//GLM_MODEL
|
||||
#endif//GLM_MESSAGE
|
||||
|
||||
/////////////////
|
||||
// Platform
|
||||
|
||||
// User defines: GLM_FORCE_PURE GLM_FORCE_SSE2 GLM_FORCE_AVX
|
||||
|
||||
#define GLM_ARCH_PURE 0x0000 //(0x0000)
|
||||
#define GLM_ARCH_SSE2 0x0001 //(0x0001)
|
||||
#define GLM_ARCH_SSE3 0x0003 //(0x0002 | GLM_ARCH_SSE2)
|
||||
#define GLM_ARCH_AVX 0x0007 //(0x0004 | GLM_ARCH_SSE3 | GLM_ARCH_SSE2)
|
||||
|
||||
#if(defined(GLM_FORCE_PURE))
|
||||
# define GLM_ARCH GLM_ARCH_PURE
|
||||
#elif(defined(GLM_FORCE_AVX))
|
||||
# define GLM_ARCH GLM_ARCH_AVX
|
||||
#elif(defined(GLM_FORCE_SSE3))
|
||||
# define GLM_ARCH GLM_ARCH_SSE3
|
||||
#elif(defined(GLM_FORCE_SSE2))
|
||||
# define GLM_ARCH GLM_ARCH_SSE2
|
||||
#elif((GLM_COMPILER & GLM_COMPILER_VC) && (defined(_M_IX86) || defined(_M_X64)))
|
||||
# if(defined(_M_CEE_PURE))
|
||||
# define GLM_ARCH GLM_ARCH_PURE
|
||||
# elif(GLM_COMPILER >= GLM_COMPILER_VC2010)
|
||||
# if(_MSC_FULL_VER >= 160031118) //160031118: VC2010 SP1 beta full version
|
||||
# define GLM_ARCH GLM_ARCH_AVX //GLM_ARCH_AVX (Require SP1)
|
||||
# else
|
||||
# define GLM_ARCH GLM_ARCH_SSE3
|
||||
# endif
|
||||
# elif(GLM_COMPILER >= GLM_COMPILER_VC2008)
|
||||
# define GLM_ARCH GLM_ARCH_SSE3
|
||||
# elif(GLM_COMPILER >= GLM_COMPILER_VC2005)
|
||||
# define GLM_ARCH GLM_ARCH_SSE2
|
||||
# else
|
||||
# define GLM_ARCH GLM_ARCH_PURE
|
||||
# endif
|
||||
#elif(GLM_COMPILER & GLM_COMPILER_LLVM_GCC)
|
||||
# if(defined(__AVX__))
|
||||
# define GLM_ARCH GLM_ARCH_AVX
|
||||
# elif(defined(__SSE3__))
|
||||
# define GLM_ARCH GLM_ARCH_SSE3
|
||||
# elif(defined(__SSE2__))
|
||||
# define GLM_ARCH GLM_ARCH_SSE2
|
||||
# else
|
||||
# define GLM_ARCH GLM_ARCH_PURE
|
||||
# endif
|
||||
#elif((GLM_COMPILER & GLM_COMPILER_GCC) && (defined(__i386__) || defined(__x86_64__)))
|
||||
# if(defined(__AVX__))
|
||||
# define GLM_ARCH GLM_ARCH_AVX
|
||||
# elif(defined(__SSE3__))
|
||||
# define GLM_ARCH GLM_ARCH_SSE3
|
||||
# elif(defined(__SSE2__))
|
||||
# define GLM_ARCH GLM_ARCH_SSE2
|
||||
# else
|
||||
# define GLM_ARCH GLM_ARCH_PURE
|
||||
# endif
|
||||
#else
|
||||
# define GLM_ARCH GLM_ARCH_PURE
|
||||
#endif
|
||||
|
||||
#if(GLM_ARCH != GLM_ARCH_PURE)
|
||||
#if((GLM_ARCH & GLM_ARCH_AVX) == GLM_ARCH_AVX)
|
||||
# include <immintrin.h>
|
||||
#endif//GLM_ARCH
|
||||
#if((GLM_ARCH & GLM_ARCH_SSE3) == GLM_ARCH_SSE3)
|
||||
# include <pmmintrin.h>
|
||||
#endif//GLM_ARCH
|
||||
#if((GLM_ARCH & GLM_ARCH_SSE2) == GLM_ARCH_SSE2)
|
||||
# include <emmintrin.h>
|
||||
#endif//GLM_ARCH
|
||||
#endif//(GLM_ARCH != GLM_ARCH_PURE)
|
||||
|
||||
#if(defined(GLM_MESSAGES) && !defined(GLM_MESSAGE_ARCH_DISPLAYED))
|
||||
# define GLM_MESSAGE_ARCH_DISPLAYED
|
||||
# if(GLM_ARCH == GLM_ARCH_PURE)
|
||||
# pragma message("GLM: Platform independent")
|
||||
# elif(GLM_ARCH == GLM_ARCH_SSE2)
|
||||
# pragma message("GLM: SSE2 build platform")
|
||||
# elif(GLM_ARCH == GLM_ARCH_SSE3)
|
||||
# pragma message("GLM: SSE3 build platform")
|
||||
# elif(GLM_ARCH == GLM_ARCH_AVX)
|
||||
# pragma message("GLM: AVX build platform")
|
||||
# endif//GLM_ARCH
|
||||
#endif//GLM_MESSAGE
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// Components
|
||||
|
||||
//#define GLM_FORCE_ONLY_XYZW
|
||||
#define GLM_COMPONENT_GLSL_NAMES 0
|
||||
#define GLM_COMPONENT_ONLY_XYZW 1 // To disable multiple vector component names access.
|
||||
#define GLM_COMPONENT_MS_EXT 2 // To use anonymous union to provide multiple component names access for class valType. Visual C++ only.
|
||||
|
||||
#ifndef GLM_FORCE_ONLY_XYZW
|
||||
# if((GLM_COMPILER & GLM_COMPILER_VC) && defined(_MSC_EXTENSIONS))
|
||||
# define GLM_COMPONENT GLM_COMPONENT_MS_EXT
|
||||
# else
|
||||
# define GLM_COMPONENT GLM_COMPONENT_GLSL_NAMES
|
||||
# endif
|
||||
#else
|
||||
# define GLM_COMPONENT GLM_COMPONENT_ONLY_XYZW
|
||||
#endif
|
||||
|
||||
#if((GLM_COMPONENT == GLM_COMPONENT_MS_EXT) && !(GLM_COMPILER & GLM_COMPILER_VC))
|
||||
# error "GLM_COMPONENT value is GLM_COMPONENT_MS_EXT but this is not allowed with the current compiler."
|
||||
#endif
|
||||
|
||||
#if(defined(GLM_MESSAGES) && !defined(GLM_MESSAGE_COMPONENT_DISPLAYED))
|
||||
# define GLM_MESSAGE_COMPONENT_DISPLAYED
|
||||
# if(GLM_COMPONENT == GLM_COMPONENT_GLSL_NAMES)
|
||||
# pragma message("GLM: GLSL multiple vector component names")
|
||||
# elif(GLM_COMPONENT == GLM_COMPONENT_ONLY_XYZW)
|
||||
# pragma message("GLM: x,y,z,w vector component names only")
|
||||
# elif(GLM_COMPONENT == GLM_COMPONENT_MS_EXT)
|
||||
# pragma message("GLM: Multiple vector component names through Visual C++ language extensions")
|
||||
# else
|
||||
# error "GLM_COMPONENT value unknown"
|
||||
# endif//GLM_MESSAGE_COMPONENT_DISPLAYED
|
||||
#endif//GLM_MESSAGE
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// Static assert
|
||||
|
||||
#if(GLM_LANG == GLM_LANG_CXX0X)
|
||||
# define GLM_STATIC_ASSERT(x, message) static_assert(x, message)
|
||||
#elif(defined(BOOST_STATIC_ASSERT))
|
||||
# define GLM_STATIC_ASSERT(x, message) BOOST_STATIC_ASSERT(x)
|
||||
#elif(GLM_COMPILER & GLM_COMPILER_VC)
|
||||
# define GLM_STATIC_ASSERT(x, message) typedef char __CASSERT__##__LINE__[(x) ? 1 : -1]
|
||||
#else
|
||||
# define GLM_STATIC_ASSERT(x, message)
|
||||
# define GLM_STATIC_ASSERT_NULL
|
||||
#endif//GLM_LANG
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// Qualifiers
|
||||
|
||||
// User defines: GLM_FORCE_INLINE GLM_FORCE_CUDA
|
||||
|
||||
#if(defined(GLM_FORCE_CUDA) || (GLM_COMPILER & GLM_COMPILER_CUDA))
|
||||
# define GLM_CUDA_FUNC_DEF __device__ __host__
|
||||
# define GLM_CUDA_FUNC_DECL __device__ __host__
|
||||
#else
|
||||
# define GLM_CUDA_FUNC_DEF
|
||||
# define GLM_CUDA_FUNC_DECL
|
||||
#endif
|
||||
|
||||
#if(defined(GLM_FORCE_INLINE))
|
||||
# if((GLM_COMPILER & GLM_COMPILER_VC) && (GLM_COMPILER >= GLM_COMPILER_VC2005))
|
||||
# define GLM_INLINE __forceinline
|
||||
# elif((GLM_COMPILER & GLM_COMPILER_GCC) && (GLM_COMPILER >= GLM_COMPILER_GCC34))
|
||||
# define GLM_INLINE __attribute__((always_inline))
|
||||
# else
|
||||
# define GLM_INLINE inline
|
||||
# endif//GLM_COMPILER
|
||||
#else
|
||||
# define GLM_INLINE inline
|
||||
#endif//defined(GLM_FORCE_INLINE)
|
||||
|
||||
#define GLM_FUNC_DECL GLM_CUDA_FUNC_DECL
|
||||
#define GLM_FUNC_QUALIFIER GLM_CUDA_FUNC_DEF GLM_INLINE
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// Swizzle operators
|
||||
|
||||
// User defines: GLM_SWIZZLE_XYZW GLM_SWIZZLE_RGBA GLM_SWIZZLE_STQP GLM_SWIZZLE
|
||||
|
||||
#if(defined(GLM_MESSAGES) && !defined(GLM_MESSAGE_SWIZZLE_DISPLAYED))
|
||||
# define GLM_MESSAGE_SWIZZLE_DISPLAYED
|
||||
# if(defined(GLM_SWIZZLE))
|
||||
# pragma message("GLM: Full swizzling operator enabled")
|
||||
# elif(!defined(GLM_SWIZZLE_XYZW) && !defined(GLM_SWIZZLE_RGBA) && !defined(GLM_SWIZZLE_STQP) && !defined(GLM_SWIZZLE))
|
||||
# pragma message("GLM: No swizzling operator enabled")
|
||||
# else
|
||||
# pragma message("GLM: Partial swizzling operator enabled")
|
||||
# endif
|
||||
#endif//GLM_MESSAGE
|
||||
|
||||
#endif//glm_setup
|
322
ExternalLibs/glm/core/type.hpp
Normal file
322
ExternalLibs/glm/core/type.hpp
Normal file
|
@ -0,0 +1,322 @@
|
|||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// OpenGL Mathematics Copyright (c) 2005 - 2011 G-Truc Creation (www.g-truc.net)
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// Created : 2008-01-08
|
||||
// Updated : 2008-01-08
|
||||
// Licence : This source is under MIT License
|
||||
// File : glm/core/type.hpp
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#ifndef glm_core_type
|
||||
#define glm_core_type
|
||||
|
||||
#include "type_half.hpp"
|
||||
#include "type_float.hpp"
|
||||
#include "type_int.hpp"
|
||||
|
||||
#include "type_gentype.hpp"
|
||||
|
||||
#include "type_vec1.hpp"
|
||||
#include "type_vec2.hpp"
|
||||
#include "type_vec3.hpp"
|
||||
#include "type_vec4.hpp"
|
||||
|
||||
#include "type_mat2x2.hpp"
|
||||
#include "type_mat2x3.hpp"
|
||||
#include "type_mat2x4.hpp"
|
||||
#include "type_mat3x2.hpp"
|
||||
#include "type_mat3x3.hpp"
|
||||
#include "type_mat3x4.hpp"
|
||||
#include "type_mat4x2.hpp"
|
||||
#include "type_mat4x3.hpp"
|
||||
#include "type_mat4x4.hpp"
|
||||
|
||||
namespace glm{
|
||||
namespace core{
|
||||
namespace type
|
||||
{
|
||||
//////////////////////////
|
||||
// Float definition
|
||||
|
||||
#if(defined(GLM_PRECISION_HIGHP_FLOAT))
|
||||
typedef precision::highp_vec2 vec2;
|
||||
typedef precision::highp_vec3 vec3;
|
||||
typedef precision::highp_vec4 vec4;
|
||||
typedef precision::highp_mat2x2 mat2x2;
|
||||
typedef precision::highp_mat2x3 mat2x3;
|
||||
typedef precision::highp_mat2x4 mat2x4;
|
||||
typedef precision::highp_mat3x2 mat3x2;
|
||||
typedef precision::highp_mat3x3 mat3x3;
|
||||
typedef precision::highp_mat3x4 mat3x4;
|
||||
typedef precision::highp_mat4x2 mat4x2;
|
||||
typedef precision::highp_mat4x3 mat4x3;
|
||||
typedef precision::highp_mat4x4 mat4x4;
|
||||
#elif(defined(GLM_PRECISION_MEDIUMP_FLOAT))
|
||||
typedef precision::mediump_vec2 vec2;
|
||||
typedef precision::mediump_vec3 vec3;
|
||||
typedef precision::mediump_vec4 vec4;
|
||||
typedef precision::mediump_mat2x2 mat2x2;
|
||||
typedef precision::mediump_mat2x3 mat2x3;
|
||||
typedef precision::mediump_mat2x4 mat2x4;
|
||||
typedef precision::mediump_mat3x2 mat3x2;
|
||||
typedef precision::mediump_mat3x3 mat3x3;
|
||||
typedef precision::mediump_mat3x4 mat3x4;
|
||||
typedef precision::mediump_mat4x2 mat4x2;
|
||||
typedef precision::mediump_mat4x3 mat4x3;
|
||||
typedef precision::mediump_mat4x4 mat4x4;
|
||||
#elif(defined(GLM_PRECISION_LOWP_FLOAT))
|
||||
typedef precision::lowp_vec2 vec2;
|
||||
typedef precision::lowp_vec3 vec3;
|
||||
typedef precision::lowp_vec4 vec4;
|
||||
typedef precision::lowp_mat2x2 mat2x2;
|
||||
typedef precision::lowp_mat2x3 mat2x3;
|
||||
typedef precision::lowp_mat2x4 mat2x4;
|
||||
typedef precision::lowp_mat3x2 mat3x2;
|
||||
typedef precision::lowp_mat3x3 mat3x3;
|
||||
typedef precision::lowp_mat3x4 mat3x4;
|
||||
typedef precision::lowp_mat4x2 mat4x2;
|
||||
typedef precision::lowp_mat4x3 mat4x3;
|
||||
typedef precision::lowp_mat4x4 mat4x4;
|
||||
#else
|
||||
//! 2 components vector of floating-point numbers.
|
||||
//! From GLSL 1.30.8 specification, section 4.1.5 Vectors.
|
||||
//! \ingroup core_types
|
||||
typedef precision::mediump_vec2 vec2;
|
||||
|
||||
//! 3 components vector of floating-point numbers.
|
||||
//! From GLSL 1.30.8 specification, section 4.1.5 Vectors.
|
||||
//! \ingroup core_types
|
||||
typedef precision::mediump_vec3 vec3;
|
||||
|
||||
//! 4 components vector of floating-point numbers.
|
||||
//! From GLSL 1.30.8 specification, section 4.1.5 Vectors.
|
||||
//! \ingroup core_types
|
||||
typedef precision::mediump_vec4 vec4;
|
||||
|
||||
//! 2 columns of 2 components matrix of floating-point numbers.
|
||||
//! (From GLSL 1.30.8 specification, section 4.1.6 Matrices)
|
||||
//! \ingroup core_types
|
||||
typedef precision::mediump_mat2x2 mat2x2;
|
||||
|
||||
//! 2 columns of 3 components matrix of floating-point numbers.
|
||||
//! (From GLSL 1.30.8 specification, section 4.1.6 Matrices)
|
||||
//! \ingroup core_types
|
||||
typedef precision::mediump_mat2x3 mat2x3;
|
||||
|
||||
//! 2 columns of 4 components matrix of floating-point numbers.
|
||||
//! (From GLSL 1.30.8 specification, section 4.1.6 Matrices)
|
||||
//! \ingroup core_types
|
||||
typedef precision::mediump_mat2x4 mat2x4;
|
||||
|
||||
//! 3 columns of 2 components matrix of floating-point numbers.
|
||||
//! (From GLSL 1.30.8 specification, section 4.1.6 Matrices)
|
||||
//! \ingroup core_types
|
||||
typedef precision::mediump_mat3x2 mat3x2;
|
||||
|
||||
//! 3 columns of 3 components matrix of floating-point numbers.
|
||||
//! (From GLSL 1.30.8 specification, section 4.1.6 Matrices)
|
||||
//! \ingroup core_types
|
||||
typedef precision::mediump_mat3x3 mat3x3;
|
||||
|
||||
//! 3 columns of 4 components matrix of floating-point numbers.
|
||||
//! (From GLSL 1.30.8 specification, section 4.1.6 Matrices)
|
||||
//! \ingroup core_types
|
||||
typedef precision::mediump_mat3x4 mat3x4;
|
||||
|
||||
//! 4 columns of 2 components matrix of floating-point numbers.
|
||||
//! (From GLSL 1.30.8 specification, section 4.1.6 Matrices)
|
||||
//! \ingroup core_types
|
||||
typedef precision::mediump_mat4x2 mat4x2;
|
||||
|
||||
//! 4 columns of 3 components matrix of floating-point numbers.
|
||||
//! (From GLSL 1.30.8 specification, section 4.1.6 Matrices)
|
||||
//! \ingroup core_types
|
||||
typedef precision::mediump_mat4x3 mat4x3;
|
||||
|
||||
//! 4 columns of 4 components matrix of floating-point numbers.
|
||||
//! (From GLSL 1.30.8 specification, section 4.1.6 Matrices)
|
||||
//! \ingroup core_types
|
||||
typedef precision::mediump_mat4x4 mat4x4;
|
||||
|
||||
#endif//GLM_PRECISION
|
||||
|
||||
//! 2 columns of 2 components matrix of floating-point numbers.
|
||||
//! (From GLSL 1.30.8 specification, section 4.1.6 Matrices)
|
||||
//! \ingroup core_types
|
||||
typedef mat2x2 mat2;
|
||||
|
||||
//! 3 columns of 3 components matrix of floating-point numbers.
|
||||
//! (From GLSL 1.30.8 specification, section 4.1.6 Matrices)
|
||||
//! \ingroup core_types
|
||||
typedef mat3x3 mat3;
|
||||
|
||||
//! 4 columns of 4 components matrix of floating-point numbers.
|
||||
//! (From GLSL 1.30.8 specification, section 4.1.6 Matrices)
|
||||
//! \ingroup core_types
|
||||
typedef mat4x4 mat4;
|
||||
|
||||
//////////////////////////
|
||||
// Signed integer definition
|
||||
|
||||
#if(defined(GLM_PRECISION_HIGHP_INT))
|
||||
typedef precision::highp_ivec2 ivec2;
|
||||
typedef precision::highp_ivec3 ivec3;
|
||||
typedef precision::highp_ivec4 ivec4;
|
||||
#elif(defined(GLM_PRECISION_MEDIUMP_INT))
|
||||
typedef precision::mediump_ivec2 ivec2;
|
||||
typedef precision::mediump_ivec3 ivec3;
|
||||
typedef precision::mediump_ivec4 ivec4;
|
||||
#elif(defined(GLM_PRECISION_LOWP_INT))
|
||||
typedef precision::lowp_ivec2 ivec2;
|
||||
typedef precision::lowp_ivec3 ivec3;
|
||||
typedef precision::lowp_ivec4 ivec4;
|
||||
#else
|
||||
//! 2 components vector of signed integer numbers.
|
||||
//! From GLSL 1.30.8 specification, section 4.1.5 Vectors.
|
||||
//! \ingroup core_types
|
||||
typedef precision::mediump_ivec2 ivec2;
|
||||
|
||||
//! 3 components vector of signed integer numbers.
|
||||
//! From GLSL 1.30.8 specification, section 4.1.5 Vectors.
|
||||
//! \ingroup core_types
|
||||
typedef precision::mediump_ivec3 ivec3;
|
||||
|
||||
//! 4 components vector of signed integer numbers.
|
||||
//! From GLSL 1.30.8 specification, section 4.1.5 Vectors.
|
||||
//! \ingroup core_types
|
||||
typedef precision::mediump_ivec4 ivec4;
|
||||
#endif//GLM_PRECISION
|
||||
|
||||
//////////////////////////
|
||||
// Unsigned integer definition
|
||||
|
||||
#if(defined(GLM_PRECISION_HIGHP_UINT))
|
||||
typedef precision::highp_uvec2 uvec2;
|
||||
typedef precision::highp_uvec3 uvec3;
|
||||
typedef precision::highp_uvec4 uvec4;
|
||||
#elif(defined(GLM_PRECISION_MEDIUMP_UINT))
|
||||
typedef precision::mediump_uvec2 uvec2;
|
||||
typedef precision::mediump_uvec3 uvec3;
|
||||
typedef precision::mediump_uvec4 uvec4;
|
||||
#elif(defined(GLM_PRECISION_LOWP_UINT))
|
||||
typedef precision::lowp_uvec2 uvec2;
|
||||
typedef precision::lowp_uvec3 uvec3;
|
||||
typedef precision::lowp_uvec4 uvec4;
|
||||
#else
|
||||
//! 2 components vector of unsigned integer numbers.
|
||||
//! From GLSL 1.30.8 specification, section 4.1.5 Vectors.
|
||||
//! \ingroup core_types
|
||||
typedef precision::mediump_uvec2 uvec2;
|
||||
|
||||
//! 3 components vector of unsigned integer numbers.
|
||||
//! From GLSL 1.30.8 specification, section 4.1.5 Vectors.
|
||||
//! \ingroup core_types
|
||||
typedef precision::mediump_uvec3 uvec3;
|
||||
|
||||
//! 4 components vector of unsigned integer numbers.
|
||||
//! From GLSL 1.30.8 specification, section 4.1.5 Vectors.
|
||||
//! \ingroup core_types
|
||||
typedef precision::mediump_uvec4 uvec4;
|
||||
#endif//GLM_PRECISION
|
||||
|
||||
//////////////////////////
|
||||
// Boolean definition
|
||||
|
||||
//! 2 components vector of boolean.
|
||||
//! From GLSL 1.30.8 specification, section 4.1.5 Vectors.
|
||||
//! \ingroup core_types
|
||||
typedef detail::tvec2<bool> bvec2;
|
||||
|
||||
//! 3 components vector of boolean.
|
||||
//! From GLSL 1.30.8 specification, section 4.1.5 Vectors.
|
||||
//! \ingroup core_types
|
||||
typedef detail::tvec3<bool> bvec3;
|
||||
|
||||
//! 4 components vector of boolean.
|
||||
//! From GLSL 1.30.8 specification, section 4.1.5 Vectors.
|
||||
//! \ingroup core_types
|
||||
typedef detail::tvec4<bool> bvec4;
|
||||
|
||||
//////////////////////////
|
||||
// Double definition
|
||||
|
||||
//! Vector of 2 double-precision floating-point numbers.
|
||||
//! From GLSL 4.00.8 specification, section 4.1 Basic Types.
|
||||
//! \ingroup core_types
|
||||
typedef detail::tvec2<double> dvec2;
|
||||
|
||||
//! Vector of 3 double-precision floating-point numbers.
|
||||
//! From GLSL 4.00.8 specification, section 4.1 Basic Types.
|
||||
//! \ingroup core_types
|
||||
typedef detail::tvec3<double> dvec3;
|
||||
|
||||
//! Vector of 4 double-precision floating-point numbers.
|
||||
//! From GLSL 4.00.8 specification, section 4.1 Basic Types.
|
||||
//! \ingroup core_types
|
||||
typedef detail::tvec4<double> dvec4;
|
||||
|
||||
//! 2 * 2 matrix of double-precision floating-point numbers.
|
||||
//! From GLSL 4.00.8 specification, section 4.1 Basic Types.
|
||||
//! \ingroup core_types
|
||||
typedef detail::tmat2x2<double> dmat2;
|
||||
|
||||
//! 3 * 3 matrix of double-precision floating-point numbers.
|
||||
//! From GLSL 4.00.8 specification, section 4.1 Basic Types.
|
||||
//! \ingroup core_types
|
||||
typedef detail::tmat3x3<double> dmat3;
|
||||
|
||||
//! 4 * 4 matrix of double-precision floating-point numbers.
|
||||
//! From GLSL 4.00.8 specification, section 4.1 Basic Types.
|
||||
//! \ingroup core_types
|
||||
typedef detail::tmat4x4<double> dmat4;
|
||||
|
||||
//! 2 * 2 matrix of double-precision floating-point numbers.
|
||||
//! From GLSL 4.00.8 specification, section 4.1 Basic Types.
|
||||
//! \ingroup core_types
|
||||
typedef detail::tmat2x2<double> dmat2x2;
|
||||
|
||||
//! 2 * 3 matrix of double-precision floating-point numbers.
|
||||
//! From GLSL 4.00.8 specification, section 4.1 Basic Types.
|
||||
//! \ingroup core_types
|
||||
typedef detail::tmat2x3<double> dmat2x3;
|
||||
|
||||
//! 2 * 4 matrix of double-precision floating-point numbers.
|
||||
//! From GLSL 4.00.8 specification, section 4.1 Basic Types.
|
||||
//! \ingroup core_types
|
||||
typedef detail::tmat2x4<double> dmat2x4;
|
||||
|
||||
//! 3 * 2 matrix of double-precision floating-point numbers.
|
||||
//! From GLSL 4.00.8 specification, section 4.1 Basic Types.
|
||||
//! \ingroup core_types
|
||||
typedef detail::tmat3x2<double> dmat3x2;
|
||||
|
||||
//! 3 * 3 matrix of double-precision floating-point numbers.
|
||||
//! From GLSL 4.00.8 specification, section 4.1 Basic Types.
|
||||
//! \ingroup core_types
|
||||
typedef detail::tmat3x3<double> dmat3x3;
|
||||
|
||||
//! 3 * 4 matrix of double-precision floating-point numbers.
|
||||
//! From GLSL 4.00.8 specification, section 4.1 Basic Types.
|
||||
//! \ingroup core_types
|
||||
typedef detail::tmat3x4<double> dmat3x4;
|
||||
|
||||
//! 4 * 2 matrix of double-precision floating-point numbers.
|
||||
//! From GLSL 4.00.8 specification, section 4.1 Basic Types.
|
||||
//! \ingroup core_types
|
||||
typedef detail::tmat4x2<double> dmat4x2;
|
||||
|
||||
//! 4 * 3 matrix of double-precision floating-point numbers.
|
||||
//! From GLSL 4.00.8 specification, section 4.1 Basic Types.
|
||||
//! \ingroup core_types
|
||||
typedef detail::tmat4x3<double> dmat4x3;
|
||||
|
||||
//! 4 * 4 matrix of double-precision floating-point numbers.
|
||||
//! From GLSL 4.00.8 specification, section 4.1 Basic Types.
|
||||
//! \ingroup core_types
|
||||
typedef detail::tmat4x4<double> dmat4x4;
|
||||
|
||||
}//namespace type
|
||||
}//namespace core
|
||||
}//namespace glm
|
||||
|
||||
#endif//glm_core_type
|
74
ExternalLibs/glm/core/type_float.hpp
Normal file
74
ExternalLibs/glm/core/type_float.hpp
Normal file
|
@ -0,0 +1,74 @@
|
|||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// OpenGL Mathematics Copyright (c) 2005 - 2011 G-Truc Creation (www.g-truc.net)
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// Created : 2008-08-22
|
||||
// Updated : 2010-02-08
|
||||
// Licence : This source is under MIT License
|
||||
// File : glm/core/type_float.hpp
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#ifndef glm_core_type_float
|
||||
#define glm_core_type_float
|
||||
|
||||
#include "type_half.hpp"
|
||||
#include "setup.hpp"
|
||||
|
||||
namespace glm
|
||||
{
|
||||
namespace detail
|
||||
{
|
||||
GLM_DETAIL_IS_FLOAT(detail::thalf);
|
||||
GLM_DETAIL_IS_FLOAT(float);
|
||||
GLM_DETAIL_IS_FLOAT(double);
|
||||
GLM_DETAIL_IS_FLOAT(long double);
|
||||
}
|
||||
//namespace detail
|
||||
|
||||
namespace core{
|
||||
namespace type{
|
||||
|
||||
namespace precision
|
||||
{
|
||||
#ifdef GLM_USE_HALF_SCALAR
|
||||
typedef detail::thalf lowp_float_t;
|
||||
#else//GLM_USE_HALF_SCALAR
|
||||
typedef float lowp_float_t;
|
||||
#endif//GLM_USE_HALF_SCALAR
|
||||
typedef float mediump_float_t;
|
||||
typedef double highp_float_t;
|
||||
|
||||
//! Low precision floating-point numbers.
|
||||
//! There is no guarantee on the actual precision.
|
||||
//! From GLSL 1.30.8 specification
|
||||
//! \ingroup core_precision
|
||||
typedef lowp_float_t lowp_float;
|
||||
//! Medium precision floating-point numbers.
|
||||
//! There is no guarantee on the actual precision.
|
||||
//! From GLSL 1.30.8 specification
|
||||
//! \ingroup core_precision
|
||||
typedef mediump_float_t mediump_float;
|
||||
//! High precision floating-point numbers.
|
||||
//! There is no guarantee on the actual precision.
|
||||
//! From GLSL 1.30.8 specification
|
||||
//! \ingroup core_precision
|
||||
typedef highp_float_t highp_float;
|
||||
}
|
||||
//namespace precision
|
||||
|
||||
#if(!defined(GLM_PRECISION_HIGHP_FLOAT) && !defined(GLM_PRECISION_MEDIUMP_FLOAT) && !defined(GLM_PRECISION_LOWP_FLOAT))
|
||||
typedef precision::mediump_float float_t;
|
||||
#elif(defined(GLM_PRECISION_HIGHP_FLOAT) && !defined(GLM_PRECISION_MEDIUMP_FLOAT) && !defined(GLM_PRECISION_LOWP_FLOAT))
|
||||
typedef precision::highp_float float_t;
|
||||
#elif(!defined(GLM_PRECISION_HIGHP_FLOAT) && defined(GLM_PRECISION_MEDIUMP_FLOAT) && !defined(GLM_PRECISION_LOWP_FLOAT))
|
||||
typedef precision::mediump_float float_t;
|
||||
#elif(!defined(GLM_PRECISION_HIGHP_FLOAT) && !defined(GLM_PRECISION_MEDIUMP_FLOAT) && defined(GLM_PRECISION_LOWP_FLOAT))
|
||||
typedef precision::lowp_float float_t;
|
||||
#else
|
||||
# error "GLM error: multiple default precision requested for floating-point types"
|
||||
#endif
|
||||
|
||||
}//namespace type
|
||||
}//namespace core
|
||||
}//namespace glm
|
||||
|
||||
#endif//glm_core_type_float
|
150
ExternalLibs/glm/core/type_gentype.hpp
Normal file
150
ExternalLibs/glm/core/type_gentype.hpp
Normal file
|
@ -0,0 +1,150 @@
|
|||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// OpenGL Mathematics Copyright (c) 2005 - 2011 G-Truc Creation (www.g-truc.net)
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// Created : 2008-10-05
|
||||
// Updated : 2010-01-26
|
||||
// Licence : This source is under MIT License
|
||||
// File : glm/core/type_gentype.hpp
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#ifndef glm_core_type_gentype
|
||||
#define glm_core_type_gentype
|
||||
|
||||
#include "type_size.hpp"
|
||||
|
||||
namespace glm
|
||||
{
|
||||
enum profile
|
||||
{
|
||||
nice,
|
||||
fast,
|
||||
simd
|
||||
};
|
||||
|
||||
namespace detail
|
||||
{
|
||||
template
|
||||
<
|
||||
typename VALTYPE,
|
||||
template <typename> class TYPE
|
||||
>
|
||||
struct genType
|
||||
{
|
||||
public:
|
||||
enum ctor{null};
|
||||
|
||||
typedef VALTYPE value_type;
|
||||
typedef VALTYPE & value_reference;
|
||||
typedef VALTYPE * value_pointer;
|
||||
typedef VALTYPE const * value_const_pointer;
|
||||
typedef TYPE<bool> bool_type;
|
||||
|
||||
typedef sizeType size_type;
|
||||
static bool is_vector();
|
||||
static bool is_matrix();
|
||||
|
||||
typedef TYPE<VALTYPE> type;
|
||||
typedef TYPE<VALTYPE> * pointer;
|
||||
typedef TYPE<VALTYPE> const * const_pointer;
|
||||
typedef TYPE<VALTYPE> const * const const_pointer_const;
|
||||
typedef TYPE<VALTYPE> * const pointer_const;
|
||||
typedef TYPE<VALTYPE> & reference;
|
||||
typedef TYPE<VALTYPE> const & const_reference;
|
||||
typedef TYPE<VALTYPE> const & param_type;
|
||||
|
||||
//////////////////////////////////////
|
||||
// Address (Implementation details)
|
||||
|
||||
value_const_pointer value_address() const{return value_pointer(this);}
|
||||
value_pointer value_address(){return value_pointer(this);}
|
||||
|
||||
//protected:
|
||||
// enum kind
|
||||
// {
|
||||
// GEN_TYPE,
|
||||
// VEC_TYPE,
|
||||
// MAT_TYPE
|
||||
// };
|
||||
|
||||
// typedef typename TYPE::kind kind;
|
||||
};
|
||||
|
||||
template
|
||||
<
|
||||
typename VALTYPE,
|
||||
template <typename> class TYPE
|
||||
>
|
||||
bool genType<VALTYPE, TYPE>::is_vector()
|
||||
{
|
||||
return true;
|
||||
}
|
||||
/*
|
||||
template <typename valTypeT, unsigned int colT, unsigned int rowT, profile proT = nice>
|
||||
class base
|
||||
{
|
||||
public:
|
||||
//////////////////////////////////////
|
||||
// Traits
|
||||
|
||||
typedef sizeType size_type;
|
||||
typedef valTypeT value_type;
|
||||
|
||||
typedef base<value_type, colT, rowT> class_type;
|
||||
|
||||
typedef base<bool, colT, rowT> bool_type;
|
||||
typedef base<value_type, rowT, 1> col_type;
|
||||
typedef base<value_type, colT, 1> row_type;
|
||||
typedef base<value_type, rowT, colT> transpose_type;
|
||||
|
||||
static size_type col_size();
|
||||
static size_type row_size();
|
||||
static size_type value_size();
|
||||
static bool is_scalar();
|
||||
static bool is_vector();
|
||||
static bool is_matrix();
|
||||
|
||||
private:
|
||||
// Data
|
||||
col_type value[colT];
|
||||
|
||||
public:
|
||||
//////////////////////////////////////
|
||||
// Constructors
|
||||
base();
|
||||
base(class_type const & m);
|
||||
|
||||
explicit base(value_type const & x);
|
||||
explicit base(value_type const * const x);
|
||||
explicit base(col_type const * const x);
|
||||
|
||||
//////////////////////////////////////
|
||||
// Conversions
|
||||
template <typename vU, uint cU, uint rU, profile pU>
|
||||
explicit base(base<vU, cU, rU, pU> const & m);
|
||||
|
||||
//////////////////////////////////////
|
||||
// Accesses
|
||||
col_type& operator[](size_type i);
|
||||
col_type const & operator[](size_type i) const;
|
||||
|
||||
//////////////////////////////////////
|
||||
// Unary updatable operators
|
||||
class_type& operator= (class_type const & x);
|
||||
class_type& operator+= (value_type const & x);
|
||||
class_type& operator+= (class_type const & x);
|
||||
class_type& operator-= (value_type const & x);
|
||||
class_type& operator-= (class_type const & x);
|
||||
class_type& operator*= (value_type const & x);
|
||||
class_type& operator*= (class_type const & x);
|
||||
class_type& operator/= (value_type const & x);
|
||||
class_type& operator/= (class_type const & x);
|
||||
class_type& operator++ ();
|
||||
class_type& operator-- ();
|
||||
};
|
||||
*/
|
||||
}//namespace detail
|
||||
}//namespace glm
|
||||
|
||||
//#include "type_gentype.inl"
|
||||
|
||||
#endif//glm_core_type_gentype
|
347
ExternalLibs/glm/core/type_gentype.inl
Normal file
347
ExternalLibs/glm/core/type_gentype.inl
Normal file
|
@ -0,0 +1,347 @@
|
|||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// OpenGL Mathematics Copyright (c) 2005 - 2011 G-Truc Creation (www.g-truc.net)
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// Created : 2008-10-05
|
||||
// Updated : 2008-10-05
|
||||
// Licence : This source is under MIT License
|
||||
// File : glm/core/type_gentype.inl
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
namespace glm{
|
||||
namespace detail{
|
||||
|
||||
/////////////////////////////////
|
||||
// Static functions
|
||||
|
||||
template <typename vT, uint cT, uint rT, profile pT>
|
||||
typename base<vT, cT, rT, pT>::size_type base<vT, cT, rT, pT>::col_size()
|
||||
{
|
||||
return cT;
|
||||
}
|
||||
|
||||
template <typename vT, uint cT, uint rT, profile pT>
|
||||
typename base<vT, cT, rT, pT>::size_type base<vT, cT, rT, pT>::row_size()
|
||||
{
|
||||
return rT;
|
||||
}
|
||||
|
||||
template <typename vT, uint cT, uint rT, profile pT>
|
||||
typename base<vT, cT, rT, pT>::size_type base<vT, cT, rT, pT>::value_size()
|
||||
{
|
||||
return rT * cT;
|
||||
}
|
||||
|
||||
template <typename vT, uint cT, uint rT, profile pT>
|
||||
bool base<vT, cT, rT, pT>::is_scalar()
|
||||
{
|
||||
return rT == 1 && cT == 1;
|
||||
}
|
||||
|
||||
template <typename vT, uint cT, uint rT, profile pT>
|
||||
bool base<vT, cT, rT, pT>::is_vector()
|
||||
{
|
||||
return rT == 1;
|
||||
}
|
||||
|
||||
template <typename vT, uint cT, uint rT, profile pT>
|
||||
bool base<vT, cT, rT, pT>::is_matrix()
|
||||
{
|
||||
return rT != 1;
|
||||
}
|
||||
|
||||
/////////////////////////////////
|
||||
// Constructor
|
||||
|
||||
template <typename vT, uint cT, uint rT, profile pT>
|
||||
base<vT, cT, rT, pT>::base()
|
||||
{
|
||||
memset(&this->value, 0, cT * rT * sizeof(vT));
|
||||
}
|
||||
|
||||
template <typename vT, uint cT, uint rT, profile pT>
|
||||
base<vT, cT, rT, pT>::base
|
||||
(
|
||||
typename base<vT, cT, rT, pT>::class_type const & m
|
||||
)
|
||||
{
|
||||
for
|
||||
(
|
||||
typename genType<vT, cT, rT, pT>::size_type i = typename base<vT, cT, rT, pT>::size_type(0);
|
||||
i < base<vT, cT, rT, pT>::col_size();
|
||||
++i
|
||||
)
|
||||
{
|
||||
this->value[i] = m[i];
|
||||
}
|
||||
}
|
||||
|
||||
template <typename vT, uint cT, uint rT, profile pT>
|
||||
base<vT, cT, rT, pT>::base
|
||||
(
|
||||
typename base<vT, cT, rT, pT>::value_type const & x
|
||||
)
|
||||
{
|
||||
if(rT == 1) // vector
|
||||
{
|
||||
for
|
||||
(
|
||||
typename base<vT, cT, rT, pT>::size_type i = typename base<vT, cT, rT, pT>::size_type(0);
|
||||
i < base<vT, cT, rT, pT>::col_size();
|
||||
++i
|
||||
)
|
||||
{
|
||||
this->value[i][rT] = x;
|
||||
}
|
||||
}
|
||||
else // matrix
|
||||
{
|
||||
memset(&this->value, 0, cT * rT * sizeof(vT));
|
||||
|
||||
typename base<vT, cT, rT, pT>::size_type stop = cT < rT ? cT : rT;
|
||||
|
||||
for
|
||||
(
|
||||
typename base<vT, cT, rT, pT>::size_type i = typename base<vT, cT, rT, pT>::size_type(0);
|
||||
i < stop;
|
||||
++i
|
||||
)
|
||||
{
|
||||
this->value[i][i] = x;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
template <typename vT, uint cT, uint rT, profile pT>
|
||||
base<vT, cT, rT, pT>::base
|
||||
(
|
||||
typename base<vT, cT, rT, pT>::value_type const * const x
|
||||
)
|
||||
{
|
||||
memcpy(&this->value, &x.value, cT * rT * sizeof(vT));
|
||||
}
|
||||
|
||||
template <typename vT, uint cT, uint rT, profile pT>
|
||||
base<vT, cT, rT, pT>::base
|
||||
(
|
||||
typename base<vT, cT, rT, pT>::col_type const * const x
|
||||
)
|
||||
{
|
||||
for
|
||||
(
|
||||
typename base<vT, cT, rT, pT>::size_type i = typename base<vT, cT, rT, pT>::size_type(0);
|
||||
i < base<vT, cT, rT, pT>::col_size();
|
||||
++i
|
||||
)
|
||||
{
|
||||
this->value[i] = x[i];
|
||||
}
|
||||
}
|
||||
|
||||
template <typename vT, uint cT, uint rT, profile pT>
|
||||
template <typename vU, uint cU, uint rU, profile pU>
|
||||
base<vT, cT, rT, pT>::base
|
||||
(
|
||||
base<vU, cU, rU, pU> const & m
|
||||
)
|
||||
{
|
||||
for
|
||||
(
|
||||
typename base<vT, cT, rT, pT>::size_type i = typename base<vT, cT, rT, pT>::size_type(0);
|
||||
i < base<vT, cT, rT, pT>::col_size();
|
||||
++i
|
||||
)
|
||||
{
|
||||
this->value[i] = base<vT, cT, rT, pT>(m[i]);
|
||||
}
|
||||
}
|
||||
|
||||
//////////////////////////////////////
|
||||
// Accesses
|
||||
|
||||
template <typename vT, uint cT, uint rT, profile pT>
|
||||
typename base<vT, cT, rT, pT>::col_type& base<vT, cT, rT, pT>::operator[]
|
||||
(
|
||||
typename base<vT, cT, rT, pT>::size_type i
|
||||
)
|
||||
{
|
||||
return this->value[i];
|
||||
}
|
||||
|
||||
template <typename vT, uint cT, uint rT, profile pT>
|
||||
typename base<vT, cT, rT, pT>::col_type const & base<vT, cT, rT, pT>::operator[]
|
||||
(
|
||||
typename base<vT, cT, rT, pT>::size_type i
|
||||
) const
|
||||
{
|
||||
return this->value[i];
|
||||
}
|
||||
|
||||
//////////////////////////////////////
|
||||
// Unary updatable operators
|
||||
|
||||
template <typename vT, uint cT, uint rT, profile pT>
|
||||
typename base<vT, cT, rT, pT>::class_type& base<vT, cT, rT, pT>::operator=
|
||||
(
|
||||
typename base<vT, cT, rT, pT>::class_type const & x
|
||||
)
|
||||
{
|
||||
memcpy(&this->value, &x.value, cT * rT * sizeof(vT));
|
||||
return *this;
|
||||
}
|
||||
|
||||
template <typename vT, uint cT, uint rT, profile pT>
|
||||
typename base<vT, cT, rT, pT>::class_type& base<vT, cT, rT, pT>::operator+=
|
||||
(
|
||||
typename base<vT, cT, rT, pT>::value_type const & x
|
||||
)
|
||||
{
|
||||
typename base<vT, cT, rT, pT>::size_type stop_col = x.col_size();
|
||||
typename base<vT, cT, rT, pT>::size_type stop_row = x.row_size();
|
||||
|
||||
for(typename base<vT, cT, rT, pT>::size_type j = 0; j < stop_col; ++j)
|
||||
for(typename base<vT, cT, rT, pT>::size_type i = 0; i < stop_row; ++i)
|
||||
this->value[j][i] += x;
|
||||
|
||||
return *this;
|
||||
}
|
||||
|
||||
template <typename vT, uint cT, uint rT, profile pT>
|
||||
typename base<vT, cT, rT, pT>::class_type& base<vT, cT, rT, pT>::operator+=
|
||||
(
|
||||
typename base<vT, cT, rT, pT>::class_type const & x
|
||||
)
|
||||
{
|
||||
typename base<vT, cT, rT, pT>::size_type stop_col = x.col_size();
|
||||
typename base<vT, cT, rT, pT>::size_type stop_row = x.row_size();
|
||||
|
||||
for(typename base<vT, cT, rT, pT>::size_type j = 0; j < stop_col; ++j)
|
||||
for(typename base<vT, cT, rT, pT>::size_type i = 0; i < stop_row; ++i)
|
||||
this->value[j][i] += x[j][i];
|
||||
|
||||
return *this;
|
||||
}
|
||||
|
||||
template <typename vT, uint cT, uint rT, profile pT>
|
||||
typename base<vT, cT, rT, pT>::class_type& base<vT, cT, rT, pT>::operator-=
|
||||
(
|
||||
typename base<vT, cT, rT, pT>::value_type const & x
|
||||
)
|
||||
{
|
||||
typename base<vT, cT, rT, pT>::size_type stop_col = x.col_size();
|
||||
typename base<vT, cT, rT, pT>::size_type stop_row = x.row_size();
|
||||
|
||||
for(typename base<vT, cT, rT, pT>::size_type j = 0; j < stop_col; ++j)
|
||||
for(typename base<vT, cT, rT, pT>::size_type i = 0; i < stop_row; ++i)
|
||||
this->value[j][i] -= x;
|
||||
|
||||
return *this;
|
||||
}
|
||||
|
||||
template <typename vT, uint cT, uint rT, profile pT>
|
||||
typename base<vT, cT, rT, pT>::class_type& base<vT, cT, rT, pT>::operator-=
|
||||
(
|
||||
typename base<vT, cT, rT, pT>::class_type const & x
|
||||
)
|
||||
{
|
||||
typename base<vT, cT, rT, pT>::size_type stop_col = x.col_size();
|
||||
typename base<vT, cT, rT, pT>::size_type stop_row = x.row_size();
|
||||
|
||||
for(typename base<vT, cT, rT, pT>::size_type j = 0; j < stop_col; ++j)
|
||||
for(typename base<vT, cT, rT, pT>::size_type i = 0; i < stop_row; ++i)
|
||||
this->value[j][i] -= x[j][i];
|
||||
|
||||
return *this;
|
||||
}
|
||||
|
||||
template <typename vT, uint cT, uint rT, profile pT>
|
||||
typename base<vT, cT, rT, pT>::class_type& base<vT, cT, rT, pT>::operator*=
|
||||
(
|
||||
typename base<vT, cT, rT, pT>::value_type const & x
|
||||
)
|
||||
{
|
||||
typename base<vT, cT, rT, pT>::size_type stop_col = x.col_size();
|
||||
typename base<vT, cT, rT, pT>::size_type stop_row = x.row_size();
|
||||
|
||||
for(typename base<vT, cT, rT, pT>::size_type j = 0; j < stop_col; ++j)
|
||||
for(typename base<vT, cT, rT, pT>::size_type i = 0; i < stop_row; ++i)
|
||||
this->value[j][i] *= x;
|
||||
|
||||
return *this;
|
||||
}
|
||||
|
||||
template <typename vT, uint cT, uint rT, profile pT>
|
||||
typename base<vT, cT, rT, pT>::class_type& base<vT, cT, rT, pT>::operator*=
|
||||
(
|
||||
typename base<vT, cT, rT, pT>::class_type const & x
|
||||
)
|
||||
{
|
||||
typename base<vT, cT, rT, pT>::size_type stop_col = x.col_size();
|
||||
typename base<vT, cT, rT, pT>::size_type stop_row = x.row_size();
|
||||
|
||||
for(typename base<vT, cT, rT, pT>::size_type j = 0; j < stop_col; ++j)
|
||||
for(typename base<vT, cT, rT, pT>::size_type i = 0; i < stop_row; ++i)
|
||||
this->value[j][i] *= x[j][i];
|
||||
|
||||
return *this;
|
||||
}
|
||||
|
||||
template <typename vT, uint cT, uint rT, profile pT>
|
||||
typename base<vT, cT, rT, pT>::class_type& base<vT, cT, rT, pT>::operator/=
|
||||
(
|
||||
typename base<vT, cT, rT, pT>::value_type const & x
|
||||
)
|
||||
{
|
||||
typename base<vT, cT, rT, pT>::size_type stop_col = x.col_size();
|
||||
typename base<vT, cT, rT, pT>::size_type stop_row = x.row_size();
|
||||
|
||||
for(typename base<vT, cT, rT, pT>::size_type j = 0; j < stop_col; ++j)
|
||||
for(typename base<vT, cT, rT, pT>::size_type i = 0; i < stop_row; ++i)
|
||||
this->value[j][i] /= x;
|
||||
|
||||
return *this;
|
||||
}
|
||||
|
||||
template <typename vT, uint cT, uint rT, profile pT>
|
||||
typename base<vT, cT, rT, pT>::class_type& base<vT, cT, rT, pT>::operator/=
|
||||
(
|
||||
typename base<vT, cT, rT, pT>::class_type const & x
|
||||
)
|
||||
{
|
||||
typename base<vT, cT, rT, pT>::size_type stop_col = x.col_size();
|
||||
typename base<vT, cT, rT, pT>::size_type stop_row = x.row_size();
|
||||
|
||||
for(typename base<vT, cT, rT, pT>::size_type j = 0; j < stop_col; ++j)
|
||||
for(typename base<vT, cT, rT, pT>::size_type i = 0; i < stop_row; ++i)
|
||||
this->value[j][i] /= x[j][i];
|
||||
|
||||
return *this;
|
||||
}
|
||||
|
||||
template <typename vT, uint cT, uint rT, profile pT>
|
||||
typename base<vT, cT, rT, pT>::class_type& base<vT, cT, rT, pT>::operator++ ()
|
||||
{
|
||||
typename base<vT, cT, rT, pT>::size_type stop_col = col_size();
|
||||
typename base<vT, cT, rT, pT>::size_type stop_row = row_size();
|
||||
|
||||
for(typename base<vT, cT, rT, pT>::size_type j = 0; j < stop_col; ++j)
|
||||
for(typename base<vT, cT, rT, pT>::size_type i = 0; i < stop_row; ++i)
|
||||
++this->value[j][i];
|
||||
|
||||
return *this;
|
||||
}
|
||||
|
||||
template <typename vT, uint cT, uint rT, profile pT>
|
||||
typename base<vT, cT, rT, pT>::class_type& base<vT, cT, rT, pT>::operator-- ()
|
||||
{
|
||||
typename base<vT, cT, rT, pT>::size_type stop_col = col_size();
|
||||
typename base<vT, cT, rT, pT>::size_type stop_row = row_size();
|
||||
|
||||
for(typename base<vT, cT, rT, pT>::size_type j = 0; j < stop_col; ++j)
|
||||
for(typename base<vT, cT, rT, pT>::size_type i = 0; i < stop_row; ++i)
|
||||
--this->value[j][i];
|
||||
|
||||
return *this;
|
||||
}
|
||||
|
||||
} //namespace detail
|
||||
} //namespace glm
|
87
ExternalLibs/glm/core/type_half.hpp
Normal file
87
ExternalLibs/glm/core/type_half.hpp
Normal file
|
@ -0,0 +1,87 @@
|
|||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// OpenGL Mathematics Copyright (c) 2005 - 2011 G-Truc Creation (www.g-truc.net)
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// Created : 2008-08-17
|
||||
// Updated : 2010-02-17
|
||||
// Licence : This source is under MIT License
|
||||
// File : glm/core/type_half.hpp
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#ifndef glm_core_type_half
|
||||
#define glm_core_type_half
|
||||
|
||||
#include <cstdlib>
|
||||
|
||||
namespace glm
|
||||
{
|
||||
namespace test
|
||||
{
|
||||
bool main_type_half();
|
||||
|
||||
}//namespace test
|
||||
|
||||
namespace detail
|
||||
{
|
||||
typedef short hdata;
|
||||
|
||||
float toFloat32(hdata value);
|
||||
hdata toFloat16(float const & value);
|
||||
|
||||
///16-bit floating point type.
|
||||
/// \ingroup gtc_half_float
|
||||
class thalf
|
||||
{
|
||||
public:
|
||||
// Constructors
|
||||
GLM_FUNC_DECL thalf();
|
||||
GLM_FUNC_DECL thalf(thalf const & s);
|
||||
|
||||
template <typename U>
|
||||
GLM_FUNC_DECL explicit thalf(U const & s);
|
||||
|
||||
// Cast
|
||||
//operator float();
|
||||
GLM_FUNC_DECL operator float() const;
|
||||
//operator double();
|
||||
//operator double() const;
|
||||
|
||||
// Unary updatable operators
|
||||
GLM_FUNC_DECL thalf& operator= (thalf const & s);
|
||||
GLM_FUNC_DECL thalf& operator+=(thalf const & s);
|
||||
GLM_FUNC_DECL thalf& operator-=(thalf const & s);
|
||||
GLM_FUNC_DECL thalf& operator*=(thalf const & s);
|
||||
GLM_FUNC_DECL thalf& operator/=(thalf const & s);
|
||||
GLM_FUNC_DECL thalf& operator++();
|
||||
GLM_FUNC_DECL thalf& operator--();
|
||||
|
||||
GLM_FUNC_DECL float toFloat() const{return toFloat32(data);}
|
||||
|
||||
GLM_FUNC_DECL hdata _data() const{return data;}
|
||||
|
||||
private:
|
||||
hdata data;
|
||||
};
|
||||
|
||||
thalf operator+ (thalf const & s1, thalf const & s2);
|
||||
|
||||
thalf operator- (thalf const & s1, thalf const & s2);
|
||||
|
||||
thalf operator* (thalf const & s1, thalf const & s2);
|
||||
|
||||
thalf operator/ (thalf const & s1, thalf const & s2);
|
||||
|
||||
// Unary constant operators
|
||||
thalf operator- (thalf const & s);
|
||||
|
||||
thalf operator-- (thalf const & s, int);
|
||||
|
||||
thalf operator++ (thalf const & s, int);
|
||||
|
||||
}//namespace detail
|
||||
|
||||
|
||||
}//namespace glm
|
||||
|
||||
#include "type_half.inl"
|
||||
|
||||
#endif//glm_core_type_half
|
357
ExternalLibs/glm/core/type_half.inl
Normal file
357
ExternalLibs/glm/core/type_half.inl
Normal file
|
@ -0,0 +1,357 @@
|
|||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// OpenGL Mathematics Copyright (c) 2005 - 2011 G-Truc Creation (www.g-truc.net)
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// Created : 2008-08-17
|
||||
// Updated : 2009-11-12
|
||||
// Licence : This source is under MIT License
|
||||
// File : glm/core/type_half.inl
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// Copyright:
|
||||
// This half implementation is based on OpenEXR which is Copyright (c) 2002,
|
||||
// Industrial Light & Magic, a division of Lucas Digital Ltd. LLC
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#include "_detail.hpp"
|
||||
|
||||
namespace glm{
|
||||
namespace detail
|
||||
{
|
||||
GLM_FUNC_QUALIFIER float overflow()
|
||||
{
|
||||
volatile float f = 1e10;
|
||||
|
||||
for(int i = 0; i < 10; ++i)
|
||||
f *= f; // this will overflow before
|
||||
// the forloop terminates
|
||||
return f;
|
||||
}
|
||||
|
||||
GLM_FUNC_QUALIFIER float toFloat32(hdata value)
|
||||
{
|
||||
int s = (value >> 15) & 0x00000001;
|
||||
int e = (value >> 10) & 0x0000001f;
|
||||
int m = value & 0x000003ff;
|
||||
|
||||
if(e == 0)
|
||||
{
|
||||
if(m == 0)
|
||||
{
|
||||
//
|
||||
// Plus or minus zero
|
||||
//
|
||||
|
||||
detail::uif result;
|
||||
result.i = s << 31;
|
||||
return result.f;
|
||||
}
|
||||
else
|
||||
{
|
||||
//
|
||||
// Denormalized number -- renormalize it
|
||||
//
|
||||
|
||||
while(!(m & 0x00000400))
|
||||
{
|
||||
m <<= 1;
|
||||
e -= 1;
|
||||
}
|
||||
|
||||
e += 1;
|
||||
m &= ~0x00000400;
|
||||
}
|
||||
}
|
||||
else if(e == 31)
|
||||
{
|
||||
if(m == 0)
|
||||
{
|
||||
//
|
||||
// Positive or negative infinity
|
||||
//
|
||||
|
||||
uif result;
|
||||
result.i = (s << 31) | 0x7f800000;
|
||||
return result.f;
|
||||
}
|
||||
else
|
||||
{
|
||||
//
|
||||
// Nan -- preserve sign and significand bits
|
||||
//
|
||||
|
||||
uif result;
|
||||
result.i = (s << 31) | 0x7f800000 | (m << 13);
|
||||
return result.f;
|
||||
}
|
||||
}
|
||||
|
||||
//
|
||||
// Normalized number
|
||||
//
|
||||
|
||||
e = e + (127 - 15);
|
||||
m = m << 13;
|
||||
|
||||
//
|
||||
// Assemble s, e and m.
|
||||
//
|
||||
|
||||
uif Result;
|
||||
Result.i = (s << 31) | (e << 23) | m;
|
||||
return Result.f;
|
||||
}
|
||||
|
||||
GLM_FUNC_QUALIFIER hdata toFloat16(float const & f)
|
||||
{
|
||||
uif Entry;
|
||||
Entry.f = f;
|
||||
int i = Entry.i;
|
||||
|
||||
//
|
||||
// Our floating point number, f, is represented by the bit
|
||||
// pattern in integer i. Disassemble that bit pattern into
|
||||
// the sign, s, the exponent, e, and the significand, m.
|
||||
// Shift s into the position where it will go in in the
|
||||
// resulting half number.
|
||||
// Adjust e, accounting for the different exponent bias
|
||||
// of float and half (127 versus 15).
|
||||
//
|
||||
|
||||
register int s = (i >> 16) & 0x00008000;
|
||||
register int e = ((i >> 23) & 0x000000ff) - (127 - 15);
|
||||
register int m = i & 0x007fffff;
|
||||
|
||||
//
|
||||
// Now reassemble s, e and m into a half:
|
||||
//
|
||||
|
||||
if(e <= 0)
|
||||
{
|
||||
if(e < -10)
|
||||
{
|
||||
//
|
||||
// E is less than -10. The absolute value of f is
|
||||
// less than half_MIN (f may be a small normalized
|
||||
// float, a denormalized float or a zero).
|
||||
//
|
||||
// We convert f to a _halfGTX zero.
|
||||
//
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
//
|
||||
// E is between -10 and 0. F is a normalized float,
|
||||
// whose magnitude is less than __half_NRM_MIN.
|
||||
//
|
||||
// We convert f to a denormalized _halfGTX.
|
||||
//
|
||||
|
||||
m = (m | 0x00800000) >> (1 - e);
|
||||
|
||||
//
|
||||
// Round to nearest, round "0.5" up.
|
||||
//
|
||||
// Rounding may cause the significand to overflow and make
|
||||
// our number normalized. Because of the way a half's bits
|
||||
// are laid out, we don't have to treat this case separately;
|
||||
// the code below will handle it correctly.
|
||||
//
|
||||
|
||||
if(m & 0x00001000)
|
||||
m += 0x00002000;
|
||||
|
||||
//
|
||||
// Assemble the _halfGTX from s, e (zero) and m.
|
||||
//
|
||||
|
||||
return hdata(s | (m >> 13));
|
||||
}
|
||||
else if(e == 0xff - (127 - 15))
|
||||
{
|
||||
if(m == 0)
|
||||
{
|
||||
//
|
||||
// F is an infinity; convert f to a half
|
||||
// infinity with the same sign as f.
|
||||
//
|
||||
|
||||
return hdata(s | 0x7c00);
|
||||
}
|
||||
else
|
||||
{
|
||||
//
|
||||
// F is a NAN; we produce a half NAN that preserves
|
||||
// the sign bit and the 10 leftmost bits of the
|
||||
// significand of f, with one exception: If the 10
|
||||
// leftmost bits are all zero, the NAN would turn
|
||||
// into an infinity, so we have to set at least one
|
||||
// bit in the significand.
|
||||
//
|
||||
|
||||
m >>= 13;
|
||||
|
||||
return hdata(s | 0x7c00 | m | (m == 0));
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
//
|
||||
// E is greater than zero. F is a normalized float.
|
||||
// We try to convert f to a normalized half.
|
||||
//
|
||||
|
||||
//
|
||||
// Round to nearest, round "0.5" up
|
||||
//
|
||||
|
||||
if(m & 0x00001000)
|
||||
{
|
||||
m += 0x00002000;
|
||||
|
||||
if(m & 0x00800000)
|
||||
{
|
||||
m = 0; // overflow in significand,
|
||||
e += 1; // adjust exponent
|
||||
}
|
||||
}
|
||||
|
||||
//
|
||||
// Handle exponent overflow
|
||||
//
|
||||
|
||||
if (e > 30)
|
||||
{
|
||||
overflow(); // Cause a hardware floating point overflow;
|
||||
|
||||
return hdata(s | 0x7c00);
|
||||
// if this returns, the half becomes an
|
||||
} // infinity with the same sign as f.
|
||||
|
||||
//
|
||||
// Assemble the half from s, e and m.
|
||||
//
|
||||
|
||||
return hdata(s | (e << 10) | (m >> 13));
|
||||
}
|
||||
}
|
||||
|
||||
GLM_FUNC_QUALIFIER thalf::thalf() :
|
||||
data(0)
|
||||
{}
|
||||
|
||||
GLM_FUNC_QUALIFIER thalf::thalf(thalf const & s) :
|
||||
data(s.data)
|
||||
{}
|
||||
|
||||
template <typename U>
|
||||
GLM_FUNC_QUALIFIER thalf::thalf(U const & s) :
|
||||
data(toFloat16(float(s)))
|
||||
{}
|
||||
|
||||
// Cast
|
||||
//GLM_FUNC_QUALIFIER half::operator float()
|
||||
//{
|
||||
// return toFloat();
|
||||
//}
|
||||
|
||||
GLM_FUNC_QUALIFIER thalf::operator float() const
|
||||
{
|
||||
return toFloat32(this->data);
|
||||
}
|
||||
|
||||
//GLM_FUNC_QUALIFIER half::operator double()
|
||||
//{
|
||||
// return double(toFloat());
|
||||
//}
|
||||
|
||||
//GLM_FUNC_QUALIFIER half::operator double() const
|
||||
//{
|
||||
// return double(toFloat());
|
||||
//}
|
||||
|
||||
// Unary updatable operators
|
||||
GLM_FUNC_QUALIFIER thalf& thalf::operator= (thalf const & s)
|
||||
{
|
||||
data = s.data;
|
||||
return *this;
|
||||
}
|
||||
|
||||
GLM_FUNC_QUALIFIER thalf& thalf::operator+=(thalf const & s)
|
||||
{
|
||||
data = toFloat16(toFloat32(data) + toFloat32(s.data));
|
||||
return *this;
|
||||
}
|
||||
|
||||
GLM_FUNC_QUALIFIER thalf& thalf::operator-=(thalf const & s)
|
||||
{
|
||||
data = toFloat16(toFloat32(data) - toFloat32(s.data));
|
||||
return *this;
|
||||
}
|
||||
|
||||
GLM_FUNC_QUALIFIER thalf& thalf::operator*=(thalf const & s)
|
||||
{
|
||||
data = toFloat16(toFloat32(data) * toFloat32(s.data));
|
||||
return *this;
|
||||
}
|
||||
|
||||
GLM_FUNC_QUALIFIER thalf& thalf::operator/=(thalf const & s)
|
||||
{
|
||||
data = toFloat16(toFloat32(data) / toFloat32(s.data));
|
||||
return *this;
|
||||
}
|
||||
|
||||
GLM_FUNC_QUALIFIER thalf& thalf::operator++()
|
||||
{
|
||||
float Casted = toFloat32(data);
|
||||
data = toFloat16(++Casted);
|
||||
return *this;
|
||||
}
|
||||
|
||||
GLM_FUNC_QUALIFIER thalf& thalf::operator--()
|
||||
{
|
||||
float Casted = toFloat32(data);
|
||||
data = toFloat16(--Casted);
|
||||
return *this;
|
||||
}
|
||||
|
||||
//////////////////////////////////////
|
||||
// Binary arithmetic operators
|
||||
|
||||
GLM_FUNC_QUALIFIER detail::thalf operator+ (detail::thalf const & s1, detail::thalf const & s2)
|
||||
{
|
||||
return detail::thalf(float(s1) + float(s2));
|
||||
}
|
||||
|
||||
GLM_FUNC_QUALIFIER detail::thalf operator- (detail::thalf const & s1, detail::thalf const & s2)
|
||||
{
|
||||
return detail::thalf(float(s1) - float(s2));
|
||||
}
|
||||
|
||||
GLM_FUNC_QUALIFIER detail::thalf operator* (detail::thalf const & s1, detail::thalf const & s2)
|
||||
{
|
||||
return detail::thalf(float(s1) * float(s2));
|
||||
}
|
||||
|
||||
GLM_FUNC_QUALIFIER detail::thalf operator/ (detail::thalf const & s1, detail::thalf const & s2)
|
||||
{
|
||||
return detail::thalf(float(s1) / float(s2));
|
||||
}
|
||||
|
||||
// Unary constant operators
|
||||
GLM_FUNC_QUALIFIER detail::thalf operator- (detail::thalf const & s)
|
||||
{
|
||||
return detail::thalf(-float(s));
|
||||
}
|
||||
|
||||
GLM_FUNC_QUALIFIER detail::thalf operator-- (detail::thalf const & s, int)
|
||||
{
|
||||
return detail::thalf(float(s) - 1.0f);
|
||||
}
|
||||
|
||||
GLM_FUNC_QUALIFIER detail::thalf operator++ (detail::thalf const & s, int)
|
||||
{
|
||||
return detail::thalf(float(s) + 1.0f);
|
||||
}
|
||||
|
||||
}//namespace detail
|
||||
}//namespace glm
|
114
ExternalLibs/glm/core/type_int.hpp
Normal file
114
ExternalLibs/glm/core/type_int.hpp
Normal file
|
@ -0,0 +1,114 @@
|
|||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// OpenGL Mathematics Copyright (c) 2005 - 2011 G-Truc Creation (www.g-truc.net)
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// Created : 2008-08-22
|
||||
// Updated : 2008-09-17
|
||||
// Licence : This source is under MIT License
|
||||
// File : glm/core/type_int.hpp
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#ifndef glm_core_type_int
|
||||
#define glm_core_type_int
|
||||
|
||||
#include "setup.hpp"
|
||||
#include "_detail.hpp"
|
||||
|
||||
namespace glm
|
||||
{
|
||||
namespace detail
|
||||
{
|
||||
typedef signed short lowp_int_t;
|
||||
typedef signed int mediump_int_t;
|
||||
typedef sint64 highp_int_t;
|
||||
|
||||
typedef unsigned short lowp_uint_t;
|
||||
typedef unsigned int mediump_uint_t;
|
||||
typedef uint64 highp_uint_t;
|
||||
|
||||
GLM_DETAIL_IS_INT(signed char);
|
||||
GLM_DETAIL_IS_INT(signed short);
|
||||
GLM_DETAIL_IS_INT(signed int);
|
||||
GLM_DETAIL_IS_INT(signed long);
|
||||
GLM_DETAIL_IS_INT(highp_int_t);
|
||||
|
||||
GLM_DETAIL_IS_UINT(unsigned char);
|
||||
GLM_DETAIL_IS_UINT(unsigned short);
|
||||
GLM_DETAIL_IS_UINT(unsigned int);
|
||||
GLM_DETAIL_IS_UINT(unsigned long);
|
||||
GLM_DETAIL_IS_UINT(highp_uint_t);
|
||||
}
|
||||
//namespace detail
|
||||
|
||||
namespace core{
|
||||
namespace type{
|
||||
|
||||
///namespace for precision stuff.
|
||||
namespace precision
|
||||
{
|
||||
//! Low precision signed integer.
|
||||
//! There is no guarantee on the actual precision.
|
||||
//! From GLSL 1.30.8 specification.
|
||||
//! \ingroup core_precision
|
||||
typedef detail::lowp_int_t lowp_int;
|
||||
//! Medium precision signed integer.
|
||||
//! There is no guarantee on the actual precision.
|
||||
//! From GLSL 1.30.8 specification.
|
||||
//! \ingroup core_precision
|
||||
typedef detail::mediump_int_t mediump_int;
|
||||
//! High precision signed integer.
|
||||
//! There is no guarantee on the actual precision.
|
||||
//! From GLSL 1.30.8 specification.
|
||||
//! \ingroup core_precision
|
||||
typedef detail::highp_int_t highp_int;
|
||||
|
||||
//! Low precision unsigned integer.
|
||||
//! There is no guarantee on the actual precision.
|
||||
//! From GLSL 1.30.8 specification.
|
||||
//! \ingroup core_precision
|
||||
typedef detail::lowp_uint_t lowp_uint;
|
||||
//! Medium precision unsigned integer.
|
||||
//! There is no guarantee on the actual precision.
|
||||
//! From GLSL 1.30.8 specification.
|
||||
//! \ingroup core_precision
|
||||
typedef detail::mediump_uint_t mediump_uint;
|
||||
//! High precision unsigned integer.
|
||||
//! There is no guarantee on the actual precision.
|
||||
//! From GLSL 1.30.8 specification.
|
||||
//! \ingroup core_precision
|
||||
typedef detail::highp_uint_t highp_uint;
|
||||
}
|
||||
//namespace precision
|
||||
|
||||
#if(!defined(GLM_PRECISION_HIGHP_INT) && !defined(GLM_PRECISION_MEDIUMP_INT) && !defined(GLM_PRECISION_LOWP_INT))
|
||||
typedef precision::mediump_int int_t;
|
||||
#elif(defined(GLM_PRECISION_HIGHP_INT) && !defined(GLM_PRECISION_MEDIUMP_INT) && !defined(GLM_PRECISION_LOWP_INT))
|
||||
typedef precision::highp_int int_t;
|
||||
#elif(!defined(GLM_PRECISION_HIGHP_INT) && defined(GLM_PRECISION_MEDIUMP_INT) && !defined(GLM_PRECISION_LOWP_INT))
|
||||
typedef precision::mediump_int int_t;
|
||||
#elif(!defined(GLM_PRECISION_HIGHP_INT) && !defined(GLM_PRECISION_MEDIUMP_INT) && defined(GLM_PRECISION_LOWP_INT))
|
||||
typedef precision::lowp_int int_t;
|
||||
#else
|
||||
# error "GLM error: multiple default precision requested for signed interger types"
|
||||
#endif
|
||||
|
||||
#if(!defined(GLM_PRECISION_HIGHP_UINT) && !defined(GLM_PRECISION_MEDIUMP_UINT) && !defined(GLM_PRECISION_LOWP_UINT))
|
||||
typedef precision::mediump_uint uint_t;
|
||||
#elif(defined(GLM_PRECISION_HIGHP_UINT) && !defined(GLM_PRECISION_MEDIUMP_UINT) && !defined(GLM_PRECISION_LOWP_UINT))
|
||||
typedef precision::highp_uint uint_t;
|
||||
#elif(!defined(GLM_PRECISION_HIGHP_UINT) && defined(GLM_PRECISION_MEDIUMP_UINT) && !defined(GLM_PRECISION_LOWP_UINT))
|
||||
typedef precision::mediump_uint uint_t;
|
||||
#elif(!defined(GLM_PRECISION_HIGHP_UINT) && !defined(GLM_PRECISION_MEDIUMP_UINT) && defined(GLM_PRECISION_LOWP_UINT))
|
||||
typedef precision::lowp_uint uint_t;
|
||||
#else
|
||||
# error "GLM error: multiple default precision requested for unsigned interger types"
|
||||
#endif
|
||||
|
||||
//! Unsigned integer.
|
||||
//! From GLSL 1.30.8 specification section 4.1.3 Integers.
|
||||
typedef uint_t uint;
|
||||
|
||||
}//namespace type
|
||||
}//namespace core
|
||||
}//namespace glm
|
||||
|
||||
#endif//glm_core_type_int
|
56
ExternalLibs/glm/core/type_mat.hpp
Normal file
56
ExternalLibs/glm/core/type_mat.hpp
Normal file
|
@ -0,0 +1,56 @@
|
|||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// OpenGL Mathematics Copyright (c) 2005 - 2011 G-Truc Creation (www.g-truc.net)
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// Created : 2010-01-26
|
||||
// Updated : 2010-01-26
|
||||
// Licence : This source is under MIT License
|
||||
// File : glm/core/type_mat.hpp
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#ifndef glm_core_type_mat
|
||||
#define glm_core_type_mat
|
||||
|
||||
#include "type_gentype.hpp"
|
||||
|
||||
namespace glm{
|
||||
namespace detail
|
||||
{
|
||||
//template
|
||||
//<
|
||||
// typename T,
|
||||
// template <typename> class C,
|
||||
// template <typename> class R
|
||||
//>
|
||||
//struct matType
|
||||
//{
|
||||
// enum ctor{null};
|
||||
// typedef T value_type;
|
||||
// typedef std::size_t size_type;
|
||||
// typedef C<T> col_type;
|
||||
// typedef R<T> row_type;
|
||||
// static size_type const col_size;
|
||||
// static size_type const row_size;
|
||||
//};
|
||||
|
||||
//template
|
||||
//<
|
||||
// typename T,
|
||||
// template <typename> class C,
|
||||
// template <typename> class R
|
||||
//>
|
||||
//typename matType<T, C, R>::size_type const
|
||||
//matType<T, C, R>::col_size = matType<T, C, R>::col_type::value_size;
|
||||
|
||||
//template
|
||||
//<
|
||||
// typename T,
|
||||
// template <typename> class C,
|
||||
// template <typename> class R
|
||||
//>
|
||||
//typename matType<T, C, R>::size_type const
|
||||
//matType<T, C, R>::row_size = matType<T, C, R>::row_type::value_size;
|
||||
|
||||
}//namespace detail
|
||||
}//namespace glm
|
||||
|
||||
#endif//glm_core_type_mat
|
0
ExternalLibs/glm/core/type_mat.inl
Normal file
0
ExternalLibs/glm/core/type_mat.inl
Normal file
251
ExternalLibs/glm/core/type_mat2x2.hpp
Normal file
251
ExternalLibs/glm/core/type_mat2x2.hpp
Normal file
|
@ -0,0 +1,251 @@
|
|||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// OpenGL Mathematics Copyright (c) 2005 - 2011 G-Truc Creation (www.g-truc.net)
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// Created : 2005-01-27
|
||||
// Updated : 2010-02-11
|
||||
// Licence : This source is under MIT License
|
||||
// File : glm/core/type_mat2x2.hpp
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#ifndef glm_core_type_mat2x2
|
||||
#define glm_core_type_mat2x2
|
||||
|
||||
#include "type_mat.hpp"
|
||||
|
||||
namespace glm
|
||||
{
|
||||
namespace test
|
||||
{
|
||||
void main_mat2x2();
|
||||
}//namespace test
|
||||
|
||||
namespace detail
|
||||
{
|
||||
template <typename T> struct tvec1;
|
||||
template <typename T> struct tvec2;
|
||||
template <typename T> struct tvec3;
|
||||
template <typename T> struct tvec4;
|
||||
template <typename T> struct tmat2x2;
|
||||
template <typename T> struct tmat2x3;
|
||||
template <typename T> struct tmat2x4;
|
||||
template <typename T> struct tmat3x2;
|
||||
template <typename T> struct tmat3x3;
|
||||
template <typename T> struct tmat3x4;
|
||||
template <typename T> struct tmat4x2;
|
||||
template <typename T> struct tmat4x3;
|
||||
template <typename T> struct tmat4x4;
|
||||
|
||||
//! \brief Template for 2 * 2 matrix of floating-point numbers.
|
||||
//! \ingroup core_template
|
||||
template <typename T>
|
||||
struct tmat2x2
|
||||
{
|
||||
enum ctor{null};
|
||||
typedef T value_type;
|
||||
typedef std::size_t size_type;
|
||||
typedef tvec2<T> col_type;
|
||||
typedef tvec2<T> row_type;
|
||||
static GLM_FUNC_DECL size_type col_size();
|
||||
static GLM_FUNC_DECL size_type row_size();
|
||||
|
||||
typedef tmat2x2<T> type;
|
||||
typedef tmat2x2<T> transpose_type;
|
||||
|
||||
public:
|
||||
// Implementation detail
|
||||
GLM_FUNC_DECL tmat2x2<T> _inverse() const;
|
||||
|
||||
private:
|
||||
// Data
|
||||
col_type value[2];
|
||||
|
||||
public:
|
||||
// Constructors
|
||||
GLM_FUNC_DECL tmat2x2();
|
||||
GLM_FUNC_DECL tmat2x2(
|
||||
tmat2x2 const & m);
|
||||
|
||||
GLM_FUNC_DECL explicit tmat2x2(
|
||||
ctor Null);
|
||||
GLM_FUNC_DECL explicit tmat2x2(
|
||||
value_type const & x);
|
||||
GLM_FUNC_DECL explicit tmat2x2(
|
||||
value_type const & x1, value_type const & y1,
|
||||
value_type const & x2, value_type const & y2);
|
||||
GLM_FUNC_DECL explicit tmat2x2(
|
||||
col_type const & v1,
|
||||
col_type const & v2);
|
||||
|
||||
// Conversions
|
||||
template <typename U>
|
||||
GLM_FUNC_DECL explicit tmat2x2(tmat2x2<U> const & m);
|
||||
|
||||
GLM_FUNC_DECL explicit tmat2x2(tmat3x3<T> const & x);
|
||||
GLM_FUNC_DECL explicit tmat2x2(tmat4x4<T> const & x);
|
||||
GLM_FUNC_DECL explicit tmat2x2(tmat2x3<T> const & x);
|
||||
GLM_FUNC_DECL explicit tmat2x2(tmat3x2<T> const & x);
|
||||
GLM_FUNC_DECL explicit tmat2x2(tmat2x4<T> const & x);
|
||||
GLM_FUNC_DECL explicit tmat2x2(tmat4x2<T> const & x);
|
||||
GLM_FUNC_DECL explicit tmat2x2(tmat3x4<T> const & x);
|
||||
GLM_FUNC_DECL explicit tmat2x2(tmat4x3<T> const & x);
|
||||
|
||||
//////////////////////////////////////
|
||||
// Accesses
|
||||
|
||||
GLM_FUNC_DECL col_type & operator[](size_type i);
|
||||
GLM_FUNC_DECL col_type const & operator[](size_type i) const;
|
||||
|
||||
// Unary updatable operators
|
||||
GLM_FUNC_DECL tmat2x2<T> & operator=(tmat2x2<T> const & m);
|
||||
template <typename U>
|
||||
GLM_FUNC_DECL tmat2x2<T> & operator=(tmat2x2<U> const & m);
|
||||
template <typename U>
|
||||
GLM_FUNC_DECL tmat2x2<T> & operator+=(U const & s);
|
||||
template <typename U>
|
||||
GLM_FUNC_DECL tmat2x2<T> & operator+=(tmat2x2<U> const & m);
|
||||
template <typename U>
|
||||
GLM_FUNC_DECL tmat2x2<T> & operator-=(U const & s);
|
||||
template <typename U>
|
||||
GLM_FUNC_DECL tmat2x2<T> & operator-=(tmat2x2<U> const & m);
|
||||
template <typename U>
|
||||
GLM_FUNC_DECL tmat2x2<T> & operator*=(U const & s);
|
||||
template <typename U>
|
||||
GLM_FUNC_DECL tmat2x2<T> & operator*=(tmat2x2<U> const & m);
|
||||
template <typename U>
|
||||
GLM_FUNC_DECL tmat2x2<T> & operator/=(U const & s);
|
||||
template <typename U>
|
||||
GLM_FUNC_DECL tmat2x2<T> & operator/=(tmat2x2<U> const & m);
|
||||
GLM_FUNC_DECL tmat2x2<T> & operator++();
|
||||
GLM_FUNC_DECL tmat2x2<T> & operator--();
|
||||
};
|
||||
|
||||
// Binary operators
|
||||
template <typename T>
|
||||
tmat2x2<T> operator+ (
|
||||
tmat2x2<T> const & m,
|
||||
typename tmat2x2<T>::value_type const & s);
|
||||
|
||||
template <typename T>
|
||||
tmat2x2<T> operator+ (
|
||||
typename tmat2x2<T>::value_type const & s,
|
||||
tmat2x2<T> const & m);
|
||||
|
||||
template <typename T>
|
||||
tmat2x2<T> operator+ (
|
||||
tmat2x2<T> const & m1,
|
||||
tmat2x2<T> const & m2);
|
||||
|
||||
template <typename T>
|
||||
tmat2x2<T> operator- (
|
||||
tmat2x2<T> const & m,
|
||||
typename tmat2x2<T>::value_type const & s);
|
||||
|
||||
template <typename T>
|
||||
tmat2x2<T> operator- (
|
||||
typename tmat2x2<T>::value_type const & s,
|
||||
tmat2x2<T> const & m);
|
||||
|
||||
template <typename T>
|
||||
tmat2x2<T> operator- (
|
||||
tmat2x2<T> const & m1,
|
||||
tmat2x2<T> const & m2);
|
||||
|
||||
template <typename T>
|
||||
tmat2x2<T> operator* (
|
||||
tmat2x2<T> const & m,
|
||||
typename tmat2x2<T>::value_type const & s);
|
||||
|
||||
template <typename T>
|
||||
tmat2x2<T> operator* (
|
||||
typename tmat2x2<T>::value_type const & s,
|
||||
tmat2x2<T> const & m);
|
||||
|
||||
template <typename T>
|
||||
typename tmat2x2<T>::col_type operator* (
|
||||
tmat2x2<T> const & m,
|
||||
typename tmat2x2<T>::row_type const & v);
|
||||
|
||||
template <typename T>
|
||||
typename tmat2x2<T>::row_type operator* (
|
||||
typename tmat2x2<T>::col_type const & v,
|
||||
tmat2x2<T> const & m);
|
||||
|
||||
template <typename T>
|
||||
tmat2x2<T> operator* (
|
||||
tmat2x2<T> const & m1,
|
||||
tmat2x2<T> const & m2);
|
||||
|
||||
template <typename T>
|
||||
tmat2x2<T> operator/ (
|
||||
tmat2x2<T> const & m,
|
||||
typename tmat2x2<T>::value_type const & s);
|
||||
|
||||
template <typename T>
|
||||
tmat2x2<T> operator/ (
|
||||
typename tmat2x2<T>::value_type const & s,
|
||||
tmat2x2<T> const & m);
|
||||
|
||||
template <typename T>
|
||||
typename tmat2x2<T>::col_type operator/ (
|
||||
tmat2x2<T> const & m,
|
||||
typename tmat2x2<T>::row_type const & v);
|
||||
|
||||
template <typename T>
|
||||
typename tmat2x2<T>::row_type operator/ (
|
||||
typename tmat2x2<T>::col_type const & v,
|
||||
tmat2x2<T> const & m);
|
||||
|
||||
template <typename T>
|
||||
tmat2x2<T> operator/ (
|
||||
tmat2x2<T> const & m1,
|
||||
tmat2x2<T> const & m2);
|
||||
|
||||
// Unary constant operators
|
||||
template <typename T>
|
||||
tmat2x2<T> const operator- (
|
||||
tmat2x2<T> const & m);
|
||||
|
||||
template <typename T>
|
||||
tmat2x2<T> const operator-- (
|
||||
tmat2x2<T> const & m,
|
||||
int);
|
||||
|
||||
template <typename T>
|
||||
tmat2x2<T> const operator++ (
|
||||
tmat2x2<T> const & m,
|
||||
int);
|
||||
|
||||
} //namespace detail
|
||||
|
||||
namespace core{
|
||||
namespace type{
|
||||
|
||||
namespace precision
|
||||
{
|
||||
//! 2 columns of 2 components matrix of low precision floating-point numbers.
|
||||
//! There is no guarantee on the actual precision.
|
||||
//! (From GLSL 1.30.8 specification, section 4.1.6 Matrices and section 4.5 Precision and Precision Qualifiers)
|
||||
//! \ingroup core_precision
|
||||
typedef detail::tmat2x2<lowp_float> lowp_mat2x2;
|
||||
//! 2 columns of 2 components matrix of medium precision floating-point numbers.
|
||||
//! There is no guarantee on the actual precision.
|
||||
//! (From GLSL 1.30.8 specification, section 4.1.6 Matrices and section 4.5 Precision and Precision Qualifiers)
|
||||
//! \ingroup core_precision
|
||||
typedef detail::tmat2x2<mediump_float> mediump_mat2x2;
|
||||
//! 2 columns of 2 components matrix of high precision floating-point numbers.
|
||||
//! There is no guarantee on the actual precision.
|
||||
//! (From GLSL 1.30.8 specification, section 4.1.6 Matrices and section 4.5 Precision and Precision Qualifiers)
|
||||
//! \ingroup core_precision
|
||||
typedef detail::tmat2x2<highp_float> highp_mat2x2;
|
||||
}
|
||||
//namespace precision
|
||||
|
||||
}//namespace type
|
||||
}//namespace core
|
||||
} //namespace glm
|
||||
|
||||
#ifndef GLM_EXTERNAL_TEMPLATE
|
||||
#include "type_mat2x2.inl"
|
||||
#endif
|
||||
|
||||
#endif //glm_core_type_mat2x2
|
610
ExternalLibs/glm/core/type_mat2x2.inl
Normal file
610
ExternalLibs/glm/core/type_mat2x2.inl
Normal file
|
@ -0,0 +1,610 @@
|
|||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// OpenGL Mathematics Copyright (c) 2005 - 2011 G-Truc Creation (www.g-truc.net)
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// Created : 2005-01-16
|
||||
// Updated : 2010-02-11
|
||||
// Licence : This source is under MIT License
|
||||
// File : glm/core/type_mat2x2.inl
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
namespace glm{
|
||||
namespace detail
|
||||
{
|
||||
template <typename T>
|
||||
GLM_FUNC_QUALIFIER typename tmat2x2<T>::size_type tmat2x2<T>::col_size()
|
||||
{
|
||||
return 2;
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
GLM_FUNC_QUALIFIER typename tmat2x2<T>::size_type tmat2x2<T>::row_size()
|
||||
{
|
||||
return 2;
|
||||
}
|
||||
|
||||
//////////////////////////////////////
|
||||
// Accesses
|
||||
|
||||
template <typename T>
|
||||
GLM_FUNC_QUALIFIER typename tmat2x2<T>::col_type &
|
||||
tmat2x2<T>::operator[]
|
||||
(
|
||||
size_type i
|
||||
)
|
||||
{
|
||||
assert(i < this->row_size());
|
||||
return this->value[i];
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
GLM_FUNC_QUALIFIER typename tmat2x2<T>::col_type const &
|
||||
tmat2x2<T>::operator[]
|
||||
(
|
||||
size_type i
|
||||
) const
|
||||
{
|
||||
assert(i < this->row_size());
|
||||
return this->value[i];
|
||||
}
|
||||
|
||||
//////////////////////////////////////////////////////////////
|
||||
// Constructors
|
||||
|
||||
template <typename T>
|
||||
GLM_FUNC_QUALIFIER tmat2x2<T>::tmat2x2()
|
||||
{
|
||||
this->value[0] = col_type(1, 0);
|
||||
this->value[1] = col_type(0, 1);
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
GLM_FUNC_QUALIFIER tmat2x2<T>::tmat2x2
|
||||
(
|
||||
tmat2x2<T> const & m
|
||||
)
|
||||
{
|
||||
this->value[0] = m.value[0];
|
||||
this->value[1] = m.value[1];
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
GLM_FUNC_QUALIFIER tmat2x2<T>::tmat2x2
|
||||
(
|
||||
ctor
|
||||
)
|
||||
{}
|
||||
|
||||
template <typename T>
|
||||
GLM_FUNC_QUALIFIER tmat2x2<T>::tmat2x2
|
||||
(
|
||||
value_type const & s
|
||||
)
|
||||
{
|
||||
value_type const Zero(0);
|
||||
this->value[0] = col_type(s, Zero);
|
||||
this->value[1] = col_type(Zero, s);
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
GLM_FUNC_QUALIFIER tmat2x2<T>::tmat2x2
|
||||
(
|
||||
value_type const & x0, value_type const & y0,
|
||||
value_type const & x1, value_type const & y1
|
||||
)
|
||||
{
|
||||
this->value[0] = col_type(x0, y0);
|
||||
this->value[1] = col_type(x1, y1);
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
GLM_FUNC_QUALIFIER tmat2x2<T>::tmat2x2
|
||||
(
|
||||
col_type const & v0,
|
||||
col_type const & v1
|
||||
)
|
||||
{
|
||||
this->value[0] = v0;
|
||||
this->value[1] = v1;
|
||||
}
|
||||
|
||||
//////////////////////////////////////////////////////////////
|
||||
// mat2 conversions
|
||||
|
||||
template <typename T>
|
||||
template <typename U>
|
||||
GLM_FUNC_QUALIFIER tmat2x2<T>::tmat2x2
|
||||
(
|
||||
tmat2x2<U> const & m
|
||||
)
|
||||
{
|
||||
this->value[0] = col_type(m[0]);
|
||||
this->value[1] = col_type(m[1]);
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
GLM_FUNC_QUALIFIER tmat2x2<T>::tmat2x2
|
||||
(
|
||||
tmat3x3<T> const & m
|
||||
)
|
||||
{
|
||||
this->value[0] = col_type(m[0]);
|
||||
this->value[1] = col_type(m[1]);
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
GLM_FUNC_QUALIFIER tmat2x2<T>::tmat2x2
|
||||
(
|
||||
tmat4x4<T> const & m
|
||||
)
|
||||
{
|
||||
this->value[0] = col_type(m[0]);
|
||||
this->value[1] = col_type(m[1]);
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
GLM_FUNC_QUALIFIER tmat2x2<T>::tmat2x2
|
||||
(
|
||||
tmat2x3<T> const & m
|
||||
)
|
||||
{
|
||||
this->value[0] = col_type(m[0]);
|
||||
this->value[1] = col_type(m[1]);
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
GLM_FUNC_QUALIFIER tmat2x2<T>::tmat2x2
|
||||
(
|
||||
tmat3x2<T> const & m
|
||||
)
|
||||
{
|
||||
this->value[0] = m[0];
|
||||
this->value[1] = m[1];
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
GLM_FUNC_QUALIFIER tmat2x2<T>::tmat2x2
|
||||
(
|
||||
tmat2x4<T> const & m
|
||||
)
|
||||
{
|
||||
this->value[0] = col_type(m[0]);
|
||||
this->value[1] = col_type(m[1]);
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
GLM_FUNC_QUALIFIER tmat2x2<T>::tmat2x2
|
||||
(
|
||||
tmat4x2<T> const & m
|
||||
)
|
||||
{
|
||||
this->value[0] = m[0];
|
||||
this->value[1] = m[1];
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
GLM_FUNC_QUALIFIER tmat2x2<T>::tmat2x2
|
||||
(
|
||||
tmat3x4<T> const & m
|
||||
)
|
||||
{
|
||||
this->value[0] = col_type(m[0]);
|
||||
this->value[1] = col_type(m[1]);
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
GLM_FUNC_QUALIFIER tmat2x2<T>::tmat2x2
|
||||
(
|
||||
tmat4x3<T> const & m
|
||||
)
|
||||
{
|
||||
this->value[0] = col_type(m[0]);
|
||||
this->value[1] = col_type(m[1]);
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
GLM_FUNC_QUALIFIER tmat2x2<T> tmat2x2<T>::_inverse() const
|
||||
{
|
||||
typename tmat2x2<T>::value_type Determinant = this->value[0][0] * this->value[1][1] - this->value[1][0] * this->value[0][1];
|
||||
|
||||
tmat2x2<T> Inverse(
|
||||
+ this->value[1][1] / Determinant,
|
||||
- this->value[1][0] / Determinant,
|
||||
- this->value[0][1] / Determinant,
|
||||
+ this->value[0][0] / Determinant);
|
||||
return Inverse;
|
||||
}
|
||||
|
||||
//////////////////////////////////////////////////////////////
|
||||
// mat3 operators
|
||||
|
||||
// This function shouldn't required but it seems that VC7.1 have an optimisation bug if this operator wasn't declared
|
||||
template <typename T>
|
||||
GLM_FUNC_QUALIFIER tmat2x2<T>& tmat2x2<T>::operator=
|
||||
(
|
||||
tmat2x2<T> const & m
|
||||
)
|
||||
{
|
||||
this->value[0] = m[0];
|
||||
this->value[1] = m[1];
|
||||
return *this;
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
template <typename U>
|
||||
GLM_FUNC_QUALIFIER tmat2x2<T>& tmat2x2<T>::operator=
|
||||
(
|
||||
tmat2x2<U> const & m
|
||||
)
|
||||
{
|
||||
this->value[0] = m[0];
|
||||
this->value[1] = m[1];
|
||||
return *this;
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
template <typename U>
|
||||
GLM_FUNC_QUALIFIER tmat2x2<T>& tmat2x2<T>::operator+=
|
||||
(
|
||||
U const & s
|
||||
)
|
||||
{
|
||||
this->value[0] += s;
|
||||
this->value[1] += s;
|
||||
return *this;
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
template <typename U>
|
||||
GLM_FUNC_QUALIFIER tmat2x2<T>& tmat2x2<T>::operator+=
|
||||
(
|
||||
tmat2x2<U> const & m
|
||||
)
|
||||
{
|
||||
this->value[0] += m[0];
|
||||
this->value[1] += m[1];
|
||||
return *this;
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
template <typename U>
|
||||
GLM_FUNC_QUALIFIER tmat2x2<T>& tmat2x2<T>::operator-=
|
||||
(
|
||||
U const & s
|
||||
)
|
||||
{
|
||||
this->value[0] -= s;
|
||||
this->value[1] -= s;
|
||||
return *this;
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
template <typename U>
|
||||
GLM_FUNC_QUALIFIER tmat2x2<T>& tmat2x2<T>::operator-=
|
||||
(
|
||||
tmat2x2<U> const & m
|
||||
)
|
||||
{
|
||||
this->value[0] -= m[0];
|
||||
this->value[1] -= m[1];
|
||||
return *this;
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
template <typename U>
|
||||
GLM_FUNC_QUALIFIER tmat2x2<T>& tmat2x2<T>::operator*=
|
||||
(
|
||||
U const & s
|
||||
)
|
||||
{
|
||||
this->value[0] *= s;
|
||||
this->value[1] *= s;
|
||||
return *this;
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
template <typename U>
|
||||
GLM_FUNC_QUALIFIER tmat2x2<T>& tmat2x2<T>::operator*=
|
||||
(
|
||||
tmat2x2<U> const & m
|
||||
)
|
||||
{
|
||||
return (*this = *this * m);
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
template <typename U>
|
||||
GLM_FUNC_QUALIFIER tmat2x2<T>& tmat2x2<T>::operator/=
|
||||
(
|
||||
U const & s
|
||||
)
|
||||
{
|
||||
this->value[0] /= s;
|
||||
this->value[1] /= s;
|
||||
return *this;
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
template <typename U>
|
||||
GLM_FUNC_QUALIFIER tmat2x2<T>& tmat2x2<T>::operator/=
|
||||
(
|
||||
tmat2x2<U> const & m
|
||||
)
|
||||
{
|
||||
return (*this = *this / m);
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
GLM_FUNC_QUALIFIER tmat2x2<T>& tmat2x2<T>::operator++ ()
|
||||
{
|
||||
++this->value[0];
|
||||
++this->value[1];
|
||||
return *this;
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
GLM_FUNC_QUALIFIER tmat2x2<T>& tmat2x2<T>::operator-- ()
|
||||
{
|
||||
--this->value[0];
|
||||
--this->value[1];
|
||||
return *this;
|
||||
}
|
||||
|
||||
//////////////////////////////////////////////////////////////
|
||||
// Binary operators
|
||||
|
||||
template <typename T>
|
||||
GLM_FUNC_QUALIFIER tmat2x2<T> operator+
|
||||
(
|
||||
tmat2x2<T> const & m,
|
||||
typename tmat2x2<T>::value_type const & s
|
||||
)
|
||||
{
|
||||
return tmat2x2<T>(
|
||||
m[0] + s,
|
||||
m[1] + s);
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
GLM_FUNC_QUALIFIER tmat2x2<T> operator+
|
||||
(
|
||||
typename tmat2x2<T>::value_type const & s,
|
||||
tmat2x2<T> const & m
|
||||
)
|
||||
{
|
||||
return tmat2x2<T>(
|
||||
m[0] + s,
|
||||
m[1] + s);
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
GLM_FUNC_QUALIFIER tmat2x2<T> operator+
|
||||
(
|
||||
tmat2x2<T> const & m1,
|
||||
tmat2x2<T> const & m2
|
||||
)
|
||||
{
|
||||
return tmat2x2<T>(
|
||||
m1[0] + m2[0],
|
||||
m1[1] + m2[1]);
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
GLM_FUNC_QUALIFIER tmat2x2<T> operator-
|
||||
(
|
||||
tmat2x2<T> const & m,
|
||||
typename tmat2x2<T>::value_type const & s
|
||||
)
|
||||
{
|
||||
return tmat2x2<T>(
|
||||
m[0] - s,
|
||||
m[1] - s);
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
GLM_FUNC_QUALIFIER tmat2x2<T> operator-
|
||||
(
|
||||
typename tmat2x2<T>::value_type const & s,
|
||||
tmat2x2<T> const & m
|
||||
)
|
||||
{
|
||||
return tmat2x2<T>(
|
||||
s - m[0],
|
||||
s - m[1]);
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
GLM_FUNC_QUALIFIER tmat2x2<T> operator-
|
||||
(
|
||||
tmat2x2<T> const & m1,
|
||||
tmat2x2<T> const & m2
|
||||
)
|
||||
{
|
||||
return tmat2x2<T>(
|
||||
m1[0] - m2[0],
|
||||
m1[1] - m2[1]);
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
GLM_FUNC_QUALIFIER tmat2x2<T> operator*
|
||||
(
|
||||
tmat2x2<T> const & m,
|
||||
typename tmat2x2<T>::value_type const & s
|
||||
)
|
||||
{
|
||||
return tmat2x2<T>(
|
||||
m[0] * s,
|
||||
m[1] * s);
|
||||
}
|
||||
|
||||
// X
|
||||
// X
|
||||
// X X
|
||||
// X X
|
||||
template <typename T>
|
||||
GLM_FUNC_QUALIFIER tmat2x2<T> operator*
|
||||
(
|
||||
typename tmat2x2<T>::value_type const & s,
|
||||
tmat2x2<T> const & m
|
||||
)
|
||||
{
|
||||
return tmat2x2<T>(
|
||||
m[0] * s,
|
||||
m[1] * s);
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
GLM_FUNC_QUALIFIER typename tmat2x2<T>::col_type operator*
|
||||
(
|
||||
tmat2x2<T> const & m,
|
||||
typename tmat2x2<T>::row_type const & v
|
||||
)
|
||||
{
|
||||
return detail::tvec2<T>(
|
||||
m[0][0] * v.x + m[1][0] * v.y,
|
||||
m[0][1] * v.x + m[1][1] * v.y);
|
||||
}
|
||||
|
||||
// X X
|
||||
// X X
|
||||
// X X
|
||||
template <typename T>
|
||||
GLM_FUNC_QUALIFIER typename tmat2x2<T>::row_type operator*
|
||||
(
|
||||
typename tmat2x2<T>::col_type const & v,
|
||||
tmat2x2<T> const & m
|
||||
)
|
||||
{
|
||||
return detail::tvec2<T>(
|
||||
v.x * m[0][0] + v.y * m[0][1],
|
||||
v.x * m[1][0] + v.y * m[1][1]);
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
GLM_FUNC_QUALIFIER tmat2x2<T> operator*
|
||||
(
|
||||
tmat2x2<T> const & m1,
|
||||
tmat2x2<T> const & m2
|
||||
)
|
||||
{
|
||||
return tmat2x2<T>(
|
||||
m1[0][0] * m2[0][0] + m1[1][0] * m2[0][1],
|
||||
m1[0][1] * m2[0][0] + m1[1][1] * m2[0][1],
|
||||
m1[0][0] * m2[1][0] + m1[1][0] * m2[1][1],
|
||||
m1[0][1] * m2[1][0] + m1[1][1] * m2[1][1]);
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
GLM_FUNC_QUALIFIER tmat2x2<T> operator/
|
||||
(
|
||||
tmat2x2<T> const & m,
|
||||
typename tmat2x2<T>::value_type const & s
|
||||
)
|
||||
{
|
||||
return tmat2x2<T>(
|
||||
m[0] / s,
|
||||
m[1] / s);
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
GLM_FUNC_QUALIFIER tmat2x2<T> operator/
|
||||
(
|
||||
typename tmat2x2<T>::value_type const & s,
|
||||
tmat2x2<T> const & m
|
||||
)
|
||||
{
|
||||
return tmat2x2<T>(
|
||||
s / m[0],
|
||||
s / m[1]);
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
GLM_FUNC_QUALIFIER typename tmat2x2<T>::col_type operator/
|
||||
(
|
||||
tmat2x2<T> const & m,
|
||||
typename tmat2x2<T>::row_type & v
|
||||
)
|
||||
{
|
||||
return m._inverse() * v;
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
GLM_FUNC_QUALIFIER typename tmat2x2<T>::row_type operator/
|
||||
(
|
||||
typename tmat2x2<T>::col_type const & v,
|
||||
tmat2x2<T> const & m
|
||||
)
|
||||
{
|
||||
return v * m._inverse();
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
GLM_FUNC_QUALIFIER tmat2x2<T> operator/
|
||||
(
|
||||
tmat2x2<T> const & m1,
|
||||
tmat2x2<T> const & m2
|
||||
)
|
||||
{
|
||||
return m1 * m2._inverse();
|
||||
}
|
||||
|
||||
// Unary constant operators
|
||||
template <typename T>
|
||||
GLM_FUNC_QUALIFIER tmat2x2<T> const operator-
|
||||
(
|
||||
tmat2x2<T> const & m
|
||||
)
|
||||
{
|
||||
return tmat2x2<T>(
|
||||
-m[0],
|
||||
-m[1]);
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
GLM_FUNC_QUALIFIER tmat2x2<T> const operator++
|
||||
(
|
||||
tmat2x2<T> const & m,
|
||||
int
|
||||
)
|
||||
{
|
||||
return tmat2x2<T>(
|
||||
m[0] + T(1),
|
||||
m[1] + T(1));
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
GLM_FUNC_QUALIFIER tmat2x2<T> const operator--
|
||||
(
|
||||
tmat2x2<T> const & m,
|
||||
int
|
||||
)
|
||||
{
|
||||
return tmat2x2<T>(
|
||||
m[0] - T(1),
|
||||
m[1] - T(1));
|
||||
}
|
||||
|
||||
//////////////////////////////////////
|
||||
// Boolean operators
|
||||
|
||||
template <typename T>
|
||||
GLM_FUNC_QUALIFIER bool operator==
|
||||
(
|
||||
tmat2x2<T> const & m1,
|
||||
tmat2x2<T> const & m2
|
||||
)
|
||||
{
|
||||
return (m1[0] == m2[0]) && (m1[1] == m2[1]);
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
GLM_FUNC_QUALIFIER bool operator!=
|
||||
(
|
||||
tmat2x2<T> const & m1,
|
||||
tmat2x2<T> const & m2
|
||||
)
|
||||
{
|
||||
return (m1[0] != m2[0]) || (m1[1] != m2[1]);
|
||||
}
|
||||
|
||||
} //namespace detail
|
||||
} //namespace glm
|
218
ExternalLibs/glm/core/type_mat2x3.hpp
Normal file
218
ExternalLibs/glm/core/type_mat2x3.hpp
Normal file
|
@ -0,0 +1,218 @@
|
|||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// OpenGL Mathematics Copyright (c) 2005 - 2011 G-Truc Creation (www.g-truc.net)
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// Created : 2006-10-01
|
||||
// Updated : 2010-02-03
|
||||
// Licence : This source is under MIT License
|
||||
// File : glm/core/type_mat2x3.hpp
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#ifndef glm_core_type_mat2x3
|
||||
#define glm_core_type_mat2x3
|
||||
|
||||
#include "type_mat.hpp"
|
||||
|
||||
namespace glm
|
||||
{
|
||||
namespace test
|
||||
{
|
||||
void main_mat2x3();
|
||||
}//namespace test
|
||||
|
||||
namespace detail
|
||||
{
|
||||
template <typename T> struct tvec1;
|
||||
template <typename T> struct tvec2;
|
||||
template <typename T> struct tvec3;
|
||||
template <typename T> struct tvec4;
|
||||
template <typename T> struct tmat2x2;
|
||||
template <typename T> struct tmat2x3;
|
||||
template <typename T> struct tmat2x4;
|
||||
template <typename T> struct tmat3x2;
|
||||
template <typename T> struct tmat3x3;
|
||||
template <typename T> struct tmat3x4;
|
||||
template <typename T> struct tmat4x2;
|
||||
template <typename T> struct tmat4x3;
|
||||
template <typename T> struct tmat4x4;
|
||||
|
||||
//! \brief Template for 2 columns and 3 rows matrix of floating-point numbers.
|
||||
//! \ingroup core_template
|
||||
template <typename T>
|
||||
struct tmat2x3
|
||||
{
|
||||
enum ctor{null};
|
||||
typedef T value_type;
|
||||
typedef std::size_t size_type;
|
||||
typedef tvec3<T> col_type;
|
||||
typedef tvec2<T> row_type;
|
||||
static GLM_FUNC_DECL size_type col_size();
|
||||
static GLM_FUNC_DECL size_type row_size();
|
||||
|
||||
typedef tmat2x3<T> type;
|
||||
typedef tmat3x2<T> transpose_type;
|
||||
|
||||
private:
|
||||
// Data
|
||||
col_type value[2];
|
||||
|
||||
public:
|
||||
// Constructors
|
||||
GLM_FUNC_DECL tmat2x3();
|
||||
GLM_FUNC_DECL tmat2x3(tmat2x3 const & m);
|
||||
|
||||
GLM_FUNC_DECL explicit tmat2x3(
|
||||
ctor);
|
||||
GLM_FUNC_DECL explicit tmat2x3(
|
||||
value_type const & s);
|
||||
GLM_FUNC_DECL explicit tmat2x3(
|
||||
value_type const & x0, value_type const & y0, value_type const & z0,
|
||||
value_type const & x1, value_type const & y1, value_type const & z1);
|
||||
GLM_FUNC_DECL explicit tmat2x3(
|
||||
col_type const & v0,
|
||||
col_type const & v1);
|
||||
|
||||
// Conversion
|
||||
template <typename U>
|
||||
GLM_FUNC_DECL explicit tmat2x3(tmat2x3<U> const & m);
|
||||
|
||||
GLM_FUNC_DECL explicit tmat2x3(tmat2x2<T> const & x);
|
||||
GLM_FUNC_DECL explicit tmat2x3(tmat3x3<T> const & x);
|
||||
GLM_FUNC_DECL explicit tmat2x3(tmat4x4<T> const & x);
|
||||
GLM_FUNC_DECL explicit tmat2x3(tmat2x4<T> const & x);
|
||||
GLM_FUNC_DECL explicit tmat2x3(tmat3x2<T> const & x);
|
||||
GLM_FUNC_DECL explicit tmat2x3(tmat3x4<T> const & x);
|
||||
GLM_FUNC_DECL explicit tmat2x3(tmat4x2<T> const & x);
|
||||
GLM_FUNC_DECL explicit tmat2x3(tmat4x3<T> const & x);
|
||||
|
||||
// Accesses
|
||||
col_type & operator[](size_type i);
|
||||
col_type const & operator[](size_type i) const;
|
||||
|
||||
// Unary updatable operators
|
||||
GLM_FUNC_DECL tmat2x3<T> & operator= (tmat2x3<T> const & m);
|
||||
template <typename U>
|
||||
GLM_FUNC_DECL tmat2x3<T> & operator= (tmat2x3<U> const & m);
|
||||
template <typename U>
|
||||
GLM_FUNC_DECL tmat2x3<T> & operator+= (U const & s);
|
||||
template <typename U>
|
||||
GLM_FUNC_DECL tmat2x3<T> & operator+= (tmat2x3<U> const & m);
|
||||
template <typename U>
|
||||
GLM_FUNC_DECL tmat2x3<T> & operator-= (U const & s);
|
||||
template <typename U>
|
||||
GLM_FUNC_DECL tmat2x3<T> & operator-= (tmat2x3<U> const & m);
|
||||
template <typename U>
|
||||
GLM_FUNC_DECL tmat2x3<T> & operator*= (U const & s);
|
||||
template <typename U>
|
||||
GLM_FUNC_DECL tmat2x3<T> & operator*= (tmat2x3<U> const & m);
|
||||
template <typename U>
|
||||
GLM_FUNC_DECL tmat2x3<T> & operator/= (U const & s);
|
||||
|
||||
GLM_FUNC_DECL tmat2x3<T> & operator++ ();
|
||||
GLM_FUNC_DECL tmat2x3<T> & operator-- ();
|
||||
};
|
||||
|
||||
// Binary operators
|
||||
template <typename T>
|
||||
tmat2x3<T> operator+ (
|
||||
tmat2x3<T> const & m,
|
||||
typename tmat2x3<T>::value_type const & s);
|
||||
|
||||
template <typename T>
|
||||
tmat2x3<T> operator+ (
|
||||
tmat2x3<T> const & m1,
|
||||
tmat2x3<T> const & m2);
|
||||
|
||||
template <typename T>
|
||||
tmat2x3<T> operator- (
|
||||
tmat2x3<T> const & m,
|
||||
typename tmat2x3<T>::value_type const & s);
|
||||
|
||||
template <typename T>
|
||||
tmat2x3<T> operator- (
|
||||
tmat2x3<T> const & m1,
|
||||
tmat2x3<T> const & m2);
|
||||
|
||||
template <typename T>
|
||||
tmat2x3<T> operator* (
|
||||
tmat2x3<T> const & m,
|
||||
typename tmat2x3<T>::value_type const & s);
|
||||
|
||||
template <typename T>
|
||||
tmat2x3<T> operator* (
|
||||
typename tmat2x3<T>::value_type const & s,
|
||||
tmat2x3<T> const & m);
|
||||
|
||||
template <typename T>
|
||||
typename tmat2x3<T>::col_type operator* (
|
||||
tmat2x3<T> const & m,
|
||||
typename tmat2x3<T>::row_type const & v);
|
||||
|
||||
template <typename T>
|
||||
typename tmat2x3<T>::row_type operator* (
|
||||
typename tmat2x3<T>::col_type const & v,
|
||||
tmat2x3<T> const & m);
|
||||
|
||||
template <typename T>
|
||||
tmat3x3<T> operator* (
|
||||
tmat2x3<T> const & m1,
|
||||
tmat3x2<T> const & m2);
|
||||
|
||||
template <typename T>
|
||||
tmat2x3<T> operator/ (
|
||||
tmat2x3<T> const & m,
|
||||
typename tmat2x3<T>::value_type const & s);
|
||||
|
||||
template <typename T>
|
||||
tmat2x3<T> operator/ (
|
||||
typename tmat2x3<T>::value_type const & s,
|
||||
tmat2x3<T> const & m);
|
||||
|
||||
// Unary constant operators
|
||||
template <typename T>
|
||||
tmat2x3<T> const operator- (
|
||||
tmat2x3<T> const & m);
|
||||
|
||||
template <typename T>
|
||||
tmat2x3<T> const operator-- (
|
||||
tmat2x3<T> const & m,
|
||||
int);
|
||||
|
||||
template <typename T>
|
||||
tmat2x3<T> const operator++ (
|
||||
tmat2x3<T> const & m,
|
||||
int);
|
||||
|
||||
} //namespace detail
|
||||
|
||||
namespace core{
|
||||
namespace type{
|
||||
|
||||
namespace precision
|
||||
{
|
||||
//! 2 columns of 3 components matrix of low precision floating-point numbers.
|
||||
//! There is no guarantee on the actual precision.
|
||||
//! (From GLSL 1.30.8 specification, section 4.1.6 Matrices and section 4.5 Precision and Precision Qualifiers)
|
||||
//! \ingroup core_precision
|
||||
typedef detail::tmat2x3<lowp_float> lowp_mat2x3;
|
||||
//! 2 columns of 3 components matrix of medium precision floating-point numbers.
|
||||
//! There is no guarantee on the actual precision.
|
||||
//! (From GLSL 1.30.8 specification, section 4.1.6 Matrices and section 4.5 Precision and Precision Qualifiers)
|
||||
//! \ingroup core_precision
|
||||
typedef detail::tmat2x3<mediump_float> mediump_mat2x3;
|
||||
//! 2 columns of 3 components matrix of high precision floating-point numbers.
|
||||
//! There is no guarantee on the actual precision.
|
||||
//! (From GLSL 1.30.8 specification, section 4.1.6 Matrices and section 4.5 Precision and Precision Qualifiers)
|
||||
//! \ingroup core_precision
|
||||
typedef detail::tmat2x3<highp_float> highp_mat2x3;
|
||||
}
|
||||
//namespace precision
|
||||
|
||||
}//namespace type
|
||||
}//namespace core
|
||||
} //namespace glm
|
||||
|
||||
#ifndef GLM_EXTERNAL_TEMPLATE
|
||||
#include "type_mat2x3.inl"
|
||||
#endif
|
||||
|
||||
#endif //glm_core_type_mat2x3
|
541
ExternalLibs/glm/core/type_mat2x3.inl
Normal file
541
ExternalLibs/glm/core/type_mat2x3.inl
Normal file
|
@ -0,0 +1,541 @@
|
|||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// OpenGL Mathematics Copyright (c) 2005 - 2011 G-Truc Creation (www.g-truc.net)
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// Created : 2006-08-05
|
||||
// Updated : 2010-02-03
|
||||
// Licence : This source is under MIT License
|
||||
// File : glm/core/type_mat2x3.inl
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
namespace glm{
|
||||
namespace detail
|
||||
{
|
||||
template <typename T>
|
||||
GLM_FUNC_QUALIFIER typename tmat2x3<T>::size_type tmat2x3<T>::col_size()
|
||||
{
|
||||
return 3;
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
GLM_FUNC_QUALIFIER typename tmat2x3<T>::size_type tmat2x3<T>::row_size()
|
||||
{
|
||||
return 2;
|
||||
}
|
||||
|
||||
//////////////////////////////////////
|
||||
// Accesses
|
||||
|
||||
template <typename T>
|
||||
GLM_FUNC_QUALIFIER typename tmat2x3<T>::col_type &
|
||||
tmat2x3<T>::operator[]
|
||||
(
|
||||
size_type i
|
||||
)
|
||||
{
|
||||
assert(i < this->row_size());
|
||||
return this->value[i];
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
GLM_FUNC_QUALIFIER typename tmat2x3<T>::col_type const &
|
||||
tmat2x3<T>::operator[]
|
||||
(
|
||||
size_type i
|
||||
) const
|
||||
{
|
||||
assert(i < this->row_size());
|
||||
return this->value[i];
|
||||
}
|
||||
|
||||
//////////////////////////////////////////////////////////////
|
||||
// Constructors
|
||||
|
||||
template <typename T>
|
||||
GLM_FUNC_QUALIFIER tmat2x3<T>::tmat2x3()
|
||||
{
|
||||
this->value[0] = col_type(T(1), T(0), T(0));
|
||||
this->value[1] = col_type(T(0), T(1), T(0));
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
GLM_FUNC_QUALIFIER tmat2x3<T>::tmat2x3
|
||||
(
|
||||
tmat2x3<T> const & m
|
||||
)
|
||||
{
|
||||
this->value[0] = m.value[0];
|
||||
this->value[1] = m.value[1];
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
GLM_FUNC_QUALIFIER tmat2x3<T>::tmat2x3
|
||||
(
|
||||
ctor
|
||||
)
|
||||
{}
|
||||
|
||||
template <typename T>
|
||||
GLM_FUNC_QUALIFIER tmat2x3<T>::tmat2x3
|
||||
(
|
||||
value_type const & s
|
||||
)
|
||||
{
|
||||
this->value[0] = col_type(s, T(0), T(0));
|
||||
this->value[1] = col_type(T(0), s, T(0));
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
GLM_FUNC_QUALIFIER tmat2x3<T>::tmat2x3
|
||||
(
|
||||
value_type const & x0, value_type const & y0, value_type const & z0,
|
||||
value_type const & x1, value_type const & y1, value_type const & z1
|
||||
)
|
||||
{
|
||||
this->value[0] = col_type(x0, y0, z0);
|
||||
this->value[1] = col_type(x1, y1, z1);
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
GLM_FUNC_QUALIFIER tmat2x3<T>::tmat2x3
|
||||
(
|
||||
col_type const & v0,
|
||||
col_type const & v1
|
||||
)
|
||||
{
|
||||
this->value[0] = v0;
|
||||
this->value[1] = v1;
|
||||
}
|
||||
|
||||
// Conversion
|
||||
template <typename T>
|
||||
template <typename U>
|
||||
GLM_FUNC_QUALIFIER tmat2x3<T>::tmat2x3
|
||||
(
|
||||
tmat2x3<U> const & m
|
||||
)
|
||||
{
|
||||
this->value[0] = col_type(m[0]);
|
||||
this->value[1] = col_type(m[1]);
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
GLM_FUNC_QUALIFIER tmat2x3<T>::tmat2x3
|
||||
(
|
||||
tmat2x2<T> const & m
|
||||
)
|
||||
{
|
||||
this->value[0] = col_type(m[0], T(0));
|
||||
this->value[1] = col_type(m[1], T(0));
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
GLM_FUNC_QUALIFIER tmat2x3<T>::tmat2x3
|
||||
(
|
||||
tmat3x3<T> const & m
|
||||
)
|
||||
{
|
||||
this->value[0] = col_type(m[0]);
|
||||
this->value[1] = col_type(m[1]);
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
GLM_FUNC_QUALIFIER tmat2x3<T>::tmat2x3
|
||||
(
|
||||
tmat4x4<T> const & m
|
||||
)
|
||||
{
|
||||
this->value[0] = col_type(m[0]);
|
||||
this->value[1] = col_type(m[1]);
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
GLM_FUNC_QUALIFIER tmat2x3<T>::tmat2x3
|
||||
(
|
||||
tmat2x4<T> const & m
|
||||
)
|
||||
{
|
||||
this->value[0] = col_type(m[0]);
|
||||
this->value[1] = col_type(m[1]);
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
GLM_FUNC_QUALIFIER tmat2x3<T>::tmat2x3
|
||||
(
|
||||
tmat3x2<T> const & m
|
||||
)
|
||||
{
|
||||
this->value[0] = col_type(m[0], T(0));
|
||||
this->value[1] = col_type(m[1], T(0));
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
GLM_FUNC_QUALIFIER tmat2x3<T>::tmat2x3
|
||||
(
|
||||
tmat3x4<T> const & m
|
||||
)
|
||||
{
|
||||
this->value[0] = col_type(m[0]);
|
||||
this->value[1] = col_type(m[1]);
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
GLM_FUNC_QUALIFIER tmat2x3<T>::tmat2x3
|
||||
(
|
||||
tmat4x2<T> const & m
|
||||
)
|
||||
{
|
||||
this->value[0] = col_type(m[0], T(0));
|
||||
this->value[1] = col_type(m[1], T(0));
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
GLM_FUNC_QUALIFIER tmat2x3<T>::tmat2x3
|
||||
(
|
||||
tmat4x3<T> const & m
|
||||
)
|
||||
{
|
||||
this->value[0] = m[0];
|
||||
this->value[1] = m[1];
|
||||
}
|
||||
|
||||
//////////////////////////////////////////////////////////////
|
||||
// Unary updatable operators
|
||||
|
||||
template <typename T>
|
||||
GLM_FUNC_QUALIFIER tmat2x3<T>& tmat2x3<T>::operator=
|
||||
(
|
||||
tmat2x3<T> const & m
|
||||
)
|
||||
{
|
||||
this->value[0] = m[0];
|
||||
this->value[1] = m[1];
|
||||
return *this;
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
template <typename U>
|
||||
GLM_FUNC_QUALIFIER tmat2x3<T>& tmat2x3<T>::operator=
|
||||
(
|
||||
tmat2x3<U> const & m
|
||||
)
|
||||
{
|
||||
this->value[0] = m[0];
|
||||
this->value[1] = m[1];
|
||||
return *this;
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
template <typename U>
|
||||
GLM_FUNC_QUALIFIER tmat2x3<T> & tmat2x3<T>::operator+=
|
||||
(
|
||||
U const & s
|
||||
)
|
||||
{
|
||||
this->value[0] += s;
|
||||
this->value[1] += s;
|
||||
return *this;
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
template <typename U>
|
||||
GLM_FUNC_QUALIFIER tmat2x3<T>& tmat2x3<T>::operator+=
|
||||
(
|
||||
tmat2x3<U> const & m
|
||||
)
|
||||
{
|
||||
this->value[0] += m[0];
|
||||
this->value[1] += m[1];
|
||||
return *this;
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
template <typename U>
|
||||
GLM_FUNC_QUALIFIER tmat2x3<T>& tmat2x3<T>::operator-=
|
||||
(
|
||||
U const & s
|
||||
)
|
||||
{
|
||||
this->value[0] -= s;
|
||||
this->value[1] -= s;
|
||||
return *this;
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
template <typename U>
|
||||
GLM_FUNC_QUALIFIER tmat2x3<T>& tmat2x3<T>::operator-=
|
||||
(
|
||||
tmat2x3<U> const & m
|
||||
)
|
||||
{
|
||||
this->value[0] -= m[0];
|
||||
this->value[1] -= m[1];
|
||||
return *this;
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
template <typename U>
|
||||
GLM_FUNC_QUALIFIER tmat2x3<T>& tmat2x3<T>::operator*=
|
||||
(
|
||||
U const & s
|
||||
)
|
||||
{
|
||||
this->value[0] *= s;
|
||||
this->value[1] *= s;
|
||||
return *this;
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
template <typename U>
|
||||
GLM_FUNC_QUALIFIER tmat2x3<T> & tmat2x3<T>::operator*=
|
||||
(
|
||||
tmat2x3<U> const & m
|
||||
)
|
||||
{
|
||||
return (*this = tmat2x3<U>(*this * m));
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
template <typename U>
|
||||
GLM_FUNC_QUALIFIER tmat2x3<T> & tmat2x3<T>::operator/=
|
||||
(
|
||||
U const & s
|
||||
)
|
||||
{
|
||||
this->value[0] /= s;
|
||||
this->value[1] /= s;
|
||||
return *this;
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
GLM_FUNC_QUALIFIER tmat2x3<T> & tmat2x3<T>::operator++ ()
|
||||
{
|
||||
++this->value[0];
|
||||
++this->value[1];
|
||||
return *this;
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
GLM_FUNC_QUALIFIER tmat2x3<T> & tmat2x3<T>::operator-- ()
|
||||
{
|
||||
--this->value[0];
|
||||
--this->value[1];
|
||||
return *this;
|
||||
}
|
||||
|
||||
//////////////////////////////////////////////////////////////
|
||||
// Binary operators
|
||||
|
||||
template <typename T>
|
||||
GLM_FUNC_QUALIFIER tmat2x3<T> operator+
|
||||
(
|
||||
tmat2x3<T> const & m,
|
||||
typename tmat2x3<T>::value_type const & s
|
||||
)
|
||||
{
|
||||
return tmat2x3<T>(
|
||||
m[0] + s,
|
||||
m[1] + s);
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
GLM_FUNC_QUALIFIER tmat2x3<T> operator+
|
||||
(
|
||||
tmat2x3<T> const & m1,
|
||||
tmat2x3<T> const & m2
|
||||
)
|
||||
{
|
||||
return tmat2x3<T>(
|
||||
m1[0] + m2[0],
|
||||
m1[1] + m2[1]);
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
GLM_FUNC_QUALIFIER tmat2x3<T> operator-
|
||||
(
|
||||
tmat2x3<T> const & m,
|
||||
typename tmat2x3<T>::value_type const & s
|
||||
)
|
||||
{
|
||||
return tmat2x3<T>(
|
||||
m[0] - s,
|
||||
m[1] - s);
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
GLM_FUNC_QUALIFIER tmat2x3<T> operator-
|
||||
(
|
||||
tmat2x3<T> const & m1,
|
||||
tmat2x3<T> const & m2
|
||||
)
|
||||
{
|
||||
return tmat2x3<T>(
|
||||
m1[0] - m2[0],
|
||||
m1[1] - m2[1]);
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
GLM_FUNC_QUALIFIER tmat2x3<T> operator*
|
||||
(
|
||||
tmat2x3<T> const & m,
|
||||
typename tmat2x3<T>::value_type const & s
|
||||
)
|
||||
{
|
||||
return tmat2x3<T>(
|
||||
m[0] * s,
|
||||
m[1] * s);
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
GLM_FUNC_QUALIFIER tmat2x3<T> operator*
|
||||
(
|
||||
typename tmat2x3<T>::value_type const & s,
|
||||
tmat2x3<T> const & m
|
||||
)
|
||||
{
|
||||
return tmat2x3<T>(
|
||||
m[0] * s,
|
||||
m[1] * s);
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
GLM_FUNC_QUALIFIER typename tmat2x3<T>::col_type operator*
|
||||
(
|
||||
tmat2x3<T> const & m,
|
||||
typename tmat2x3<T>::row_type const & v)
|
||||
{
|
||||
return typename tmat2x3<T>::col_type(
|
||||
m[0][0] * v.x + m[1][0] * v.y,
|
||||
m[0][1] * v.x + m[1][1] * v.y,
|
||||
m[0][2] * v.x + m[1][2] * v.y);
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
GLM_FUNC_QUALIFIER typename tmat2x3<T>::row_type operator*
|
||||
(
|
||||
typename tmat2x3<T>::col_type const & v,
|
||||
tmat2x3<T> const & m)
|
||||
{
|
||||
return typename tmat2x3<T>::row_type(
|
||||
v.x * m[0][0] + v.y * m[0][1] + v.z * m[0][2],
|
||||
v.x * m[1][0] + v.y * m[1][1] + v.z * m[1][2]);
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
GLM_FUNC_QUALIFIER tmat3x3<T> operator*
|
||||
(
|
||||
tmat2x3<T> const & m1,
|
||||
tmat3x2<T> const & m2
|
||||
)
|
||||
{
|
||||
typename tmat2x3<T>::value_type SrcA00 = m1[0][0];
|
||||
typename tmat2x3<T>::value_type SrcA01 = m1[0][1];
|
||||
typename tmat2x3<T>::value_type SrcA02 = m1[0][2];
|
||||
typename tmat2x3<T>::value_type SrcA10 = m1[1][0];
|
||||
typename tmat2x3<T>::value_type SrcA11 = m1[1][1];
|
||||
typename tmat2x3<T>::value_type SrcA12 = m1[1][2];
|
||||
|
||||
typename tmat2x3<T>::value_type SrcB00 = m2[0][0];
|
||||
typename tmat2x3<T>::value_type SrcB01 = m2[0][1];
|
||||
typename tmat2x3<T>::value_type SrcB10 = m2[1][0];
|
||||
typename tmat2x3<T>::value_type SrcB11 = m2[1][1];
|
||||
typename tmat2x3<T>::value_type SrcB20 = m2[2][0];
|
||||
typename tmat2x3<T>::value_type SrcB21 = m2[2][1];
|
||||
|
||||
tmat3x3<T> Result(tmat3x3<T>::null);
|
||||
Result[0][0] = SrcA00 * SrcB00 + SrcA10 * SrcB01;
|
||||
Result[0][1] = SrcA01 * SrcB00 + SrcA11 * SrcB01;
|
||||
Result[0][2] = SrcA02 * SrcB00 + SrcA12 * SrcB01;
|
||||
Result[1][0] = SrcA00 * SrcB10 + SrcA10 * SrcB11;
|
||||
Result[1][1] = SrcA01 * SrcB10 + SrcA11 * SrcB11;
|
||||
Result[1][2] = SrcA02 * SrcB10 + SrcA12 * SrcB11;
|
||||
Result[2][0] = SrcA00 * SrcB20 + SrcA10 * SrcB21;
|
||||
Result[2][1] = SrcA01 * SrcB20 + SrcA11 * SrcB21;
|
||||
Result[2][2] = SrcA02 * SrcB20 + SrcA12 * SrcB21;
|
||||
return Result;
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
GLM_FUNC_QUALIFIER tmat2x3<T> operator/
|
||||
(
|
||||
tmat2x3<T> const & m,
|
||||
typename tmat2x3<T>::value_type const & s
|
||||
)
|
||||
{
|
||||
return tmat2x3<T>(
|
||||
m[0] / s,
|
||||
m[1] / s);
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
GLM_FUNC_QUALIFIER tmat2x3<T> operator/
|
||||
(
|
||||
typename tmat2x3<T>::value_type const & s,
|
||||
tmat2x3<T> const & m
|
||||
)
|
||||
{
|
||||
return tmat2x3<T>(
|
||||
s / m[0],
|
||||
s / m[1]);
|
||||
}
|
||||
|
||||
// Unary constant operators
|
||||
template <typename T>
|
||||
GLM_FUNC_QUALIFIER tmat2x3<T> const operator-
|
||||
(
|
||||
tmat2x3<T> const & m
|
||||
)
|
||||
{
|
||||
return tmat2x3<T>(
|
||||
-m[0],
|
||||
-m[1]);
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
GLM_FUNC_QUALIFIER tmat2x3<T> const operator++
|
||||
(
|
||||
tmat2x3<T> const & m,
|
||||
int
|
||||
)
|
||||
{
|
||||
return tmat2x3<T>(
|
||||
m[0] + typename tmat2x3<T>::value_type(1),
|
||||
m[1] + typename tmat2x3<T>::value_type(1));
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
GLM_FUNC_QUALIFIER tmat2x3<T> const operator--
|
||||
(
|
||||
tmat2x3<T> const & m,
|
||||
int
|
||||
)
|
||||
{
|
||||
return tmat2x3<T>(
|
||||
m[0] - typename tmat2x3<T>::value_type(1),
|
||||
m[1] - typename tmat2x3<T>::value_type(1));
|
||||
}
|
||||
|
||||
//////////////////////////////////////
|
||||
// Boolean operators
|
||||
|
||||
template <typename T>
|
||||
GLM_FUNC_QUALIFIER bool operator==
|
||||
(
|
||||
tmat2x3<T> const & m1,
|
||||
tmat2x3<T> const & m2
|
||||
)
|
||||
{
|
||||
return (m1[0] == m2[0]) && (m1[1] == m2[1]);
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
GLM_FUNC_QUALIFIER bool operator!=
|
||||
(
|
||||
tmat2x3<T> const & m1,
|
||||
tmat2x3<T> const & m2
|
||||
)
|
||||
{
|
||||
return (m1[0] != m2[0]) || (m1[1] != m2[1]);
|
||||
}
|
||||
|
||||
} //namespace detail
|
||||
} //namespace glm
|
215
ExternalLibs/glm/core/type_mat2x4.hpp
Normal file
215
ExternalLibs/glm/core/type_mat2x4.hpp
Normal file
|
@ -0,0 +1,215 @@
|
|||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// OpenGL Mathematics Copyright (c) 2005 - 2011 G-Truc Creation (www.g-truc.net)
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// Created : 2006-08-05
|
||||
// Updated : 2010-02-11
|
||||
// Licence : This source is under MIT License
|
||||
// File : glm/core/type_mat2x4.hpp
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#ifndef glm_core_type_mat2x4
|
||||
#define glm_core_type_mat2x4
|
||||
|
||||
#include "type_mat.hpp"
|
||||
|
||||
namespace glm
|
||||
{
|
||||
namespace test
|
||||
{
|
||||
void main_mat2x4();
|
||||
}//namespace test
|
||||
|
||||
namespace detail
|
||||
{
|
||||
template <typename T> struct tvec1;
|
||||
template <typename T> struct tvec2;
|
||||
template <typename T> struct tvec3;
|
||||
template <typename T> struct tvec4;
|
||||
template <typename T> struct tmat2x2;
|
||||
template <typename T> struct tmat2x3;
|
||||
template <typename T> struct tmat2x4;
|
||||
template <typename T> struct tmat3x2;
|
||||
template <typename T> struct tmat3x3;
|
||||
template <typename T> struct tmat3x4;
|
||||
template <typename T> struct tmat4x2;
|
||||
template <typename T> struct tmat4x3;
|
||||
template <typename T> struct tmat4x4;
|
||||
|
||||
//! Template for 2 columns and 4 rows matrix of floating-point numbers.
|
||||
//! \ingroup core_template
|
||||
template <typename T>
|
||||
struct tmat2x4
|
||||
{
|
||||
enum ctor{null};
|
||||
typedef T value_type;
|
||||
typedef std::size_t size_type;
|
||||
typedef tvec4<T> col_type;
|
||||
typedef tvec2<T> row_type;
|
||||
static GLM_FUNC_DECL size_type col_size();
|
||||
static GLM_FUNC_DECL size_type row_size();
|
||||
|
||||
typedef tmat2x4<T> type;
|
||||
typedef tmat4x2<T> transpose_type;
|
||||
|
||||
private:
|
||||
// Data
|
||||
col_type value[2];
|
||||
|
||||
public:
|
||||
// Constructors
|
||||
GLM_FUNC_DECL tmat2x4();
|
||||
GLM_FUNC_DECL tmat2x4(tmat2x4 const & m);
|
||||
|
||||
GLM_FUNC_DECL explicit tmat2x4(
|
||||
ctor);
|
||||
GLM_FUNC_DECL explicit tmat2x4(
|
||||
value_type const & s);
|
||||
GLM_FUNC_DECL explicit tmat2x4(
|
||||
value_type const & x0, value_type const & y0, value_type const & z0, value_type const & w0,
|
||||
value_type const & x1, value_type const & y1, value_type const & z1, value_type const & w1);
|
||||
GLM_FUNC_DECL explicit tmat2x4(
|
||||
col_type const & v0,
|
||||
col_type const & v1);
|
||||
|
||||
// Conversion
|
||||
template <typename U>
|
||||
GLM_FUNC_DECL explicit tmat2x4(tmat2x4<U> const & m);
|
||||
|
||||
GLM_FUNC_DECL explicit tmat2x4(tmat2x2<T> const & x);
|
||||
GLM_FUNC_DECL explicit tmat2x4(tmat3x3<T> const & x);
|
||||
GLM_FUNC_DECL explicit tmat2x4(tmat4x4<T> const & x);
|
||||
GLM_FUNC_DECL explicit tmat2x4(tmat2x3<T> const & x);
|
||||
GLM_FUNC_DECL explicit tmat2x4(tmat3x2<T> const & x);
|
||||
GLM_FUNC_DECL explicit tmat2x4(tmat3x4<T> const & x);
|
||||
GLM_FUNC_DECL explicit tmat2x4(tmat4x2<T> const & x);
|
||||
GLM_FUNC_DECL explicit tmat2x4(tmat4x3<T> const & x);
|
||||
|
||||
// Accesses
|
||||
GLM_FUNC_DECL col_type & operator[](size_type i);
|
||||
GLM_FUNC_DECL col_type const & operator[](size_type i) const;
|
||||
|
||||
// Unary updatable operators
|
||||
GLM_FUNC_DECL tmat2x4<T>& operator= (tmat2x4<T> const & m);
|
||||
template <typename U>
|
||||
GLM_FUNC_DECL tmat2x4<T>& operator= (tmat2x4<U> const & m);
|
||||
template <typename U>
|
||||
GLM_FUNC_DECL tmat2x4<T>& operator+= (U const & s);
|
||||
template <typename U>
|
||||
GLM_FUNC_DECL tmat2x4<T>& operator+= (tmat2x4<U> const & m);
|
||||
template <typename U>
|
||||
GLM_FUNC_DECL tmat2x4<T>& operator-= (U const & s);
|
||||
template <typename U>
|
||||
GLM_FUNC_DECL tmat2x4<T>& operator-= (tmat2x4<U> const & m);
|
||||
template <typename U>
|
||||
GLM_FUNC_DECL tmat2x4<T>& operator*= (U const & s);
|
||||
template <typename U>
|
||||
GLM_FUNC_DECL tmat2x4<T>& operator*= (tmat2x4<U> const & m);
|
||||
template <typename U>
|
||||
GLM_FUNC_DECL tmat2x4<T>& operator/= (U const & s);
|
||||
|
||||
GLM_FUNC_DECL tmat2x4<T>& operator++ ();
|
||||
GLM_FUNC_DECL tmat2x4<T>& operator-- ();
|
||||
};
|
||||
|
||||
// Binary operators
|
||||
template <typename T>
|
||||
tmat2x4<T> operator+ (
|
||||
tmat2x4<T> const & m,
|
||||
typename tmat2x4<T>::value_type const & s);
|
||||
|
||||
template <typename T>
|
||||
tmat2x4<T> operator+ (
|
||||
tmat2x4<T> const & m1,
|
||||
tmat2x4<T> const & m2);
|
||||
|
||||
template <typename T>
|
||||
tmat2x4<T> operator- (
|
||||
tmat2x4<T> const & m,
|
||||
typename tmat2x4<T>::value_type const & s);
|
||||
|
||||
template <typename T>
|
||||
tmat2x4<T> operator- (
|
||||
tmat2x4<T> const & m1,
|
||||
tmat2x4<T> const & m2);
|
||||
|
||||
template <typename T>
|
||||
tmat2x4<T> operator* (
|
||||
tmat2x4<T> const & m,
|
||||
typename tmat2x4<T>::value_type const & s);
|
||||
|
||||
template <typename T>
|
||||
tmat2x4<T> operator* (
|
||||
typename tmat2x4<T>::value_type const & s,
|
||||
tmat2x4<T> const & m);
|
||||
|
||||
template <typename T>
|
||||
typename tmat2x4<T>::col_type operator* (
|
||||
tmat2x4<T> const & m,
|
||||
typename tmat2x4<T>::row_type const & v);
|
||||
|
||||
template <typename T>
|
||||
typename tmat2x4<T>::row_type operator* (
|
||||
typename tmat2x4<T>::col_type const & v,
|
||||
tmat2x4<T> const & m);
|
||||
|
||||
template <typename T>
|
||||
tmat2x4<T> operator* (
|
||||
tmat2x4<T> const & m1,
|
||||
tmat2x4<T> const & m2);
|
||||
|
||||
template <typename T>
|
||||
tmat2x4<T> operator/ (
|
||||
tmat2x4<T> const & m,
|
||||
typename tmat2x4<T>::value_type const & s);
|
||||
|
||||
template <typename T>
|
||||
tmat2x4<T> operator/ (
|
||||
typename tmat2x4<T>::value_type const & s,
|
||||
tmat2x4<T> const & m);
|
||||
|
||||
// Unary constant operators
|
||||
template <typename T>
|
||||
tmat2x4<T> const operator- (
|
||||
tmat2x4<T> const & m);
|
||||
|
||||
template <typename T>
|
||||
tmat2x4<T> const operator-- (
|
||||
tmat2x4<T> const & m,
|
||||
int);
|
||||
|
||||
template <typename T>
|
||||
tmat2x4<T> const operator++ (
|
||||
tmat2x4<T> const & m,
|
||||
int);
|
||||
|
||||
} //namespace detail
|
||||
|
||||
namespace core{
|
||||
namespace type{
|
||||
|
||||
namespace precision
|
||||
{
|
||||
//! 2 columns of 4 components matrix of low precision floating-point numbers.
|
||||
//! There is no guarantee on the actual precision.
|
||||
//! (From GLSL 1.30.8 specification, section 4.1.6 Matrices and section 4.5 Precision and Precision Qualifiers)
|
||||
typedef detail::tmat2x4<lowp_float> lowp_mat2x4;
|
||||
//! 2 columns of 4 components matrix of medium precision floating-point numbers.
|
||||
//! There is no guarantee on the actual precision.
|
||||
//! (From GLSL 1.30.8 specification, section 4.1.6 Matrices and section 4.5 Precision and Precision Qualifiers)
|
||||
typedef detail::tmat2x4<mediump_float> mediump_mat2x4;
|
||||
//! 2 columns of 4 components matrix of high precision floating-point numbers.
|
||||
//! There is no guarantee on the actual precision.
|
||||
//! (From GLSL 1.30.8 specification, section 4.1.6 Matrices and section 4.5 Precision and Precision Qualifiers)
|
||||
typedef detail::tmat2x4<highp_float> highp_mat2x4;
|
||||
}
|
||||
//namespace precision
|
||||
|
||||
}//namespace type
|
||||
}//namespace core
|
||||
} //namespace glm
|
||||
|
||||
#ifndef GLM_EXTERNAL_TEMPLATE
|
||||
#include "type_mat2x4.inl"
|
||||
#endif
|
||||
|
||||
#endif //glm_core_type_mat2x4
|
569
ExternalLibs/glm/core/type_mat2x4.inl
Normal file
569
ExternalLibs/glm/core/type_mat2x4.inl
Normal file
|
@ -0,0 +1,569 @@
|
|||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// OpenGL Mathematics Copyright (c) 2005 - 2011 G-Truc Creation (www.g-truc.net)
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// Created : 2006-08-05
|
||||
// Updated : 2010-02-03
|
||||
// Licence : This source is under MIT License
|
||||
// File : glm/core/type_mat2x4.inl
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
namespace glm{
|
||||
namespace detail
|
||||
{
|
||||
template <typename T>
|
||||
GLM_FUNC_QUALIFIER typename tmat2x4<T>::size_type tmat2x4<T>::col_size()
|
||||
{
|
||||
return 4;
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
GLM_FUNC_QUALIFIER typename tmat2x4<T>::size_type tmat2x4<T>::row_size()
|
||||
{
|
||||
return 2;
|
||||
}
|
||||
|
||||
//////////////////////////////////////
|
||||
// Accesses
|
||||
|
||||
template <typename T>
|
||||
GLM_FUNC_QUALIFIER typename tmat2x4<T>::col_type &
|
||||
tmat2x4<T>::operator[]
|
||||
(
|
||||
size_type i
|
||||
)
|
||||
{
|
||||
assert(i < this->row_size());
|
||||
return this->value[i];
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
GLM_FUNC_QUALIFIER typename tmat2x4<T>::col_type const &
|
||||
tmat2x4<T>::operator[]
|
||||
(
|
||||
size_type i
|
||||
) const
|
||||
{
|
||||
assert(i < this->row_size());
|
||||
return this->value[i];
|
||||
}
|
||||
|
||||
//////////////////////////////////////////////////////////////
|
||||
// Constructors
|
||||
|
||||
template <typename T>
|
||||
GLM_FUNC_QUALIFIER tmat2x4<T>::tmat2x4()
|
||||
{
|
||||
value_type const Zero(0);
|
||||
value_type const One(1);
|
||||
this->value[0] = col_type(One, Zero, Zero, Zero);
|
||||
this->value[1] = col_type(Zero, One, Zero, Zero);
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
GLM_FUNC_QUALIFIER tmat2x4<T>::tmat2x4
|
||||
(
|
||||
tmat2x4<T> const & m
|
||||
)
|
||||
{
|
||||
this->value[0] = m.value[0];
|
||||
this->value[1] = m.value[1];
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
GLM_FUNC_QUALIFIER tmat2x4<T>::tmat2x4
|
||||
(
|
||||
ctor
|
||||
)
|
||||
{}
|
||||
|
||||
template <typename T>
|
||||
GLM_FUNC_QUALIFIER tmat2x4<T>::tmat2x4
|
||||
(
|
||||
value_type const & s
|
||||
)
|
||||
{
|
||||
value_type const Zero(0);
|
||||
this->value[0] = col_type(s, Zero, Zero, Zero);
|
||||
this->value[1] = col_type(Zero, Zero, Zero, Zero);
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
GLM_FUNC_QUALIFIER tmat2x4<T>::tmat2x4
|
||||
(
|
||||
value_type const & x0, value_type const & y0, value_type const & z0, value_type const & w0,
|
||||
value_type const & x1, value_type const & y1, value_type const & z1, value_type const & w1
|
||||
)
|
||||
{
|
||||
this->value[0] = col_type(x0, y0, z0, w0);
|
||||
this->value[1] = col_type(x1, y1, z1, w1);
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
GLM_FUNC_QUALIFIER tmat2x4<T>::tmat2x4
|
||||
(
|
||||
col_type const & v0,
|
||||
col_type const & v1
|
||||
)
|
||||
{
|
||||
this->value[0] = v0;
|
||||
this->value[1] = v1;
|
||||
}
|
||||
|
||||
// Conversion
|
||||
template <typename T>
|
||||
template <typename U>
|
||||
GLM_FUNC_QUALIFIER tmat2x4<T>::tmat2x4
|
||||
(
|
||||
tmat2x4<U> const & m
|
||||
)
|
||||
{
|
||||
this->value[0] = col_type(m[0]);
|
||||
this->value[1] = col_type(m[1]);
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
GLM_FUNC_QUALIFIER tmat2x4<T>::tmat2x4
|
||||
(
|
||||
tmat2x2<T> const & m
|
||||
)
|
||||
{
|
||||
this->value[0] = col_type(m[0], detail::tvec2<T>(0));
|
||||
this->value[1] = col_type(m[1], detail::tvec2<T>(0));
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
GLM_FUNC_QUALIFIER tmat2x4<T>::tmat2x4
|
||||
(
|
||||
tmat3x3<T> const & m
|
||||
)
|
||||
{
|
||||
this->value[0] = col_type(m[0], T(0));
|
||||
this->value[1] = col_type(m[1], T(0));
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
GLM_FUNC_QUALIFIER tmat2x4<T>::tmat2x4
|
||||
(
|
||||
tmat4x4<T> const & m
|
||||
)
|
||||
{
|
||||
this->value[0] = col_type(m[0]);
|
||||
this->value[1] = col_type(m[1]);
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
GLM_FUNC_QUALIFIER tmat2x4<T>::tmat2x4
|
||||
(
|
||||
tmat2x3<T> const & m
|
||||
)
|
||||
{
|
||||
this->value[0] = col_type(m[0], T(0));
|
||||
this->value[1] = col_type(m[1], T(0));
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
GLM_FUNC_QUALIFIER tmat2x4<T>::tmat2x4
|
||||
(
|
||||
tmat3x2<T> const & m
|
||||
)
|
||||
{
|
||||
this->value[0] = col_type(m[0], detail::tvec2<T>(0));
|
||||
this->value[1] = col_type(m[1], detail::tvec2<T>(0));
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
GLM_FUNC_QUALIFIER tmat2x4<T>::tmat2x4
|
||||
(
|
||||
tmat3x4<T> const & m
|
||||
)
|
||||
{
|
||||
this->value[0] = m[0];
|
||||
this->value[1] = m[1];
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
GLM_FUNC_QUALIFIER tmat2x4<T>::tmat2x4
|
||||
(
|
||||
tmat4x2<T> const & m
|
||||
)
|
||||
{
|
||||
this->value[0] = col_type(m[0], detail::tvec2<T>(T(0)));
|
||||
this->value[1] = col_type(m[1], detail::tvec2<T>(T(0)));
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
GLM_FUNC_QUALIFIER tmat2x4<T>::tmat2x4
|
||||
(
|
||||
tmat4x3<T> const & m
|
||||
)
|
||||
{
|
||||
this->value[0] = col_type(m[0], T(0));
|
||||
this->value[1] = col_type(m[1], T(0));
|
||||
}
|
||||
|
||||
//////////////////////////////////////////////////////////////
|
||||
// Unary updatable operators
|
||||
|
||||
template <typename T>
|
||||
GLM_FUNC_QUALIFIER tmat2x4<T>& tmat2x4<T>::operator=
|
||||
(
|
||||
tmat2x4<T> const & m
|
||||
)
|
||||
{
|
||||
this->value[0] = m[0];
|
||||
this->value[1] = m[1];
|
||||
return *this;
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
template <typename U>
|
||||
GLM_FUNC_QUALIFIER tmat2x4<T>& tmat2x4<T>::operator=
|
||||
(
|
||||
tmat2x4<U> const & m
|
||||
)
|
||||
{
|
||||
this->value[0] = m[0];
|
||||
this->value[1] = m[1];
|
||||
return *this;
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
template <typename U>
|
||||
GLM_FUNC_QUALIFIER tmat2x4<T>& tmat2x4<T>::operator+=
|
||||
(
|
||||
U const & s
|
||||
)
|
||||
{
|
||||
this->value[0] += s;
|
||||
this->value[1] += s;
|
||||
return *this;
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
template <typename U>
|
||||
GLM_FUNC_QUALIFIER tmat2x4<T>& tmat2x4<T>::operator+=
|
||||
(
|
||||
tmat2x4<U> const & m
|
||||
)
|
||||
{
|
||||
this->value[0] += m[0];
|
||||
this->value[1] += m[1];
|
||||
return *this;
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
template <typename U>
|
||||
GLM_FUNC_QUALIFIER tmat2x4<T>& tmat2x4<T>::operator-=
|
||||
(
|
||||
U const & s
|
||||
)
|
||||
{
|
||||
this->value[0] -= s;
|
||||
this->value[1] -= s;
|
||||
return *this;
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
template <typename U>
|
||||
GLM_FUNC_QUALIFIER tmat2x4<T>& tmat2x4<T>::operator-=
|
||||
(
|
||||
tmat2x4<U> const & m
|
||||
)
|
||||
{
|
||||
this->value[0] -= m[0];
|
||||
this->value[1] -= m[1];
|
||||
return *this;
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
template <typename U>
|
||||
GLM_FUNC_QUALIFIER tmat2x4<T>& tmat2x4<T>::operator*=
|
||||
(
|
||||
U const & s
|
||||
)
|
||||
{
|
||||
this->value[0] *= s;
|
||||
this->value[1] *= s;
|
||||
return *this;
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
template <typename U>
|
||||
GLM_FUNC_QUALIFIER tmat2x4<T>& tmat2x4<T>::operator*=
|
||||
(
|
||||
tmat2x4<U> const & m
|
||||
)
|
||||
{
|
||||
return (*this = tmat2x4<T>(*this * m));
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
template <typename U>
|
||||
GLM_FUNC_QUALIFIER tmat2x4<T> & tmat2x4<T>::operator/=
|
||||
(
|
||||
U const & s
|
||||
)
|
||||
{
|
||||
this->value[0] /= s;
|
||||
this->value[1] /= s;
|
||||
return *this;
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
GLM_FUNC_QUALIFIER tmat2x4<T>& tmat2x4<T>::operator++ ()
|
||||
{
|
||||
++this->value[0];
|
||||
++this->value[1];
|
||||
return *this;
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
GLM_FUNC_QUALIFIER tmat2x4<T>& tmat2x4<T>::operator-- ()
|
||||
{
|
||||
--this->value[0];
|
||||
--this->value[1];
|
||||
return *this;
|
||||
}
|
||||
|
||||
//////////////////////////////////////////////////////////////
|
||||
// Binary operators
|
||||
|
||||
template <typename T>
|
||||
GLM_FUNC_QUALIFIER tmat2x4<T> operator+
|
||||
(
|
||||
tmat2x4<T> const & m,
|
||||
typename tmat2x4<T>::value_type const & s
|
||||
)
|
||||
{
|
||||
return tmat2x4<T>(
|
||||
m[0] + s,
|
||||
m[1] + s);
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
GLM_FUNC_QUALIFIER tmat2x4<T> operator+
|
||||
(
|
||||
tmat2x4<T> const & m1,
|
||||
tmat2x4<T> const & m2
|
||||
)
|
||||
{
|
||||
return tmat2x4<T>(
|
||||
m1[0] + m2[0],
|
||||
m1[1] + m2[1]);
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
GLM_FUNC_QUALIFIER tmat2x4<T> operator-
|
||||
(
|
||||
tmat2x4<T> const & m,
|
||||
typename tmat2x4<T>::value_type const & s
|
||||
)
|
||||
{
|
||||
return tmat2x4<T>(
|
||||
m[0] - s,
|
||||
m[1] - s);
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
GLM_FUNC_QUALIFIER tmat2x4<T> operator-
|
||||
(
|
||||
tmat2x4<T> const & m1,
|
||||
tmat2x4<T> const & m2
|
||||
)
|
||||
{
|
||||
return tmat2x4<T>(
|
||||
m1[0] - m2[0],
|
||||
m1[1] - m2[1]);
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
GLM_FUNC_QUALIFIER tmat2x4<T> operator*
|
||||
(
|
||||
tmat2x4<T> const & m,
|
||||
typename tmat2x4<T>::value_type const & s
|
||||
)
|
||||
{
|
||||
return tmat2x4<T>(
|
||||
m[0] * s,
|
||||
m[1] * s);
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
GLM_FUNC_QUALIFIER tmat2x4<T> operator*
|
||||
(
|
||||
typename tmat2x4<T>::value_type const & s,
|
||||
tmat2x4<T> const & m
|
||||
)
|
||||
{
|
||||
return tmat2x4<T>(
|
||||
m[0] * s,
|
||||
m[1] * s);
|
||||
}
|
||||
|
||||
// X
|
||||
// X
|
||||
// X X
|
||||
// X X
|
||||
// X X
|
||||
// X X
|
||||
template <typename T>
|
||||
GLM_FUNC_QUALIFIER typename tmat2x4<T>::col_type operator*
|
||||
(
|
||||
tmat2x4<T> const & m,
|
||||
typename tmat2x4<T>::row_type const & v
|
||||
)
|
||||
{
|
||||
return typename tmat2x4<T>::col_type(
|
||||
m[0][0] * v.x + m[1][0] * v.y,
|
||||
m[0][1] * v.x + m[1][1] * v.y,
|
||||
m[0][2] * v.x + m[1][2] * v.y,
|
||||
m[0][3] * v.x + m[1][3] * v.y);
|
||||
}
|
||||
|
||||
// X X
|
||||
// X X
|
||||
// X X
|
||||
// X X
|
||||
// X X X X
|
||||
template <typename T>
|
||||
GLM_FUNC_QUALIFIER typename tmat2x4<T>::row_type operator*
|
||||
(
|
||||
typename tmat2x4<T>::col_type const & v,
|
||||
tmat2x4<T> const & m
|
||||
)
|
||||
{
|
||||
return typename tmat2x4<T>::row_type(
|
||||
v.x * m[0][0] + v.y * m[0][1] + v.z * m[0][2] + v.w * m[0][3],
|
||||
v.x * m[1][0] + v.y * m[1][1] + v.z * m[1][2] + v.w * m[1][3]);
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
GLM_FUNC_QUALIFIER tmat4x4<T> operator*
|
||||
(
|
||||
tmat2x4<T> const & m1,
|
||||
tmat4x2<T> const & m2
|
||||
)
|
||||
{
|
||||
typename tmat2x4<T>::value_type SrcA00 = m1[0][0];
|
||||
typename tmat2x4<T>::value_type SrcA01 = m1[0][1];
|
||||
typename tmat2x4<T>::value_type SrcA02 = m1[0][2];
|
||||
typename tmat2x4<T>::value_type SrcA03 = m1[0][3];
|
||||
typename tmat2x4<T>::value_type SrcA10 = m1[1][0];
|
||||
typename tmat2x4<T>::value_type SrcA11 = m1[1][1];
|
||||
typename tmat2x4<T>::value_type SrcA12 = m1[1][2];
|
||||
typename tmat2x4<T>::value_type SrcA13 = m1[1][3];
|
||||
|
||||
typename tmat2x4<T>::value_type SrcB00 = m2[0][0];
|
||||
typename tmat2x4<T>::value_type SrcB01 = m2[0][1];
|
||||
typename tmat2x4<T>::value_type SrcB10 = m2[1][0];
|
||||
typename tmat2x4<T>::value_type SrcB11 = m2[1][1];
|
||||
typename tmat2x4<T>::value_type SrcB20 = m2[2][0];
|
||||
typename tmat2x4<T>::value_type SrcB21 = m2[2][1];
|
||||
typename tmat2x4<T>::value_type SrcB30 = m2[3][0];
|
||||
typename tmat2x4<T>::value_type SrcB31 = m2[3][1];
|
||||
|
||||
tmat4x4<T> Result(tmat4x4<T>::null);
|
||||
Result[0][0] = SrcA00 * SrcB00 + SrcA10 * SrcB01;
|
||||
Result[0][1] = SrcA01 * SrcB00 + SrcA11 * SrcB01;
|
||||
Result[0][2] = SrcA02 * SrcB00 + SrcA12 * SrcB01;
|
||||
Result[0][3] = SrcA03 * SrcB00 + SrcA13 * SrcB01;
|
||||
Result[1][0] = SrcA00 * SrcB10 + SrcA10 * SrcB11;
|
||||
Result[1][1] = SrcA01 * SrcB10 + SrcA11 * SrcB11;
|
||||
Result[1][2] = SrcA02 * SrcB10 + SrcA12 * SrcB11;
|
||||
Result[1][3] = SrcA03 * SrcB10 + SrcA13 * SrcB11;
|
||||
Result[2][0] = SrcA00 * SrcB20 + SrcA10 * SrcB21;
|
||||
Result[2][1] = SrcA01 * SrcB20 + SrcA11 * SrcB21;
|
||||
Result[2][2] = SrcA02 * SrcB20 + SrcA12 * SrcB21;
|
||||
Result[2][3] = SrcA03 * SrcB20 + SrcA13 * SrcB21;
|
||||
Result[3][0] = SrcA00 * SrcB30 + SrcA10 * SrcB31;
|
||||
Result[3][1] = SrcA01 * SrcB30 + SrcA11 * SrcB31;
|
||||
Result[3][2] = SrcA02 * SrcB30 + SrcA12 * SrcB31;
|
||||
Result[3][3] = SrcA03 * SrcB30 + SrcA13 * SrcB31;
|
||||
return Result;
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
GLM_FUNC_QUALIFIER tmat2x4<T> operator/
|
||||
(
|
||||
tmat2x4<T> const & m,
|
||||
typename tmat2x4<T>::value_type const & s
|
||||
)
|
||||
{
|
||||
return tmat2x4<T>(
|
||||
m[0] / s,
|
||||
m[1] / s);
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
GLM_FUNC_QUALIFIER tmat2x4<T> operator/
|
||||
(
|
||||
typename tmat2x4<T>::value_type const & s,
|
||||
tmat2x4<T> const & m
|
||||
)
|
||||
{
|
||||
return tmat2x4<T>(
|
||||
s / m[0],
|
||||
s / m[1]);
|
||||
}
|
||||
|
||||
// Unary constant operators
|
||||
template <typename T>
|
||||
GLM_FUNC_QUALIFIER tmat2x4<T> const operator-
|
||||
(
|
||||
tmat2x4<T> const & m
|
||||
)
|
||||
{
|
||||
return tmat2x4<T>(
|
||||
-m[0],
|
||||
-m[1]);
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
GLM_FUNC_QUALIFIER tmat2x4<T> const operator++
|
||||
(
|
||||
tmat2x4<T> const & m,
|
||||
int
|
||||
)
|
||||
{
|
||||
return tmat2x4<T>(
|
||||
m[0] + typename tmat2x4<T>::value_type(1),
|
||||
m[1] + typename tmat2x4<T>::value_type(1));
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
GLM_FUNC_QUALIFIER tmat2x4<T> const operator--
|
||||
(
|
||||
tmat2x4<T> const & m,
|
||||
int
|
||||
)
|
||||
{
|
||||
return tmat2x4<T>(
|
||||
m[0] - typename tmat2x4<T>::value_type(1),
|
||||
m[1] - typename tmat2x4<T>::value_type(1));
|
||||
}
|
||||
|
||||
//////////////////////////////////////
|
||||
// Boolean operators
|
||||
|
||||
template <typename T>
|
||||
GLM_FUNC_QUALIFIER bool operator==
|
||||
(
|
||||
tmat2x4<T> const & m1,
|
||||
tmat2x4<T> const & m2
|
||||
)
|
||||
{
|
||||
return (m1[0] == m2[0]) && (m1[1] == m2[1]);
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
GLM_FUNC_QUALIFIER bool operator!=
|
||||
(
|
||||
tmat2x4<T> const & m1,
|
||||
tmat2x4<T> const & m2
|
||||
)
|
||||
{
|
||||
return (m1[0] != m2[0]) || (m1[1] != m2[1]);
|
||||
}
|
||||
|
||||
} //namespace detail
|
||||
} //namespace glm
|
Some files were not shown because too many files have changed in this diff Show more
Loading…
Add table
Reference in a new issue