summary | shortlog | log | commit | commitdiff | tree
raw | patch | inline | side by side (parent: 2d858c6)
raw | patch | inline | side by side (parent: 2d858c6)
author | DeaDDooMER <deaddoomer@deadsoftware.ru> | |
Thu, 27 Jan 2022 20:04:18 +0000 (23:04 +0300) | ||
committer | DeaDDooMER <deaddoomer@deadsoftware.ru> | |
Fri, 9 Jun 2023 07:57:34 +0000 (10:57 +0300) |
src/game/opengl/r_render.pas | patch | blob | history | |
src/game/opengl/r_window.pas | patch | blob | history |
index 2e356dd1b68d4e3ab8ffce0c8cb976a501c48e47..203c9c2d3038c2359caf6e7d0e8c547772ea6ba7 100644 (file)
var
LoadedGL: Boolean = false;
+ function GLExtensionList (): SSArray;
+ 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
+ {$IFDEF NOGL_INIT}
+ Result := nogl_ExtensionSupported(ext);
+ {$ELSE}
+ result := false;
+ for e in GLExtensionList() do
+ begin
+ if strEquCI1251(e, ext) then
+ begin
+ result := true;
+ exit
+ end
+ end
+ {$ENDIF}
+ end;
+
+ function HaveNPOTSupport (): Boolean;
+ begin
+ Result := GLExtensionSupported('GL_ARB_texture_non_power_of_two') or
+ GLExtensionSupported('GL_OES_texture_npot')
+ end;
+
+ function HaveFBOSupport (): Boolean;
+ begin
+ Result := GLExtensionSupported('GL_ARB_framebuffer_object') or
+ GLExtensionSupported('GL_OES_framebuffer_object')
+ end;
+
+ procedure PrintGLSupportedExtensions;
+ begin
+ e_LogWritefln('GL Vendor: %s', [glGetString(GL_VENDOR)]);
+ e_LogWritefln('GL Renderer: %s', [glGetString(GL_RENDERER)]);
+ e_LogWritefln('GL Version: %s', [glGetString(GL_VERSION)]);
+ e_LogWritefln('GL Shaders: %s', [glGetString(GL_SHADING_LANGUAGE_VERSION)]);
+ e_LogWritefln('GL Extensions: %s', [glGetString(GL_EXTENSIONS)]);
+ end;
+
+ procedure r_Window_Initialize;
+ begin
+{$IFNDEF USE_SYSSTUB}
+ PrintGLSupportedExtensions;
+ glLegacyNPOT := not HaveNPOTSupport();
+{$ELSE}
+ glLegacyNPOT := False;
+ glRenderToFBO := False;
+{$ENDIF}
+ if glNPOTOverride and glLegacyNPOT then
+ begin
+ glLegacyNPOT := true;
+ e_logWriteln('NPOT texture emulation: FORCED')
+ end
+ else
+ begin
+ if glLegacyNPOT then
+ e_logWriteln('NPOT texture emulation: enabled')
+ else
+ e_logWriteln('NPOT texture emulation: disabled')
+ end
+ end;
+
procedure LoadGL;
+ var fboload: Boolean;
begin
if LoadedGL = false then
begin
{$IFDEF NOGL_INIT}
nogl_Init;
- if glRenderToFBO and (not nogl_ExtensionSupported('GL_OES_framebuffer_object')) then
- begin
- e_LogWriteln('GL: framebuffer objects not supported; disabling FBO rendering');
- glRenderToFBO := false
- end;
- {$ELSE}
- if glRenderToFBO and (not Load_GL_ARB_framebuffer_object) then
+ {$ENDIF}
+ if glRenderToFBO then
+ begin
+ fboload := True;
+ {$IFDEF NOGL_INIT}
+ fboload := True; // !!! but if not?
+ {$ELSE}
+ fboload := Load_GL_ARB_framebuffer_object();
+ {$ENDIF}
+ if (fboload = False) or (HaveFBOSupport() = False) or (HaveNPOTSupport() = False) then
begin
e_LogWriteln('GL: framebuffer objects not supported; disabling FBO rendering');
glRenderToFBO := false
end;
- {$ENDIF}
+ end;
LoadedGL := true
end
end;
index a35aaeff85842493e4df5fe2b7aafda01b8e7cfb..9b7100f4ea05ff642754341043a7cf188f0d8a8d 100644 (file)
interface
procedure r_Window_DrawLoading (forceUpdate: Boolean);
- procedure r_Window_Initialize;
implementation
end;
end;
- function GLExtensionList (): SSArray;
- 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 strEquCI1251(e, ext) then
- begin
- result := true;
- exit
- end
- end
- end;
-
- procedure PrintGLSupportedExtensions;
- begin
- e_LogWritefln('GL Vendor: %s', [glGetString(GL_VENDOR)]);
- e_LogWritefln('GL Renderer: %s', [glGetString(GL_RENDERER)]);
- e_LogWritefln('GL Version: %s', [glGetString(GL_VERSION)]);
- e_LogWritefln('GL Shaders: %s', [glGetString(GL_SHADING_LANGUAGE_VERSION)]);
- e_LogWritefln('GL Extensions: %s', [glGetString(GL_EXTENSIONS)]);
- end;
-
- procedure r_Window_Initialize;
- begin
-{$IFNDEF USE_SYSSTUB}
- PrintGLSupportedExtensions;
- glLegacyNPOT := not (GLExtensionSupported('GL_ARB_texture_non_power_of_two') or GLExtensionSupported('GL_OES_texture_npot'));
-{$ELSE}
- glLegacyNPOT := False;
- glRenderToFBO := False;
-{$ENDIF}
- if glNPOTOverride and glLegacyNPOT then
- begin
- glLegacyNPOT := true;
- e_logWriteln('NPOT texture emulation: FORCED')
- end
- else
- begin
- if glLegacyNPOT then
- e_logWriteln('NPOT texture emulation: enabled')
- else
- e_logWriteln('NPOT texture emulation: disabled')
- end
- end;
-
end.