X-Git-Url: http://deadsoftware.ru/gitweb?a=blobdiff_plain;f=src%2Fgame%2Fg_textures.pas;h=0688391518db7252157ff16858960d6636178899;hb=df5fff669125c1fbd1324ce02a0afe28612f1ddc;hp=93d8c63d056e93ad0fc5fef015b1b637173b6ad6;hpb=8558702f560e3faf9be93f96dfffbf4b6ba34c90;p=d2df-sdl.git diff --git a/src/game/g_textures.pas b/src/game/g_textures.pas index 93d8c63..0688391 100644 --- a/src/game/g_textures.pas +++ b/src/game/g_textures.pas @@ -13,7 +13,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . *) -{$MODE DELPHI} +{$INCLUDE ../shared/a_modes.inc} unit g_textures; interface @@ -99,8 +99,8 @@ function g_Frames_CreateFile(ID: PDWORD; Name: ShortString; FileName: String; function g_Frames_CreateMemory(ID: PDWORD; Name: ShortString; pData: Pointer; dataSize: LongInt; FWidth, FHeight, FCount: Word; BackAnimation: Boolean = False): Boolean; //function g_Frames_CreateRevert(ID: PDWORD; Name: ShortString; Frames: string): Boolean; -function g_Frames_Get(var ID: DWORD; FramesName: ShortString): Boolean; -function g_Frames_GetTexture(var ID: DWORD; FramesName: ShortString; Frame: Word): Boolean; +function g_Frames_Get(out ID: DWORD; FramesName: ShortString): Boolean; +function g_Frames_GetTexture(out ID: DWORD; FramesName: ShortString; Frame: Word): Boolean; function g_Frames_Exists(FramesName: String): Boolean; procedure g_Frames_DeleteByName(FramesName: ShortString); procedure g_Frames_DeleteByID(ID: DWORD); @@ -108,11 +108,13 @@ procedure g_Frames_DeleteAll(); procedure DumpTextureNames(); +function g_Texture_Light(): Integer; + implementation uses g_game, e_log, g_basic, SysUtils, g_console, wadreader, - g_language; + g_language, GL; type _TTexture = record @@ -570,7 +572,7 @@ begin FramesArray := nil; end; -function g_Frames_Get(var ID: DWORD; FramesName: ShortString): Boolean; +function g_Frames_Get(out ID: DWORD; FramesName: ShortString): Boolean; var a: DWORD; begin @@ -593,7 +595,7 @@ begin g_FatalError(Format(_lc[I_GAME_ERROR_FRAMES], [FramesName])); end; -function g_Frames_GetTexture(var ID: DWORD; FramesName: ShortString; Frame: Word): Boolean; +function g_Frames_GetTexture(out ID: DWORD; FramesName: ShortString; Frame: Word): Boolean; var a: DWORD; begin @@ -843,4 +845,64 @@ begin Mem.ReadBoolean(FRevert); end; + +var + ltexid: GLuint = 0; + +function g_Texture_Light(): Integer; +const + Radius: Integer = 128; +var + tex, tpp: PByte; + x, y, a: Integer; + dist: Double; +begin + if ltexid = 0 then + begin + GetMem(tex, (Radius*2)*(Radius*2)*4); + tpp := tex; + for y := 0 to Radius*2-1 do + begin + for x := 0 to Radius*2-1 do + begin + dist := 1.0-sqrt((x-Radius)*(x-Radius)+(y-Radius)*(y-Radius))/Radius; + if (dist < 0) then + begin + tpp^ := 0; Inc(tpp); + tpp^ := 0; Inc(tpp); + tpp^ := 0; Inc(tpp); + tpp^ := 0; Inc(tpp); + end + else + begin + //tc.setPixel(x, y, Color(cast(int)(dist*255), cast(int)(dist*255), cast(int)(dist*255))); + if (dist > 0.5) then dist := 0.5; + a := round(dist*255); + if (a < 0) then a := 0 else if (a > 255) then a := 255; + tpp^ := 255; Inc(tpp); + tpp^ := 255; Inc(tpp); + tpp^ := 255; Inc(tpp); + tpp^ := Byte(a); Inc(tpp); + end; + end; + end; + + glGenTextures(1, @ltexid); + //if (tid == 0) assert(0, "VGL: can't create screen texture"); + + glBindTexture(GL_TEXTURE_2D, ltexid); + glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); + glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); + glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); + + //GLfloat[4] bclr = 0.0; + //glTexParameterfv(GL_TEXTURE_2D, GL_TEXTURE_BORDER_COLOR, bclr.ptr); + + glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, Radius*2, Radius*2, 0, GL_RGBA{gltt}, GL_UNSIGNED_BYTE, tex); + end; + + result := ltexid; +end; + end.