--- a/hedgewars/uStore.pas Mon Oct 12 13:56:07 2009 +0000
+++ b/hedgewars/uStore.pas Mon Oct 12 16:44:30 2009 +0000
@@ -22,7 +22,7 @@
{$IFDEF GLES11}
gles11,
{$ELSE}
- GL,
+ GL, GLext,
{$ENDIF}
uFloat;
{$INCLUDE options.inc}
@@ -64,6 +64,7 @@
SyncTexture,
ConfirmTexture: PTexture;
cScaleFactor: GLfloat = 2.0;
+ SupportNPOTT: Boolean = false;
implementation
uses uMisc, uConsole, uLand, uLocale, uWorld;
@@ -347,7 +348,7 @@
_l, _r, _t, _b: real;
VertexBuffer, TextureBuffer: array [0..3] of TVertex2f;
begin
-if SourceTexture^.h = 0 then exit;
+if (SourceTexture^.h = 0) or (SourceTexture^.w = 0) then exit;
rr.x:= X;
rr.y:= Y;
rr.w:= r^.w;
@@ -967,32 +968,56 @@
LoadImage:= tmpsurf //Result
end;
+function glLoadExtension(extension : string) : boolean;
+begin
+ glLoadExtension:= glext_LoadExtension(extension);
+ if not glLoadExtension then
+ WriteLnToConsole('OpenGL: "' + extension + '" failed to load')
+ else
+ WriteLnToConsole('OpenGL: "' + extension + '" loaded');
+end;
+
procedure SetupOpenGL;
begin
-SetScale(2.0);
-
-glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
-glMatrixMode(GL_MODELVIEW);
-
glGetIntegerv(GL_MAX_TEXTURE_SIZE, @MaxTextureSize);
{$IFDEF DEBUGFILE}
AddFileLog('GL_MAX_TEXTURE_SIZE: ' + inttostr(MaxTextureSize));
{$ENDIF}
+{$IFNDEF GLES11}
+SupportNPOTT:= glLoadExtension('GL_ARB_texture_non_power_of_two');
+{$ENDIF}
+
+// set view port to whole window
+glViewport(0, 0, cScreenWidth, cScreenHeight);
+
+glMatrixMode(GL_MODELVIEW);
+// prepare default translation/scaling
+glLoadIdentity;
+glScalef(2.0 / cScreenWidth, -2.0 / cScreenHeight, 1.0);
+glTranslatef(0, -cScreenHeight / 2, 0);
+
+// enable alpha blending
+glEnable(GL_BLEND);
+glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
end;
procedure SetScale(f: GLfloat);
begin
-cScaleFactor:= f;
+// leave immediately if scale factor didn't change
+if f = cScaleFactor then exit;
-glLoadIdentity;
-glViewport(0, 0, cScreenWidth, cScreenHeight);
-glScalef(f / cScreenWidth, -f / cScreenHeight, 1.0);
-//glTranslatef(-cScreenWidth / 2, -cScreenHeight / 2, 0);
-glTranslatef(0, -cScreenHeight / 2, 0);
+if f = 2.0 then // default scaling
+ glPopMatrix // "return" to default scaling
+else // other scaling
+ begin
+ glPushMatrix; // save default scaling
+ glLoadIdentity;
+ glScalef(f / cScreenWidth, -f / cScreenHeight, 1.0);
+ glTranslatef(0, -cScreenHeight / 2, 0);
+ end;
-// glTranslatex(320, 0, 0);
-// glRotatef(90.0, 0.0, 0.0, 1.0);
+cScaleFactor:= f;
end;
////////////////////////////////////////////////////////////////////////////////