diff --git a/Source/Core/Data/DataManager.cs b/Source/Core/Data/DataManager.cs
index 669505956faf9c448c8266a3f305f426da2aaa88..12203661a72531adc457b90909493c3ecd1dd856 100755
--- a/Source/Core/Data/DataManager.cs
+++ b/Source/Core/Data/DataManager.cs
@@ -3454,7 +3454,7 @@ namespace CodeImp.DoomBuilder.Data
             // Set render settings...
             General.Map.Graphics.SetZEnable(false);
             General.Map.Graphics.SetCullMode(Cull.None);
-            General.Map.Graphics.SetSamplerState(0, TextureAddress.Clamp);
+            General.Map.Graphics.SetSamplerState(TextureAddress.Clamp);
 			
 			// Setup matrices
 			Vector3 offset = new Vector3(0f, 0f, -1.8f); // Sphere size is 10 mu
@@ -3479,9 +3479,9 @@ namespace CodeImp.DoomBuilder.Data
 					// Set appropriate texture
 					switch(meshes.Skins[j])
 					{
-						case "top.png": General.Map.Graphics.SetTexture(0, textop); break;
-						case "bottom.png": General.Map.Graphics.SetTexture(0, texbottom); break;
-						case "side.png": General.Map.Graphics.SetTexture(0, texside); break;
+						case "top.png": General.Map.Graphics.SetTexture(textop); break;
+						case "bottom.png": General.Map.Graphics.SetTexture(texbottom); break;
+						case "side.png": General.Map.Graphics.SetTexture(texside); break;
 						default: throw new Exception("Unexpected skin!");
 					}
 
diff --git a/Source/Core/Rendering/RenderDevice.cs b/Source/Core/Rendering/RenderDevice.cs
index 336c1906bae9468e9aca8b0e7d98f912286ddd6d..e56071c642e611f2acbfd4f91e9149002917e45b 100755
--- a/Source/Core/Rendering/RenderDevice.cs
+++ b/Source/Core/Rendering/RenderDevice.cs
@@ -182,29 +182,29 @@ namespace CodeImp.DoomBuilder.Rendering
             RenderDevice_SetZWriteEnable(Handle, value);
         }
 
-        public void SetTexture(int unit, BaseTexture value)
+        public void SetTexture(BaseTexture value)
         {
-            RenderDevice_SetTexture(Handle, unit, value != null ? value.Handle : IntPtr.Zero);
+            RenderDevice_SetTexture(Handle, value != null ? value.Handle : IntPtr.Zero);
         }
 
-        public void SetSamplerFilter(int unit, TextureFilter filter)
+        public void SetSamplerFilter(TextureFilter filter)
         {
-            SetSamplerFilter(unit, filter, filter, TextureFilter.None, 0.0f);
+            SetSamplerFilter(filter, filter, TextureFilter.None, 0.0f);
         }
 
-        public void SetSamplerFilter(int unit, TextureFilter minfilter, TextureFilter magfilter, TextureFilter mipfilter, float maxanisotropy)
+        public void SetSamplerFilter(TextureFilter minfilter, TextureFilter magfilter, TextureFilter mipfilter, float maxanisotropy)
         {
-            RenderDevice_SetSamplerFilter(Handle, unit, minfilter, magfilter, mipfilter, maxanisotropy);
+            RenderDevice_SetSamplerFilter(Handle, minfilter, magfilter, mipfilter, maxanisotropy);
         }
 
-        public void SetSamplerState(int unit, TextureAddress address)
+        public void SetSamplerState(TextureAddress address)
         {
-            SetSamplerState(unit, address, address, address);
+            SetSamplerState(address, address, address);
         }
 
-        public void SetSamplerState(int unit, TextureAddress addressU, TextureAddress addressV, TextureAddress addressW)
+        public void SetSamplerState(TextureAddress addressU, TextureAddress addressV, TextureAddress addressW)
         {
-            RenderDevice_SetSamplerState(Handle, unit, addressU, addressV, addressW);
+            RenderDevice_SetSamplerState(Handle, addressU, addressV, addressW);
         }
 
         public void DrawIndexed(PrimitiveType type, int startIndex, int primitiveCount)
@@ -351,11 +351,11 @@ namespace CodeImp.DoomBuilder.Rendering
 			SetZWriteEnable(false);
 			
 			// Texture addressing
-			SetSamplerState(0, TextureAddress.Wrap);
+			SetSamplerState(TextureAddress.Wrap);
 			
             //mxd. It's still nice to have anisotropic filtering when texture filtering is disabled
             TextureFilter magminfilter = (General.Settings.VisualBilinear ? TextureFilter.Linear : TextureFilter.Point);
-            SetSamplerFilter(0,
+            SetSamplerFilter(
                 General.Settings.FilterAnisotropy > 1.0f ? TextureFilter.Anisotropic : magminfilter,
                 magminfilter,
                 General.Settings.VisualBilinear ? TextureFilter.Linear : TextureFilter.None, // [SB] use None, otherwise textures are still filtered
@@ -416,13 +416,13 @@ namespace CodeImp.DoomBuilder.Rendering
         static extern void RenderDevice_SetZWriteEnable(IntPtr handle, bool value);
 
         [DllImport("BuilderNative.dll", CallingConvention = CallingConvention.Cdecl)]
-        static extern void RenderDevice_SetTexture(IntPtr handle, int unit, IntPtr texture);
+        static extern void RenderDevice_SetTexture(IntPtr handle, IntPtr texture);
 
         [DllImport("BuilderNative.dll", CallingConvention = CallingConvention.Cdecl)]
-        static extern void RenderDevice_SetSamplerFilter(IntPtr handle, int unit, TextureFilter minfilter, TextureFilter magfilter, TextureFilter mipfilter, float maxanisotropy);
+        static extern void RenderDevice_SetSamplerFilter(IntPtr handle, TextureFilter minfilter, TextureFilter magfilter, TextureFilter mipfilter, float maxanisotropy);
 
         [DllImport("BuilderNative.dll", CallingConvention = CallingConvention.Cdecl)]
-        static extern void RenderDevice_SetSamplerState(IntPtr handle, int unit, TextureAddress addressU, TextureAddress addressV, TextureAddress addressW);
+        static extern void RenderDevice_SetSamplerState(IntPtr handle, TextureAddress addressU, TextureAddress addressV, TextureAddress addressW);
 
         [DllImport("BuilderNative.dll", CallingConvention = CallingConvention.Cdecl)]
         static extern void RenderDevice_Draw(IntPtr handle, PrimitiveType type, int startIndex, int primitiveCount);
diff --git a/Source/Core/Rendering/Renderer2D.cs b/Source/Core/Rendering/Renderer2D.cs
index d9885865b3c73da2b8e634c7956466ea6e329f87..ab6f607361dc299fa47383ec400eac177d18c10d 100755
--- a/Source/Core/Rendering/Renderer2D.cs
+++ b/Source/Core/Rendering/Renderer2D.cs
@@ -238,7 +238,7 @@ namespace CodeImp.DoomBuilder.Rendering
 					case RendererLayer.Background:
 						if((backimageverts == null) || (General.Map.Grid.Background.Texture == null)) break;
                         graphics.SetShader(aapass);
-                        graphics.SetTexture(0, General.Map.Grid.Background.Texture);
+                        graphics.SetTexture(General.Map.Grid.Background.Texture);
 						SetDisplay2DSettings(1f / windowsize.Width, 1f / windowsize.Height, FSAA_FACTOR, layer.alpha, false, true);
 						graphics.Draw(PrimitiveType.TriangleStrip, 0, 2, backimageverts);
 						graphics.SetVertexBuffer(screenverts);
@@ -247,7 +247,7 @@ namespace CodeImp.DoomBuilder.Rendering
 					// GRID
 					case RendererLayer.Grid:
                         graphics.SetShader(aapass);
-                        graphics.SetTexture(0, backtex);
+                        graphics.SetTexture(backtex);
 						SetDisplay2DSettings(1f / backsize.Width, 1f / backsize.Height, FSAA_FACTOR, layer.alpha, false, true);
 						graphics.Draw(PrimitiveType.TriangleStrip, 0, 2);
 						break;
@@ -255,7 +255,7 @@ namespace CodeImp.DoomBuilder.Rendering
 					// GEOMETRY
 					case RendererLayer.Geometry:
                         graphics.SetShader(aapass);
-                        graphics.SetTexture(0, plottertex);
+                        graphics.SetTexture(plottertex);
 						SetDisplay2DSettings(1f / structsize.Width, 1f / structsize.Height, FSAA_FACTOR, layer.alpha, false, false);
 						graphics.Draw(PrimitiveType.TriangleStrip, 0, 2);
 						break;
@@ -263,7 +263,7 @@ namespace CodeImp.DoomBuilder.Rendering
 					// THINGS
 					case RendererLayer.Things:
                         graphics.SetShader(aapass);
-                        graphics.SetTexture(0, thingstex);
+                        graphics.SetTexture(thingstex);
 						SetDisplay2DSettings(1f / thingssize.Width, 1f / thingssize.Height, FSAA_FACTOR, layer.alpha, false, true);
 						graphics.Draw(PrimitiveType.TriangleStrip, 0, 2);
 						break;
@@ -271,7 +271,7 @@ namespace CodeImp.DoomBuilder.Rendering
 					// OVERLAY
 					case RendererLayer.Overlay:
                         graphics.SetShader(aapass);
-                        graphics.SetTexture(0, overlaytex);
+                        graphics.SetTexture(overlaytex);
 						SetDisplay2DSettings(1f / overlaysize.Width, 1f / overlaysize.Height, FSAA_FACTOR, layer.alpha, false, true);
 						graphics.Draw(PrimitiveType.TriangleStrip, 0, 2);
 						break;
@@ -279,7 +279,7 @@ namespace CodeImp.DoomBuilder.Rendering
 					// SURFACE
 					case RendererLayer.Surface:
                         graphics.SetShader(aapass);
-                        graphics.SetTexture(0, surfacetex);
+                        graphics.SetTexture(surfacetex);
 						SetDisplay2DSettings(1f / overlaysize.Width, 1f / overlaysize.Height, FSAA_FACTOR, layer.alpha, false, true);
 						graphics.Draw(PrimitiveType.TriangleStrip, 0, 2);
 						break;
@@ -291,7 +291,7 @@ namespace CodeImp.DoomBuilder.Rendering
 			graphics.Present();
 
 			// Release binds
-			graphics.SetTexture(0, null);
+			graphics.SetTexture(null);
 			graphics.SetVertexBuffer(null);
 		}
 		
@@ -502,7 +502,7 @@ namespace CodeImp.DoomBuilder.Rendering
                 graphics.SetUniform(UniformName.transformsettings, worldmatrix * viewmatrix * Matrix.Scaling(1f, -1f, 1f));
             else
                 graphics.SetUniform(UniformName.transformsettings, worldmatrix * viewmatrix);
-            graphics.SetSamplerFilter(0, bilinear ? TextureFilter.Linear : TextureFilter.Point);
+            graphics.SetSamplerFilter(bilinear ? TextureFilter.Linear : TextureFilter.Point);
         }
 
         private void SetThings2DSettings(float alpha)
@@ -1236,7 +1236,7 @@ namespace CodeImp.DoomBuilder.Rendering
 				graphics.SetVertexBuffer(thingsvertices);
 				
 				// Set things texture
-				graphics.SetTexture(0, General.Map.Data.ThingTexture.Texture); //mxd
+				graphics.SetTexture(General.Map.Data.ThingTexture.Texture); //mxd
 				SetWorldTransformation(false);
                 graphics.SetShader(ShaderName.things2d_thing);
 				SetThings2DSettings(alpha);
@@ -1349,7 +1349,7 @@ namespace CodeImp.DoomBuilder.Rendering
 						}
 						if(sprite.Texture == null) sprite.CreateTexture();
 
-						graphics.SetTexture(0, sprite.Texture);
+						graphics.SetTexture(sprite.Texture);
 
 						// Determine next lock size
 						locksize = (framegroup.Value.Count > THING_BUFFER_SIZE) ? THING_BUFFER_SIZE : framegroup.Value.Count;
@@ -1444,7 +1444,7 @@ namespace CodeImp.DoomBuilder.Rendering
 				}
 
 				//mxd. Render thing arrows
-				graphics.SetTexture(0, General.Map.Data.ThingTexture.Texture);
+				graphics.SetTexture(General.Map.Data.ThingTexture.Texture);
                 graphics.SetShader(ShaderName.things2d_thing);
 
 				// Determine next lock size
@@ -1647,7 +1647,7 @@ namespace CodeImp.DoomBuilder.Rendering
 				graphics.SetUniform(UniformName.texturefactor, new Color4(1f, 1f, 1f, 1f));
                 graphics.SetFogEnable(false);
                 graphics.SetShader(ShaderName.display2d_normal);
-				graphics.SetTexture(0, t);
+				graphics.SetTexture(t);
 				SetWorldTransformation(transformcoords);
 				SetDisplay2DSettings(1f, 1f, 0f, 1f, General.Settings.ClassicBilinear);
 				
@@ -1697,7 +1697,7 @@ namespace CodeImp.DoomBuilder.Rendering
 			graphics.SetUniform(UniformName.texturefactor, new Color4(1f, 1f, 1f, 1f));
             graphics.SetFogEnable(false);
             graphics.SetShader(ShaderName.display2d_normal);
-			graphics.SetTexture(0, label.Texture);
+			graphics.SetTexture(label.Texture);
 			SetWorldTransformation(false);
 			SetDisplay2DSettings(1f, 1f, 0f, 1f, false);
 			graphics.SetVertexBuffer(label.VertexBuffer);
@@ -1736,7 +1736,7 @@ namespace CodeImp.DoomBuilder.Rendering
 				// Text is created?
 				if(!label.SkipRendering)
 				{
-					graphics.SetTexture(0, label.Texture);
+					graphics.SetTexture(label.Texture);
 					graphics.SetVertexBuffer(label.VertexBuffer);
 
 					// Draw
@@ -1796,7 +1796,7 @@ namespace CodeImp.DoomBuilder.Rendering
             graphics.SetFogEnable(false);
 			SetWorldTransformation(false);
             graphics.SetShader(ShaderName.display2d_normal);
-			graphics.SetTexture(0, General.Map.Data.WhiteTexture.Texture);
+			graphics.SetTexture(General.Map.Data.WhiteTexture.Texture);
 			SetDisplay2DSettings(1f, 1f, 0f, 1f, General.Settings.ClassicBilinear);
 			
 			// Draw
@@ -1831,7 +1831,7 @@ namespace CodeImp.DoomBuilder.Rendering
             graphics.SetFogEnable(false);
 			SetWorldTransformation(false);
             graphics.SetShader(ShaderName.display2d_normal);
-			graphics.SetTexture(0, General.Map.Data.WhiteTexture.Texture);
+			graphics.SetTexture(General.Map.Data.WhiteTexture.Texture);
 			SetDisplay2DSettings(1f, 1f, 0f, 1f, General.Settings.ClassicBilinear);
 
 			// Draw
@@ -1863,7 +1863,7 @@ namespace CodeImp.DoomBuilder.Rendering
             graphics.SetFogEnable(false);
 			SetWorldTransformation(false);
             graphics.SetShader(ShaderName.display2d_normal);
-			graphics.SetTexture(0, texture.Texture);
+			graphics.SetTexture(texture.Texture);
 			SetDisplay2DSettings(1f, 1f, 0f, 1f, General.Settings.ClassicBilinear);
 
 			// Draw
@@ -1962,7 +1962,7 @@ namespace CodeImp.DoomBuilder.Rendering
             graphics.SetFogEnable(false);
 			SetWorldTransformation(false);
             graphics.SetShader(ShaderName.display2d_normal);
-			graphics.SetTexture(0, General.Map.Data.WhiteTexture.Texture);
+			graphics.SetTexture(General.Map.Data.WhiteTexture.Texture);
 			SetDisplay2DSettings(1f, 1f, 0f, 1f, General.Settings.ClassicBilinear);
 
 			// Draw
@@ -2014,7 +2014,7 @@ namespace CodeImp.DoomBuilder.Rendering
             graphics.SetFogEnable(false);
 			SetWorldTransformation(false);
             graphics.SetShader(ShaderName.display2d_normal);
-			graphics.SetTexture(0, General.Map.Data.WhiteTexture.Texture);
+			graphics.SetTexture(General.Map.Data.WhiteTexture.Texture);
 			SetDisplay2DSettings(1f, 1f, 0f, 1f, General.Settings.ClassicBilinear);
 
 			// Draw
diff --git a/Source/Core/Rendering/Renderer3D.cs b/Source/Core/Rendering/Renderer3D.cs
index ace29f32a1df8a96892556251394b8c7fb69dbbc..15ce6fffdab72af1bcd82742601566ee4cc14554 100755
--- a/Source/Core/Rendering/Renderer3D.cs
+++ b/Source/Core/Rendering/Renderer3D.cs
@@ -320,7 +320,7 @@ namespace CodeImp.DoomBuilder.Rendering
             graphics.SetUniform(UniformName.highlightcolor, new Color4()); //mxd
 
 			// Texture addressing
-			graphics.SetSamplerState(0, TextureAddress.Wrap);
+			graphics.SetSamplerState(TextureAddress.Wrap);
 
 			// Matrices
 			world = Matrix.Identity;
@@ -499,7 +499,7 @@ namespace CodeImp.DoomBuilder.Rendering
 			if(General.Settings.GZShowEventLines) RenderArrows(eventlines);
 			
 			// Remove references
-			graphics.SetTexture(0, null);
+			graphics.SetTexture(null);
 			
 			//mxd. Trash collections
 			solidgeo = null;
@@ -759,7 +759,7 @@ namespace CodeImp.DoomBuilder.Rendering
 					curtexture.CreateTexture();
 
                 // Apply texture
-                graphics.SetTexture(0, curtexture.Texture);
+                graphics.SetTexture(curtexture.Texture);
 				
 				//mxd. Sort geometry by sector index
 				group.Value.Sort((g1, g2) => g1.Sector.Sector.FixedIndex - g2.Sector.Sector.FixedIndex);
@@ -838,7 +838,7 @@ namespace CodeImp.DoomBuilder.Rendering
 			if(thingspass.Count > 0)
 			{
 				// Texture addressing
-				graphics.SetSamplerState(0, TextureAddress.Clamp);
+				graphics.SetSamplerState(TextureAddress.Clamp);
 				graphics.SetCullMode(Cull.None); //mxd. Disable backside culling, because otherwise sprites with positive ScaleY and negative ScaleX will be facing away from the camera...
 
 				Color4 vertexcolor = new Color4(); //mxd
@@ -859,7 +859,7 @@ namespace CodeImp.DoomBuilder.Rendering
 						curtexture.CreateTexture();
 
                     // Apply texture
-                    graphics.SetTexture(0, curtexture.Texture);
+                    graphics.SetTexture(curtexture.Texture);
 
 					// Render all things with this texture
 					foreach(VisualThing t in group.Value)
@@ -949,7 +949,7 @@ namespace CodeImp.DoomBuilder.Rendering
                 }
 
                 // Texture addressing
-                graphics.SetSamplerState(0, TextureAddress.Wrap);
+                graphics.SetSamplerState(TextureAddress.Wrap);
 				graphics.SetCullMode(Cull.Clockwise); //mxd
 			}
 		}
@@ -1039,7 +1039,7 @@ namespace CodeImp.DoomBuilder.Rendering
 						curtexture.CreateTexture();
 
                     // Apply texture
-                    graphics.SetTexture(0, curtexture.Texture);
+                    graphics.SetTexture(curtexture.Texture);
 					curtexturename = g.Texture.LongName;
 				}
 
@@ -1112,7 +1112,7 @@ namespace CodeImp.DoomBuilder.Rendering
 			if(thingspass.Count > 0)
 			{
 				// Texture addressing
-				graphics.SetSamplerState(0, TextureAddress.Clamp);
+				graphics.SetSamplerState(TextureAddress.Clamp);
 				graphics.SetCullMode(Cull.None); //mxd. Disable backside culling, because otherwise sprites with positive ScaleY and negative ScaleX will be facing away from the camera...
 
 				// Sort geometry by camera distance. First vertex of the BoundingBox is it's center
@@ -1173,7 +1173,7 @@ namespace CodeImp.DoomBuilder.Rendering
 							curtexture.CreateTexture();
 
                         // Apply texture
-                        graphics.SetTexture(0, curtexture.Texture);
+                        graphics.SetTexture(curtexture.Texture);
 						curtexturename = t.Texture.LongName;
 					}
 
@@ -1256,7 +1256,7 @@ namespace CodeImp.DoomBuilder.Rendering
                 graphics.SetUniform(UniformName.stencilColor, new Color4(1f, 1f, 1f, 0f));
 
                 // Texture addressing
-                graphics.SetSamplerState(0, TextureAddress.Wrap);
+                graphics.SetSamplerState(TextureAddress.Wrap);
 				graphics.SetCullMode(Cull.Clockwise); //mxd
 			}
 		}
@@ -1335,7 +1335,7 @@ namespace CodeImp.DoomBuilder.Rendering
                     continue;
 
                 if (settexture)
-                    graphics.SetTexture(0, g.Texture.Texture);
+                    graphics.SetTexture(g.Texture.Texture);
 
                 //normal lights
                 int count = lightOffsets[0];
@@ -1493,7 +1493,7 @@ namespace CodeImp.DoomBuilder.Rendering
             foreach (KeyValuePair<ImageData, List<VisualGeometry>> group in geometrytolit)
             {
                 if (group.Key.Texture == null) continue;
-                graphics.SetTexture(0, group.Key.Texture);
+                graphics.SetTexture(group.Key.Texture);
 
                 sector = RenderLightsFromGeometryList(group.Value, lights, sector, false);
             }
@@ -1616,7 +1616,7 @@ namespace CodeImp.DoomBuilder.Rendering
                 GZModel model = General.Map.Data.ModeldefEntries[t.Thing.Type].Model;
                 for (int j = 0; j < model.Meshes.Count; j++)
                 {
-                    graphics.SetTexture(0, model.Textures[j]);
+                    graphics.SetTexture(model.Textures[j]);
 
                     if (!lightpass)
                     {
@@ -1755,7 +1755,7 @@ namespace CodeImp.DoomBuilder.Rendering
 			
 			// Set render settings
 			graphics.SetShader(ShaderName.world3d_skybox);
-            graphics.SetTexture(0, General.Map.Data.SkyBox);
+            graphics.SetTexture(General.Map.Data.SkyBox);
 			graphics.SetUniform(UniformName.world, world);
 			graphics.SetUniform(UniformName.campos, new Vector4(cameraposition.x, cameraposition.y, cameraposition.z, 0f));
 
@@ -2023,12 +2023,12 @@ namespace CodeImp.DoomBuilder.Rendering
 			if(crosshairbusy)
 			{
 				if(General.Map.Data.CrosshairBusy3D.Texture == null) General.Map.Data.CrosshairBusy3D.CreateTexture();
-				graphics.SetTexture(0, General.Map.Data.CrosshairBusy3D.Texture);
+				graphics.SetTexture(General.Map.Data.CrosshairBusy3D.Texture);
 			}
 			else
 			{
 				if(General.Map.Data.Crosshair3D.Texture == null) General.Map.Data.Crosshair3D.CreateTexture();
-				graphics.SetTexture(0, General.Map.Data.Crosshair3D.Texture);
+				graphics.SetTexture(General.Map.Data.Crosshair3D.Texture);
 			}
 			
 			// Draw
@@ -2041,7 +2041,7 @@ namespace CodeImp.DoomBuilder.Rendering
             Vector4 values = new Vector4(texelx, texely, fsaafactor, alpha);
             graphics.SetUniform(UniformName.rendersettings, values);
             graphics.SetUniform(UniformName.transformsettings, worldmatrix * viewmatrix);
-            graphics.SetSamplerFilter(0, bilinear ? TextureFilter.Linear : TextureFilter.Point);
+            graphics.SetSamplerFilter(bilinear ? TextureFilter.Linear : TextureFilter.Point);
         }
 
         // This switches fog on and off
diff --git a/Source/Core/Rendering/SurfaceManager.cs b/Source/Core/Rendering/SurfaceManager.cs
index ab8d6bff515b112bf167257fd566ce8fd9f64859..e42063343b5afb3d8986a7dd3b442b7409b93b96 100755
--- a/Source/Core/Rendering/SurfaceManager.cs
+++ b/Source/Core/Rendering/SurfaceManager.cs
@@ -614,7 +614,7 @@ namespace CodeImp.DoomBuilder.Rendering
 				foreach(KeyValuePair<ImageData, List<SurfaceEntry>> imgsurfaces in surfaces)
 				{
                     graphics.SetShader(pass);
-                    graphics.SetTexture(0, imgsurfaces.Key.Texture);
+                    graphics.SetTexture(imgsurfaces.Key.Texture);
 					
 					// Go for all surfaces
 					VertexBuffer lastbuffer = null;
diff --git a/Source/Native/RenderDevice.cpp b/Source/Native/RenderDevice.cpp
index 0d046ff5b8f49a7558d16b1addbdabcbcfabac94..c2009ae2edf8e5b301acd2bd32bad5c832e012d4 100644
--- a/Source/Native/RenderDevice.cpp
+++ b/Source/Native/RenderDevice.cpp
@@ -111,17 +111,17 @@ void RenderDevice::SetZWriteEnable(bool value)
 	mNeedApply = true;
 }
 
-void RenderDevice::SetTexture(int index, Texture* texture)
+void RenderDevice::SetTexture(Texture* texture)
 {
-	mTextureUnits[index].Tex = texture;
+	mTextureUnit.Tex = texture;
 	mNeedApply = true;
 }
 
-void RenderDevice::SetSamplerFilter(int index, TextureFilter minfilter, TextureFilter magfilter, TextureFilter mipfilter, float maxanisotropy)
+void RenderDevice::SetSamplerFilter(TextureFilter minfilter, TextureFilter magfilter, TextureFilter mipfilter, float maxanisotropy)
 {
-	mTextureUnits[index].MinFilter = GetGLMinFilter(minfilter, mipfilter);
-	mTextureUnits[index].MagFilter = (magfilter == TextureFilter::Point || magfilter == TextureFilter::None) ? GL_NEAREST : GL_LINEAR;
-	mTextureUnits[index].MaxAnisotropy = maxanisotropy;
+	mTextureUnit.MinFilter = GetGLMinFilter(minfilter, mipfilter);
+	mTextureUnit.MagFilter = (magfilter == TextureFilter::Point || magfilter == TextureFilter::None) ? GL_NEAREST : GL_LINEAR;
+	mTextureUnit.MaxAnisotropy = maxanisotropy;
 	mNeedApply = true;
 }
 
@@ -150,11 +150,11 @@ GLint RenderDevice::GetGLMinFilter(TextureFilter filter, TextureFilter mipfilter
 	}
 }
 
-void RenderDevice::SetSamplerState(int index, TextureAddress addressU, TextureAddress addressV, TextureAddress addressW)
+void RenderDevice::SetSamplerState(TextureAddress addressU, TextureAddress addressV, TextureAddress addressW)
 {
-	mTextureUnits[index].AddressU = addressU;
-	mTextureUnits[index].AddressV = addressV;
-	mTextureUnits[index].AddressW = addressW;
+	mTextureUnit.AddressU = addressU;
+	mTextureUnit.AddressV = addressV;
+	mTextureUnit.AddressW = addressW;
 	mNeedApply = true;
 }
 
@@ -529,25 +529,21 @@ void RenderDevice::ApplyTextures()
 {
 	static const int wrapMode[] = { GL_REPEAT, GL_CLAMP_TO_EDGE };
 
-	for (size_t i = 0; i < NumSlots; i++)
+	glActiveTexture(GL_TEXTURE0);
+	if (mTextureUnit.Tex)
 	{
-		auto& binding = mTextureUnits[i];
-		glActiveTexture(GL_TEXTURE0 + (GLenum)i);
-		if (binding.Tex)
-		{
-			GLenum target = binding.Tex->IsCubeTexture() ? GL_TEXTURE_CUBE_MAP : GL_TEXTURE_2D;
-
-			glBindTexture(target, binding.Tex->GetTexture());
-			glTexParameteri(target, GL_TEXTURE_MIN_FILTER, binding.MinFilter);
-			glTexParameteri(target, GL_TEXTURE_MAG_FILTER, binding.MagFilter);
-			glTexParameteri(target, GL_TEXTURE_WRAP_S, wrapMode[(int)binding.AddressU]);
-			glTexParameteri(target, GL_TEXTURE_WRAP_T, wrapMode[(int)binding.AddressV]);
-			glTexParameteri(target, GL_TEXTURE_WRAP_R, wrapMode[(int)binding.AddressW]);
-		}
-		else
-		{
-			glBindTexture(GL_TEXTURE_2D, 0);
-		}
+		GLenum target = mTextureUnit.Tex->IsCubeTexture() ? GL_TEXTURE_CUBE_MAP : GL_TEXTURE_2D;
+
+		glBindTexture(target, mTextureUnit.Tex->GetTexture());
+		glTexParameteri(target, GL_TEXTURE_MIN_FILTER, mTextureUnit.MinFilter);
+		glTexParameteri(target, GL_TEXTURE_MAG_FILTER, mTextureUnit.MagFilter);
+		glTexParameteri(target, GL_TEXTURE_WRAP_S, wrapMode[(int)mTextureUnit.AddressU]);
+		glTexParameteri(target, GL_TEXTURE_WRAP_T, wrapMode[(int)mTextureUnit.AddressV]);
+		glTexParameteri(target, GL_TEXTURE_WRAP_R, wrapMode[(int)mTextureUnit.AddressW]);
+	}
+	else
+	{
+		glBindTexture(GL_TEXTURE_2D, 0);
 	}
 }
 
@@ -642,19 +638,19 @@ void RenderDevice_SetZWriteEnable(RenderDevice* device, bool value)
 	device->SetZWriteEnable(value);
 }
 
-void RenderDevice_SetTexture(RenderDevice* device, int unit, Texture* texture)
+void RenderDevice_SetTexture(RenderDevice* device, Texture* texture)
 {
-	device->SetTexture(unit, texture);
+	device->SetTexture(texture);
 }
 
-void RenderDevice_SetSamplerFilter(RenderDevice* device, int unit, TextureFilter minfilter, TextureFilter magfilter, TextureFilter mipfilter, float maxanisotropy)
+void RenderDevice_SetSamplerFilter(RenderDevice* device, TextureFilter minfilter, TextureFilter magfilter, TextureFilter mipfilter, float maxanisotropy)
 {
-	device->SetSamplerFilter(unit, minfilter, magfilter, mipfilter, maxanisotropy);
+	device->SetSamplerFilter(minfilter, magfilter, mipfilter, maxanisotropy);
 }
 
-void RenderDevice_SetSamplerState(RenderDevice* device, int unit, TextureAddress addressU, TextureAddress addressV, TextureAddress addressW)
+void RenderDevice_SetSamplerState(RenderDevice* device, TextureAddress addressU, TextureAddress addressV, TextureAddress addressW)
 {
-	device->SetSamplerState(unit, addressU, addressV, addressW);
+	device->SetSamplerState(addressU, addressV, addressW);
 }
 
 void RenderDevice_Draw(RenderDevice* device, PrimitiveType type, int startIndex, int primitiveCount)
diff --git a/Source/Native/RenderDevice.h b/Source/Native/RenderDevice.h
index ddd1c745a693181b9b33992805c700a671620cd8..52415540172a61f6e6ecccb1cbd0ef8941350496 100644
--- a/Source/Native/RenderDevice.h
+++ b/Source/Native/RenderDevice.h
@@ -91,9 +91,9 @@ public:
 	void SetMultisampleAntialias(bool value);
 	void SetZEnable(bool value);
 	void SetZWriteEnable(bool value);
-	void SetTexture(int unit, Texture* texture);
-	void SetSamplerFilter(int unit, TextureFilter minfilter, TextureFilter magfilter, TextureFilter mipfilter, float maxanisotropy);
-	void SetSamplerState(int unit, TextureAddress addressU, TextureAddress addressV, TextureAddress addressW);
+	void SetTexture(Texture* texture);
+	void SetSamplerFilter(TextureFilter minfilter, TextureFilter magfilter, TextureFilter mipfilter, float maxanisotropy);
+	void SetSamplerState(TextureAddress addressU, TextureAddress addressV, TextureAddress addressW);
 	void Draw(PrimitiveType type, int startIndex, int primitiveCount);
 	void DrawIndexed(PrimitiveType type, int startIndex, int primitiveCount);
 	void DrawData(PrimitiveType type, int startIndex, int primitiveCount, const void* data);
@@ -141,11 +141,7 @@ public:
 		TextureAddress AddressU = TextureAddress::Wrap;
 		TextureAddress AddressV = TextureAddress::Wrap;
 		TextureAddress AddressW = TextureAddress::Wrap;
-	};
-
-	enum { NumSlots = 16 };
-
-	TextureUnit mTextureUnits[NumSlots];
+	} mTextureUnit;
 
 	VertexBuffer* mVertexBuffer = nullptr;
 	IndexBuffer* mIndexBuffer = nullptr;