title: OpenGL / SharpGL WPF
body: <p>Situation: using the Instantiate Sprite() method I load the texture into memory, then in the DrawTexture() method I unload it to the scene. But why is it that when I load the second texture onto the scene, it replaces the first one?</p>
  <p><a href="https://i.stack.imgur.com/DHLiL.png" rel="nofollow noreferrer">First sprite render</a></p>
  <p><a href="https://i.stack.imgur.com/8VKHp.png" rel="nofollow noreferrer">After add second sprite</a></p>
  <pre><code>    private uint objTex1;
      private uint objTex2;
  
      private List&lt;Bitmap&gt; _textureImages = new List&lt;Bitmap&gt;();
  
      private List&lt;float&gt; _texturePostitonX = new List&lt;float&gt;();
      private List&lt;float&gt; _texturePostitonY = new List&lt;float&gt;();
  
      private List&lt;float&gt; _textureScaleX = new List&lt;float&gt;();
      private List&lt;float&gt; _textureScaleY = new List&lt;float&gt;();
  
      public void InstantiateSprite(Bitmap sprite, out int textureReferenceId)
      {
          gl.Enable(GL_TEXTURE_2D);
          int index = _textureImages.Count + 1;
          textureReferenceId = index - 1;
          _textureImages.Add(sprite);
  
          if (_textureImages.Count == 1)
          {
              uint[] _texturesNew1 = new uint[1];
              gl.GenTextures(0, _texturesNew1);
             
              objTex1 = _texturesNew1[0];
            
              gl.BindTexture(GL_TEXTURE_2D, objTex1);
          }
          else
          {
              uint[] _texturesNew2 = new uint[1];
              gl.GenTextures(0, _texturesNew2);
              objTex2 = _texturesNew2[0];
             
              gl.BindTexture(GL_TEXTURE_2D, objTex2);
          }
  
    
          gl.TexParameter(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP);
          gl.TexParameter(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP);
          gl.TexParameter(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
          gl.TexParameter(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
  
          var bits = _textureImages[index - 1].LockBits(new Rectangle(0, 0, _textureImages[index - 1].Width,
              _textureImages[index - 1].Height), ImageLockMode.ReadWrite,
             PixelFormat.Format24bppRgb
             );
  
          gl.TexImage2D(GL_TEXTURE_2D, 0, 3, _textureImages[index - 1].Width, _textureImages[index - 1].Height, 0,
             GL_BGR_EXT, GL_UNSIGNED_BYTE,
              bits.Scan0);
  
          gl.BindTexture(GL_TEXTURE_2D, 0);
          _textureImages[index - 1].UnlockBits(bits);
      }
  
      public void OpenGL_DrawLoop()
      {
          gl.Clear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
        
  
          for (int i = 0; i &lt; _textureImages.Count; i++)
              DrawTexture(i);
  
         
  
          gl.End();
          gl.Flush();
      }
  
      private void DrawTexture(int idTex)
      {
          gl.PushMatrix();
  
          gl.LoadIdentity();
          gl.Scale(-0.15, 0.28, 1);
          gl.Rotate(180, 0, 0, 0);
  
        
          if (idTex == 0)
          {
  
              gl.BindTexture(GL_TEXTURE_2D, objTex1);
          
          }
          else
          {
              gl.BindTexture(GL_TEXTURE_2D, objTex2);
           
          }
          gl.Begin(GL_QUADS);
  
          float dist = 10;
         
  
          gl.TexCoord(0, 0); gl.Vertex(_textureScaleX[idTex] * (-1 + _texturePostitonX[idTex] / dist), _textureScaleY[idTex] * (-1 + _texturePostitonY[idTex] / dist));
          gl.TexCoord(1, 0); gl.Vertex(_textureScaleX[idTex] * (1 + _texturePostitonX[idTex] / dist), _textureScaleY[idTex] * (-1 + _texturePostitonY[idTex] / dist));
          gl.TexCoord(1, 1); gl.Vertex(_textureScaleX[idTex] * (1 + _texturePostitonX[idTex] / dist), _textureScaleY[idTex] * (1 + _texturePostitonY[idTex] / dist));
          gl.TexCoord(0, 1); gl.Vertex(_textureScaleX[idTex] * (-1 + _texturePostitonX[idTex] / dist), _textureScaleY[idTex] * (1 + _texturePostitonY[idTex] / dist));
  
  
  
          gl.PopMatrix();
      }
      
  </code></pre>
  <p>While the code is written with the ability to render only two textures, then you can add it</p>