diff --git a/ddraw.rc b/ddraw.rc
index 00c8d00..1bf4acf 100644
--- a/ddraw.rc
+++ b/ddraw.rc
@@ -1,6 +1,12 @@
+#define vstr(v) vxstr(v)
+#define vxstr(a,b,c,d) str(a##.##b##.##c##.##d)
+#define str(s) #s
+
+#define VERSION 1,1,6,4
+
 1 VERSIONINFO
-FILEVERSION 1,1,6,3
-PRODUCTVERSION 1,1,6,3
+FILEVERSION VERSION
+PRODUCTVERSION VERSION
 {
     BLOCK "StringFileInfo"
     {
@@ -8,13 +14,13 @@ PRODUCTVERSION 1,1,6,3
         {
             VALUE "CompanyName", "cncnet.org"
             VALUE "FileDescription", "DirectDraw replacement for C&C95 and Red Alert"
-            VALUE "FileVersion", "1.1.6.3"
+            VALUE "FileVersion", vstr(VERSION)
             VALUE "InternalName", "ddraw"
             VALUE "LegalCopyright", "Copyright (c) 2010-2018"
             VALUE "LegalTrademarks", ""
             VALUE "OriginalFileName", "ddraw.dll"
             VALUE "ProductName", "DirectDraw replacement for C&C95 and Red Alert"
-            VALUE "ProductVersion", "1.1.6.3"
+            VALUE "ProductVersion", vstr(VERSION)
             VALUE "Comments", "https://cncnet.org"
         }
     }
diff --git a/src/render.c b/src/render.c
index 3371d6f..c0bc605 100644
--- a/src/render.c
+++ b/src/render.c
@@ -86,8 +86,13 @@ DWORD WINAPI render_main(void)
     if (ddraw->render.maxfps > 0)
         frame_len = 1000.0f / ddraw->render.maxfps;
 
-    int tex_width = ddraw->width <= 512 ? 512 : ddraw->width <= 1024 ? 1024 : ddraw->width > 2048 ? ddraw->width : 2048;
-    int tex_height = ddraw->height > tex_width ? ddraw->height : tex_width;
+    int tex_width = 
+        ddraw->width <= 1024 ? 1024 : ddraw->width <= 2048 ? 2048 : ddraw->width <= 4096 ? 4096 : ddraw->width;
+    int tex_height = 
+        ddraw->height <= tex_width ? tex_width : ddraw->height <= 2048 ? 2048 : ddraw->height <= 4096 ? 4096 : ddraw->height;
+    
+    tex_width = tex_width > tex_height ? tex_width : tex_height;
+
     int tex_size = tex_width * tex_height * sizeof(int);
     int *tex = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, tex_size);
 
@@ -138,22 +143,22 @@ DWORD WINAPI render_main(void)
 
     while (glGetError() != GL_NO_ERROR);
 
-    glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA8, 256, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0);
+    glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA8, 256, 256, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0);
     if (glGetError() != GL_NO_ERROR)
-        glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, 256, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0);
+        glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, 256, 256, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0);
 
     glViewport(
         ddraw->render.viewport.x, ddraw->render.viewport.y,
         ddraw->render.viewport.width, ddraw->render.viewport.height);
 
-    GLint surfaceUniLoc = 0, paletteUniLoc = 0;
+    GLint surfaceUniLoc = -1, paletteUniLoc = -1;
     if (paletteConvProgram)
     {
         surfaceUniLoc = glGetUniformLocation(paletteConvProgram, "SurfaceTex");
         paletteUniLoc = glGetUniformLocation(paletteConvProgram, "PaletteTex");
     }
 
-    GLint textureUniLoc = -1, texCoordUniLoc = -1, frameCountUniLoc = -1;
+    GLint textureUniLoc = -1, texCoordAttrLoc = -1, frameCountUniLoc = -1;
     GLuint frameBufferId = 0;
     GLuint frameBufferTexId = 0;
     GLuint vboBuffers[3];
@@ -162,8 +167,8 @@ DWORD WINAPI render_main(void)
     {
         glUseProgram(scaleProgram);
 
-        GLint vertexCoordUniLoc = glGetAttribLocation(scaleProgram, "VertexCoord");
-        texCoordUniLoc = glGetAttribLocation(scaleProgram, "TexCoord");
+        GLint vertexCoordAttrLoc = glGetAttribLocation(scaleProgram, "VertexCoord");
+        texCoordAttrLoc = glGetAttribLocation(scaleProgram, "TexCoord");
         textureUniLoc = glGetUniformLocation(scaleProgram, "Texture");
         frameCountUniLoc = glGetUniformLocation(scaleProgram, "FrameCount");
 
@@ -177,8 +182,8 @@ DWORD WINAPI render_main(void)
            -1.0f,-1.0f,
         };
         glBufferData(GL_ARRAY_BUFFER, sizeof(vertexCoord), vertexCoord, GL_STATIC_DRAW);
-        glVertexAttribPointer(vertexCoordUniLoc, 2, GL_FLOAT, GL_FALSE, 0, NULL);
-        glEnableVertexAttribArray(vertexCoordUniLoc);
+        glVertexAttribPointer(vertexCoordAttrLoc, 2, GL_FLOAT, GL_FALSE, 0, NULL);
+        glEnableVertexAttribArray(vertexCoordAttrLoc);
 
         glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, vboBuffers[2]);
         static const GLushort indices[] =
@@ -378,8 +383,8 @@ DWORD WINAPI render_main(void)
             };
 
             glBufferData(GL_ARRAY_BUFFER, sizeof(texCoord), texCoord, GL_STATIC_DRAW);
-            glVertexAttribPointer(texCoordUniLoc, 2, GL_FLOAT, GL_FALSE, 0, NULL);
-            glEnableVertexAttribArray(texCoordUniLoc);
+            glVertexAttribPointer(texCoordAttrLoc, 2, GL_FLOAT, GL_FALSE, 0, NULL);
+            glEnableVertexAttribArray(texCoordAttrLoc);
 
             glBindBuffer(GL_ARRAY_BUFFER, 0);