123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729 |
- /*
- LICENSE
- -------
- Copyright 2005-2013 Nullsoft, Inc.
- All rights reserved.
- Redistribution and use in source and binary forms, with or without modification,
- are permitted provided that the following conditions are met:
- * Redistributions of source code must retain the above copyright notice,
- this list of conditions and the following disclaimer.
- * Redistributions in binary form must reproduce the above copyright notice,
- this list of conditions and the following disclaimer in the documentation
- and/or other materials provided with the distribution.
- * Neither the name of Nullsoft nor the names of its contributors may be used to
- endorse or promote products derived from this software without specific prior written permission.
-
- THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
- IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
- FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
- CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
- IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
- #ifndef __NULLSOFT_DX9_EXAMPLE_PLUGIN_H__
- #define __NULLSOFT_DX9_EXAMPLE_PLUGIN_H__ 1
- #include "pluginshell.h"
- #include "md_defines.h"
- #include "menu.h"
- #include "support.h"
- #include "texmgr.h"
- #include "state.h"
- #include <vector>
- #include "gstring.h"
- #include "ns-eel2/ns-eel.h"
- extern "C" int (*warand)(void);
- typedef enum { TEX_DISK, TEX_VS, TEX_BLUR0, TEX_BLUR1, TEX_BLUR2, TEX_BLUR3, TEX_BLUR4, TEX_BLUR5, TEX_BLUR6, TEX_BLUR_LAST } tex_code;
- typedef enum { UI_REGULAR, UI_MENU, UI_LOAD, UI_LOAD_DEL, UI_LOAD_RENAME, UI_SAVEAS, UI_SAVE_OVERWRITE, UI_EDIT_MENU_STRING, UI_CHANGEDIR, UI_IMPORT_WAVE, UI_EXPORT_WAVE, UI_IMPORT_SHAPE, UI_EXPORT_SHAPE, UI_UPGRADE_PIXEL_SHADER, UI_MASHUP } ui_mode;
- typedef struct { float rad; float ang; float a; float c; } td_vertinfo; // blending: mix = max(0,min(1,a*t + c));
- typedef char* CHARPTR;
- LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam);
- #define MY_FFT_SAMPLES 512 // for old [pre-vms] milkdrop sound analysis
- typedef struct
- {
- float imm[3]; // bass, mids, treble (absolute)
- float imm_rel[3]; // bass, mids, treble (relative to song; 1=avg, 0.9~below, 1.1~above)
- float avg[3]; // bass, mids, treble (absolute)
- float avg_rel[3]; // bass, mids, treble (relative to song; 1=avg, 0.9~below, 1.1~above)
- float long_avg[3]; // bass, mids, treble (absolute)
- float fWave[2][576];
- float fSpecLeft[MY_FFT_SAMPLES];
- } td_mysounddata;
- typedef struct
- {
- int bActive;
- int bFilterBadChars; // if true, it will filter out any characters that don't belong in a filename, plus the & symbol (because it doesn't display properly with DrawText)
- int bDisplayAsCode; // if true, semicolons will be followed by a newline, for display
- int nMaxLen; // can't be more than 511
- int nCursorPos;
- int nSelAnchorPos; // -1 if no selection made
- int bOvertypeMode;
- wchar_t szText[48000];
- wchar_t szPrompt[512];
- wchar_t szToolTip[512];
- char szClipboard[48000];
- wchar_t szClipboardW[48000];
- } td_waitstr;
- typedef struct
- {
- int bBold;
- int bItal;
- wchar_t szFace[128];
- int nColorR; // 0..255
- int nColorG; // 0..255
- int nColorB; // 0..255
- }
- td_custom_msg_font;
- enum
- {
- MD2_PS_NONE = 0,
- MD2_PS_2_0 = 2,
- MD2_PS_2_X = 3,
- MD2_PS_3_0 = 4,
- MD2_PS_4_0 = 5, // not supported by milkdrop
- };
- /*
- typedef struct
- {
- char szFace[256];
- int nSize;
- int bBold;
- int bItalic;
- } td_titlefontinfo;*/
- typedef struct
- {
- int nFont;
- float fSize; // 0..100
- float x;
- float y;
- float randx;
- float randy;
- float growth;
- float fTime; // total time to display the message, in seconds
- float fFade; // % (0..1) of the time that is spent fading in
-
- // overrides
- int bOverrideBold;
- int bOverrideItal;
- int bOverrideFace;
- int bOverrideColorR;
- int bOverrideColorG;
- int bOverrideColorB;
- int nColorR; // 0..255
- int nColorG; // 0..255
- int nColorB; // 0..255
- int nRandR;
- int nRandG;
- int nRandB;
- int bBold;
- int bItal;
- wchar_t szFace[128];
- wchar_t szText[256];
- }
- td_custom_msg;
- typedef struct
- {
- int bRedrawSuperText; // true if it needs redraw
- int bIsSongTitle; // false for custom message, true for song title
- //char szText[256];
- wchar_t szTextW[256];
- wchar_t nFontFace[128];
- int bBold;
- int bItal;
- float fX;
- float fY;
- float fFontSize; // [0..100] for custom messages, [0..4] for song titles
- float fGrowth; // applies to custom messages only
- int nFontSizeUsed; // height IN PIXELS
- float fStartTime;
- float fDuration;
- float fFadeTime; // applies to custom messages only; song title fade times are handled specially
- int nColorR;
- int nColorG;
- int nColorB;
- }
- td_supertext;
- typedef struct
- {
- wchar_t texname[256]; // ~filename, but without path or extension!
- LPDIRECT3DBASETEXTURE9 texptr;
- int w,h,d;
- //D3DXHANDLE texsize_param;
- bool bEvictable;
- int nAge; // only valid if bEvictable is true
- int nSizeInBytes; // only valid if bEvictable is true
- } TexInfo;
- typedef struct
- {
- GString texname; // just for ref
- D3DXHANDLE texsize_param;
- int w,h;
- } TexSizeParamInfo;
- typedef struct
- {
- LPDIRECT3DBASETEXTURE9 texptr;
- bool bBilinear;
- bool bWrap;
- } SamplerInfo;
- typedef struct
- {
- GString msg;
- bool bBold; // true == red bkg; false == black bkg
- float birthTime;
- float expireTime;
- int category;
- } ErrorMsg;
- typedef std::vector<ErrorMsg> ErrorMsgList;
- typedef std::vector<CShaderParams*> CShaderParamsList;
- class CShaderParams
- {
- public:
- // float4 handles:
- D3DXHANDLE rand_frame ;
- D3DXHANDLE rand_preset;
- D3DXHANDLE const_handles[24];
- D3DXHANDLE q_const_handles[(NUM_Q_VAR+3)/4];
- D3DXHANDLE rot_mat[24];
-
- typedef std::vector<TexSizeParamInfo> TexSizeParamInfoList;
- TexSizeParamInfoList texsize_params;
-
- // sampler stages for various PS texture bindings:
- //int texbind_vs;
- //int texbind_disk[32];
- //int texbind_voronoi;
- //...
- SamplerInfo m_texture_bindings[16]; // an entry for each sampler slot. These are ALIASES - DO NOT DELETE.
- tex_code m_texcode[16]; // if ==TEX_VS, forget the pointer - texture bound @ that stage is the double-buffered VS.
- void Clear();
- void CacheParams(LPD3DXCONSTANTTABLE pCT, bool bHardErrors);
- void OnTextureEvict(LPDIRECT3DBASETEXTURE9 texptr);
- CShaderParams();
- ~CShaderParams();
- };
- class VShaderInfo
- {
- public:
- IDirect3DVertexShader9* ptr;
- LPD3DXCONSTANTTABLE CT;
- CShaderParams params;
- VShaderInfo() { ptr=NULL; CT=NULL; params.Clear(); }
- ~VShaderInfo() { Clear(); }
- void Clear();
- };
- class PShaderInfo
- {
- public:
- IDirect3DPixelShader9* ptr;
- LPD3DXCONSTANTTABLE CT;
- CShaderParams params;
- PShaderInfo() { ptr=NULL; CT=NULL; params.Clear(); }
- ~PShaderInfo() { Clear(); }
- void Clear();
- };
- typedef struct
- {
- VShaderInfo vs;
- PShaderInfo ps;
- } ShaderPairInfo;
- typedef struct
- {
- PShaderInfo warp;
- PShaderInfo comp;
- } PShaderSet;
- typedef struct
- {
- VShaderInfo warp;
- VShaderInfo comp;
- } VShaderSet;
- /*
- typedef struct
- {
- void* ptr; // to IDirect3DPixelShader9 or IDirect3DVertexShader9
- LPD3DXCONSTANTTABLE CT;
- CShaderParams params;
- } ShaderInfo;
- typedef struct
- {
- ShaderInfo warp;
- ShaderInfo comp;
- } ShaderSet;
- */
- typedef struct
- {
- GString szFilename; // without path
- float fRatingThis;
- float fRatingCum;
- } PresetInfo;
- typedef std::vector<PresetInfo> PresetList;
- class CPlugin : public CPluginShell
- {
- public:
-
- //====[ 1. members added to create this specific example plugin: ]================================================
- /// CONFIG PANEL SETTINGS THAT WE'VE ADDED (TAB #2)
- bool m_bFirstRun;
- float m_fBlendTimeAuto; // blend time when preset auto-switches
- float m_fBlendTimeUser; // blend time when user loads a new preset
- float m_fTimeBetweenPresets; // <- this is in addition to m_fBlendTimeAuto
- float m_fTimeBetweenPresetsRand; // <- this is in addition to m_fTimeBetweenPresets
- bool m_bSequentialPresetOrder;
- bool m_bHardCutsDisabled;
- float m_fHardCutLoudnessThresh;
- float m_fHardCutHalflife;
- float m_fHardCutThresh;
- //int m_nWidth;
- //int m_nHeight;
- //int m_nDispBits;
- int m_nCanvasStretch; // 0=Auto, 100=None, 125 = 1.25X, 133, 150, 167, 200, 300, 400 (4X).
- int m_nTexSizeX; // -1 = exact match to screen; -2 = nearest power of 2.
- int m_nTexSizeY;
- float m_fAspectX;
- float m_fAspectY;
- float m_fInvAspectX;
- float m_fInvAspectY;
- int m_nTexBitsPerCh;
- int m_nGridX;
- int m_nGridY;
- bool m_bShowPressF1ForHelp;
- //char m_szMonitorName[256];
- bool m_bShowMenuToolTips;
- int m_n16BitGamma;
- bool m_bAutoGamma;
- //int m_nFpsLimit;
- //int m_cLeftEye3DColor[3];
- //int m_cRightEye3DColor[3];
- bool m_bEnableRating;
- //bool m_bInstaScan;
- bool m_bSongTitleAnims;
- float m_fSongTitleAnimDuration;
- float m_fTimeBetweenRandomSongTitles;
- float m_fTimeBetweenRandomCustomMsgs;
- int m_nSongTitlesSpawned;
- int m_nCustMsgsSpawned;
- //bool m_bAlways3D;
- //float m_fStereoSep;
- //bool m_bAlwaysOnTop;
- //bool m_bFixSlowText;
- //bool m_bWarningsDisabled; // messageboxes
- bool m_bWarningsDisabled2; // warnings/errors in upper-right corner (m_szUserMessage)
- //bool m_bAnisotropicFiltering;
- bool m_bPresetLockOnAtStartup;
- bool m_bPreventScollLockHandling;
- int m_nMaxPSVersion_ConfigPanel; // -1 = auto, 0 = disable shaders, 2 = ps_2_0, 3 = ps_3_0
- int m_nMaxPSVersion_DX9; // 0 = no shader support, 2 = ps_2_0, 3 = ps_3_0
- int m_nMaxPSVersion; // this one will be the ~min of the other two. 0/2/3.
- int m_nMaxImages;
- int m_nMaxBytes;
- /*
- char m_szFontFace[NUM_FONTS][128];
- int m_nFontSize[NUM_FONTS];
- bool m_bFontBold[NUM_FONTS];
- bool m_bFontItalic[NUM_FONTS];
- char m_szTitleFontFace[128];
- int m_nTitleFontSize; // percentage of screen width (0..100)
- bool m_bTitleFontBold;
- bool m_bTitleFontItalic;
- */
- HFONT m_gdi_title_font_doublesize;
- LPD3DXFONT m_d3dx_title_font_doublesize;
- // PIXEL SHADERS
- DWORD m_dwShaderFlags; // Shader compilation/linking flags
- //ID3DXFragmentLinker* m_pFragmentLinker; // Fragment linker interface
- //LPD3DXBUFFER m_pCompiledFragments; // Buffer containing compiled fragments
- LPD3DXBUFFER m_pShaderCompileErrors;
- VShaderSet m_fallbackShaders_vs; // *these are the only vertex shaders used for the whole app.*
- PShaderSet m_fallbackShaders_ps; // these are just used when the preset's pixel shaders fail to compile.
- PShaderSet m_shaders; // includes shader pointers and constant tables for warp & comp shaders, for cur. preset
- PShaderSet m_OldShaders; // includes shader pointers and constant tables for warp & comp shaders, for prev. preset
- PShaderSet m_NewShaders; // includes shader pointers and constant tables for warp & comp shaders, for coming preset
- ShaderPairInfo m_BlurShaders[2];
- bool m_bWarpShaderLock;
- bool m_bCompShaderLock;
- //bool LoadShaderFromFile( char* szFile, char* szFn, char* szProfile,
- // LPD3DXCONSTANTTABLE* ppConstTable, void** ppShader );
- #define SHADER_WARP 0
- #define SHADER_COMP 1
- #define SHADER_BLUR 2
- #define SHADER_OTHER 3
- bool LoadShaderFromMemory( const char* szShaderText, char* szFn, char* szProfile,
- LPD3DXCONSTANTTABLE* ppConstTable, void** ppShader, int shaderType, bool bHardErrors );
- bool RecompileVShader(const char* szShadersText, VShaderInfo *si, int shaderType, bool bHardErrors);
- bool RecompilePShader(const char* szShadersText, PShaderInfo *si, int shaderType, bool bHardErrors, int PSVersion);
- bool EvictSomeTexture();
- typedef std::vector<TexInfo> TexInfoList;
- TexInfoList m_textures;
- bool m_bNeedRescanTexturesDir;
- // vertex declarations:
- IDirect3DVertexDeclaration9* m_pSpriteVertDecl;
- IDirect3DVertexDeclaration9* m_pWfVertDecl;
- IDirect3DVertexDeclaration9* m_pMyVertDecl;
- D3DXVECTOR4 m_rand_frame; // 4 random floats (0..1); randomized once per frame; fed to pixel shaders.
- // RUNTIME SETTINGS THAT WE'VE ADDED
- float m_prev_time;
- bool m_bTexSizeWasAutoPow2;
- bool m_bTexSizeWasAutoExact;
- bool m_bPresetLockedByUser;
- bool m_bPresetLockedByCode;
- float m_fAnimTime;
- float m_fStartTime;
- float m_fPresetStartTime;
- float m_fNextPresetTime;
- float m_fSnapPoint;
- CState *m_pState; // points to current CState
- CState *m_pOldState; // points to previous CState
- CState *m_pNewState; // points to the coming CState - we're not yet blending to it b/c we're still compiling the shaders for it!
- int m_nLoadingPreset;
- wchar_t m_szLoadingPreset[MAX_PATH];
- float m_fLoadingPresetBlendTime;
- int m_nPresetsLoadedTotal; //important for texture eviction age-tracking...
- CState m_state_DO_NOT_USE[3]; // do not use; use pState and pOldState instead.
- ui_mode m_UI_mode; // can be UI_REGULAR, UI_LOAD, UI_SAVEHOW, or UI_SAVEAS
- #define MASH_SLOTS 5
- #define MASH_APPLY_DELAY_FRAMES 1
- int m_nMashSlot; //0..MASH_SLOTS-1
- //char m_szMashDir[MASH_SLOTS][MAX_PATH];
- int m_nMashPreset[MASH_SLOTS];
- int m_nLastMashChangeFrame[MASH_SLOTS];
- //td_playlist_entry *m_szPlaylist; // array of 128-char strings
- //int m_nPlaylistCurPos;
- //int m_nPlaylistLength;
- //int m_nTrackPlaying;
- //int m_nSongPosMS;
- //int m_nSongLenMS;
- bool m_bUserPagedUp;
- bool m_bUserPagedDown;
- float m_fMotionVectorsTempDx;
- float m_fMotionVectorsTempDy;
- td_waitstr m_waitstring;
- void WaitString_NukeSelection();
- void WaitString_Cut();
- void WaitString_Copy();
- void WaitString_Paste();
- void WaitString_SeekLeftWord();
- void WaitString_SeekRightWord();
- int WaitString_GetCursorColumn();
- int WaitString_GetLineLength();
- void WaitString_SeekUpOneLine();
- void WaitString_SeekDownOneLine();
- int m_nPresets; // the # of entries in the file listing. Includes directories and then files, sorted alphabetically.
- int m_nDirs; // the # of presets that are actually directories. Always between 0 and m_nPresets.
- int m_nPresetListCurPos;// Index of the currently-HIGHLIGHTED preset (the user must press Enter on it to select it).
- int m_nCurrentPreset; // Index of the currently-RUNNING preset.
- // Note that this is NOT the same as the currently-highlighted preset! (that's m_nPresetListCurPos)
- // Be careful - this can be -1 if the user changed dir. & a new preset hasn't been loaded yet.
- wchar_t m_szCurrentPresetFile[512]; // w/o path. this is always valid (unless no presets were found)
- PresetList m_presets;
- void UpdatePresetList(bool bBackground=false, bool bForce=false, bool bTryReselectCurrentPreset=true);
- wchar_t m_szUpdatePresetMask[MAX_PATH];
- bool m_bPresetListReady;
- //void UpdatePresetRatings();
- //int m_nRatingReadProgress; // equals 'm_nPresets' if all ratings are read in & ready to go; -1 if uninitialized; otherwise, it's still reading them in, and range is: [0 .. m_nPresets-1]
- bool m_bInitialPresetSelected;
- // PRESET HISTORY
- #define PRESET_HIST_LEN (64+2) // make this 2 more than the # you REALLY want to be able to go back.
- GString m_presetHistory[PRESET_HIST_LEN]; //circular
- int m_presetHistoryPos;
- int m_presetHistoryBackFence;
- int m_presetHistoryFwdFence;
- void PrevPreset(float fBlendTime);
- void NextPreset(float fBlendTime); // if not retracing our former steps, it will choose a random one.
- void OnFinishedLoadingPreset();
- FFT myfft;
- td_mysounddata mysound;
-
- // stuff for displaying text to user:
- //int m_nTextHeightPixels; // this is for the menu/detail font; NOT the "fancy font"
- //int m_nTextHeightPixels_Fancy;
- bool m_bShowFPS;
- bool m_bShowRating;
- bool m_bShowPresetInfo;
- bool m_bShowDebugInfo;
- bool m_bShowSongTitle;
- bool m_bShowSongTime;
- bool m_bShowSongLen;
- float m_fShowRatingUntilThisTime;
- //float m_fShowUserMessageUntilThisTime;
- //char m_szUserMessage[512];
- //bool m_bUserMessageIsError;
-
- #define ERR_ALL 0
- #define ERR_INIT 1 //specifically, loading a preset
- #define ERR_PRESET 2 //specifically, loading a preset
- #define ERR_MISC 3
- #define ERR_NOTIFY 4 // a simple notification - not an error at all. ("shuffle is now ON." etc.)
- // NOTE: each NOTIFY msg clears all the old NOTIFY messages!
- #define ERR_SCANNING_PRESETS 5
- ErrorMsgList m_errors;
- void AddError(wchar_t* szMsg, float fDuration, int category=ERR_ALL, bool bBold=true);
- void ClearErrors(int category=ERR_ALL); // 0=all categories
-
- char m_szDebugMessage[512];
- wchar_t m_szSongTitle [512];
- wchar_t m_szSongTitlePrev[512];
- //HFONT m_hfont[3]; // 0=fancy font (for song titles, preset name)
- // 1=legible font (the main font)
- // 2=tooltip font (for tooltips in the menu system)
- //HFONT m_htitlefont[NUM_TITLE_FONTS]; // ~25 different sizes
- // stuff for menu system:
- CMilkMenu *m_pCurMenu; // should always be valid!
- CMilkMenu m_menuPreset;
- CMilkMenu m_menuWave;
- CMilkMenu m_menuAugment;
- CMilkMenu m_menuCustomWave;
- CMilkMenu m_menuCustomShape;
- CMilkMenu m_menuMotion;
- CMilkMenu m_menuPost;
- CMilkMenu m_menuWavecode[MAX_CUSTOM_WAVES];
- CMilkMenu m_menuShapecode[MAX_CUSTOM_SHAPES];
- bool m_bShowShaderHelp;
- wchar_t m_szMilkdrop2Path[MAX_PATH]; // ends in a backslash
- wchar_t m_szMsgIniFile[MAX_PATH];
- wchar_t m_szImgIniFile[MAX_PATH];
- wchar_t m_szPresetDir[MAX_PATH];
- float m_fRandStart[4];
- // DIRECTX 9:
- IDirect3DTexture9 *m_lpVS[2];
- #define NUM_BLUR_TEX 6
- #if (NUM_BLUR_TEX>0)
- IDirect3DTexture9 *m_lpBlur[NUM_BLUR_TEX]; // each is successively 1/2 size of prev.
- int m_nBlurTexW[NUM_BLUR_TEX];
- int m_nBlurTexH[NUM_BLUR_TEX];
- #endif
- int m_nHighestBlurTexUsedThisFrame;
- IDirect3DTexture9 *m_lpDDSTitle; // CAREFUL: MIGHT BE NULL (if not enough mem)!
- int m_nTitleTexSizeX, m_nTitleTexSizeY;
- MYVERTEX *m_verts;
- MYVERTEX *m_verts_temp;
- td_vertinfo *m_vertinfo;
- int *m_indices_strip;
- int *m_indices_list;
- // for final composite grid:
- #define FCGSX 32 // final composite gridsize - # verts - should be EVEN.
- #define FCGSY 24 // final composite gridsize - # verts - should be EVEN.
- // # of grid *cells* is two less,
- // since we have redundant verts along the center line in X and Y (...for clean 'ang' interp)
- MYVERTEX m_comp_verts[FCGSX*FCGSY];
- int m_comp_indices[(FCGSX-2)*(FCGSY-2)*2*3];
- bool m_bMMX;
- //bool m_bSSE;
- bool m_bHasFocus;
- bool m_bHadFocus;
- bool m_bOrigScrollLockState;
- //bool m_bMilkdropScrollLockState; // saved when focus is lost; restored when focus is regained
- int m_nNumericInputMode; // NUMERIC_INPUT_MODE_CUST_MSG, NUMERIC_INPUT_MODE_SPRITE
- int m_nNumericInputNum;
- int m_nNumericInputDigits;
- td_custom_msg_font m_CustomMessageFont[MAX_CUSTOM_MESSAGE_FONTS];
- td_custom_msg m_CustomMessage[MAX_CUSTOM_MESSAGES];
- texmgr m_texmgr; // for user sprites
- td_supertext m_supertext; // **contains info about current Song Title or Custom Message.**
- IDirect3DTexture9 *m_tracer_tex;
- int m_nFramesSinceResize;
- char m_szShaderIncludeText[32768]; // note: this still has char 13's and 10's in it - it's never edited on screen or loaded/saved with a preset.
- int m_nShaderIncludeTextLen; // # of chars, not including the final NULL.
- char m_szDefaultWarpVShaderText[32768]; // THIS HAS CHAR 13/10 CONVERTED TO LINEFEED_CONTROL_CHAR
- char m_szDefaultWarpPShaderText[32768]; // THIS HAS CHAR 13/10 CONVERTED TO LINEFEED_CONTROL_CHAR
- char m_szDefaultCompVShaderText[32768]; // THIS HAS CHAR 13/10 CONVERTED TO LINEFEED_CONTROL_CHAR
- char m_szDefaultCompPShaderText[32768]; // THIS HAS CHAR 13/10 CONVERTED TO LINEFEED_CONTROL_CHAR
- char m_szBlurVS[32768];
- char m_szBlurPSX[32768];
- char m_szBlurPSY[32768];
- //const char* GetDefaultWarpShadersText() { return m_szDefaultWarpShaderText; }
- //const char* GetDefaultCompShadersText() { return m_szDefaultCompShaderText; }
- void GenWarpPShaderText(char *szShaderText, float decay, bool bWrap);
- void GenCompPShaderText(char *szShaderText, float brightness, float ve_alpha, float ve_zoom, int ve_orient, float hue_shader, bool bBrighten, bool bDarken, bool bSolarize, bool bInvert);
- //====[ 2. methods added: ]=====================================================================================
-
- void RefreshTab2(HWND hwnd);
- void RenderFrame(int bRedraw);
- void AlignWave(int nSamples);
- void DrawTooltip(wchar_t* str, int xR, int yB);
- void RandomizeBlendPattern();
- void GenPlasma(int x0, int x1, int y0, int y1, float dt);
- void LoadPerFrameEvallibVars(CState* pState);
- void LoadCustomWavePerFrameEvallibVars(CState* pState, int i);
- void LoadCustomShapePerFrameEvallibVars(CState* pState, int i, int instance);
- void WriteRealtimeConfig(); // called on Finish()
- void dumpmsg(wchar_t *s);
- void Randomize();
- void LoadRandomPreset(float fBlendTime);
- void LoadPreset(const wchar_t *szPresetFilename, float fBlendTime);
- void LoadPresetTick();
- void FindValidPresetDir();
- //char* GetConfigIniFile() { return m_szConfigIniFile; };
- wchar_t* GetMsgIniFile() { return m_szMsgIniFile; };
- wchar_t* GetPresetDir() { return m_szPresetDir; };
- void SavePresetAs(wchar_t *szNewFile); // overwrites the file if it was already there.
- void DeletePresetFile(wchar_t *szDelFile);
- void RenamePresetFile(wchar_t *szOldFile, wchar_t *szNewFile);
- void SetCurrentPresetRating(float fNewRating);
- void SeekToPreset(wchar_t cStartChar);
- bool ReversePropagatePoint(float fx, float fy, float *fx2, float *fy2);
- int HandleRegularKey(WPARAM wParam);
- bool OnResizeGraphicsWindow();
- bool OnResizeTextWindow();
- //bool InitFont();
- //void ToggleControlWindow(); // for Desktop Mode only
- //void DrawUI();
- void ClearGraphicsWindow(); // for windowed mode only
- //bool Update_Overlay();
- //void UpdatePlaylist();
- void LaunchCustomMessage(int nMsgNum);
- void ReadCustomMessages();
- void LaunchSongTitleAnim();
- bool RenderStringToTitleTexture();
- void ShowSongTitleAnim(/*IDirect3DTexture9* lpRenderTarget,*/ int w, int h, float fProgress);
- void DrawWave(float *fL, float *fR);
- void DrawCustomWaves();
- void DrawCustomShapes();
- void DrawSprites();
- void ComputeGridAlphaValues();
- //void WarpedBlit();
- // note: 'bFlipAlpha' just flips the alpha blending in fixed-fn pipeline - not the values for culling tiles.
- void WarpedBlit_Shaders (int nPass, bool bAlphaBlend, bool bFlipAlpha, bool bCullTiles, bool bFlipCulling);
- void WarpedBlit_NoShaders(int nPass, bool bAlphaBlend, bool bFlipAlpha, bool bCullTiles, bool bFlipCulling);
- void ShowToUser_Shaders (int nPass, bool bAlphaBlend, bool bFlipAlpha, bool bCullTiles, bool bFlipCulling);
- void ShowToUser_NoShaders();
- void BlurPasses();
- void GetSafeBlurMinMax(CState* pState, float* blur_min, float* blur_max);
- void RunPerFrameEquations(int code);
- void DrawUserSprites();
- void MergeSortPresets(int left, int right);
- void BuildMenus();
- void SetMenusForPresetVersion(int WarpPSVersion, int CompPSVersion);
- //void ResetWindowSizeOnDisk();
- bool LaunchSprite(int nSpriteNum, int nSlot);
- void KillSprite(int iSlot);
- void DoCustomSoundAnalysis();
- void DrawMotionVectors();
-
- bool LoadShaders(PShaderSet* sh, CState* pState, bool bTick);
- void UvToMathSpace(float u, float v, float* rad, float* ang);
- void ApplyShaderParams(CShaderParams* p, LPD3DXCONSTANTTABLE pCT, CState* pState);
- void RestoreShaderParams();
- bool AddNoiseTex(const wchar_t* szTexName, int size, int zoom_factor);
- bool AddNoiseVol(const wchar_t* szTexName, int size, int zoom_factor);
- //====[ 3. virtual functions: ]===========================================================================
- virtual void OverrideDefaults();
- virtual void MyPreInitialize();
- virtual void MyReadConfig();
- virtual void MyWriteConfig();
- virtual int AllocateMyNonDx9Stuff();
- virtual void CleanUpMyNonDx9Stuff();
- virtual int AllocateMyDX9Stuff();
- virtual void CleanUpMyDX9Stuff(int final_cleanup);
- virtual void MyRenderFn(int redraw);
- virtual void MyRenderUI(int *upper_left_corner_y, int *upper_right_corner_y, int *lower_left_corner_y, int *lower_right_corner_y, int xL, int xR);
- virtual LRESULT MyWindowProc(HWND hWnd, unsigned uMsg, WPARAM wParam, LPARAM lParam);
- virtual BOOL MyConfigTabProc(int nPage, HWND hwnd,UINT msg,WPARAM wParam,LPARAM lParam);
- virtual void OnAltK();
- //====[ 4. methods from base class: ]===========================================================================
- /*
- // 'GET' METHODS
- // ------------------------------------------------------------
- int GetFrame(); // returns current frame # (starts at zero)
- float GetTime(); // returns current animation time (in seconds) (starts at zero) (updated once per frame)
- float GetFps(); // returns current estimate of framerate (frames per second)
- eScrMode GetScreenMode(); // returns WINDOWED, FULLSCREEN, FAKE_FULLSCREEN, or NOT_YET_KNOWN (if called before or during OverrideDefaults()).
- HWND GetWinampWindow(); // returns handle to Winamp main window
- HINSTANCE GetInstance(); // returns handle to the plugin DLL module; used for things like loading resources (dialogs, bitmaps, icons...) that are built into the plugin.
- char* GetPluginsDirPath(); // usually returns 'c:\\program files\\winamp\\plugins\\'
- char* GetConfigIniFile(); // usually returns 'c:\\program files\\winamp\\plugins\\something.ini' - filename is determined from identifiers in 'defines.h'
- // GET METHODS THAT ONLY WORK ONCE DIRECTX IS READY
- // ------------------------------------------------------------
- // The following 'Get' methods are only available after DirectX has been initialized.
- // If you call these from OverrideDefaults, MyPreInitialize, or MyReadConfig,
- // they will fail and return NULL (zero).
- // ------------------------------------------------------------
- HWND GetPluginWindow(); // returns handle to the plugin window. NOT persistent; can change.
- int GetWidth(); // returns width of plugin window interior, in pixels.
- int GetHeight(); // returns height of plugin window interior, in pixels.
- D3DFORMAT GetBackBufFormat(); // returns the pixelformat of the back buffer (probably D3DFMT_R8G8B8, D3DFMT_A8R8G8B8, D3DFMT_X8R8G8B8, D3DFMT_R5G6B5, D3DFMT_X1R5G5B5, D3DFMT_A1R5G5B5, D3DFMT_A4R4G4B4, D3DFMT_R3G3B2, D3DFMT_A8R3G3B2, D3DFMT_X4R4G4B4, or D3DFMT_UNKNOWN)
- D3DFORMAT GetBackBufZFormat(); // returns the pixelformat of the back buffer's Z buffer (probably D3DFMT_D16_LOCKABLE, D3DFMT_D32, D3DFMT_D15S1, D3DFMT_D24S8, D3DFMT_D16, D3DFMT_D24X8, D3DFMT_D24X4S4, or D3DFMT_UNKNOWN)
- D3DCAPS8* GetCaps(); // returns a pointer to the D3DCAPS8 structer for the device. NOT persistent; can change.
- LPDIRECT3DDEVICE8 GetDevice(); // returns a pointer to the DirectX 8 Device. NOT persistent; can change.
- // FONTS & TEXT
- // ------------------------------------------------------------
- LPD3DXFONT GetFont(eFontIndex idx); // returns a handle to a D3DX font you can use to draw text on the screen
- int GetFontHeight(eFontIndex idx); // returns the height of the font, in pixels
- // MISC
- // ------------------------------------------------------------
- td_soundinfo m_sound; // a structure always containing the most recent sound analysis information; defined in pluginshell.h.
- void SuggestHowToFreeSomeMem(); // gives the user a 'smart' messagebox that suggests how they can free up some video memory.
- */
- //=====================================================================================================================
- };
- #endif
|