• hge source explor 0x1


     

    hge.h & hge_impl.h

     

      hge.h是给用户的,所以在这里会列出所有的用户能使用的接口。

      hge_impl.h是引擎的具体实现,在这里除了给用户的接口实现之外还有额外的实现过程中的具体的其他函数与属性。

      hge.h和hge_impl.h中,根据我们前面所说的模块来进行划分。在这里将系统划分为几个模块,然而并不需要全部记下来了,因为后面遇到的时候我们在会过来看模块中包含的接口,也就是我们需要看的接口就可以了。


     system module

       在这个模块中,就是一个引擎的运行的过程。在HGE引擎的运行中,也是在这部分:填写WNDCLASS(HGE中是这个,但是现在我们可以考虑用WNDCLASSEX);注册类RegisterClassEx;生成窗口CreateWindow;显示窗口ShowWindow。

    system module
    virtual bool        CALL    System_Initiate() = 0;
    virtual void        CALL    System_Shutdown() = 0;
    virtual bool        CALL    System_Start() = 0;
    virtual char*       CALL    System_GetErrorMessage() = 0;
    virtual void        CALL    System_Log(const char *format, ...) = 0;
    virtual bool        CALL    System_Launch(const char *url) = 0;
    virtual void        CALL    System_Snapshot(const char *filename=0) = 0;
    void                _FocusChange(bool bAct);
    void                _PostError(char *error);
    void                _AdjustWindow();
    void                _Resize(int width, int height);

      上面提供的接口中,System开头的是引擎提供给外部的可调用的接口,这些接口刚好可以表现出一个引擎运行的所有过程。如前面一篇最后画出引擎的运行的方案。

      在第一个接口System_Initiate中,窗口的创建就在这部分。再接下来的过程中,我要将窗口这部分抽出来。所以在下面的这些下面的这些内部接口会使用。

      这些内部接口中,_AdjustWindow和_Resize是关于窗口的,暂时先提出来;_PostError是System_Log的一个封装,提供给内部记录所有的引擎的过程中的错误、初始化、dx参数的属性的记录,这些都是属于杂项的部分,在这里先提出来,并实现,是为了更好的记录引擎的创建的中会遇到的问题。

     


     

    Input Module

      这个模块中,HGE的输入模块是在window的按键、鼠标的监控中实现的。没有用到Direct Input。

    Input Module
      virtual void    CALL    Input_GetMousePos(float *x, float *y) = 0;
      virtual void    CALL    Input_SetMousePos(float x, float y) = 0;
      virtual int     CALL    Input_GetMouseWheel() = 0;
      virtual bool    CALL    Input_IsMouseOver() = 0;
      virtual bool    CALL    Input_KeyDown(int key) = 0;
      virtual bool    CALL    Input_KeyUp(int key) = 0;
      virtual bool    CALL    Input_GetKeyState(int key) = 0;
      virtual char*   CALL    Input_GetKeyName(int key) = 0;
      virtual int     CALL    Input_GetKey() = 0;
      virtual int     CALL    Input_GetChar() = 0;
      virtual bool    CALL    Input_GetEvent(hgeInputEvent *event) = 0;
      void    _UpdateMouse();
      void    _InputInit();
      void    _ClearQueue();
      void    _BuildEvent(int type, int key, int scan, int flags, int x, int y);

      对外的接口提供给用户查询按键、鼠标的信息,并且获取输入事件;内部的实现的接口,则如果接口一般:初始化输入模块;更新鼠标;创造输入事件;清理已有的输入事件。


    Resource Module

      这个模块负责从硬盘把所有的数据都加载到程序中,方便程序的其他模块调用这些数据。

      

    Resource Module
      virtual void*       CALL    Resource_Load(const char *filename, DWORD *size=0) = 0;
      virtual void        CALL    Resource_Free(void *res) = 0;
      virtual bool        CALL    Resource_AttachPack(const char *filename, const char *password=0) = 0;
      virtual void        CALL    Resource_RemovePack(const char *filename) = 0;
      virtual void        CALL    Resource_RemoveAllPacks() = 0;
      virtual char*       CALL    Resource_MakePath(const char *filename=0) = 0;
      virtual char*       CALL    Resource_EnumFiles(const char *wildcard=0) = 0;
      virtual char*       CALL    Resource_EnumFolders(const char *wildcard=0) = 0;
      // nothing

     


     

    Graphics Module

      这个模块是引擎中最核心的模块,在这里要完成对DX的初始化,然后设定DX的固定流水线,最后使用DX绘制图形。

    Graphics Module
        virtual bool        CALL    Gfx_BeginScene(HTARGET target=0) = 0;
        virtual void        CALL    Gfx_EndScene() = 0;
        virtual void        CALL    Gfx_Clear(DWORD color) = 0;
        virtual void        CALL    Gfx_RenderLine(float x1, float y1, float x2, float y2, DWORD color=0xFFFFFFFF, float z=0.5f) = 0;
        virtual void        CALL    Gfx_RenderTriple(const hgeTriple *triple) = 0;
        virtual void        CALL    Gfx_RenderQuad(const hgeQuad *quad) = 0;
        virtual hgeVertex*  CALL    Gfx_StartBatch(int prim_type, HTEXTURE tex, int blend, int *max_prim) = 0;
        virtual void        CALL    Gfx_FinishBatch(int nprim) = 0;
        virtual void        CALL    Gfx_SetClipping(int x=0, int y=0, int w=0, int h=0) = 0;
        virtual void        CALL    Gfx_SetTransform(float x=0, float y=0, float dx=0, float dy=0, float rot=0, float hscale=0, float vscale=0) = 0; 
        virtual HTEXTURE    CALL    Texture_Create(int width, int height) = 0;
        virtual HTEXTURE    CALL    Texture_Load(const char *filename, DWORD size=0, bool bMipmap=false) = 0;
        virtual void        CALL    Texture_Free(HTEXTURE tex) = 0;
        virtual int         CALL    Texture_GetWidth(HTEXTURE tex, bool bOriginal=false) = 0;
        virtual int         CALL    Texture_GetHeight(HTEXTURE tex, bool bOriginal=false) = 0;
        virtual DWORD*      CALL    Texture_Lock(HTEXTURE tex, bool bReadOnly=true, int left=0, int top=0, int width=0, int height=0) = 0;
        virtual void        CALL    Texture_Unlock(HTEXTURE tex) = 0;
        virtual HTARGET     CALL    Target_Create(int width, int height, bool zbuffer) = 0;
        virtual void        CALL    Target_Free(HTARGET target) = 0;
        virtual HTEXTURE    CALL    Target_GetTexture(HTARGET target) = 0;
        bool                _GfxInit();
        void                _GfxDone();
        bool                _GfxRestore();
        void                _AdjustWindow();
        void                _Resize(int width, int height);
        bool                _init_lost();
        void                _render_batch(bool bEndScene=false);
        int                 _format_id(D3DFORMAT fmt);
        void                _SetBlendMode(int blend);
        void                _SetProjectionMatrix(int width, int height);

      对外的接口中分为三个部分:DX的初始、设置;图形的纹理的加载;渲染目标的管理。

      内部的接口中实现了对DX的初始化,渲染方式等。这里原来window的接口中,放在这里是因为在dx的改变中会相应的改变窗口的设定。

      图形渲染系统是引擎中最主要的部分,在这里对外提供的功能能然该用户直接在组合这些功能之后得到自己需要的结果。而引擎要做的就是将DX的初始化,以及渲染前需要做的设定设定好。说到底,引擎要做的就是将游戏运行中的一切步骤都处理完。啊!处理完?是的,将渲染要做的都处理完。那么,引擎自然就会选择默认的参数来设定一些属性。啊咧,设定了默认属性?是的,如果要自己修改属性,那就提供接口给用户让用户自己能修改。

     


     

    Sound Module

       在这个模块中处理引擎中音频部分。

    Sound Module
        virtual HEFFECT     CALL    Effect_Load(const char *filename, DWORD size=0) = 0;
        virtual void        CALL    Effect_Free(HEFFECT eff) = 0;
        virtual HCHANNEL    CALL    Effect_Play(HEFFECT eff) = 0;
        virtual HCHANNEL    CALL    Effect_PlayEx(HEFFECT eff, int volume=100, int pan=0, float pitch=1.0f, bool loop=false) = 0;
        virtual HSTREAM     CALL    Stream_Load(const char *filename, DWORD size=0) = 0;
        virtual void        CALL    Stream_Free(HSTREAM stream) = 0;
        virtual HCHANNEL    CALL    Stream_Play(HSTREAM stream, bool loop, int volume = 100) = 0;
        virtual HMUSIC      CALL    Music_Load(const char *filename, DWORD size=0) = 0;
        virtual void        CALL    Music_Free(HMUSIC mus) = 0;
        virtual HCHANNEL    CALL    Music_Play(HMUSIC mus, bool loop, int volume = 100, int order = -1, int row = -1) = 0;
        virtual void        CALL    Music_SetAmplification(HMUSIC music, int ampl) = 0;
        virtual int         CALL    Music_GetAmplification(HMUSIC music) = 0;
        virtual int         CALL    Music_GetLength(HMUSIC music) = 0;
        virtual void        CALL    Music_SetPos(HMUSIC music, int order, int row) = 0;
        virtual bool        CALL    Music_GetPos(HMUSIC music, int *order, int *row) = 0;
        virtual void        CALL    Music_SetInstrVolume(HMUSIC music, int instr, int volume) = 0;
        virtual int         CALL    Music_GetInstrVolume(HMUSIC music, int instr) = 0;
        virtual void        CALL    Music_SetChannelVolume(HMUSIC music, int channel, int volume) = 0;
        virtual int         CALL    Music_GetChannelVolume(HMUSIC music, int channel) = 0;
        virtual void        CALL    Channel_SetPanning(HCHANNEL chn, int pan) = 0;
        virtual void        CALL    Channel_SetVolume(HCHANNEL chn, int volume) = 0;
        virtual void        CALL    Channel_SetPitch(HCHANNEL chn, float pitch) = 0;
        virtual void        CALL    Channel_Pause(HCHANNEL chn) = 0;
        virtual void        CALL    Channel_Resume(HCHANNEL chn) = 0;
        virtual void        CALL    Channel_Stop(HCHANNEL chn) = 0;
        virtual void        CALL    Channel_PauseAll() = 0;
        virtual void        CALL    Channel_ResumeAll() = 0;
        virtual void        CALL    Channel_StopAll() = 0;
        virtual bool        CALL    Channel_IsPlaying(HCHANNEL chn) = 0;
        virtual float       CALL    Channel_GetLength(HCHANNEL chn) = 0;
        virtual float       CALL    Channel_GetPos(HCHANNEL chn) = 0;
        virtual void        CALL    Channel_SetPos(HCHANNEL chn, float fSeconds) = 0;
        virtual void        CALL    Channel_SlideTo(HCHANNEL channel, float time, int volume, int pan = -101, float pitch = -1) = 0;
        virtual bool        CALL    Channel_IsSliding(HCHANNEL channel) = 0;
        bool                _SoundInit();
        void                _SoundDone();
        void                _SetMusVolume(int vol);
        void                _SetStreamVolume(int vol);
        void                _SetFXVolume(int vol);

       外部接口提供了音效、音乐、流等的音乐的处理。

      内部接口实现的真个模块的初始化;结束的清理;音量大小的设置。

     


     

     

    Others

      

      剩下的其他部分则是引擎中默默付出的部分,前面的实现其实就已经完成了对整个引擎的相关的渲染等过程。

     

      Timer
        virtual float        CALL    Timer_GetTime() = 0;
        virtual float        CALL    Timer_GetDelta() = 0;
        virtual int          CALL    Timer_GetFPS() = 0;
      Ini module
        virtual    void        CALL    Ini_SetInt(const char *section, const char *name, int value) = 0;
        virtual    int         CALL    Ini_GetInt(const char *section, const char *name, int def_val) = 0;
        virtual    void        CALL    Ini_SetFloat(const char *section, const char *name, float value) = 0;
        virtual    float       CALL    Ini_GetFloat(const char *section, const char *name, float def_val) = 0;
        virtual    void        CALL    Ini_SetString(const char *section, const char *name, const char *value) = 0;
        virtual    char*       CALL    Ini_GetString(const char *section, const char *name, const char *def_val) = 0;
      Random
        virtual void        CALL    Random_Seed(int seed=0) = 0;
        virtual int         CALL    Random_Int(int min, int max) = 0;
        virtual float       CALL    Random_Float(float min, float max) = 0;
      Paramter Setter
        inline void                    System_SetState(hgeBoolState   state, bool        value) { System_SetStateBool  (state, value); }
        inline void                    System_SetState(hgeFuncState   state, hgeCallback value) { System_SetStateFunc  (state, value); }
        inline void                    System_SetState(hgeHwndState   state, HWND        value) { System_SetStateHwnd  (state, value); }
        inline void                    System_SetState(hgeIntState    state, int         value) { System_SetStateInt   (state, value); }
        inline void                    System_SetState(hgeStringState state, const char *value) { System_SetStateString(state, value); }
        inline bool                    System_GetState(hgeBoolState   state) { return System_GetStateBool  (state); }
        inline hgeCallback             System_GetState(hgeFuncState   state) { return System_GetStateFunc  (state); }
        inline HWND                    System_GetState(hgeHwndState   state) { return System_GetStateHwnd  (state); }
        inline int                     System_GetState(hgeIntState    state) { return System_GetStateInt   (state); }
        inline const char*             System_GetState(hgeStringState state) { return System_GetStateString(state); }
      Power
        void                _InitPowerStatus();
        void                _UpdatePowerStatus();
        void                _DonePowerStatus();

     

  • 相关阅读:
    java poi 操作
    java map 根据 map的value值进行排序
    Windows navcat 连接虚拟机mysql
    如何阻止Windows广告窗口弹出
    python gitlab 学习笔记
    Java的家庭记账本程序(D)
    《程序员修炼之道:从小工到专家》的阅读笔记(二)
    Java的家庭记账本程序(C)
    Java的家庭记账本程序(B)
    Java的家庭记账本程序(A)
  • 原文地址:https://www.cnblogs.com/yoru/p/5497993.html
Copyright © 2020-2023  润新知