X-Git-Url: http://deadsoftware.ru/gitweb?a=blobdiff_plain;f=src%2Feditor%2Ff_main.pas;h=0c912cf20500d7b4250e7941ac44e1d46bfd32ff;hb=8884087574b816e115a2de2b6ba33056c18886c7;hp=4d62e2ef6a0c04dfe7d373b0ac7b515dc997f174;hpb=14c9180472098d8e0ae23d4a0ca66d9df228f18d;p=d2df-editor.git diff --git a/src/editor/f_main.pas b/src/editor/f_main.pas index 4d62e2e..0c912cf 100644 --- a/src/editor/f_main.pas +++ b/src/editor/f_main.pas @@ -271,6 +271,7 @@ type procedure FormKeyUp(Sender: TObject; var Key: Word; Shift: TShiftState); private + LastDrawTime: UInt64; procedure Draw(); procedure OnIdle(Sender: TObject; var Done: Boolean); procedure RefillRecentMenu (menu: TMenuItem; start: Integer; fmt: AnsiString); @@ -2671,6 +2672,7 @@ var s: String; begin Randomize(); + LastDrawTime := 0; {$IFDEF DARWIN} miApple.Enabled := True; @@ -2756,6 +2758,8 @@ begin config := TConfig.CreateFile(CfgFileName); + gWADEditorLogLevel := config.ReadInt('WADEditor', 'LogLevel', DFWAD_LOG_DEFAULT); + if config.ReadInt('Editor', 'XPos', -1) = -1 then Position := poDesktopCenter else begin @@ -2862,6 +2866,23 @@ begin e_TextureFontPrintEx(X, Y, Text, FontID, 0, 0, 0, 1.0); end; +procedure InitGraphics; +begin + // FIXME: this is a shitty hack + if not gDataLoaded then + begin + e_WriteLog('Init OpenGL', MSG_NOTIFY); + e_InitGL(); + e_WriteLog('Loading data', MSG_NOTIFY); + LoadStdFont('STDTXT', 'STDFONT', gEditorFont); + e_WriteLog('Loading more data', MSG_NOTIFY); + LoadData(); + e_WriteLog('Loading even more data', MSG_NOTIFY); + gDataLoaded := True; + MainForm.FormResize(nil); + end; +end; + procedure TMainForm.Draw(); var x, y: Integer; @@ -2872,11 +2893,14 @@ var ObjCount: Word; aX, aY, aX2, aY2, XX, ScaleSz: Integer; begin + LastDrawTime := GetTickCount64(); ID := 0; PID := 0; Width := 0; Height := 0; + InitGraphics(); + e_BeginRender(); e_Clear(GL_COLOR_BUFFER_BIT, @@ -2928,22 +2952,23 @@ begin else a := 0; + glDisable(GL_TEXTURE_2D); + glColor3ub(GetRValue(DotColor), GetGValue(DotColor), GetBValue(DotColor)); + glPointSize(DotSize); + glBegin(GL_POINTS); x := MapOffset.X mod DotStep; - y := MapOffset.Y mod DotStep; - while x < RenderPanel.Width do begin + y := MapOffset.Y mod DotStep; while y < RenderPanel.Height do begin - e_DrawPoint(DotSize, x + a, y + a, - GetRValue(DotColor), - GetGValue(DotColor), - GetBValue(DotColor)); + glVertex2i(x + a, y + a); y += DotStep; end; x += DotStep; - y := MapOffset.Y mod DotStep; end; + glEnd(); + glColor4ub(e_Colors.R, e_Colors.G, e_Colors.B, 255); end; // Превью текстуры: @@ -3759,7 +3784,12 @@ begin if Button = mbMiddle then MouseMDown := False; - DrawRect := nil; + if DrawRect <> nil then + begin + Dispose(DrawRect); + DrawRect := nil; + end; + ResizeType := RESIZETYPE_NONE; TextureID := 0; @@ -4324,8 +4354,11 @@ begin end; // Клавиши мыши не зажаты: - if (not MouseRDown) and (not MouseLDown) then + if (not MouseRDown) and (not MouseLDown) and (DrawRect <> nil) then + begin + Dispose(DrawRect); DrawRect := nil; + end; // Строка состояния - координаты мыши: StatusBar.Panels[1].Text := Format('(%d:%d)', @@ -4355,6 +4388,8 @@ var begin config := TConfig.CreateFile(CfgFileName); + config.WriteInt('WADEditor', 'LogLevel', gWADEditorLogLevel); + if WindowState <> wsMaximized then begin config.WriteInt('Editor', 'XPos', Left); @@ -6687,22 +6722,15 @@ begin end; procedure TMainForm.OnIdle(Sender: TObject; var Done: Boolean); + const MaxFPS = 60; var f: AnsiString; begin - // FIXME: this is a shitty hack - if not gDataLoaded then + // TODO: move refresh to user actions (ask to repaint only when something changed) + if GetTickCount64() - LastDrawTime >= 1000 div MaxFPS then begin - e_WriteLog('Init OpenGL', MSG_NOTIFY); - e_InitGL(); - e_WriteLog('Loading data', MSG_NOTIFY); - LoadStdFont('STDTXT', 'STDFONT', gEditorFont); - e_WriteLog('Loading more data', MSG_NOTIFY); - LoadData(); - e_WriteLog('Loading even more data', MSG_NOTIFY); - gDataLoaded := True; - MainForm.FormResize(nil); + PanelMap.Refresh; end; - Draw(); + if StartMap <> '' then begin f := StartMap;