X-Git-Url: http://deadsoftware.ru/gitweb?a=blobdiff_plain;f=src%2Fgame%2Frenders%2Fopengl%2Fr_common.pas;h=331988249b287a83355b7df4e07a522875e6ef15;hb=a2ba3b4f4ea42350560a7670f3be97a55f6d3ab5;hp=174769b68f578edcece9a7b3f17964a8328df372;hpb=00f10879be0376401ea238ab59b49e9ae20b04a8;p=d2df-sdl.git diff --git a/src/game/renders/opengl/r_common.pas b/src/game/renders/opengl/r_common.pas index 174769b..3319882 100644 --- a/src/game/renders/opengl/r_common.pas +++ b/src/game/renders/opengl/r_common.pas @@ -39,6 +39,9 @@ interface var r_Common_ProcessLoadingCallback: TProcedure; + procedure r_Common_FreeAndNil (var obj); + procedure r_Common_FreeMemAndNil (var p); + function r_Common_LoadThis (const name: AnsiString; var here: THereTexture): Boolean; procedure r_Common_FreeThis (var here: THereTexture); @@ -65,11 +68,11 @@ interface procedure r_Common_StepLoading (incval: Integer); procedure r_Common_DrawLoading (force: Boolean); - function r_Common_LoadTextureFromFile (const filename: AnsiString; log: Boolean = True): TGLTexture; - function r_Common_LoadTextureMultiFromFile (const filename: AnsiString; log: Boolean = True): TGLMultiTexture; - function r_Common_LoadTextureMultiFromFileAndInfo (const filename: AnsiString; w, h, count: Integer; log: Boolean = True): TGLMultiTexture; - function r_Common_LoadTextureMultiTextFromFile (const filename: AnsiString; var txt: TAnimTextInfo; log: Boolean = True): TGLMultiTexture; - function r_Common_LoadTextureStreamFromFile (const filename: AnsiString; w, h, count, cw: Integer; st: TGLTextureArray; rs: TRectArray; log: Boolean = True): Boolean; + function r_Common_LoadTextureFromFile (const filename: AnsiString; hints: TGLHintsSet; log: Boolean = True): TGLTexture; + function r_Common_LoadTextureMultiFromFile (const filename: AnsiString; hints: TGLHintsSet; log: Boolean = True): TGLMultiTexture; + function r_Common_LoadTextureMultiFromFileAndInfo (const filename: AnsiString; w, h, count: Integer; hints: TGLHintsSet; log: Boolean = True): TGLMultiTexture; + function r_Common_LoadTextureMultiTextFromFile (const filename: AnsiString; var txt: TAnimTextInfo; hints: TGLHintsSet; log: Boolean = True): TGLMultiTexture; + function r_Common_LoadTextureStreamFromFile (const filename: AnsiString; w, h, count, cw: Integer; st: TGLTextureArray; rs: TRectArray; hints: TGLHintsSet; log: Boolean = True): Boolean; function r_Common_LoadTextureFontFromFile (const filename: AnsiString; constref f: TFontInfo; font2enc: TConvProc; log: Boolean = true): TGLFont; procedure r_Common_Load; @@ -90,6 +93,24 @@ implementation var BackgroundTexture: THereTexture; + procedure r_Common_FreeAndNil (var obj); + var temp: TObject; + begin + temp := TObject(obj); + Pointer(obj) := nil; + if temp <> nil then + temp.Free; + end; + + procedure r_Common_FreeMemAndNil (var p); + var temp: Pointer; + begin + temp := Pointer(p); + Pointer(p) := nil; + if temp <> nil then + FreeMem(temp) + end; + procedure r_Common_GetObjectPos (const obj: TObj; out x, y: Integer); var fx, fy: Integer; begin @@ -299,9 +320,7 @@ implementation procedure r_Common_FreeThis (var here: THereTexture); begin here.name := ''; - if here.id <> nil then - here.id.Free; - here.id := nil; + r_Common_FreeAndNil(here.id); end; function r_Common_LoadThis (const name: AnsiString; var here: THereTexture): Boolean; @@ -309,7 +328,7 @@ implementation if name <> here.name then r_Common_FreeThis(here); if (name <> '') and (here.name <> name) then - here.id := r_Textures_LoadFromFile(name); + here.id := r_Textures_LoadFromFile(name, []); // !!! result := here.id <> nil; @@ -381,9 +400,9 @@ implementation procedure r_Common_Free; begin r_Common_FreeThis(BackgroundTexture); - menufont.Free; - smallfont.Free; - stdfont.Free; + FreeAndNil(menufont); + FreeAndNil(smallfont); + FreeAndNil(stdfont); end; (* --------- Loading screen helpers --------- *) @@ -418,33 +437,33 @@ implementation r_Common_DrawLoading(false); end; - function r_Common_LoadTextureFromFile (const filename: AnsiString; log: Boolean = True): TGLTexture; + function r_Common_LoadTextureFromFile (const filename: AnsiString; hints: TGLHintsSet; log: Boolean = True): TGLTexture; begin - result := r_Textures_LoadFromFile(filename, log); + result := r_Textures_LoadFromFile(filename, hints, log); r_Common_StepLoading(1); end; - function r_Common_LoadTextureMultiFromFile (const filename: AnsiString; log: Boolean = True): TGLMultiTexture; + function r_Common_LoadTextureMultiFromFile (const filename: AnsiString; hints: TGLHintsSet; log: Boolean = True): TGLMultiTexture; begin - result := r_Textures_LoadMultiFromFile(filename, log); + result := r_Textures_LoadMultiFromFile(filename, hints, log); r_Common_StepLoading(1); end; - function r_Common_LoadTextureMultiFromFileAndInfo (const filename: AnsiString; w, h, count: Integer; log: Boolean = True): TGLMultiTexture; + function r_Common_LoadTextureMultiFromFileAndInfo (const filename: AnsiString; w, h, count: Integer; hints: TGLHintsSet; log: Boolean = True): TGLMultiTexture; begin - result := r_Textures_LoadMultiFromFileAndInfo(filename, w, h, count, log); + result := r_Textures_LoadMultiFromFileAndInfo(filename, w, h, count, hints, log); r_Common_StepLoading(1); end; - function r_Common_LoadTextureMultiTextFromFile (const filename: AnsiString; var txt: TAnimTextInfo; log: Boolean = True): TGLMultiTexture; + function r_Common_LoadTextureMultiTextFromFile (const filename: AnsiString; var txt: TAnimTextInfo; hints: TGLHintsSet; log: Boolean = True): TGLMultiTexture; begin - result := r_Textures_LoadMultiTextFromFile(filename, txt, log); + result := r_Textures_LoadMultiTextFromFile(filename, txt, hints, log); r_Common_StepLoading(1); end; - function r_Common_LoadTextureStreamFromFile (const filename: AnsiString; w, h, count, cw: Integer; st: TGLTextureArray; rs: TRectArray; log: Boolean = True): Boolean; + function r_Common_LoadTextureStreamFromFile (const filename: AnsiString; w, h, count, cw: Integer; st: TGLTextureArray; rs: TRectArray; hints: TGLHintsSet; log: Boolean = True): Boolean; begin - r_Textures_LoadStreamFromFile(filename, w, h, count, cw, st, rs, log); + result := r_Textures_LoadStreamFromFile(filename, w, h, count, cw, st, rs, hints, log); r_Common_StepLoading(1); end;