private int CreateTexture(Bitmap texture, TextureUnit unit, TextureMinFilter minFilter, TextureMagFilter magFilter) { int textureId = GL.GenTexture(); GL.ActiveTexture(unit); GL.BindTexture(TextureTarget.Texture2D, textureId); GL.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureMinFilter, (int)minFilter); GL.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureMagFilter, (int)magFilter); GL.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureWrapS, (int)TextureWrapMode.Repeat); GL.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureWrapT, (int)TextureWrapMode.Repeat); GL.TexImage2D(TextureTarget.Texture2D, 0, PixelInternalFormat.Rgba, texture.Width, texture.Height, 0, PixelFormat.Bgra, PixelType.UnsignedByte, IntPtr.Zero); var bmpData = texture.LockBits(new Rectangle(0, 0, texture.Width, texture.Height), ImageLockMode.ReadOnly, System.Drawing.Imaging.PixelFormat.Format32bppArgb); GL.TexSubImage2D(TextureTarget.Texture2D, 0, 0, 0, texture.Width, texture.Height, PixelFormat.Bgra, PixelType.UnsignedByte, bmpData.Scan0); texture.UnlockBits(bmpData); GL.BindTexture(TextureTarget.Texture2D, 0); return(textureId); }
public void UseTexture(string textureName, string shader, string uniformName) { if (!_textureHandleDictionary.ContainsKey(textureName)) { throw new ApplicationException("Texture has to be added before using"); } GL.UseProgram(_shaderHandleDictionary[shader]); var textureInfo = _textureHandleDictionary[textureName]; GL.ActiveTexture(TextureUnit.Texture0 + textureInfo.Unit); GL.BindTexture(TextureTarget.Texture2D, textureInfo.Handle); int location = GL.GetUniformLocation(_shaderHandleDictionary[shader], uniformName); if (location != -1) { int textureUnitIndex = textureInfo.Unit; GL.Uniform1(location, textureUnitIndex); } }