unit UGraphic;
interface
uses
SDL, OpenGL12, UTexture, TextGL, ULog, SysUtils, ULyrics, UScreenLoading,
UScreenWelcome, UScreenMain, UScreenName, UScreenLevel, UScreenOptions, UScreenOptionsGame,
UScreenOptionsGraphics, UScreenOptionsSound, UScreenOptionsLyrics, UScreenOptionsThemes, UScreenOptionsRecord, UScreenOptionsAdvanced,
UScreenSong, UScreenSing, UScreenScore, UScreenTop5, UScreenEditSub,
UScreenEdit, UScreenEditConvert, UScreenEditHeader, UScreenOpen, UThemes, USkins, UScreenSongMenu, UScreenSongJumpto,
{Party Screens} UScreenSingModi, UScreenPartyNewRound, UScreenPartyScore, UScreenPartyOptions, UScreenPartyWin, UScreenPartyPlayer,
{Stats Screens} UScreenStatMain, UScreenStatDetail,
{CreditsScreen} UScreenCredits,
{Popup for errors, etc.} UScreenPopup;
type
TRecR = record
Top: real;
Left: real;
Right: real;
Bottom: real;
end;
var
Screen: PSDL_Surface;
RenderW: integer;
RenderH: integer;
ScreenW: integer;
ScreenH: integer;
Screens: integer;
ScreenAct: integer;
ScreenX: integer;
ScreenLoading: TScreenLoading;
ScreenWelcome: TScreenWelcome;
ScreenMain: TScreenMain;
ScreenName: TScreenName;
ScreenLevel: TScreenLevel;
ScreenSong: TScreenSong;
ScreenSing: TScreenSing;
ScreenScore: TScreenScore;
ScreenTop5: TScreenTop5;
ScreenOptions: TScreenOptions;
ScreenOptionsGame: TScreenOptionsGame;
ScreenOptionsGraphics: TScreenOptionsGraphics;
ScreenOptionsSound: TScreenOptionsSound;
ScreenOptionsLyrics: TScreenOptionsLyrics;
ScreenOptionsThemes: TScreenOptionsThemes;
ScreenOptionsRecord: TScreenOptionsRecord;
ScreenOptionsAdvanced: TScreenOptionsAdvanced;
ScreenEditSub: TScreenEditSub;
ScreenEdit: TScreenEdit;
ScreenEditConvert: TScreenEditConvert;
ScreenEditHeader: TScreenEditHeader;
ScreenOpen: TScreenOpen;
ScreenSongMenu: TScreenSongMenu;
ScreenSongJumpto: TScreenSongJumpto;
//Party Screens
ScreenSingModi: TScreenSingModi;
ScreenPartyNewRound: TScreenPartyNewRound;
ScreenPartyScore: TScreenPartyScore;
ScreenPartyWin: TScreenPartyWin;
ScreenPartyOptions: TScreenPartyOptions;
ScreenPartyPlayer: TScreenPartyPlayer;
//StatsScreens
ScreenStatMain: TScreenStatMain;
ScreenStatDetail: TScreenStatDetail;
//CreditsScreen
ScreenCredits: TScreenCredits;
//popup mod
ScreenPopupCheck: TScreenPopupCheck;
ScreenPopupError: TScreenPopupError;
//Notes
Tex_Left: array[0..6] of TTexture;
Tex_Mid: array[0..6] of TTexture;
Tex_Right: array[0..6] of TTexture;
Tex_BG_Left: array[1..6] of TTexture;
Tex_BG_Mid: array[1..6] of TTexture;
Tex_BG_Right: array[1..6] of TTexture;
Tex_Note_Star: TTexture;
Tex_Note_Perfect_Star: TTexture;
Tex_Ball: TTexture;
Tex_Lyric_Help_Bar: TTexture;
FullScreen: boolean;
Tex_TimeProgress: TTexture;
//Sing Bar Mod
Tex_SingBar_Back: TTexture;
Tex_SingBar_Bar: TTexture;
Tex_SingBar_Front: TTexture;
//end Singbar Mod
//PhrasenBonus - Line Bonus Mod
Tex_SingLineBonusBack: TTexture;
//End PhrasenBonus - Line Bonus Mod
const
Skin_BGColorR = 1;
Skin_BGColorG = 1;
Skin_BGColorB = 1;
Skin_SpectrumR = 0;
Skin_SpectrumG = 0;
Skin_SpectrumB = 0;
Skin_Spectograph1R = 0.6;
Skin_Spectograph1G = 0.8;
Skin_Spectograph1B = 1;
Skin_Spectograph2R = 0;
Skin_Spectograph2G = 0;
Skin_Spectograph2B = 0.2;
Skin_SzczytR = 0.8;
Skin_SzczytG = 0;
Skin_SzczytB = 0;
Skin_SzczytLimitR = 0;
Skin_SzczytLimitG = 0.8;
Skin_SzczytLimitB = 0;
Skin_FontR = 0;
Skin_FontG = 0;
Skin_FontB = 0;
Skin_FontHighlightR = 0.3; // 0.3
Skin_FontHighlightG = 0.3; // 0.3
Skin_FontHighlightB = 1; // 1
Skin_TimeR = 0.25; //0,0,0
Skin_TimeG = 0.25;
Skin_TimeB = 0.25;
Skin_OscR = 0;
Skin_OscG = 0;
Skin_OscB = 0;
Skin_LyricsT = 494; // 500 / 510 / 400
Skin_SpectrumT = 470;
Skin_SpectrumBot = 570;
Skin_SpectrumH = 100;
Skin_P1_LinesR = 0.5; // 0.6 0.6 1
Skin_P1_LinesG = 0.5;
Skin_P1_LinesB = 0.5;
Skin_P2_LinesR = 0.5; // 1 0.6 0.6
Skin_P2_LinesG = 0.5;
Skin_P2_LinesB = 0.5;
Skin_P1_NotesB = 250;
Skin_P2_NotesB = 430; // 430 / 300
Skin_P1_ScoreT = 50;
Skin_P1_ScoreL = 20;
Skin_P2_ScoreT = 50;
Skin_P2_ScoreL = 640;
procedure Initialize3D (Title: string);
procedure Reinitialize3D;
procedure SwapBuffers;
procedure LoadTextures;
procedure InitializeScreen;
procedure LoadScreens;
implementation
uses UMain, UIni, UDisplay, UCommandLine, Graphics, Classes, Windows;
procedure LoadTextures;
var
P: integer;
R, G, B: real;
Col: integer;
begin
// zaladowanie tekstur
Log.LogStatus('Loading Textures', 'LoadTextures');
Tex_Left[0] := Texture.LoadTexture(pchar(Skin.GetTextureFileName('GrayLeft')), 'BMP', 'Transparent', 0);
Tex_Mid[0] := Texture.LoadTexture(pchar(Skin.GetTextureFileName('GrayMid')), 'BMP', 'Plain', 0);
Tex_Right[0] := Texture.LoadTexture(pchar(Skin.GetTextureFileName('GrayRight')), 'BMP', 'Transparent', 0);
// P1-6
for P := 1 to 6 do begin
LoadColor(R, G, B, 'P' + IntToStr(P) + 'Light');
Col := $10000 * Round(R*255) + $100 * Round(G*255) + Round(B*255);
Tex_Left[P] := Texture.LoadTexture(pchar(Skin.GetTextureFileName('GrayLeft')), 'BMP', 'Note Transparent', Col);
Tex_Mid[P] := Texture.LoadTexture(pchar(Skin.GetTextureFileName('GrayMid')), 'BMP', 'Note Plain', Col);
Tex_Right[P] := Texture.LoadTexture(pchar(Skin.GetTextureFileName('GrayRight')), 'BMP', 'Note Transparent', Col);
Tex_BG_Left[P] := Texture.LoadTexture(pchar(Skin.GetTextureFileName('NoteBGLeft')), 'BMP', 'Alpha Black Colored', Col);
Tex_BG_Mid[P] := Texture.LoadTexture(pchar(Skin.GetTextureFileName('NoteBGMid')), 'BMP', 'Alpha Black Colored', Col);
Tex_BG_Right[P] := Texture.LoadTexture(pchar(Skin.GetTextureFileName('NoteBGRight')), 'BMP', 'Alpha Black Colored', Col);
end;
Tex_Note_Perfect_Star := Texture.LoadTexture(pchar(Skin.GetTextureFileName('NotePerfectStar')), 'JPG', 'Font Black', 0);
Tex_Note_Star := Texture.LoadTexture(pchar(Skin.GetTextureFileName('NoteStar')) , 'JPG', 'Alpha Black Colored', $FFFFFF);
Tex_Ball := Texture.LoadTexture(pchar(Skin.GetTextureFileName('Ball')), 'BMP', 'Transparent', $FF00FF);
Tex_Lyric_Help_Bar := Texture.LoadTexture(pchar(Skin.GetTextureFileName('LyricHelpBar')), 'BMP', 'Transparent', $FF00FF);
//TimeBar mod
Tex_TimeProgress := Texture.LoadTexture(pchar(Skin.GetTextureFileName('TimeBar')));
//eoa TimeBar mod
//SingBar Mod
Tex_SingBar_Back := Texture.LoadTexture(pchar(Skin.GetTextureFileName('SingBarBack')), 'JPG', 'Plain', 0);
Tex_SingBar_Bar := Texture.LoadTexture(pchar(Skin.GetTextureFileName('SingBarBar')), 'JPG', 'Plain', 0);
Tex_SingBar_Front := Texture.LoadTexture(pchar(Skin.GetTextureFileName('SingBarFront')), 'JPG', 'Font', 0);
//end Singbar Mod
//PhrasenBonus - Line Bonus Mod
Tex_SingLineBonusBack := Texture.LoadTexture(pchar(Skin.GetTextureFileName('LineBonusBack')), 'JPG', 'Font Black', 0);
{//Set Texture to Font High
Tex_SingLineBonusL.H := 32; Tex_SingLineBonusL.W := 8;
Tex_SingLineBonusM.H := 32; //Tex_SingLineBonusM.TexW := Tex_SingLineBonusM.TexW/2;
Tex_SingLineBonusR.H := 32; Tex_SingLineBonusR.W := 8; }
//PhrasenBonus - Line Bonus Mod End
// tworzenie czcionek
Log.LogStatus('Building Fonts', 'LoadTextures');
BuildFont;
end;
procedure Initialize3D (Title: string);
var
Icon: TIcon;
Res: TResourceStream;
ISurface: PSDL_Surface;
Pixel: PByteArray;
begin
Log.LogStatus('LoadOpenGL', 'Initialize3D');
Log.BenchmarkStart(2);
LoadOpenGL;
Log.LogStatus('SDL_Init', 'Initialize3D');
if ( SDL_Init(SDL_INIT_VIDEO or SDL_INIT_AUDIO)= -1 ) then begin
Log.LogError('SDL_Init Failed', 'Initialize3D');
exit;
end;
{ //Load Icon
Res := TResourceStream.CreateFromID(HInstance, 3, RT_ICON);
Icon := TIcon.Create;
Icon.LoadFromStream(Res);
Res.Free;
Icon.
//Create icon Surface
SDL_CreateRGBSurfaceFrom (
SDL_SWSURFACE,
Icon.Width,
Icon.Height,
32,
128 or 64,
32 or 16,
8 or 4,
2 or 1);
//SDL_BlitSurface(
SDL_WM_SetIcon(SDL_LoadBMP('DEFAULT_WINDOW_ICON'), 0); //}
SDL_WM_SetCaption(PChar(Title), nil);
InitializeScreen;
Log.BenchmarkEnd(2);
Log.LogBenchmark('--> Setting Screen', 2);
// ladowanie tekstur
Log.BenchmarkStart(2);
Texture := TTextureUnit.Create;
Texture.Limit := 1024*1024;
LoadTextures;
Log.BenchmarkEnd(2);
Log.LogBenchmark('--> Loading Textures', 2);
Log.BenchmarkStart(2);
Lyric := TLyric.Create;
Log.BenchmarkEnd(2);
Log.LogBenchmark('--> Loading Fonts', 2);
Log.BenchmarkStart(2);
Display := TDisplay.Create;
SDL_EnableUnicode(1);
Log.BenchmarkEnd(2); Log.LogBenchmark('====> Creating Display', 2);
Log.LogStatus('Loading Screens', 'Initialize3D');
Log.BenchmarkStart(3);
LoadScreens;
Display.ActualScreen^.FadeTo(@ScreenMain);
Log.BenchmarkEnd(2);
Log.LogBenchmark('--> Loading Screens', 2);
Log.LogStatus('Finish', 'Initialize3D');
end;
procedure SwapBuffers;
begin
SDL_GL_SwapBuffers;
glMatrixMode(GL_PROJECTION);
glLoadIdentity;
glOrtho(0, 800, 600, 0, -1, 100);
glMatrixMode(GL_MODELVIEW);
end;
procedure Reinitialize3D;
begin
// InitializeScreen;
// LoadTextures;
// LoadScreens;
end;
procedure InitializeScreen;
var
S: string;
I: integer;
W, H: integer;
Depth: Integer;
begin
if (Params.Screens <> -1) then
Screens := Params.Screens + 1
else
Screens := Ini.Screens + 1;
SDL_GL_SetAttribute(SDL_GL_RED_SIZE, 5);
SDL_GL_SetAttribute(SDL_GL_GREEN_SIZE, 5);
SDL_GL_SetAttribute(SDL_GL_BLUE_SIZE, 5);
SDL_GL_SetAttribute(SDL_GL_DEPTH_SIZE, 16);
SDL_GL_SetAttribute(SDL_GL_DOUBLEBUFFER, 1);
// If there is a resolution in Parameters, use it, else use the Ini value
I := Params.Resolution;
if (I <> -1) then
S := IResolution[I]
else
S := IResolution[Ini.Resolution];
I := Pos('x', S);
W := StrToInt(Copy(S, 1, I-1)) * Screens;
H := StrToInt(Copy(S, I+1, 1000));
{if ParamStr(1) = '-fsblack' then begin
W := 800;
H := 600;
end;
if ParamStr(1) = '-320x240' then begin
W := 320;
H := 240;
end; }
If (Params.Depth <> -1) then
Depth := Params.Depth
else
Depth := Ini.Depth;
Log.LogStatus('SDL_SetVideoMode', 'Initialize3D');
// SDL_SetRefreshrate(85);
// SDL_GL_SetAttribute( SDL_GL_DOUBLEBUFFER, 1 );
if (Ini.FullScreen = 0) and (Not Params.FullScreen) then
screen := SDL_SetVideoMode(W, H, (Depth+1) * 16, SDL_OPENGL)
else begin
screen := SDL_SetVideoMode(W, H, (Depth+1) * 16, SDL_OPENGL or SDL_FULLSCREEN);
SDL_ShowCursor(0);
end;
if (screen = nil) then begin
Log.LogError('SDL_SetVideoMode Failed', 'Initialize3D');
exit;
end;
// clear screen once window is being shown
glClearColor(1, 1, 1, 1);
glClear(GL_COLOR_BUFFER_BIT);
SwapBuffers;
// zmienne
RenderW := 800;
RenderH := 600;
ScreenW := W;
ScreenH := H;
end;
procedure LoadScreens;
begin
ScreenLoading := TScreenLoading.Create;
ScreenLoading.onShow;
Display.ActualScreen := @ScreenLoading;
ScreenLoading.Draw;
Display.Draw;
SwapBuffers;
Log.BenchmarkEnd(3); Log.LogBenchmark('====> Screen Loading', 3); Log.BenchmarkStart(3);
{ ScreenWelcome := TScreenWelcome.Create; //'BG', 4, 3);
Log.BenchmarkEnd(3); Log.LogBenchmark('====> Screen Welcome', 3); Log.BenchmarkStart(3);}
ScreenMain := TScreenMain.Create;
Log.BenchmarkEnd(3); Log.LogBenchmark('====> Screen Main', 3); Log.BenchmarkStart(3);
ScreenName := TScreenName.Create;
Log.BenchmarkEnd(3); Log.LogBenchmark('====> Screen Name', 3); Log.BenchmarkStart(3);
ScreenLevel := TScreenLevel.Create;
Log.BenchmarkEnd(3); Log.LogBenchmark('====> Screen Level', 3); Log.BenchmarkStart(3);
ScreenSong := TScreenSong.Create;
Log.BenchmarkEnd(3); Log.LogBenchmark('====> Screen Song', 3); Log.BenchmarkStart(3);
ScreenSongMenu := TScreenSongMenu.Create;
Log.BenchmarkEnd(3); Log.LogBenchmark('====> Screen Song Menu', 3); Log.BenchmarkStart(3);
ScreenSing := TScreenSing.Create;
Log.BenchmarkEnd(3); Log.LogBenchmark('====> Screen Sing', 3); Log.BenchmarkStart(3);
ScreenScore := TScreenScore.Create;
Log.BenchmarkEnd(3); Log.LogBenchmark('====> Screen Score', 3); Log.BenchmarkStart(3);
ScreenTop5 := TScreenTop5.Create;
Log.BenchmarkEnd(3); Log.LogBenchmark('====> Screen Top5', 3); Log.BenchmarkStart(3);
ScreenOptions := TScreenOptions.Create;
Log.BenchmarkEnd(3); Log.LogBenchmark('====> Screen Options', 3); Log.BenchmarkStart(3);
ScreenOptionsGame := TScreenOptionsGame.Create;
Log.BenchmarkEnd(3); Log.LogBenchmark('====> Screen Options Game', 3); Log.BenchmarkStart(3);
ScreenOptionsGraphics := TScreenOptionsGraphics.Create;
Log.BenchmarkEnd(3); Log.LogBenchmark('====> Screen Options Graphics', 3); Log.BenchmarkStart(3);
ScreenOptionsSound := TScreenOptionsSound.Create;
Log.BenchmarkEnd(3); Log.LogBenchmark('====> Screen Options Sound', 3); Log.BenchmarkStart(3);
ScreenOptionsLyrics := TScreenOptionsLyrics.Create;
Log.BenchmarkEnd(3); Log.LogBenchmark('====> Screen Options Lyrics', 3); Log.BenchmarkStart(3);
ScreenOptionsThemes := TScreenOptionsThemes.Create;
Log.BenchmarkEnd(3); Log.LogBenchmark('====> Screen Options Themes', 3); Log.BenchmarkStart(3);
ScreenOptionsRecord := TScreenOptionsRecord.Create;
Log.BenchmarkEnd(3); Log.LogBenchmark('====> Screen Options Record', 3); Log.BenchmarkStart(3);
ScreenOptionsAdvanced := TScreenOptionsAdvanced.Create;
Log.BenchmarkEnd(3); Log.LogBenchmark('====> Screen Options Advanced', 3); Log.BenchmarkStart(3);
ScreenEditSub := TScreenEditSub.Create;
Log.BenchmarkEnd(3); Log.LogBenchmark('====> Screen Edit Sub', 3); Log.BenchmarkStart(3);
ScreenEdit := TScreenEdit.Create;
Log.BenchmarkEnd(3); Log.LogBenchmark('====> Screen Edit', 3); Log.BenchmarkStart(3);
ScreenEditConvert := TScreenEditConvert.Create;
Log.BenchmarkEnd(3); Log.LogBenchmark('====> Screen EditConvert', 3); Log.BenchmarkStart(3);
// ScreenEditHeader := TScreenEditHeader.Create(Skin.ScoreBG);
// Log.BenchmarkEnd(3); Log.LogBenchmark('====> Screen Edit Header', 3); Log.BenchmarkStart(3);
ScreenOpen := TScreenOpen.Create;
Log.BenchmarkEnd(3); Log.LogBenchmark('====> Screen Open', 3); Log.BenchmarkStart(3);
ScreenSingModi := TScreenSingModi.Create;
Log.BenchmarkEnd(3); Log.LogBenchmark('====> Screen Sing with Modi support', 3); Log.BenchmarkStart(3);
ScreenSongMenu := TScreenSongMenu.Create;
Log.BenchmarkEnd(3); Log.LogBenchmark('====> Screen SongMenu', 3); Log.BenchmarkStart(3);
ScreenSongJumpto := TScreenSongJumpto.Create;
Log.BenchmarkEnd(3); Log.LogBenchmark('====> Screen SongJumpto', 3); Log.BenchmarkStart(3);
ScreenPopupCheck := TScreenPopupCheck.Create;
Log.BenchmarkEnd(3); Log.LogBenchmark('====> Screen Popup (Check)', 3); Log.BenchmarkStart(3);
ScreenPopupError := TScreenPopupError.Create;
Log.BenchmarkEnd(3); Log.LogBenchmark('====> Screen Popup (Error)', 3); Log.BenchmarkStart(3);
ScreenPartyNewRound := TScreenPartyNewRound.Create;
Log.BenchmarkEnd(3); Log.LogBenchmark('====> Screen PartyNewRound', 3); Log.BenchmarkStart(3);
ScreenPartyScore := TScreenPartyScore.Create;
Log.BenchmarkEnd(3); Log.LogBenchmark('====> Screen PartyScore', 3); Log.BenchmarkStart(3);
ScreenPartyWin := TScreenPartyWin.Create;
Log.BenchmarkEnd(3); Log.LogBenchmark('====> Screen PartyWin', 3); Log.BenchmarkStart(3);
ScreenPartyOptions := TScreenPartyOptions.Create;
Log.BenchmarkEnd(3); Log.LogBenchmark('====> Screen PartyOptions', 3); Log.BenchmarkStart(3);
ScreenPartyPlayer := TScreenPartyPlayer.Create;
Log.BenchmarkEnd(3); Log.LogBenchmark('====> Screen PartyPlayer', 3); Log.BenchmarkStart(3);
ScreenStatMain := TScreenStatMain.Create;
Log.BenchmarkEnd(3); Log.LogBenchmark('====> Screen Stat Main', 3); Log.BenchmarkStart(3);
ScreenStatDetail := TScreenStatDetail.Create;
Log.BenchmarkEnd(3); Log.LogBenchmark('====> Screen Stat Detail', 3); Log.BenchmarkStart(3);
//Now Created when needed
//ScreenCredits := TScreenCredits.Create;
//Log.BenchmarkEnd(3); Log.LogBenchmark('====> Screen Credits', 3); Log.BenchmarkStart(3);
end;
end.