aboutsummaryrefslogtreecommitdiff
path: root/Src/Plugins/Visualization/vis_milk2/plugin.h
diff options
context:
space:
mode:
authorJef <jef@targetspot.com>2024-09-24 08:54:57 -0400
committerJef <jef@targetspot.com>2024-09-24 08:54:57 -0400
commit20d28e80a5c861a9d5f449ea911ab75b4f37ad0d (patch)
tree12f17f78986871dd2cfb0a56e5e93b545c1ae0d0 /Src/Plugins/Visualization/vis_milk2/plugin.h
parent537bcbc86291b32fc04ae4133ce4d7cac8ebe9a7 (diff)
downloadwinamp-20d28e80a5c861a9d5f449ea911ab75b4f37ad0d.tar.gz
Initial community commit
Diffstat (limited to 'Src/Plugins/Visualization/vis_milk2/plugin.h')
-rw-r--r--Src/Plugins/Visualization/vis_milk2/plugin.h729
1 files changed, 729 insertions, 0 deletions
diff --git a/Src/Plugins/Visualization/vis_milk2/plugin.h b/Src/Plugins/Visualization/vis_milk2/plugin.h
new file mode 100644
index 00000000..440205bb
--- /dev/null
+++ b/Src/Plugins/Visualization/vis_milk2/plugin.h
@@ -0,0 +1,729 @@
+/*
+ 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 \ No newline at end of file