aboutsummaryrefslogtreecommitdiff
path: root/smelt/glfw_m/smelt_internal.hpp
diff options
context:
space:
mode:
Diffstat (limited to 'smelt/glfw_m/smelt_internal.hpp')
-rw-r--r--smelt/glfw_m/smelt_internal.hpp249
1 files changed, 249 insertions, 0 deletions
diff --git a/smelt/glfw_m/smelt_internal.hpp b/smelt/glfw_m/smelt_internal.hpp
new file mode 100644
index 0000000..2619b12
--- /dev/null
+++ b/smelt/glfw_m/smelt_internal.hpp
@@ -0,0 +1,249 @@
+// -*- C++ -*-
+/*
+ * Simple MultimEdia LiTerator(SMELT)
+ * by Chris Xiong 2015
+ * Internal header for GLFW version
+ *
+ * WARNING: This library is in development and interfaces would be very
+ * unstable.
+ *
+ */
+#ifndef SMELT_INTERNAL_H
+#define SMELT_INTERNAL_H
+
+#include "../../include/smelt.hpp"
+#include "smelt_config.hpp"
+#include <cstdio>
+#include <cstring>
+#include <cstdlib>
+#include <ctime>
+#include <cstdarg>
+#include <dirent.h>
+#include <unistd.h>
+#define GLEW_STATIC
+#include <GL/glew.h>
+#include <GLFW/glfw3.h>
+#ifndef ENABLE_DUMB
+#include <AL/al.h>
+#include <AL/alc.h>
+#include <AL/alext.h>
+#ifdef ENABLE_OGG_SUPPORT
+#include <ogg/ogg.h>
+#include <vorbis/vorbisfile.h>
+#endif
+#endif
+#ifdef WIN32
+#include <windows.h>
+#include <intrin.h>
+#endif
+
+#define xstr(s) str(s)
+#define str(s) #s
+#define SLINE xstr(__LINE__)
+
+class TOpenGLDevice
+{
+public:
+ bool have_base_opengl;
+};
+
+struct glTexture;
+class TRenderTargetList
+{
+public:
+ int w,h,ms;
+ SMTEX tex;
+ GLuint depth,frame,colorms,sframe,sdepth,scolor;
+ TRenderTargetList *next;
+};
+class TTextureList
+{
+public:
+ SMTEX tex;
+ int w,h;
+ TTextureList *next;
+};
+class TInputEventList
+{
+public:
+ smInpEvent e;
+ TInputEventList *next;
+};
+
+class SMELT_IMPL:public SMELT
+{
+public:
+ virtual void smRelease();
+ virtual bool smInit();
+ virtual void smFinale();
+ virtual void smMainLoop();
+ virtual void smUpdateFunc(smHook func);
+ virtual void smUpdateFunc(smHandler* h);
+ virtual void smUnFocFunc(smHook func);
+ virtual void smUnFocFunc(smHandler* h);
+ virtual void smFocFunc(smHook func);
+ virtual void smFocFunc(smHandler* h);
+ virtual void smQuitFunc(smHook func);
+ virtual void smQuitFunc(smHandler* h);
+ virtual void smWinTitle(const char* title);
+ virtual bool smIsActive();
+ virtual void smNoSuspend(bool para);
+ virtual void smVidMode(int resX,int resY,bool _windowed);
+ virtual void smLogFile(const char* path);
+ virtual void smLog(const char* format,...);
+ virtual void smScreenShot(const char* path);
+
+ virtual void smSetFPS(int fps);
+ virtual float smGetFPS();
+ virtual float smGetDelta();
+ virtual float smGetTime();
+
+ virtual SMSFX smSFXLoad(const char *path);
+ virtual SMSFX smSFXLoadFromMemory(const char *ptr,DWORD size);
+ virtual SMCHN smSFXPlay(SMSFX fx,int vol=100,int pan=0,float pitch=1.,bool loop=0);
+ virtual float smSFXGetLengthf(SMSFX fx);
+ virtual DWORD smSFXGetLengthd(SMSFX fx);
+ virtual void smSFXSetLoopPoint(SMSFX fx,DWORD l,DWORD r);
+ virtual void smSFXFree(SMSFX fx);
+
+ virtual void smChannelVol(SMCHN chn,int vol);
+ virtual void smChannelPan(SMCHN chn,int pan);
+ virtual void smChannelPitch(SMCHN chn,float pitch);
+ virtual void smChannelPause(SMCHN chn);
+ virtual void smChannelResume(SMCHN chn);
+ virtual void smChannelStop(SMCHN chn);
+ virtual void smChannelPauseAll();
+ virtual void smChannelResumeAll();
+ virtual void smChannelStopAll();
+ virtual bool smChannelIsPlaying(SMCHN chn);
+ virtual float smChannelGetPosf(SMCHN chn);
+ virtual void smChannelSetPosf(SMCHN chn,float pos);
+ virtual int smChannelGetPosd(SMCHN chn);
+ virtual void smChannelSetPosd(SMCHN chn,int pos);
+
+ virtual void smGetMouse2f(float *x,float *y);
+ virtual void smSetMouse2f(float x,float y);
+ virtual void smSetMouseGrab(bool enabled);
+ virtual int smGetWheel();
+ virtual bool smIsMouseOver();
+ virtual int smGetKeyState(int key);
+ virtual int smGetKey();
+ virtual bool smGetInpEvent(smInpEvent *e);
+
+ virtual bool smRenderBegin2D(bool ztest=0,SMTRG trg=0);
+ virtual bool smRenderBegin3D(float fov,bool ztest=0,SMTRG trg=0);
+ virtual bool smRenderEnd();
+ virtual void sm3DCamera6f2v(float *pos,float *rot);
+ virtual void sm2DCamera5f3v(float *pos,float *dpos,float *rot);
+ virtual void smMultViewMatrix(float *mat);
+ virtual void smClrscr(DWORD color,bool clearcol=true,bool cleardep=true);
+ virtual void smRenderLinefd(float x1,float y1,float z1,float x2,float y2,float z2,DWORD color);
+ virtual void smRenderLinefvd(float *p1,float *p2,DWORD color);
+ virtual void smRenderTriangle(smTriangle *t);
+ virtual void smRenderQuad(smQuad *q);
+ virtual smVertex* smGetVertArray();
+ virtual void smDrawVertArray(int prim,SMTEX texture,int blend,int _primcnt);
+ virtual void smDrawCustomIndexedVertices(smVertex* vb,WORD* ib,int vbc,int ibc,int blend,SMTEX texture);
+
+ virtual SMTRG smTargetCreate(int w,int h,int ms=0);
+ virtual SMTEX smTargetTexture(SMTRG targ);
+ virtual void smTargetFree(SMTRG targ);
+
+ virtual SMTEX smTextureCreate(int w,int h);
+ virtual SMTEX smTextureLoad(const char *path);
+ virtual SMTEX smTextureLoadFromMemory(const char *ptr,DWORD size);
+ virtual void smTextureFree(SMTEX tex);
+ virtual void smTextureOpt(int potopt=TPOT_NONPOT,int filter=TFLT_LINEAR);
+ virtual int smTextureGetWidth(SMTEX tex,bool original=false);
+ virtual int smTextureGetHeight(SMTEX tex,bool original=false);
+ virtual DWORD* smTextureLock(SMTEX tex,int l,int t,int w,int h,bool ro=true);
+ virtual void smTexutreUnlock(SMTEX tex);
+//internal routines&variables...
+ static SMELT_IMPL* getInterface();
+ void focusChange(bool actif);
+
+ void *hwnd;
+ bool Active;
+ char curError[256];
+
+ bool (*pUpdateFunc)();
+ bool (*pUnFocFunc)();
+ bool (*pFocFunc)();
+ bool (*pQuitFunc)();
+ smHandler *updateHandler,*unFocHandler,*focHandler,*quitHandler;
+ const char *Icon;
+ char winTitle[256];
+ int scrw,scrh;
+ int dispw,disph;
+ bool windowed,vsync;
+ char logFile[256];
+ int limfps;
+ bool hideMouse,noSuspend;
+
+ TOpenGLDevice *pOpenGLDevice;
+ smVertex *vertexArray;
+ smVertex *vertexBuf;
+ GLushort *indexBuf;
+ GLuint IndexBufferObject;
+ GLuint VertexBufferObject;
+ GLuint VertexArrayObject;
+ GLuint ShaderProgram;
+ GLuint fragshader,vertshader;
+ int loc_tex,loc_mmodv,loc_mproj;
+ float mmodv[16],mproj[16];
+ TRenderTargetList *targets;
+ TRenderTargetList *curTarget;
+ TTextureList *textures;
+ bool tdmode;
+ int primcnt,primType,primBlend,filtermode;
+ SMTEX primTex,emptyTex;
+ bool zbufenabled;
+ bool checkGLExtension(const char *extlist,const char *ext);
+ void unloadGLEntryPoints();
+ bool loadGLEntryPoints();
+ bool initOGL();
+ void finiOGL();
+ bool restOGL();
+ bool confOGL();
+ void batchOGL(bool endScene=false);
+ void configTexture(glTexture *t,int w,int h,DWORD *px,bool compress=true);
+ void bindTexture(glTexture *t);
+ bool buildTarget(TRenderTargetList *pTarget,GLuint texid,int w,int h,int ms);
+ SMTEX buildTexture(int w,int h,DWORD *px);
+ void setBlend(int blend);
+ void configProjectionMatrix2D(int w,int h);
+ void configProjectionMatrix3D(int w,int h,float fov);
+ DWORD* decodeImage(BYTE *data,const char *fn,DWORD size,int &w,int &h);
+
+ void *pOpenALDevice;
+ bool mute,lpp;
+ bool initOAL();
+ void finiOAL();
+#ifndef ENABLE_DUMB
+ int scnt;
+ ALuint src[SRC_MAX];
+ ALuint getSource();
+#endif
+
+ int posz,lkey;
+ float posx,posy;
+ int keymods;
+ bool mouseOver,captured;
+ char keyz[256];
+ bool keylst[256];
+ TInputEventList *inpQueue;
+ void initInput();
+ void clearQueue();
+ void buildEvent(int type,int k,int scan,int flags,int x,int y);
+ bool procGLFWEvent();
+ int GLFWKeyToSMKey(int glfwkey);
+
+ float timeDelta,updateFPSDelay,fps,timeS;
+ DWORD fixDelta,t0;
+ int fcnt;
+ DWORD dt;
+private:
+ SMELT_IMPL();
+};
+extern SMELT_IMPL *pSM;
+#endif