fluidvis
SXCore.h
1 #ifndef _SX_SXCORE_H_
2 #define _SX_SXCORE_H_
3 
8 #include <AL/al.h>
9 #include <AL/alc.h>
10 #include <export/Export.h>
11 #include <vector>
12 #include <sx/SXMath.h>
13 #include <sx/SXParser.h>
14 #include <map>
15 #include <boost/timer.hpp>
16 #include <boost/unordered_map.hpp>
17 using namespace std;
18 using namespace boost;
19 
20 namespace sx {
21 
25  class SXResource {
26  protected:
27 
31  string id;
32 
33  public:
34 
40  EX virtual ~SXResource();
41 
45  EX const string &getID() const;
46 
50  virtual bool isLoaded() const = 0;
51 
55  virtual void load() = 0;
56 
57  };
58 
63  class EffectObject {
64 
65  public:
66 
74  virtual void execute(vector<string> &input) = 0;
75 
76  };
77 
81  enum ShaderType {
82  VERTEX,
83  TESSELLATION_CONTROL,
84  TESSELLATION_EVALUATION,
85  GEOMETRY,
86  FRAGMENT
87  };
88 
92  class Shader: public SXResource {
93  private:
94 
98  bool loaded;
99 
107  unsigned int newTextureSlot;
108 
114  unsigned int freeTextureSlot;
115 
123  vector<unsigned int> lockedSlotsStack;
124 
125  //resources not loaded yet
126 
131  vector<string> newShaders;
132 
137  vector<string> newTransformFeedbackBuffers;
138 
143  bool newFragmentShade;
144 
149  bool newTessellate;
150 
154  vector<ShaderType> newShaderTypes;
155 
160  vector<bool> newShaderIsFile;
161 
162  //loaded resources
163 
167  unsigned int program;
168 
172  vector<unsigned int> shaders;
173 
179  vector<string> transformFeedbackBuffers;
180 
185  bool fragmentShade;
186 
191  bool tessellate;
192 
196  unordered_map<string,int> uniformLocations;
197 
201  unordered_map<string,int> targetLocations;
202 
206  unordered_map<string,int> attribLocations;
207 
212  vector<string> errorLog;
213 
217  Shader(const Shader &);
218 
222  Shader &operator = (const Shader &);
223 
224  public:
225 
229  EX Shader(const string &id);
230 
234  EX ~Shader();
235 
243  EX void load();
244 
248  EX bool isLoaded() const;
249 
254  EX vector<string> getErrorLog() const;
255 
260  EX void addShader(const string &code, ShaderType type);
261 
266  EX void addShaderFile(const string &path, ShaderType type);
267 
274  EX void addTransformFeedbackBuffer(const string &identifier);
275 
281  EX void use();
282 
287  EX bool isTessellating() const;
288 
292  EX bool isTransformFeedback() const;
293 
297  EX bool isFragmentShading() const;
298 
304  EX int getProgramID() const;
305 
309  EX const vector<string> &getTransformFeedbackBuffers() const;
310 
316  EX int getTransformFeedbackLocation(const string &identifyer);
317 
323  EX int getUniformLocation(const string &identifyer);
324 
330  EX int getTargetLocation(const string &identifyer);
331 
337  EX int Shader::getAttribLocation(const std::string &identifyer);
338 
343  EX void freeTextureSlots();
344 
350  EX unsigned int createTextureSlot();
351 
358  EX void lockTextureSlots();
359 
364  EX void unlockTextureSlots();
365 
366  };
367 
372  class Mesh: public SXResource {
373  protected:
374 
379  unsigned int newFaceSize;
380 
387  unsigned int faceSize;
388 
392  unsigned int vertexCount;
393 
394  public:
395 
399  EX ~Mesh();
400 
404  EX void setFaceSize(unsigned int faceSize);
405 
409  EX unsigned int getFaceSize() const;
410 
414  EX unsigned int getVertexCount() const;
415 
420  virtual void render(Shader &shader) = 0;
421  };
422 
426  struct VertexBuffer {
427 
432  string ID;
433 
438  string outputID;
439 
443  unsigned int bufferID;
444 
450  unsigned int location;
451 
455  unsigned int attributeSize;
456 
457  public:
458 
465  EX float *unlock();
466 
473  EX const float *unlockRead();
474 
481  EX float *unlockWrite();
482 
493  EX void lock();
494 
495  };
496 
497  class Uniform;
498  class UniformFloat;
499  class UniformVector;
500  class UniformMatrix;
501 
505  class BufferedMesh: public Mesh, public EffectObject {
506  private:
507 
513  bool loaded;
514 
515  //resources not loaded yet
516 
520  vector<vector<float>> newBuffers;
521 
525  vector<string> newAttributeIDs;
526 
530  map<string,string> newOutputIDs;
531 
535  vector<unsigned int> newAttributeSizes;
536 
543  vector<string> newMeshes;
544 
549  unsigned int newMaxVertexCount;
550 
558  vector<bool> newDiscardStandard;
559 
560  //loaded resources
561 
566  map<string,VertexBuffer *> vbos;
567 
573  map<string,VertexBuffer *> outputVBOs;
574 
579  unsigned int vao;
580 
584  map<string,UniformFloat **> uniformFloatSets;
585  map<string,UniformVector **> uniformVectorSets;
586  map<string,UniformMatrix **> uniformMatrixSets;
587 
594  unsigned int query_primitives_written;
595 
601  unsigned int query_primitives_generated;
602 
607  unsigned int maxVertexCount;
608 
612  BufferedMesh(const BufferedMesh &);
613 
617  vector<Bone> bones;
618 
623  Matrix skeletonMatrix;
624 
628  BufferedMesh &operator = (const BufferedMesh &);
629 
630  public:
631 
636  EX BufferedMesh(const string &id);
637 
641  EX ~BufferedMesh();
642 
648  EX void unload();
649 
658  EX void load();
659 
664  EX bool isLoaded() const;
665 
672  EX void save(const string &filename);
673 
681  EX void beginCapture(Shader &shader);
682 
686  EX void endCapture(Shader &shader);
687 
695  EX unsigned int countCreatedVertices() const;
696 
705  EX void setMaxVertexCount(unsigned int count);
706 
710  EX unsigned int getMaxVertexCount() const;
711 
721  EX void setVertexCount(unsigned int count);
722 
727  EX void render(Shader &shader);
728 
738  EX void renderInstanced(Shader &shader, vector<BufferedMesh *> &instanceBuffers);
739 
746  EX void addBuffer(const string &identifier, const string &outputIdentifier, vector<float> &buffer, unsigned int attributeSize);
747 
753  EX void addBuffer(const string &identifier, vector<float> &buffer, unsigned int attributeSize);
754 
802  EX void addBuffers(const string &path);
803 
809  EX void addBuffers(const string &path, bool discardStandardBuffers);
810 
816  EX void setOutputIdentifier(const string &identifier, const string &outputIdentifier);
817 
822  EX VertexBuffer *getBuffer(const string &identifier);
823 
828  EX map<string,VertexBuffer *> &getBuffers();
829 
845  EX bool setUniforms(const vector<Uniform *> &uniforms, const vector<string> &bufferIDs, unsigned int location);
846 
854  EX bool removeUniforms(unsigned int location);
855 
859  EX void removeUniforms();
860 
866  EX void resetUniforms();
867 
875  EX void loadBuffersToUniforms();
876 
885  EX void loadBuffersToUniforms(unsigned int firstLocation, unsigned int lastLocation);
886 
894  EX void loadBufferToUniforms(const string &bufferID);
895 
904  EX void loadBufferToUniforms(const string &bufferID, unsigned int firstLocation, unsigned int lastLocation);
905 
912  EX void loadUniformsToBuffers();
913 
921  EX void loadUniformsToBuffers(unsigned int firstLocation, unsigned int lastLocation);
922 
929  EX void loadUniformsToBuffer(const string &bufferID);
930 
938  EX void loadUniformsToBuffer(const string &bufferID, unsigned int firstLocation, unsigned int lastLocation);
939 
943  EX vector<Bone> getSkeleton() const;
944 
949  EX Matrix getSkeletonMatrix() const;
950 
955  EX void setSkeleton(const vector<Bone> &bones);
956 
960  EX void setSkeletonMatrix(const Matrix &skeletonMatrix);
961 
968  EX void execute(vector<string> &input);
969 
970  };
971 
975  class Uniform: public SXResource {
976  protected:
977 
982  string idToken;
983 
988  unordered_map<string,string> uniformNames;
989 
994  EX Uniform(const string &id);
995 
996  public:
997 
1001  EX virtual ~Uniform();
1002 
1008  EX void setUniformName(const string &name, const string &id);
1009 
1015  EX const string &getUniformName(const string &id) const;
1016 
1023  virtual void use(Shader &shader, const string &id) = 0;
1024 
1025  };
1026 
1027  class UniformFloat: public Uniform {
1028  private:
1029 
1033  UniformFloat(const UniformFloat &);
1034 
1038  UniformFloat &operator = (const UniformFloat &);
1039 
1040  public:
1041 
1045  float value;
1046 
1051  EX UniformFloat(const string &id);
1052 
1056  EX UniformFloat &operator = (float v);
1057 
1061  EX UniformFloat &operator << (float v);
1062 
1066  EX const UniformFloat &operator >> (float &v) const;
1067 
1072  EX void load();
1073 
1078  EX bool isLoaded() const;
1079 
1083  EX void use(Shader &shader, const string &id);
1084 
1085  };
1086 
1087  class UniformDouble: public Uniform {
1088  private:
1089 
1093  UniformDouble(const UniformDouble &);
1094 
1098  UniformDouble &operator = (const UniformDouble &);
1099 
1100  public:
1101 
1105  double value;
1106 
1111  EX UniformDouble(const string &id);
1112 
1116  EX UniformDouble &operator = (double v);
1117 
1121  EX UniformDouble &operator << (double v);
1122 
1126  EX const UniformDouble &operator >> (double &v) const;
1127 
1132  EX void load();
1133 
1138  EX bool isLoaded() const;
1139 
1143  EX void use(Shader &shader, const string &id);
1144 
1145  };
1146 
1147  class UniformVector: public Uniform, public Vector {
1148  private:
1149 
1153  UniformVector(const UniformVector &);
1154 
1158  UniformVector &operator = (const UniformVector &);
1159 
1160  public:
1161 
1166  EX UniformVector(const string &id);
1167 
1171  EX Vector &operator = (const Vector &v);
1172 
1177  EX void load();
1178 
1183  EX bool isLoaded() const;
1184 
1188  EX void use(Shader &shader, const string &id);
1189 
1190  };
1191 
1192  class UniformDVector: public Uniform, public DVector {
1193  private:
1194 
1198  UniformDVector(const UniformDVector &);
1199 
1203  UniformDVector &operator = (const UniformDVector &);
1204 
1205  public:
1206 
1211  EX UniformDVector(const string &id);
1212 
1216  EX DVector &operator = (const DVector &v);
1217 
1222  EX void load();
1223 
1228  EX bool isLoaded() const;
1229 
1233  EX void use(Shader &shader, const string &id);
1234 
1235  };
1236 
1237  class UniformMatrix: public Uniform, public Matrix {
1238  private:
1239 
1243  UniformMatrix(const UniformMatrix &);
1244 
1248  UniformMatrix &operator = (const UniformMatrix &);
1249 
1250  public:
1251 
1256  EX UniformMatrix(const string &id);
1257 
1261  EX Matrix &operator = (const Matrix &m);
1262 
1267  EX void load();
1268 
1273  EX bool isLoaded() const;
1274 
1278  EX void use(Shader &shader, const string &id);
1279 
1280  };
1281 
1282  class UniformDMatrix: public Uniform, public DMatrix {
1283  private:
1284 
1288  UniformDMatrix(const UniformDMatrix &);
1289 
1293  UniformDMatrix &operator = (const UniformDMatrix &);
1294 
1295  public:
1296 
1301  EX UniformDMatrix(const string &id);
1302 
1306  EX DMatrix &operator = (const DMatrix &m);
1307 
1312  EX void load();
1313 
1318  EX bool isLoaded() const;
1319 
1323  EX void use(Shader &shader, const string &id);
1324 
1325  };
1326 
1331  BYTE_RGBA,
1332  FLOAT16_RGBA,
1333  FLOAT_RGBA
1334  };
1335 
1336  class Texture: public Uniform {
1337  private:
1338 
1343  bool loaded;
1344 
1345  //resources not loaded yet
1346 
1356  string newPath;
1357 
1362  int newWidth;
1363 
1368  int newHeight;
1369 
1374  PixelFormat newPixelFormat;
1375 
1384  vector<unsigned char> newByteBuffer;
1385 
1394  vector<float> newFloatBuffer;
1395 
1396  //loaded resources
1397 
1401  unsigned int texture;
1402 
1406  int width;
1407 
1411  int height;
1412 
1416  PixelFormat pixelFormat;
1417 
1421  Texture(const Texture &);
1422 
1426  Texture &operator = (const Texture &);
1427 
1428  public:
1429 
1434  EX Texture(const string &id);
1435 
1439  EX ~Texture();
1440 
1446  EX void unload();
1447 
1457  EX void load();
1458 
1462  EX bool isLoaded() const;
1463 
1478  EX void save(const string &filename);
1479 
1487  EX void use(Shader &shader, const string &id);
1488 
1494  EX unsigned int getTextureID() const;
1495 
1508  EX void setPath(const string &path);
1509 
1514  EX void setWidth(int width);
1515 
1520  EX int getWidth() const;
1521 
1526  EX void setHeight(int height);
1527 
1532  EX int getHeight() const;
1533 
1538  EX void setPixelFormat(PixelFormat pixelFormat);
1539 
1544  EX PixelFormat getPixelFormat() const;
1545 
1552  EX void setByteBuffer(const vector<unsigned char> &buffer);
1553 
1560  EX void setFloatBuffer(const vector<float> &buffer);
1561 
1562  };
1563 
1568  class Volume: public Uniform {
1569  private:
1570 
1575  bool loaded;
1576 
1577  //resources not loaded yet
1578 
1593  vector<string> newPaths;
1594 
1599  int newWidth;
1600 
1605  int newHeight;
1606 
1611  int newDepth;
1612 
1617  PixelFormat newPixelFormat;
1618 
1627  vector<unsigned char> newByteBuffer;
1628 
1637  vector<float> newFloatBuffer;
1638 
1639  //loaded resources
1640 
1644  unsigned int texture;
1645 
1649  int width;
1650 
1654  int height;
1655 
1662  int depth;
1663 
1667  PixelFormat pixelFormat;
1668 
1672  Volume(const Volume &);
1673 
1677  Volume &operator = (const Volume &);
1678 
1679  public:
1680 
1685  EX Volume(const string &id);
1686 
1690  EX ~Volume();
1691 
1697  EX void unload();
1698 
1711  EX void load();
1712 
1716  EX bool isLoaded() const;
1717 
1736  EX void save(const string &filenamepart);
1737 
1745  EX void use(Shader &shader, const string &id);
1746 
1752  EX unsigned int getTextureID() const;
1753 
1768  EX void addPath(const string &path);
1769 
1778  EX void setPaths(const vector<string> &paths);
1779 
1784  EX void setWidth(int width);
1785 
1790  EX int getWidth() const;
1791 
1796  EX void setHeight(int height);
1797 
1802  EX int getHeight() const;
1803 
1808  EX void setDepth(int depth);
1809 
1814  EX int getDepth();
1815 
1820  EX void setPixelFormat(PixelFormat pixelFormat);
1821 
1826  EX PixelFormat getPixelFormat() const;
1827 
1834  EX void setByteBuffer(const vector<unsigned char> &buffer);
1835 
1842  EX void setFloatBuffer(const vector<float> &buffer);
1843 
1844  };
1845 
1857  struct BoneTransform {
1858 
1862  string boneID;
1863 
1871 
1882 
1883  public:
1884 
1889  EX BoneTransform();
1890 
1891  };
1892 
1903  class Skeleton: public SXResource, public EffectObject {
1904  private:
1905 
1910  bool loaded;
1911 
1912  //resources not loaded yet
1913 
1919  vector<string> newPaths;
1920 
1921 
1927  vector<BufferedMesh *> newMeshes;
1928 
1933  vector<Bone> newBones;
1934 
1935  //loaded resources
1936 
1941  Matrix skeletonMatrix;
1942 
1947  vector<Bone> bones;
1948 
1952  unsigned int skeletonDepth;
1953 
1960  map<string, Bone *> boneMap;
1961 
1967  map<string,unsigned int> boneTransformsIndices;
1968 
1981  map<int,vector<BoneTransform *> > boneTransforms;
1982 
1992  map<int,map<string,BoneTransform *> > boneTransformMap;
1993 
1999  vector<string> unmatchedBones;
2000 
2006  void initBoneMap();
2007 
2014  void initBoneTransorms();
2015 
2022  void initBoneTransformSet(map<int,map<string,BoneTransform *> >::iterator setIter);
2023 
2027  Skeleton(const Skeleton &);
2028 
2032  Skeleton &operator = (const Skeleton &);
2033 
2034  public:
2035 
2039  EX Skeleton(const string &id);
2040 
2044  EX ~Skeleton();
2045 
2052  EX void addBones(const string &path);
2053 
2059  EX void addBones(BufferedMesh &mesh);
2060 
2064  EX void setSkeletonMatrix(const Matrix &transform);
2065 
2069  EX const Matrix &getSkeletonMatrix() const;
2070 
2075  EX void addRootBone(Bone &bone);
2076 
2081  EX const Bone &getBone(const string &id) const;
2082 
2086  EX vector<const Bone> getRootBones() const;
2087 
2097  EX void load();
2098 
2103  EX void unload();
2104 
2109  EX bool isLoaded() const;
2110 
2121  EX vector<string> getUnmatchedBones() const;
2122 
2141  EX void addBoneTransform(int setID, const BoneTransform &transform);
2142 
2148  EX BoneTransform &getBoneTransform(int setID, const string &boneID);
2149 
2154  EX void removeBoneTransform(int setID, const string &boneID);
2155 
2159  EX void removeBoneTransforms(int setID);
2160 
2164  EX void removeBoneTransforms();
2165 
2187  EX void updateBoneTransforms();
2188 
2192  EX void execute(vector<string> &input);
2193 
2194  };
2195 
2225  ZERO, //Blendfactor = 0
2226  ONE, //Bendfactor = 1
2227  FRAGMENTCOLOR, //Blendfactor = color of the fragment, which will be rendered
2228  FRAMEBUFFERCOLOR, //Blendfactor = color of framebufferfragment
2229  FRAGMENTALPHA, //Blendfactor = alphavalue of the fragment, which will be rendered
2230  FRAMEBUFFERALPHA, //Blendfactor = alphavalue of the framebufferfragment
2231  ONE_MINUS_FRAGMENTCOLOR, //Blendfactor = 1 - color of the fragment, which will be rendered
2232  ONE_MINUS_FRAMEBUFFERCOLOR, //Blendfactor = 1 - color of the framebufferfragment
2233  ONE_MINUS_FRAGMENTALPHA, //Blendfactor = 1 - alphavalue of the fragment, which will be rendered
2234  ONE_MINUS_FRAMEBUFFERALPHA //Blendfactor = 1 - alphavalue of the framebufferfragment
2235  };
2236 
2246  enum DepthTest {
2247  ACCEPT_NEVER, //fails always
2248  ACCEPT_ALWAYS, //succeeds always
2249  ACCEPT_LESS, //succeeds, if the fragment, which is about to be rendered, has a smaller depthvalue than the depthvalue in the framebuffer
2250  ACCEPT_LESS_EQUAL, //succeeds, if the fragment, which is about to be rendered, has a smaller depthvalue than, or a depthvalue equal to the depthvalue in the framebuffer
2251  ACCEPT_GREATER, //succeeds, if the fragment, which is about to be rendered, has a bigger depthvalue than the depthvalue in th framebuffer
2252  ACCEPT_GREATER_EQUAL, //succeeds, if the fragment, which is about to be rendered, has a bigger depthvalue than, or a depthvalue equal to the depthvalue in the framebuffer
2253  ACCEPT_EQUAL, //succeeds, if the fragment, which is about to be rendered, has a depthvalue equal to the depthvalue in the framebuffer
2254  ACCEPT_NOT_EQUAL //succeeds, if the fragment, which is about to be rendered, has a depthvalue different from the depthvalue in the framebuffer
2255  };
2256 
2260  class RenderTarget: public SXResource {
2261  private:
2262 
2266  string idToken;
2267 
2271  bool loaded;
2272 
2273  //resources not loaded yet
2274 
2279  int newWidth;
2280 
2285  int newHeight;
2286 
2292  bool newRenderToDisplay;
2293 
2294  //loaded resources
2295 
2300  int width;
2301 
2306  int height;
2307 
2311  unsigned int target;
2312 
2316  unsigned int renderbuffer;
2317 
2322  bool renderToDisplay;
2323 
2327  static unordered_map<int,int> depthTest2GL;
2328 
2332  static unordered_map<int,int> blendFactor2GL;
2333 
2337  static unordered_map<int,int> initDepthTest2GL();
2338 
2342  static unordered_map<int,int> initBlendFactor2GL();
2343 
2347  RenderTarget(const RenderTarget &);
2348 
2352  RenderTarget &operator = (const RenderTarget &);
2353 
2354  public:
2355 
2359  EX RenderTarget(const string &id);
2360 
2364  EX ~RenderTarget();
2365 
2370  EX static void clearTarget();
2371 
2376  EX static void clearDepthBuffer();
2377 
2382  EX static void clearColorBuffer();
2383 
2389  EX static void applyDepthTest(DepthTest test);
2390 
2396  EX static void applyWriteDepthBuffer(bool write);
2397 
2403  EX static void applyBlendFactors(BlendFactor fragmentBlendFactor, BlendFactor targetBlendFactor);
2404 
2409  EX static void setViewport(int x, int y, int width, int height);
2410 
2414  EX void setViewport();
2415 
2420  EX void setViewport(float xFactor, float yFactor, float widthFactor, float heightFactor);
2421 
2426  EX void unload();
2427 
2435  EX void load();
2436 
2440  EX bool isLoaded() const;
2441 
2449  EX void beginRender(Shader &shader, vector<Texture *> &textures, const string &resourceID);
2450 
2458  EX void beginRender(Shader &shader, vector<Volume *> &textures, unsigned int layer, const string &resourceID);
2459 
2464  EX void endRender();
2465 
2472  EX void setRenderToDisplay(bool renderToDisplay);
2473 
2477  EX bool isRenderingToDisplay() const;
2478 
2484  EX void setWidth(int width);
2485 
2490  EX int getWidth() const;
2491 
2497  EX void setHeight(int height);
2498 
2503  EX int getHeight() const;
2504 
2505  };
2506 
2507  class RenderObject: public SXResource {
2508  private:
2509 
2513  bool visible;
2514 
2519  Mesh *mesh;
2520 
2526  Shader *shader;
2527 
2532  unordered_map<string,Uniform *> uniforms;
2533 
2539  vector<BufferedMesh *> instanceBuffers;
2540 
2545  unordered_map<int,unordered_map<string,Uniform *>> uniformSets;
2546 
2550  RenderObject(const RenderObject &);
2551 
2555  RenderObject &operator = (const RenderObject &);
2556 
2557  public:
2558 
2562  EX RenderObject(const string &id);
2563 
2567  EX ~RenderObject();
2568 
2573  EX void load();
2574 
2579  EX bool isLoaded() const;
2580 
2584  EX void setVisible(bool visible);
2585 
2589  EX bool isVisible() const;
2590 
2594  EX void setMesh(Mesh &mesh);
2595 
2599  EX Mesh *getMesh();
2600 
2604  EX void setShader(Shader *shader);
2605 
2609  EX Shader *getShader();
2610 
2617  EX void addUniform(Uniform &uniform);
2618 
2623  EX void removeUniform(const string &name);
2624 
2628  EX void removeUniforms();
2629 
2638  EX void setInstanceBuffers(const vector<BufferedMesh *> &instanceBuffers);
2639 
2643  EX void removeInstanceBuffers();
2644 
2653  EX unordered_map<string, Uniform *> &getUniformSet(const int id);
2654 
2659  EX void removeUniformSet(const int id);
2660 
2664  EX void removeUniformSets();
2665 
2678  EX void render(Shader *passShader);
2679 
2680  };
2681 
2682  class Pass: public SXResource, public EffectObject {
2683  private:
2684 
2688  bool visible;
2689 
2694  Shader *shader;
2695 
2700  unordered_map<string,RenderObject *> renderObjects;
2701 
2707  vector<vector<RenderObject *>> tempRenderObjects;
2708 
2730  BufferedMesh *backgroundQuadMesh;
2731  RenderObject *backgroundQuad;
2732 
2737  unordered_map<string,Uniform *> uniforms;
2738 
2742  bool clearColorbuffer;
2743 
2747  bool clearDepthbuffer;
2748 
2752  bool wireframe;
2753 
2754  BlendFactor fragmentBlendFactor;
2755  BlendFactor targetBlendFactor;
2756  DepthTest depthTest;
2757  bool writeDepthBuffer;
2758 
2763  RenderTarget *renderTarget;
2764 
2770  vector<Texture *> targets;
2771 
2777  vector<Volume *> volumeTargets;
2778 
2784  BufferedMesh *geometryTarget;
2785 
2794  UniformFloat *layerCoordinate;
2795 
2803  UniformFloat *startLayer;
2804 
2812  UniformFloat *endLayer;
2813 
2817  Pass(const Pass &);
2818 
2822  Pass &operator = (const Pass &);
2823 
2824  public:
2825 
2832  EX static void applyWireframe(bool wireframe);
2833 
2837  EX Pass(const string &id);
2838 
2842  EX ~Pass();
2843 
2848  EX void load();
2849 
2854  EX bool isLoaded() const;
2855 
2859  EX void setVisible(bool visible);
2860 
2864  EX bool isVisible() const;
2865 
2869  EX void setShader(Shader *shader);
2870 
2874  EX Shader *getShader();
2875 
2881  EX void addRenderObject(RenderObject &object);
2882 
2888  EX void removeRenderObject(const string &id);
2889 
2894  EX void removeRenderObjects();
2895 
2924  EX void useBackgroundQuad(bool use);
2925 
2931  EX void addTempRenderObjects(const vector<RenderObject *> &temp);
2932 
2939  EX vector<RenderObject *> &getTempRenderObjects();
2940 
2949  EX void addUniform(Uniform &uniform);
2950 
2958  EX void removeUniform(const string &name);
2959 
2963  EX void removeUniforms();
2964 
2968  EX void setWireframe(bool wireframe);
2969 
2973  EX bool isWireframe() const;
2974 
2978  EX void setClearColorBuffer(bool clear);
2979 
2983  EX bool isClearingColorBuffer() const;
2984 
2988  EX void setClearDepthBuffer(bool clear);
2989 
2993  EX bool isClearingDepthBuffer() const;
2994 
2998  EX void setFragmentBlendFactor(BlendFactor factor);
2999 
3003  EX BlendFactor getFragmentBlendFactor() const;
3004 
3008  EX void setTargetBlendFactor(BlendFactor factor);
3009 
3013  EX BlendFactor getTargetBlendFactor() const;
3014 
3018  EX void setDepthTest(DepthTest test);
3019 
3023  EX DepthTest getDepthTest();
3024 
3030  EX void setWriteDepthBuffer(bool write);
3031 
3037  EX bool isWritingDepthBuffer();
3038 
3045  EX void setOutput(RenderTarget &target, vector<Texture *> targets);
3046 
3053  EX void setOutput(RenderTarget &target, vector<Volume *> targets);
3054 
3062  EX void setOutput(BufferedMesh *target);
3063 
3067  EX void setLayerCoordinate(UniformFloat *layerCoordinate);
3068 
3072  EX void setStartLayer(UniformFloat *startLayer);
3073 
3077  EX void setEndLayer(UniformFloat *endLayer);
3078 
3091  EX void render();
3092 
3096  EX void execute(vector<string> &input);
3097 
3098  };
3099 
3104  struct EffectCommand {
3105  vector<string> input;
3106  EffectObject *object;
3107  };
3108 
3109  class Effect: public SXResource {
3110  private:
3111 
3118  bool visible;
3119 
3125  vector<EffectCommand> objects;
3126 
3130  Effect(const Effect &);
3131 
3135  Effect &operator = (const Effect &);
3136 
3137  public:
3138 
3142  EX Effect(const string &id);
3143 
3147  EX ~Effect();
3148 
3153  EX void load();
3154 
3159  EX bool isLoaded() const;
3160 
3164  EX void setVisible(bool visible);
3165 
3169  EX bool isVisible() const;
3170 
3176  EX vector<EffectCommand> &getObjects();
3177 
3184  EX void render();
3185 
3186  };
3187 
3195  class AudioBuffer: public SXResource {
3196  private:
3197 
3198  //resource requests
3199 
3206  string newPath;
3207 
3208  //loaded resources
3209 
3214  bool loaded;
3215 
3219  ALuint buffer;
3220 
3224  AudioBuffer(const AudioBuffer &);
3225 
3229  AudioBuffer &operator = (const AudioBuffer &);
3230 
3231  public:
3232 
3236  EX AudioBuffer(const string &id);
3237 
3241  EX ~AudioBuffer();
3242 
3251  EX void load();
3252 
3257  EX void unload();
3258 
3262  EX bool isLoaded() const;
3263 
3269  EX void setPath(const string &path);
3270 
3275  EX unsigned int getBufferID() const;
3276 
3277  };
3278 
3289  class AudioObject: public SXResource {
3290  private:
3291 
3295  static bool initialized;
3296 
3300  static ALCdevice *device;
3301 
3305  static ALCcontext *context;
3306 
3307  //loaded resources
3308 
3312  bool loaded;
3313 
3319  ALuint audio;
3320 
3326  bool playing;
3327 
3328  //state
3329 
3333  AudioBuffer *buffer;
3334 
3339  const UniformVector *position;
3340 
3350  const UniformFloat *referenceRadius;
3351 
3362  const UniformFloat *maxRadius;
3363 
3373  const UniformFloat *distanceExponent;
3374 
3379  const UniformVector *velocity;
3380 
3385  const UniformFloat *volume;
3386 
3392  const UniformFloat *pitch;
3393 
3400  bool looping;
3401 
3407  bool locked;
3408 
3415  double lockTime;
3416 
3421  timer timedLock;
3422 
3426  AudioObject(const AudioObject &);
3427 
3431  AudioObject &operator = (const AudioObject &);
3432 
3433  public:
3434 
3445  EX static void initAudio();
3446 
3451  EX static void closeAudio();
3452 
3458  EX static bool isInitialized();
3459 
3463  EX AudioObject(const string &id);
3464 
3468  EX ~AudioObject();
3469 
3475  EX void load();
3476 
3480  EX void unload();
3481 
3485  EX bool isLoaded() const;
3486 
3490  EX void setAudioBuffer(AudioBuffer &buffer);
3491 
3495  EX void setPosition(const UniformVector *pos);
3496 
3500  EX void setReferenceRadius(const UniformFloat *radius);
3501 
3505  EX void setMaxRadius(const UniformFloat *maxRadius);
3506 
3510  EX void setDistanceExponent(const UniformFloat *exponent);
3511 
3515  EX void setVelocity(const UniformVector *vel);
3516 
3520  EX void setVolume(const UniformFloat *v);
3521 
3525  EX void setPitch(const UniformFloat *pitch);
3526 
3530  EX void setLooping(bool looping);
3531 
3539  EX void start();
3540 
3547  EX void start(double time);
3548 
3556  EX void stop();
3557 
3567  EX void pause();
3568 
3573  EX bool isPlaying();
3574 
3579  EX double getLength() const;
3580 
3585  EX double getPlaybackPosition() const;
3586 
3594  EX void lock(double time);
3595 
3603  EX void unlock();
3604 
3614  EX void update();
3615 
3616  };
3617 
3627  class AudioListener: public SXResource {
3628  private:
3629 
3635  const UniformVector *position;
3636 
3644  const UniformVector *view;
3645 
3653  const UniformVector *up;
3654 
3660  const UniformVector *velocity;
3661 
3668  const UniformFloat *volume;
3669 
3673  AudioListener(const AudioListener &);
3674 
3678  AudioListener &operator = (const AudioListener &);
3679 
3680  public:
3681 
3685  EX AudioListener(const string &id);
3686 
3690  EX ~AudioListener();
3691 
3696  EX void load();
3697 
3702  EX void unload();
3703 
3707  EX bool isLoaded() const;
3708 
3712  EX void setPosition(const UniformVector *pos);
3713 
3717  EX void setView(const UniformVector *view);
3718 
3722  EX void setUp(const UniformVector *up);
3723 
3727  EX void setVelocity(const UniformVector *vel);
3728 
3732  EX void setVolume(const UniformFloat *v);
3733 
3742  EX void update();
3743 
3744  };
3745 
3750  class AudioPass: public SXResource {
3751  private :
3752 
3759  AudioListener *listener;
3760 
3765  unordered_map<string,AudioObject *> objects;
3766 
3772  vector<AudioObject *> pausedObjects;
3773 
3779  vector<AudioObject *> unpausedObjects;
3780 
3785  bool paused;
3786 
3790  AudioPass(const AudioPass &);
3791 
3795  AudioPass &operator = (const AudioPass &);
3796  public:
3797 
3801  EX AudioPass(const string &id);
3802 
3806  EX ~AudioPass();
3807 
3816  EX void setPause(bool pause);
3817 
3822  EX bool isPaused() const;
3823 
3828  EX void load();
3829 
3834  EX void unload();
3835 
3840  EX bool isLoaded() const;
3841 
3845  EX void setAudioListener(AudioListener &listener);
3846 
3852  EX void addAudioObject(AudioObject &object);
3853 
3858  EX void removeAudioObject(const string &id);
3859 
3863  EX void removeAudioObjects();
3864 
3872  EX void update();
3873 
3874  };
3875 
3876 }
3877 
3878 #endif
Definition: SXCore.h:1087
unsigned int location
Definition: SXCore.h:450
Definition: SXCore.h:2507
Definition: SXCore.h:1903
Definition: SXCore.h:2682
unsigned int faceSize
Definition: SXCore.h:387
float value
Definition: SXCore.h:1045
Definition: SXCore.h:92
unordered_map< string, string > uniformNames
Definition: SXCore.h:988
Definition: SXCore.h:975
Definition: SXCore.h:426
Definition: SXCore.h:2260
unsigned int attributeSize
Definition: SXCore.h:455
Definition: SXCore.h:1568
Definition: SXMath.h:640
Definition: SXMath.h:285
Definition: SXCore.h:3109
unsigned int bufferID
Definition: SXCore.h:443
unsigned int newFaceSize
Definition: SXCore.h:379
Matrix * output
Definition: SXCore.h:1881
DepthTest
Definition: SXCore.h:2246
Definition: SXCore.h:3627
Matrix * input
Definition: SXCore.h:1870
Definition: SXCore.h:1336
double value
Definition: SXCore.h:1105
Definition: SXParser.h:690
Definition: SXCore.h:372
string outputID
Definition: SXCore.h:438
Definition: SXCore.h:3195
string ID
Definition: SXCore.h:432
Definition: SXCore.h:3750
Definition: SXMath.h:37
Definition: SXCore.h:505
string id
Definition: SXCore.h:31
PixelFormat
Definition: SXCore.h:1330
BlendFactor
Definition: SXCore.h:2224
Definition: SXCore.h:1282
Definition: SXCore.h:25
unsigned int vertexCount
Definition: SXCore.h:392
string boneID
Definition: SXCore.h:1862
Definition: SXCore.h:1192
ShaderType
Definition: SXCore.h:81
Definition: SXCore.h:3104
Definition: SXCore.h:1857
Definition: SXCore.h:1237
string idToken
Definition: SXCore.h:982
Definition: SXCore.h:3289
Definition: SXCore.h:63
Definition: SXCore.h:1027
Definition: SXMath.h:888
Definition: SXCore.h:1147
Definition: Exception.h:13