aboutsummaryrefslogtreecommitdiffstats
path: root/Game/Code/lib/projectM
diff options
context:
space:
mode:
authortobigun <tobigun@b956fd51-792f-4845-bead-9b4dfca2ff2c>2007-12-17 16:39:13 +0000
committertobigun <tobigun@b956fd51-792f-4845-bead-9b4dfca2ff2c>2007-12-17 16:39:13 +0000
commit69182994753c4dd7f16ba7f6ac2e406a2d71d3a6 (patch)
tree503b77cbdcb171c264a9db048f55e5767d871372 /Game/Code/lib/projectM
parent29214cceb54e4683811186e1280a53509f2e888a (diff)
downloadusdx-69182994753c4dd7f16ba7f6ac2e406a2d71d3a6.tar.gz
usdx-69182994753c4dd7f16ba7f6ac2e406a2d71d3a6.tar.xz
usdx-69182994753c4dd7f16ba7f6ac2e406a2d71d3a6.zip
added version 1.0 for testing
git-svn-id: svn://svn.code.sf.net/p/ultrastardx/svn/trunk@714 b956fd51-792f-4845-bead-9b4dfca2ff2c
Diffstat (limited to 'Game/Code/lib/projectM')
-rw-r--r--Game/Code/lib/projectM/0.9/projectM.pas590
-rw-r--r--Game/Code/lib/projectM/1.0/projectM.pas336
-rw-r--r--Game/Code/lib/projectM/projectM.pas381
3 files changed, 926 insertions, 381 deletions
diff --git a/Game/Code/lib/projectM/0.9/projectM.pas b/Game/Code/lib/projectM/0.9/projectM.pas
new file mode 100644
index 00000000..511e1744
--- /dev/null
+++ b/Game/Code/lib/projectM/0.9/projectM.pas
@@ -0,0 +1,590 @@
+unit projectM;
+
+{$IFDEF FPC}
+ {$IFNDEF win32}
+ {$LINKLIB libprojectM}
+ {$ENDIF}
+ {$MODE DELPHI}
+ {$PACKENUM 4}
+ {$PACKRECORDS C}
+{$ENDIF}
+
+interface
+
+uses
+ SysUtils;
+
+const
+{$IFDEF win32}
+ libprojectM = 'libprojectM.dll';
+{$ELSE}
+ libprojectM = 'libprojectM.so';
+{$ENDIF}
+
+const
+ PROJECTM_VERSION = '0.99';
+ PROJECTM_TITLE = 'projectM 0.99';
+
+type
+ // 16bit non-interleaved data
+ TPCM16 = array[0..1, 0..511] of Smallint;
+ PPCM16 = ^TPCM16;
+ // 8bit non-interleaved data
+ TPCM8_512 = array[0..1, 0..511] of byte;
+ PPCM8_512 = ^TPCM8_512;
+
+{ Event types }
+type
+ TProjectMEvent = integer;
+const
+ PROJECTM_KEYUP = 0;
+ PROJECTM_KEYDOWN = 1;
+ PROJECTM_VIDEORESIZE = 2;
+ PROJECTM_VIDEOQUIT = 3;
+ PROJECTM_NONE = 4;
+
+{ Keycodes }
+type
+ TProjectMKeycode = integer;
+const
+ PROJECTM_K_RETURN = 0;
+ PROJECTM_K_RIGHT = 1;
+ PROJECTM_K_LEFT = 2;
+ PROJECTM_K_UP = 3;
+ PROJECTM_K_DOWN = 4;
+ PROJECTM_K_PAGEUP = 5;
+ PROJECTM_K_PAGEDOWN = 6;
+ PROJECTM_K_INSERT = 7;
+ PROJECTM_K_DELETE = 8;
+ PROJECTM_K_ESCAPE = 9;
+ PROJECTM_K_LSHIFT = 10;
+ PROJECTM_K_RSHIFT = 11;
+ PROJECTM_K_CAPSLOCK = 12;
+ PROJECTM_K_LCTRL = 13;
+ PROJECTM_K_HOME = 14;
+ PROJECTM_K_END = 15;
+ PROJECTM_K_BACKSPACE = 16;
+
+ PROJECTM_K_F1 = 17;
+ PROJECTM_K_F2 = (PROJECTM_K_F1 + 1);
+ PROJECTM_K_F3 = (PROJECTM_K_F1 + 2);
+ PROJECTM_K_F4 = (PROJECTM_K_F1 + 3);
+ PROJECTM_K_F5 = (PROJECTM_K_F1 + 4);
+ PROJECTM_K_F6 = (PROJECTM_K_F1 + 5);
+ PROJECTM_K_F7 = (PROJECTM_K_F1 + 6);
+ PROJECTM_K_F8 = (PROJECTM_K_F1 + 7);
+ PROJECTM_K_F9 = (PROJECTM_K_F1 + 8);
+ PROJECTM_K_F10 = (PROJECTM_K_F1 + 9);
+ PROJECTM_K_F11 = (PROJECTM_K_F1 + 10);
+ PROJECTM_K_F12 = (PROJECTM_K_F1 + 11);
+
+ PROJECTM_K_0 = 48;
+ PROJECTM_K_1 = (PROJECTM_K_0 + 1);
+ PROJECTM_K_2 = (PROJECTM_K_0 + 2);
+ PROJECTM_K_3 = (PROJECTM_K_0 + 3);
+ PROJECTM_K_4 = (PROJECTM_K_0 + 4);
+ PROJECTM_K_5 = (PROJECTM_K_0 + 5);
+ PROJECTM_K_6 = (PROJECTM_K_0 + 6);
+ PROJECTM_K_7 = (PROJECTM_K_0 + 7);
+ PROJECTM_K_8 = (PROJECTM_K_0 + 8);
+ PROJECTM_K_9 = (PROJECTM_K_0 + 9);
+
+ { Upper case }
+ PROJECTM_K_A_UPPERCASE = 65;
+ PROJECTM_K_B_UPPERCASE = (PROJECTM_K_A_UPPERCASE + 1);
+ PROJECTM_K_C_UPPERCASE = (PROJECTM_K_A_UPPERCASE + 2);
+ PROJECTM_K_D_UPPERCASE = (PROJECTM_K_A_UPPERCASE + 3);
+ PROJECTM_K_E_UPPERCASE = (PROJECTM_K_A_UPPERCASE + 4);
+ PROJECTM_K_F_UPPERCASE = (PROJECTM_K_A_UPPERCASE + 5);
+ PROJECTM_K_G_UPPERCASE = (PROJECTM_K_A_UPPERCASE + 6);
+ PROJECTM_K_H_UPPERCASE = (PROJECTM_K_A_UPPERCASE + 7);
+ PROJECTM_K_I_UPPERCASE = (PROJECTM_K_A_UPPERCASE + 8);
+ PROJECTM_K_J_UPPERCASE = (PROJECTM_K_A_UPPERCASE + 9);
+ PROJECTM_K_K_UPPERCASE = (PROJECTM_K_A_UPPERCASE + 10);
+ PROJECTM_K_L_UPPERCASE = (PROJECTM_K_A_UPPERCASE + 11);
+ PROJECTM_K_M_UPPERCASE = (PROJECTM_K_A_UPPERCASE + 12);
+ PROJECTM_K_N_UPPERCASE = (PROJECTM_K_A_UPPERCASE + 13);
+ PROJECTM_K_O_UPPERCASE = (PROJECTM_K_A_UPPERCASE + 14);
+ PROJECTM_K_P_UPPERCASE = (PROJECTM_K_A_UPPERCASE + 15);
+ PROJECTM_K_Q_UPPERCASE = (PROJECTM_K_A_UPPERCASE + 16);
+ PROJECTM_K_R_UPPERCASE = (PROJECTM_K_A_UPPERCASE + 17);
+ PROJECTM_K_S_UPPERCASE = (PROJECTM_K_A_UPPERCASE + 18);
+ PROJECTM_K_T_UPPERCASE = (PROJECTM_K_A_UPPERCASE + 19);
+ PROJECTM_K_U_UPPERCASE = (PROJECTM_K_A_UPPERCASE + 20);
+ PROJECTM_K_V_UPPERCASE = (PROJECTM_K_A_UPPERCASE + 21);
+ PROJECTM_K_W_UPPERCASE = (PROJECTM_K_A_UPPERCASE + 22);
+ PROJECTM_K_X_UPPERCASE = (PROJECTM_K_A_UPPERCASE + 23);
+ PROJECTM_K_Y_UPPERCASE = (PROJECTM_K_A_UPPERCASE + 24);
+ PROJECTM_K_Z_UPPERCASE = (PROJECTM_K_A_UPPERCASE + 25);
+
+ { Lower case }
+ PROJECTM_K_a_LOWERCASE = 97;
+ PROJECTM_K_b_LOWERCASE = (PROJECTM_K_a_LOWERCASE + 1);
+ PROJECTM_K_c_LOWERCASE = (PROJECTM_K_a_LOWERCASE + 2);
+ PROJECTM_K_d_LOWERCASE = (PROJECTM_K_a_LOWERCASE + 3);
+ PROJECTM_K_e_LOWERCASE = (PROJECTM_K_a_LOWERCASE + 4);
+ PROJECTM_K_f_LOWERCASE = (PROJECTM_K_a_LOWERCASE + 5);
+ PROJECTM_K_g_LOWERCASE = (PROJECTM_K_a_LOWERCASE + 6);
+ PROJECTM_K_h_LOWERCASE = (PROJECTM_K_a_LOWERCASE + 7);
+ PROJECTM_K_i_LOWERCASE = (PROJECTM_K_a_LOWERCASE + 8);
+ PROJECTM_K_j_LOWERCASE = (PROJECTM_K_a_LOWERCASE + 9);
+ PROJECTM_K_k_LOWERCASE = (PROJECTM_K_a_LOWERCASE + 10);
+ PROJECTM_K_l_LOWERCASE = (PROJECTM_K_a_LOWERCASE + 11);
+ PROJECTM_K_m_LOWERCASE = (PROJECTM_K_a_LOWERCASE + 12);
+ PROJECTM_K_n_LOWERCASE = (PROJECTM_K_a_LOWERCASE + 13);
+ PROJECTM_K_o_LOWERCASE = (PROJECTM_K_a_LOWERCASE + 14);
+ PROJECTM_K_p_LOWERCASE = (PROJECTM_K_a_LOWERCASE + 15);
+ PROJECTM_K_q_LOWERCASE = (PROJECTM_K_a_LOWERCASE + 16);
+ PROJECTM_K_r_LOWERCASE = (PROJECTM_K_a_LOWERCASE + 17);
+ PROJECTM_K_s_LOWERCASE = (PROJECTM_K_a_LOWERCASE + 18);
+ PROJECTM_K_t_LOWERCASE = (PROJECTM_K_a_LOWERCASE + 19);
+ PROJECTM_K_u_LOWERCASE = (PROJECTM_K_a_LOWERCASE + 20);
+ PROJECTM_K_v_LOWERCASE = (PROJECTM_K_a_LOWERCASE + 21);
+ PROJECTM_K_w_LOWERCASE = (PROJECTM_K_a_LOWERCASE + 22);
+ PROJECTM_K_x_LOWERCASE = (PROJECTM_K_a_LOWERCASE + 23);
+ PROJECTM_K_y_LOWERCASE = (PROJECTM_K_a_LOWERCASE + 24);
+ PROJECTM_K_z_LOWERCASE = (PROJECTM_K_a_LOWERCASE + 25);
+
+ PROJECTM_K_NONE = (PROJECTM_K_z_LOWERCASE + 1);
+
+{ Modifiers }
+type
+ TProjectMModifier = integer;
+const
+ PROJECTM_KMOD_LSHIFT = 0;
+ PROJECTM_KMOD_RSHIFT = 1;
+ PROJECTM_KMOD_CAPS = 2;
+ PROJECTM_KMOD_LCTRL = 3;
+ PROJECTM_KMOD_RCTRL = 4;
+
+type
+ PProjectM = ^TProjectM;
+ TProjectM = class(TObject)
+ private
+ _pm: Pointer;
+ public
+ constructor Create(gx, gy: integer; fps: integer;
+ texsize: integer; width, height: integer;
+ presetsDir, fontsDir: string);
+
+ procedure ResetGL(width, height: Integer);
+ procedure SetTitle(title: string);
+ procedure RenderFrame();
+
+ procedure AddPCMfloat(pcmData: PSingle; samples: integer);
+ procedure AddPCM16(pcmData: PPCM16);
+ procedure AddPCM16Data(pcmData: PSmallint; samples: Smallint);
+ procedure AddPCM8_512(pcmData: PPCM8_512);
+
+ procedure RandomPreset();
+ procedure PreviousPreset();
+ procedure NextPreset();
+ procedure ToggleShowPresetNames();
+
+ procedure KeyHandler(event: TProjectMEvent;
+ keycode: TProjectMKeycode;
+ modifier: TProjectMModifier);
+
+ destructor Destroy();
+ end;
+
+implementation
+
+uses
+{$IFNDEF win32}
+ baseunix,
+{$ENDIF}
+ OpenGL12;
+
+
+{**************** INTERNAL SECTION ****************}
+
+
+type
+ PPSingle = ^PSingle;
+
+type
+ _TContextType = Integer;
+const
+ AGL_CONTEXT = 0;
+ CGL_CONTEXT = 1;
+ NSGL_CONTEXT = 2;
+ GLX_CONTEXT = 3;
+ WGL_CONTEXT = 4;
+
+type
+ _PRenderTarget = ^_TRenderTarget;
+ _TRenderTarget = record
+ { Texture size }
+ texsize: Integer;
+
+ { Application context }
+ origContextType: _TContextType;
+
+ usePbuffers: Integer;
+
+ {$ifdef LINUX}
+ lock_func: procedure(); cdecl;
+ unlock_func: procedure(); cdecl;
+ {$endif}
+
+ { Opaque pbuffer context and pbuffer }
+ {$ifdef MACOS}
+ origContext: Pointer;
+ pbufferContext: Pointer;
+ pbuffer: Pointer;
+ {$endif}
+
+ { Render target texture ID for non-pbuffer systems }
+ textureID: array[0..2] of TGLuint;
+ end;
+
+ _PProjectM = ^_TProjectM;
+ _TProjectM = record
+ presetURL: PChar;
+ presetName: PChar;
+ fontURL: PChar;
+
+ hasInit: Integer;
+
+ noSwitch: Integer;
+ pcmframes: Integer;
+ freqframes: Integer;
+ totalframes: Integer;
+
+ showfps: Integer;
+ showtitle: Integer;
+ showpreset: Integer;
+ showhelp: Integer;
+ showstats: Integer;
+
+ studio: Integer;
+
+ fbuffer: PGLubyte;
+
+ {$ifndef Win32}
+ { The first ticks value of the application }
+ startTime: timeval;
+ {$else}
+ startTime: Longint;
+ {$endif Win32}
+ Time: Single;
+
+ { Render target texture ID }
+ renderTarget: _PRenderTarget;
+
+ disp: array[0..79] of Char;
+
+ wave_o: Single;
+
+ //int texsize=1024; //size of texture to do actual graphics
+ fvw: Integer; //fullscreen dimensions
+ fvh: Integer;
+ wvw: Integer; //windowed dimensions
+ wvh: Integer;
+ vw: Integer; //runtime dimensions
+ vh: Integer;
+ fullscreen: Integer;
+
+ maxsamples: Integer; //size of PCM buffer
+ numsamples: Integer; //size of new PCM info
+ pcmdataL: PSingle; //holder for most recent pcm data
+ pcmdataR: PSingle; //holder for most recent pcm data
+
+ avgtime: Integer; //# frames per preset
+
+ title: PChar;
+ drawtitle: Integer;
+
+ correction: Integer;
+
+ vol: Single;
+
+ //per pixel equation variables
+ gridx: PPSingle; //grid containing interpolated mesh
+ gridy: PPSingle;
+ origtheta: PPSingle; //grid containing interpolated mesh reference values
+ origrad: PPSingle;
+ origx: PPSingle; //original mesh
+ origy: PPSingle;
+ origx2: PPSingle; //original mesh
+ origy2: PPSingle;
+
+ { Timing information }
+ mspf: Integer;
+ timed: Integer;
+ timestart: Integer;
+ nohard: Integer;
+ count: Integer;
+ realfps,
+ fpsstart: Single;
+
+ { PCM data }
+ vdataL: array[0..511] of Single; //holders for FFT data (spectrum)
+ vdataR: array[0..511] of Single;
+
+ { Various toggles }
+ doPerPixelEffects: Integer;
+ doIterative: Integer;
+
+ { ENGINE VARIABLES }
+ { From engine_vars.h }
+ preset_name: array[0..255] of Char;
+
+ { PER FRAME CONSTANTS BEGIN }
+ zoom: Single;
+ zoomexp: Single;
+ rot: Single;
+ warp: Single;
+
+ sx: Single;
+ sy: Single;
+ dx: Single;
+ dy: Single;
+ cx: Single;
+ cy: Single;
+
+ gy: Integer;
+ gx: Integer;
+
+ decay: Single;
+
+ wave_r: Single;
+ wave_g: Single;
+ wave_b: Single;
+ wave_x: Single;
+ wave_y: Single;
+ wave_mystery: Single;
+
+ ob_size: Single;
+ ob_r: Single;
+ ob_g: Single;
+ ob_b: Single;
+ ob_a: Single;
+
+ ib_size: Single;
+ ib_r: Single;
+ ib_g: Single;
+ ib_b: Single;
+ ib_a: Single;
+
+ meshx: Integer;
+ meshy: Integer;
+
+ mv_a: Single;
+ mv_r: Single;
+ mv_g: Single;
+ mv_b: Single;
+ mv_l: Single;
+ mv_x: Single;
+ mv_y: Single;
+ mv_dy: Single;
+ mv_dx: Single;
+
+ treb: Single;
+ mid: Single;
+ bass: Single;
+ bass_old: Single;
+ beat_sensitivity: Single;
+ treb_att: Single;
+ mid_att: Single;
+ bass_att: Single;
+ progress: Single;
+ frame: Integer;
+
+ { PER_FRAME CONSTANTS END }
+
+ { PER_PIXEL CONSTANTS BEGIN }
+
+ x_per_pixel: Single;
+ y_per_pixel: Single;
+ rad_per_pixel: Single;
+ ang_per_pixel: Single;
+
+ { PER_PIXEL CONSTANT END }
+
+
+ fRating: Single;
+ fGammaAdj: Single;
+ fVideoEchoZoom: Single;
+ fVideoEchoAlpha: Single;
+
+ nVideoEchoOrientation: Integer;
+ nWaveMode: Integer;
+ bAdditiveWaves: Integer;
+ bWaveDots: Integer;
+ bWaveThick: Integer;
+ bModWaveAlphaByVolume: Integer;
+ bMaximizeWaveColor: Integer;
+ bTexWrap: Integer;
+ bDarkenCenter: Integer;
+ bRedBlueStereo: Integer;
+ bBrighten: Integer;
+ bDarken: Integer;
+ bSolarize: Integer;
+ bInvert: Integer;
+ bMotionVectorsOn: Integer;
+ fps: Integer;
+
+ fWaveAlpha: Single;
+ fWaveScale: Single;
+ fWaveSmoothing: Single;
+ fWaveParam: Single;
+ fModWaveAlphaStart: Single;
+ fModWaveAlphaEnd: Single;
+ fWarpAnimSpeed: Single;
+ fWarpScale: Single;
+ fShader: Single;
+
+
+ { Q VARIABLES START }
+
+ q1: Single;
+ q2: Single;
+ q3: Single;
+ q4: Single;
+ q5: Single;
+ q6: Single;
+ q7: Single;
+ q8: Single;
+
+
+ { Q VARIABLES END }
+
+ zoom_mesh: PPSingle;
+ zoomexp_mesh: PPSingle;
+ rot_mesh: PPSingle;
+
+ sx_mesh: PPSingle;
+ sy_mesh: PPSingle;
+ dx_mesh: PPSingle;
+ dy_mesh: PPSingle;
+ cx_mesh: PPSingle;
+ cy_mesh: PPSingle;
+
+ x_mesh: PPSingle;
+ y_mesh: PPSingle;
+ rad_mesh: PPSingle;
+ theta_mesh: PPSingle;
+ end;
+
+{ projectM.h declarations }
+procedure _projectM_init(pm: _PProjectM); cdecl; external libprojectM name 'projectM_init';
+procedure _projectM_reset(pm: _PProjectM); cdecl; external libprojectM name 'projectM_reset';
+procedure _projectM_resetGL(pm: _PProjectM; width: Integer; height: Integer); cdecl; external libprojectM name 'projectM_resetGL';
+procedure _projectM_setTitle(pm: _PProjectM; title: PChar); cdecl; external libprojectM name 'projectM_setTitle';
+procedure _renderFrame(pm: _PProjectM); cdecl; external libprojectM name 'renderFrame';
+
+{ PCM.h declarations }
+procedure _addPCMfloat(pcm_data: PSingle; samples: integer); cdecl; external libprojectM name 'addPCMfloat';
+procedure _addPCM16(pcm_data: PPCM16); cdecl; external libprojectM name 'addPCM16';
+procedure _addPCM16Data(pcm_data: PSmallint; samples: Smallint); cdecl; external libprojectM name 'addPCM16Data';
+procedure _addPCM8_512(pcm_data: PPCM8_512); cdecl; external libprojectM name 'addPCM8';
+
+{ console_interface.h declarations }
+procedure _key_handler(pm: _PProjectM;
+ event: TProjectMEvent;
+ keycode: TProjectMKeycode;
+ modifier: TProjectMModifier); cdecl; external libprojectM name 'key_handler';
+
+
+
+
+{**************** EXTERNAL SECTION ****************}
+
+
+constructor TProjectM.Create(gx, gy: integer; fps: integer;
+ texsize: integer; width, height: integer;
+ presetsDir, fontsDir: string);
+var
+ pm: _PProjectM;
+begin
+ New(pm);
+ _pm := pm;
+ _projectM_reset(pm);
+
+ pm^.fullscreen := 0;
+ pm^.renderTarget^.texsize := texsize;
+ pm^.gx := gx;
+ pm^.gy := gy;
+ pm^.fps := fps;
+ pm^.renderTarget^.usePbuffers := 0;
+
+ pm^.fontURL := PChar(fontsDir);
+ pm^.presetURL := PChar(presetsDir);
+
+ _projectM_init(pm);
+end;
+
+procedure TProjectM.ResetGL(width, height: Integer);
+begin
+ _projectM_resetGL(_pm, width, height);
+end;
+
+procedure TProjectM.SetTitle(title: string);
+var pm: _PProjectM;
+begin
+ pm := _pm;
+ pm^.title := PChar(title);
+ pm^.showtitle := 1;
+end;
+
+procedure TProjectM.RenderFrame();
+begin
+ _renderFrame(_pm);
+end;
+
+procedure TProjectM.AddPCMfloat(pcmData: PSingle; samples: integer);
+begin
+ _addPCMfloat(pcmData, samples);
+end;
+
+procedure TProjectM.AddPCM16(pcmData: PPCM16);
+begin
+ _addPCM16(pcmData);
+end;
+
+procedure TProjectM.AddPCM16Data(pcmData: PSmallint; samples: Smallint);
+begin
+ _addPCM16Data(pcmData, samples);
+end;
+
+procedure TProjectM.AddPCM8_512(pcmData: PPCM8_512);
+begin
+ _addPCM8_512(pcmData);
+end;
+
+procedure TProjectM.KeyHandler(event: TProjectMEvent;
+ keycode: TProjectMKeycode;
+ modifier: TProjectMModifier);
+begin
+ _key_handler(_pm, event, keycode, modifier);
+end;
+
+procedure TProjectM.RandomPreset();
+begin
+ KeyHandler(PROJECTM_KEYDOWN, PROJECTM_K_r_LOWERCASE, PROJECTM_KMOD_LSHIFT);
+end;
+
+procedure TProjectM.PreviousPreset();
+begin
+ KeyHandler(PROJECTM_KEYDOWN, PROJECTM_K_p_LOWERCASE, PROJECTM_KMOD_LSHIFT);
+end;
+
+procedure TProjectM.NextPreset();
+begin
+ KeyHandler(PROJECTM_KEYDOWN, PROJECTM_K_n_LOWERCASE, PROJECTM_KMOD_LSHIFT);
+end;
+
+procedure TProjectM.ToggleShowPresetNames();
+begin
+ KeyHandler(PROJECTM_KEYDOWN, PROJECTM_K_F3, PROJECTM_KMOD_LSHIFT);
+end;
+
+destructor TProjectM.Destroy();
+begin
+ Dispose(_pm);
+ _pm := nil;
+end;
+
+end.
diff --git a/Game/Code/lib/projectM/1.0/projectM.pas b/Game/Code/lib/projectM/1.0/projectM.pas
new file mode 100644
index 00000000..87184e2f
--- /dev/null
+++ b/Game/Code/lib/projectM/1.0/projectM.pas
@@ -0,0 +1,336 @@
+unit projectM;
+
+{$IFDEF FPC}
+ {$IFNDEF win32}
+ {$LINKLIB libprojectM}
+ {$ENDIF}
+ {$MODE DELPHI}
+ {$PACKENUM 4}
+ {$PACKRECORDS C}
+{$ENDIF}
+
+interface
+
+uses
+ OpenGL12;
+
+const
+{$IFDEF win32}
+ libprojectM = 'projectM-cwrapper.dll';
+{$ELSE}
+ libprojectM = 'libprojectM-cwrapper.so';
+{$ENDIF}
+
+const
+ PROJECTM_VERSION = '1.00.00';
+ PROJECTM_TITLE = 'projectM 1.00.00';
+
+type
+ // 16bit non-interleaved data
+ TPCM16 = array[0..1, 0..511] of Smallint;
+ PPCM16 = ^TPCM16;
+ // 8bit non-interleaved data (512 samples)
+ TPCM8_512 = array[0..1, 0..511] of byte;
+ PPCM8_512 = ^TPCM8_512;
+ // 8bit non-interleaved data (1024 samples)
+ TPCM8_1024 = array[0..1, 0..1023] of byte;
+ PPCM8_1024 = ^TPCM8_512;
+
+{ Event types }
+type
+ TProjectMEvent = integer;
+const
+ PROJECTM_KEYUP = 0;
+ PROJECTM_KEYDOWN = 1;
+ PROJECTM_VIDEORESIZE = 2;
+ PROJECTM_VIDEOQUIT = 3;
+ PROJECTM_NONE = 4;
+
+{ Keycodes }
+type
+ TProjectMKeycode = integer;
+const
+ PROJECTM_K_RETURN = 0;
+ PROJECTM_K_RIGHT = 1;
+ PROJECTM_K_LEFT = 2;
+ PROJECTM_K_UP = 3;
+ PROJECTM_K_DOWN = 4;
+ PROJECTM_K_PAGEUP = 5;
+ PROJECTM_K_PAGEDOWN = 6;
+ PROJECTM_K_INSERT = 7;
+ PROJECTM_K_DELETE = 8;
+ PROJECTM_K_ESCAPE = 9;
+ PROJECTM_K_LSHIFT = 10;
+ PROJECTM_K_RSHIFT = 11;
+ PROJECTM_K_CAPSLOCK = 12;
+ PROJECTM_K_LCTRL = 13;
+ PROJECTM_K_HOME = 14;
+ PROJECTM_K_END = 15;
+ PROJECTM_K_BACKSPACE = 16;
+
+ PROJECTM_K_F1 = 17;
+ PROJECTM_K_F2 = (PROJECTM_K_F1 + 1);
+ PROJECTM_K_F3 = (PROJECTM_K_F1 + 2);
+ PROJECTM_K_F4 = (PROJECTM_K_F1 + 3);
+ PROJECTM_K_F5 = (PROJECTM_K_F1 + 4);
+ PROJECTM_K_F6 = (PROJECTM_K_F1 + 5);
+ PROJECTM_K_F7 = (PROJECTM_K_F1 + 6);
+ PROJECTM_K_F8 = (PROJECTM_K_F1 + 7);
+ PROJECTM_K_F9 = (PROJECTM_K_F1 + 8);
+ PROJECTM_K_F10 = (PROJECTM_K_F1 + 9);
+ PROJECTM_K_F11 = (PROJECTM_K_F1 + 10);
+ PROJECTM_K_F12 = (PROJECTM_K_F1 + 11);
+
+ PROJECTM_K_0 = 48;
+ PROJECTM_K_1 = (PROJECTM_K_0 + 1);
+ PROJECTM_K_2 = (PROJECTM_K_0 + 2);
+ PROJECTM_K_3 = (PROJECTM_K_0 + 3);
+ PROJECTM_K_4 = (PROJECTM_K_0 + 4);
+ PROJECTM_K_5 = (PROJECTM_K_0 + 5);
+ PROJECTM_K_6 = (PROJECTM_K_0 + 6);
+ PROJECTM_K_7 = (PROJECTM_K_0 + 7);
+ PROJECTM_K_8 = (PROJECTM_K_0 + 8);
+ PROJECTM_K_9 = (PROJECTM_K_0 + 9);
+
+ { Upper case }
+ PROJECTM_K_A_UPPERCASE = 65;
+ PROJECTM_K_B_UPPERCASE = (PROJECTM_K_A_UPPERCASE + 1);
+ PROJECTM_K_C_UPPERCASE = (PROJECTM_K_A_UPPERCASE + 2);
+ PROJECTM_K_D_UPPERCASE = (PROJECTM_K_A_UPPERCASE + 3);
+ PROJECTM_K_E_UPPERCASE = (PROJECTM_K_A_UPPERCASE + 4);
+ PROJECTM_K_F_UPPERCASE = (PROJECTM_K_A_UPPERCASE + 5);
+ PROJECTM_K_G_UPPERCASE = (PROJECTM_K_A_UPPERCASE + 6);
+ PROJECTM_K_H_UPPERCASE = (PROJECTM_K_A_UPPERCASE + 7);
+ PROJECTM_K_I_UPPERCASE = (PROJECTM_K_A_UPPERCASE + 8);
+ PROJECTM_K_J_UPPERCASE = (PROJECTM_K_A_UPPERCASE + 9);
+ PROJECTM_K_K_UPPERCASE = (PROJECTM_K_A_UPPERCASE + 10);
+ PROJECTM_K_L_UPPERCASE = (PROJECTM_K_A_UPPERCASE + 11);
+ PROJECTM_K_M_UPPERCASE = (PROJECTM_K_A_UPPERCASE + 12);
+ PROJECTM_K_N_UPPERCASE = (PROJECTM_K_A_UPPERCASE + 13);
+ PROJECTM_K_O_UPPERCASE = (PROJECTM_K_A_UPPERCASE + 14);
+ PROJECTM_K_P_UPPERCASE = (PROJECTM_K_A_UPPERCASE + 15);
+ PROJECTM_K_Q_UPPERCASE = (PROJECTM_K_A_UPPERCASE + 16);
+ PROJECTM_K_R_UPPERCASE = (PROJECTM_K_A_UPPERCASE + 17);
+ PROJECTM_K_S_UPPERCASE = (PROJECTM_K_A_UPPERCASE + 18);
+ PROJECTM_K_T_UPPERCASE = (PROJECTM_K_A_UPPERCASE + 19);
+ PROJECTM_K_U_UPPERCASE = (PROJECTM_K_A_UPPERCASE + 20);
+ PROJECTM_K_V_UPPERCASE = (PROJECTM_K_A_UPPERCASE + 21);
+ PROJECTM_K_W_UPPERCASE = (PROJECTM_K_A_UPPERCASE + 22);
+ PROJECTM_K_X_UPPERCASE = (PROJECTM_K_A_UPPERCASE + 23);
+ PROJECTM_K_Y_UPPERCASE = (PROJECTM_K_A_UPPERCASE + 24);
+ PROJECTM_K_Z_UPPERCASE = (PROJECTM_K_A_UPPERCASE + 25);
+
+ { Lower case }
+ PROJECTM_K_a_LOWERCASE = 97;
+ PROJECTM_K_b_LOWERCASE = (PROJECTM_K_a_LOWERCASE + 1);
+ PROJECTM_K_c_LOWERCASE = (PROJECTM_K_a_LOWERCASE + 2);
+ PROJECTM_K_d_LOWERCASE = (PROJECTM_K_a_LOWERCASE + 3);
+ PROJECTM_K_e_LOWERCASE = (PROJECTM_K_a_LOWERCASE + 4);
+ PROJECTM_K_f_LOWERCASE = (PROJECTM_K_a_LOWERCASE + 5);
+ PROJECTM_K_g_LOWERCASE = (PROJECTM_K_a_LOWERCASE + 6);
+ PROJECTM_K_h_LOWERCASE = (PROJECTM_K_a_LOWERCASE + 7);
+ PROJECTM_K_i_LOWERCASE = (PROJECTM_K_a_LOWERCASE + 8);
+ PROJECTM_K_j_LOWERCASE = (PROJECTM_K_a_LOWERCASE + 9);
+ PROJECTM_K_k_LOWERCASE = (PROJECTM_K_a_LOWERCASE + 10);
+ PROJECTM_K_l_LOWERCASE = (PROJECTM_K_a_LOWERCASE + 11);
+ PROJECTM_K_m_LOWERCASE = (PROJECTM_K_a_LOWERCASE + 12);
+ PROJECTM_K_n_LOWERCASE = (PROJECTM_K_a_LOWERCASE + 13);
+ PROJECTM_K_o_LOWERCASE = (PROJECTM_K_a_LOWERCASE + 14);
+ PROJECTM_K_p_LOWERCASE = (PROJECTM_K_a_LOWERCASE + 15);
+ PROJECTM_K_q_LOWERCASE = (PROJECTM_K_a_LOWERCASE + 16);
+ PROJECTM_K_r_LOWERCASE = (PROJECTM_K_a_LOWERCASE + 17);
+ PROJECTM_K_s_LOWERCASE = (PROJECTM_K_a_LOWERCASE + 18);
+ PROJECTM_K_t_LOWERCASE = (PROJECTM_K_a_LOWERCASE + 19);
+ PROJECTM_K_u_LOWERCASE = (PROJECTM_K_a_LOWERCASE + 20);
+ PROJECTM_K_v_LOWERCASE = (PROJECTM_K_a_LOWERCASE + 21);
+ PROJECTM_K_w_LOWERCASE = (PROJECTM_K_a_LOWERCASE + 22);
+ PROJECTM_K_x_LOWERCASE = (PROJECTM_K_a_LOWERCASE + 23);
+ PROJECTM_K_y_LOWERCASE = (PROJECTM_K_a_LOWERCASE + 24);
+ PROJECTM_K_z_LOWERCASE = (PROJECTM_K_a_LOWERCASE + 25);
+
+ PROJECTM_K_NONE = (PROJECTM_K_z_LOWERCASE + 1);
+
+{ Modifiers }
+type
+ TProjectMModifier = integer;
+const
+ PROJECTM_KMOD_LSHIFT = 0;
+ PROJECTM_KMOD_RSHIFT = 1;
+ PROJECTM_KMOD_CAPS = 2;
+ PROJECTM_KMOD_LCTRL = 3;
+ PROJECTM_KMOD_RCTRL = 4;
+
+
+type
+ PProjectM = ^TProjectM;
+ TProjectM = class(TObject)
+ private
+ _pm: Pointer;
+ public
+ constructor Create(gx, gy: integer; fps: integer;
+ texsize: integer; width, height: integer;
+ presetsDir, fontsDir: string;
+ titleFont: string = 'Vera.ttf';
+ menuFont: string = 'Vera.ttf'); overload;
+ constructor Create(configFile: string); overload;
+
+ procedure ResetGL(width, height: Integer);
+ procedure SetTitle(title: string);
+ procedure RenderFrame();
+
+ procedure AddPCMfloat(pcmData: PSingle; samples: integer);
+ procedure AddPCM16(pcmData: PPCM16);
+ procedure AddPCM16Data(pcmData: PSmallint; samples: Smallint);
+ procedure AddPCM8_512(pcmData: PPCM8_512);
+ procedure AddPCM8_1024(pcmData: PPCM8_1024);
+
+ procedure RandomPreset();
+ procedure PreviousPreset();
+ procedure NextPreset();
+ procedure ToggleShowPresetNames();
+
+ function InitRenderToTexture(): GLuint;
+
+ procedure KeyHandler(event: TProjectMEvent;
+ keycode: TProjectMKeycode;
+ modifier: TProjectMModifier);
+
+ destructor Destroy();
+ end;
+
+implementation
+
+
+{**************** INTERNAL SECTION ****************}
+
+
+type
+ _PProjectM = Pointer;
+
+{ projectM.hpp declarations }
+function _projectM_create1(config_file: PChar): _PProjectM; cdecl; external libprojectM name 'projectM_create1';
+function _projectM_create2(gx: integer; gy: integer; fps: integer;
+ texsize: integer; width: integer; height: integer;
+ preset_url: PChar; title_fonturl: PChar; title_menuurl: PChar): _PProjectM; cdecl; external libprojectM name 'projectM_create2';
+
+procedure _projectM_resetGL(pm: _PProjectM; width: integer; height: integer); cdecl; external libprojectM name 'projectM_resetGL';
+procedure _projectM_setTitle(pm: _PProjectM; title: PChar); cdecl; external libprojectM name 'projectM_setTitle';
+procedure _projectM_renderFrame(pm: _PProjectM); cdecl; external libprojectM name 'projectM_renderFrame';
+function _projectM_initRenderToTexture(pm: _PProjectM): Cardinal; cdecl; external libprojectM name 'projectM_initRenderToTexture';
+
+procedure _projectM_free(pm: _PProjectM); cdecl; external libprojectM name 'projectM_free';
+
+procedure _projectM_key_handler(pm: _PProjectM; event: TProjectMEvent;
+ keycode: TProjectMKeycode; modifier: TProjectMModifier); cdecl; external libprojectM name 'projectM_key_handler';
+
+{ PCM.hpp declarations }
+procedure _PCM_addPCMfloat(pm: _PProjectM; pcm_data: PSingle; samples: integer); cdecl; external libprojectM name 'PCM_addPCMfloat';
+procedure _PCM_addPCM16(pm: _PProjectM; pcm_data: PPCM16); cdecl; external libprojectM name 'PCM_addPCM16';
+procedure _PCM_addPCM16Data(pm: _PProjectM; pcm_data: PSmallint; samples: Smallint); cdecl; external libprojectM name 'PCM_addPCM16Data';
+procedure _PCM_addPCM8_512(pm: _PProjectM; pcm_data: PPCM8_512); cdecl; external libprojectM name 'PCM_addPCM8_512';
+procedure _PCM_addPCM8_1024(pm: _PProjectM; pcm_data: PPCM8_1024); cdecl; external libprojectM name 'PCM_addPCM8';
+
+
+{**************** EXTERNAL SECTION ****************}
+
+constructor TProjectM.Create(gx, gy: integer; fps: integer;
+ texsize: integer; width, height: integer;
+ presetsDir, fontsDir: string; titleFont, menuFont: string);
+begin
+ _pm := _projectM_create2(gx, gy, fps, texsize, width, height,
+ PChar(presetsDir),
+ PChar(fontsDir + '/' + titleFont),
+ PChar(fontsDir + '/' + menuFont))
+end;
+
+constructor TProjectM.Create(configFile: string);
+begin
+ _pm := _projectM_create1(PChar(configFile));
+end;
+
+procedure TProjectM.ResetGL(width, height: Integer);
+begin
+ _projectM_resetGL(_pm, width, height);
+end;
+
+procedure TProjectM.SetTitle(title: string);
+begin
+ _projectM_setTitle(_pm, PChar(title));
+end;
+
+procedure TProjectM.RenderFrame();
+begin
+ _projectM_renderFrame(_pm);
+end;
+
+procedure TProjectM.AddPCMfloat(pcmData: PSingle; samples: integer);
+begin
+ _PCM_addPCMfloat(_pm, pcmData, samples);
+end;
+
+procedure TProjectM.AddPCM16(pcmData: PPCM16);
+begin
+ _PCM_addPCM16(_pm, pcmData);
+end;
+
+{**
+ * Passes interleaved stereo PCM-samples to projectM.
+ *}
+procedure TProjectM.AddPCM16Data(pcmData: PSmallint; samples: Smallint);
+begin
+ _PCM_addPCM16Data(_pm, pcmData, samples);
+end;
+
+procedure TProjectM.AddPCM8_512(pcmData: PPCM8_512);
+begin
+ _PCM_addPCM8_512(_pm, pcmData);
+end;
+
+procedure TProjectM.AddPCM8_1024(pcmData: PPCM8_1024);
+begin
+ _PCM_addPCM8_1024(_pm, pcmData);
+end;
+
+{**
+ * If the result is > -1 projectM will render to a texture.
+ * The texture-ID is the return-value.
+ *}
+function TProjectM.InitRenderToTexture(): GLuint;
+begin
+ result := _projectM_initRenderToTexture(_pm);
+end;
+
+procedure TProjectM.KeyHandler(event: TProjectMEvent;
+ keycode: TProjectMKeycode;
+ modifier: TProjectMModifier);
+begin
+ _projectM_key_handler(_pm, event, keycode, modifier);
+end;
+
+procedure TProjectM.RandomPreset();
+begin
+ KeyHandler(PROJECTM_KEYDOWN, PROJECTM_K_r_LOWERCASE, PROJECTM_KMOD_LSHIFT);
+end;
+
+procedure TProjectM.PreviousPreset();
+begin
+ KeyHandler(PROJECTM_KEYDOWN, PROJECTM_K_p_LOWERCASE, PROJECTM_KMOD_LSHIFT);
+end;
+
+procedure TProjectM.NextPreset();
+begin
+ KeyHandler(PROJECTM_KEYDOWN, PROJECTM_K_n_LOWERCASE, PROJECTM_KMOD_LSHIFT);
+end;
+
+procedure TProjectM.ToggleShowPresetNames();
+begin
+ KeyHandler(PROJECTM_KEYDOWN, PROJECTM_K_F3, PROJECTM_KMOD_LSHIFT);
+end;
+
+destructor TProjectM.Destroy();
+begin
+ _projectM_free(_pm);
+ _pm := nil;
+end;
+
+end.
diff --git a/Game/Code/lib/projectM/projectM.pas b/Game/Code/lib/projectM/projectM.pas
deleted file mode 100644
index 1c699e2b..00000000
--- a/Game/Code/lib/projectM/projectM.pas
+++ /dev/null
@@ -1,381 +0,0 @@
-unit projectM;
-
-{$IFDEF FPC}
- {$IFNDEF win32}
- {$LINKLIB libprojectM}
- {$ENDIF}
- {$MODE DELPHI}
- {$PACKENUM 4}
- {$PACKRECORDS C}
-{$ENDIF}
-
-interface
-
-uses
-{$IFNDEF win32}
- baseunix,
-{$ENDIF}
- OpenGL12;
-
-const
-{$IFDEF win32}
- libprojectM = 'libprojectM.dll';
-{$ELSE}
- libprojectM = 'libprojectM.so';
-{$ENDIF}
-
-const
- PROJECTM_VERSION = '0.99';
- PROJECTM_TITLE = 'projectM 0.99';
-
-type
- FLOAT = Single;
- PFLOAT = ^FLOAT;
- PPFLOAT = ^PFLOAT;
- INT = Integer;
- SHORT = Smallint;
- LONG = Longint;
-
-type
- // 16bit interleaved data
- TPCM16Data = array[0..511, 0..1] of SHORT;
- PPCM16Data = ^TPCM16Data;
- // 16bit non-interleaved data
- TPCM16 = array[0..1, 0..511] of SHORT;
- PPCM16 = ^TPCM16;
- // 8bit non-interleaved data
- TPCM8 = array[0..1, 0..511] of byte;
- PPCM8 = ^TPCM8;
-
-type
- TTextureScale = INT;
-const
- SCALE_NEAREST = 0;
- SCALE_MAGNIFY = 1;
- SCALE_MINIFY = 2;
-
-type
- TContextType = INT;
-const
- AGL_CONTEXT = 0;
- CGL_CONTEXT = 1;
- NSGL_CONTEXT = 2;
- GLX_CONTEXT = 3;
- WGL_CONTEXT = 4;
-
-type
- TPBufferPass = INT;
-const
- PBUFFER_PASS1 = 0;
- PBUFFER_PASS2 = 1;
-
-type
- PRenderTarget = ^TRenderTarget;
- TRenderTarget = record
- { Texture size }
- texsize: INT;
-
- { Application context }
- origContextType: TContextType;
-
- usePbuffers: INT;
-
- {$ifdef LINUX}
- lock_func: procedure(); cdecl;
- unlock_func: procedure(); cdecl;
- {$endif}
-
- { Opaque pbuffer context and pbuffer }
- {$ifdef MACOS}
- origContext: Pointer;
- pbufferContext: Pointer;
- pbuffer: Pointer;
- {$endif}
-
- { Render target texture ID for non-pbuffer systems }
- textureID: array[0..2] of TGLuint;
- end;
-
- {
- procedure createPBuffers( width, height: INT; target: PRenderTarget );
- procedure lockPBuffer( target: PRenderTarget; pass: PBufferPass );
- procedure unlockPBuffer( target: PRenderTarget );
- function nearestPower2( value: INT; scaleRule: TTextureScale ): INT;
- }
-
- PProjectM = ^TProjectM;
- TProjectM = record
- presetURL: PChar;
- presetName: PChar;
- fontURL: PChar;
-
- hasInit: INT;
-
- noSwitch: INT;
- pcmframes: INT;
- freqframes: INT;
- totalframes: INT;
-
- showfps: INT;
- showtitle: INT;
- showpreset: INT;
- showhelp: INT;
- showstats: INT;
-
- studio: INT;
-
- fbuffer: PGLubyte;
-
- {$ifndef Win32}
- { The first ticks value of the application }
- startTime: timeval;
- {$else}
- startTime: LONG;
- {$endif Win32}
- Time: FLOAT;
-
- { Render target texture ID }
- renderTarget: PRenderTarget;
-
- disp: array[0..79] of Char;
-
- wave_o: FLOAT;
-
- //int texsize=1024; //size of texture to do actual graphics
- fvw: INT; //fullscreen dimensions
- fvh: INT;
- wvw: INT; //windowed dimensions
- wvh: INT;
- vw: INT; //runtime dimensions
- vh: INT;
- fullscreen: INT;
-
- maxsamples: INT; //size of PCM buffer
- numsamples: INT; //size of new PCM info
- pcmdataL: PFLOAT; //holder for most recent pcm data
- pcmdataR: PFLOAT; //holder for most recent pcm data
-
- avgtime: INT; //# frames per preset
-
- title: PChar;
- drawtitle: INT;
-
- correction: INT;
-
- vol: FLOAT;
-
- //per pixel equation variables
- gridx: PPFLOAT; //grid containing interpolated mesh
- gridy: PPFLOAT;
- origtheta: PPFLOAT; //grid containing interpolated mesh reference values
- origrad: PPFLOAT;
- origx: PPFLOAT; //original mesh
- origy: PPFLOAT;
- origx2: PPFLOAT; //original mesh
- origy2: PPFLOAT;
-
- { Timing information }
- mspf: INT;
- timed: INT;
- timestart: INT;
- nohard: INT;
- count: INT;
- realfps,
- fpsstart: FLOAT;
-
- { PCM data }
- vdataL: array[0..511] of FLOAT; //holders for FFT data (spectrum)
- vdataR: array[0..511] of FLOAT;
-
- { Various toggles }
- doPerPixelEffects: INT;
- doIterative: INT;
-
- { ENGINE VARIABLES }
- { From engine_vars.h }
- preset_name: array[0..255] of Char;
-
- { PER FRAME CONSTANTS BEGIN }
- zoom: FLOAT;
- zoomexp: FLOAT;
- rot: FLOAT;
- warp: FLOAT;
-
- sx: FLOAT;
- sy: FLOAT;
- dx: FLOAT;
- dy: FLOAT;
- cx: FLOAT;
- cy: FLOAT;
-
- gy: INT;
- gx: INT;
-
- decay: FLOAT;
-
- wave_r: FLOAT;
- wave_g: FLOAT;
- wave_b: FLOAT;
- wave_x: FLOAT;
- wave_y: FLOAT;
- wave_mystery: FLOAT;
-
- ob_size: FLOAT;
- ob_r: FLOAT;
- ob_g: FLOAT;
- ob_b: FLOAT;
- ob_a: FLOAT;
-
- ib_size: FLOAT;
- ib_r: FLOAT;
- ib_g: FLOAT;
- ib_b: FLOAT;
- ib_a: FLOAT;
-
- meshx: INT;
- meshy: INT;
-
- mv_a: FLOAT;
- mv_r: FLOAT;
- mv_g: FLOAT;
- mv_b: FLOAT;
- mv_l: FLOAT;
- mv_x: FLOAT;
- mv_y: FLOAT;
- mv_dy: FLOAT;
- mv_dx: FLOAT;
-
- treb: FLOAT;
- mid: FLOAT;
- bass: FLOAT;
- bass_old: FLOAT;
- beat_sensitivity: FLOAT;
- treb_att: FLOAT;
- mid_att: FLOAT;
- bass_att: FLOAT;
- progress: FLOAT;
- frame: INT;
-
- { PER_FRAME CONSTANTS END }
-
- { PER_PIXEL CONSTANTS BEGIN }
-
- x_per_pixel: FLOAT;
- y_per_pixel: FLOAT;
- rad_per_pixel: FLOAT;
- ang_per_pixel: FLOAT;
-
- { PER_PIXEL CONSTANT END }
-
-
- fRating: FLOAT;
- fGammaAdj: FLOAT;
- fVideoEchoZoom: FLOAT;
- fVideoEchoAlpha: FLOAT;
-
- nVideoEchoOrientation: INT;
- nWaveMode: INT;
- bAdditiveWaves: INT;
- bWaveDots: INT;
- bWaveThick: INT;
- bModWaveAlphaByVolume: INT;
- bMaximizeWaveColor: INT;
- bTexWrap: INT;
- bDarkenCenter: INT;
- bRedBlueStereo: INT;
- bBrighten: INT;
- bDarken: INT;
- bSolarize: INT;
- bInvert: INT;
- bMotionVectorsOn: INT;
- fps: INT;
-
- fWaveAlpha: FLOAT;
- fWaveScale: FLOAT;
- fWaveSmoothing: FLOAT;
- fWaveParam: FLOAT;
- fModWaveAlphaStart: FLOAT;
- fModWaveAlphaEnd: FLOAT;
- fWarpAnimSpeed: FLOAT;
- fWarpScale: FLOAT;
- fShader: FLOAT;
-
-
- { Q VARIABLES START }
-
- q1: FLOAT;
- q2: FLOAT;
- q3: FLOAT;
- q4: FLOAT;
- q5: FLOAT;
- q6: FLOAT;
- q7: FLOAT;
- q8: FLOAT;
-
-
- { Q VARIABLES END }
-
- zoom_mesh: PPFLOAT;
- zoomexp_mesh: PPFLOAT;
- rot_mesh: PPFLOAT;
-
- sx_mesh: PPFLOAT;
- sy_mesh: PPFLOAT;
- dx_mesh: PPFLOAT;
- dy_mesh: PPFLOAT;
- cx_mesh: PPFLOAT;
- cy_mesh: PPFLOAT;
-
- x_mesh: PPFLOAT;
- y_mesh: PPFLOAT;
- rad_mesh: PPFLOAT;
- theta_mesh: PPFLOAT;
- end;
-
- { Functions }
- procedure projectM_init(pm: PProjectM); cdecl; external libprojectM;
- procedure projectM_reset(pm: PProjectM); cdecl; external libprojectM;
- procedure projectM_resetGL(pm: PProjectM; width: INT; height: INT); cdecl; external libprojectM;
- procedure projectM_setTitle(pm: PProjectM; title: PChar); cdecl; external libprojectM;
- procedure renderFrame(pm: PProjectM); cdecl; external libprojectM;
-
- {
- procedure draw_help(pm: PProjectM); cdecl; external libprojectM;
- procedure draw_fps(pm: PProjectM; fps: Single); cdecl; external libprojectM;
- procedure draw_preset(pm: PProjectM); cdecl; external libprojectM;
- procedure draw_title(pm: PProjectM); cdecl; external libprojectM;
- procedure draw_stats(pm: PProjectM); cdecl; external libprojectM;
-
- procedure modulate_opacity_by_volume(pm: PProjectM); cdecl; external libprojectM;
- procedure maximize_colors(pm: PProjectM); cdecl; external libprojectM;
- procedure do_per_pixel_math(pm: PProjectM); cdecl; external libprojectM;
- procedure do_per_frame(pm: PProjectM); cdecl; external libprojectM;
- procedure darken_center(pm: PProjectM); cdecl; external libprojectM;
-
- procedure render_interpolation(pm: PProjectM); cdecl; external libprojectM;
- procedure render_texture_to_screen(pm: PProjectM); cdecl; external libprojectM;
- procedure render_texture_to_studio(pm: PProjectM); cdecl; external libprojectM;
- procedure draw_motion_vectors(pm: PProjectM); cdecl; external libprojectM;
- procedure draw_borders(pm: PProjectM); cdecl; external libprojectM;
- procedure draw_shapes(pm: PProjectM); cdecl; external libprojectM;
- procedure draw_waveform(pm: PProjectM); cdecl; external libprojectM;
- procedure draw_custom_waves(pm: PProjectM); cdecl; external libprojectM;
-
- procedure draw_title_to_screen(pm: PProjectM); cdecl; external libprojectM;
- procedure draw_title_to_texture(pm: PProjectM); cdecl; external libprojectM;
- procedure get_title(pm: PProjectM); cdecl; external libprojectM;
-
- procedure reset_per_pixel_matrices(pm: PProjectM); cdecl; external libprojectM;
- procedure init_per_pixel_matrices(pm: PProjectM); cdecl; external libprojectM;
- procedure rescale_per_pixel_matrices(pm: PProjectM); cdecl; external libprojectM;
- }
-
- { PCM.h declarations }
- procedure addPCMfloat(pcm_data: PSingle; samples: integer); cdecl; external libprojectM;
- procedure addPCM16(pcm_data: PPCM16); cdecl; external libprojectM;
- procedure addPCM16Data(pcm_data: PPCM16Data; samples: Smallint); cdecl; external libprojectM;
- procedure addPCM8(pcm_data: PPCM8); cdecl; external libprojectM;
-
-implementation
-
-end.