diff options
Diffstat (limited to 'smelt/glfw_m/smelt_internal.hpp')
-rw-r--r-- | smelt/glfw_m/smelt_internal.hpp | 249 |
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 |