hedgewars/uStore.pas
changeset 2428 6800f8aa0184
parent 2426 9d674c5c828d
child 2438 6df2e58b6ab2
--- 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;
 
 ////////////////////////////////////////////////////////////////////////////////