public ESTexture2D(Bitmap image, GL20.All filter) { InitWithBitmapGL20(image, filter); }
public void InitWithDataGL20(IntPtr data, SurfaceFormat pixelFormat, int width, int height, Size size, GL20.All filter) { openGLVersion = GLContextVersion.Gles2_0; GL20.GL.GenTextures(1, ref _name); GL20.GL.BindTexture(GL20.All.Texture2D, _name); GL20.GL.TexParameter(GL20.All.Texture2D, GL20.All.TextureMinFilter, (int)filter); GL20.GL.TexParameter(GL20.All.Texture2D, GL20.All.TextureMagFilter, (int)filter); GL20.GL.TexParameter(GL20.All.Texture2D, GL20.All.TextureWrapS, (int)GL20.All.ClampToEdge); GL20.GL.TexParameter(GL20.All.Texture2D, GL20.All.TextureWrapT, (int)GL20.All.ClampToEdge); int sz = 0; switch (pixelFormat) { case SurfaceFormat.Color /*kTexture2DPixelFormat_RGBA8888*/: case SurfaceFormat.Dxt1: case SurfaceFormat.Dxt3: sz = 4; GL20.GL.TexImage2D(GL20.All.Texture2D, 0, (int)GL20.All.Rgba, (int)width, (int)height, 0, GL20.All.Rgba, GL20.All.UnsignedByte, data); break; case SurfaceFormat.Bgra4444 /*kTexture2DPixelFormat_RGBA4444*/: sz = 2; GL20.GL.TexImage2D(GL20.All.Texture2D, 0, (int)GL20.All.Rgba, (int)width, (int)height, 0, GL20.All.Rgba, GL20.All.UnsignedShort4444, data); break; case SurfaceFormat.Bgra5551 /*kTexture2DPixelFormat_RGB5A1*/: sz = 2; GL20.GL.TexImage2D(GL20.All.Texture2D, 0, (int)GL20.All.Rgba, (int)width, (int)height, 0, GL20.All.Rgba, GL20.All.UnsignedShort5551, data); break; case SurfaceFormat.Alpha8 /*kTexture2DPixelFormat_A8*/: sz = 1; GL20.GL.TexImage2D(GL20.All.Texture2D, 0, (int)GL20.All.Alpha, (int)width, (int)height, 0, GL20.All.Alpha, GL20.All.UnsignedByte, data); break; default: throw new NotSupportedException("Texture format"); } _size = size; _width = width; _height = height; _format = pixelFormat; _maxS = size.Width / (float)width; _maxT = size.Height / (float)height; _pixelData = data; }
public ESTexture2D(IntPtr data, SurfaceFormat pixelFormat, int width, int height, Size size, GL20.All filter) { InitWithDataGL20(data, pixelFormat, width, height, size, filter); }
public void InitWithBitmapGL20(Bitmap imageSource, GL20.All filter) { //TODO: Android.Opengl.GLUtils.GetInternalFormat() //Android.Opengl.GLUtils.GetInternalFormat(imageSource); openGLVersion = GLContextVersion.Gles2_0; _format = SurfaceFormat.Color; if (imageSource.HasAlpha) _format = SurfaceFormat.Color; _width = imageSource.Width; _height = imageSource.Height; _size.Width = imageSource.Width; _size.Height = imageSource.Height; GL20.GL.GenTextures(1, ref _name); GL20.GL.BindTexture(GL20.All.Texture2D, _name); GL20.GL.TexParameter( GL20.All.Texture2D, GL20.All.TextureMinFilter, (int)filter); GL20.GL.TexParameter( GL20.All.Texture2D, GL20.All.TextureMagFilter, (int)filter); GL20.GL.TexParameter( GL20.All.Texture2D, GL20.All.TextureWrapS, (int)GL20.All.ClampToEdge); GL20.GL.TexParameter( GL20.All.Texture2D, GL20.All.TextureWrapT, (int)GL20.All.ClampToEdge); Android.Opengl.GLUtils.TexImage2D((int)GL20.All.Texture2D, 0, imageSource, 0); imageSource.Recycle(); //int errAndroidGL = Android.Opengl.GLES20.GlGetError(); //GL20.All errGenericGL = GL20.GL.GetError(); //if(errAndroidGL != Android.Opengl.GLES20.GlNoError || errGenericGL != GL20.All.NoError ) // Console.WriteLine(string.Format("OpenGL-ES 2.0:\n\tAndroid:{0,10:X}\n\tGeneric:{0, 10:X}", errAndroidGL, errGenericGL)); _maxS = _size.Width / (float)_width; _maxT = _size.Height / (float)_height; }