DEADSOFTWARE

gl: detect NPOT support
authorDeaDDooMER <deaddoomer@deadsoftware.ru>
Fri, 8 Sep 2023 12:05:59 +0000 (15:05 +0300)
committerDeaDDooMER <deaddoomer@deadsoftware.ru>
Fri, 8 Sep 2023 12:05:59 +0000 (15:05 +0300)
src/engine/e_graphics.pas
src/engine/e_textures.pas

index 96513d90755f8abcbe1e5237a36767dd8c45316f..b47556bdbedce1eaee8dee480f7660c24ec366ac 100644 (file)
@@ -172,6 +172,8 @@ type
     Pixels: Pointer;
   end;
 
+  ArrayOfAnsiString = array of AnsiString;
+
 var
   e_Textures: array of TTexture = nil;
   e_TextureFonts: array of TTextureFont = nil;
@@ -180,6 +182,43 @@ var
 
 //function e_getTextGLId (ID: DWORD): GLuint; begin result := e_Textures[ID].tx.id; end;
 
+function GLExtensionList(): ArrayOfAnsiString;
+  var s: PChar; i, j, num: GLint;
+begin
+  result := nil;
+  s := glGetString(GL_EXTENSIONS);
+  if s <> nil then
+  begin
+    num := 0;
+    i := 0;
+    j := 0;
+    while (s[i] <> #0) and (s[i] = ' ') do Inc(i);
+    while (s[i] <> #0) do
+    begin
+      while (s[i] <> #0) and (s[i] <> ' ') do Inc(i);
+      SetLength(Result, num + 1);
+      Result[num] := Copy(s, j + 1, i - j);
+      while (s[i] <> #0) and (s[i] = ' ') do Inc(i);
+      j := i;
+      Inc(num);
+    end;
+  end;
+end;
+
+function GLExtensionSupported(ext: AnsiString): Boolean;
+  var e: AnsiString;
+begin
+  result := false;
+  for e in GLExtensionList() do
+  begin
+    if CompareText(e, ext) = 0 then
+    begin
+      Result := True;
+      exit;
+    end;
+  end;
+end;
+
 //------------------------------------------------------------------
 // Èíèöèàëèçèðóåò OpenGL
 //------------------------------------------------------------------
@@ -190,6 +229,7 @@ begin
     e_DummyTextures := True;
     Exit;
   end;
+  e_glLegacyNPOT := not (GLExtensionSupported('GL_ARB_texture_non_power_of_two') or GLExtensionSupported('GL_OES_texture_npot'));
   e_Colors.R := 255;
   e_Colors.G := 255;
   e_Colors.B := 255;
index 7e1bceaa7b7b1a3a164a23c138baaa2f1fdb1b46..e484acba06ca96058e457a3edf6cbd716614604d 100644 (file)
@@ -36,7 +36,7 @@ type
 
 var
   e_DummyTextures: Boolean = False;
-  e_glLegacyNPOT: Boolean = False;
+  e_glLegacyNPOT: Boolean = True;
   TEXTUREFILTER: Integer = GL_NEAREST;
 
 function CreateTexture (var tex: GLTexture; Width, Height, aFormat: Word; pData: Pointer): Boolean;