Rev 1394 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed
| Rev | Author | Line No. | Line |
|---|---|---|---|
| 787 | chris | 1 | using System; |
| 2 | using System.Collections.Generic; |
||
| 3 | using System.Linq; |
||
| 4 | using System.Text; |
||
| 5 | using System.Threading.Tasks; |
||
| 6 | |||
| 788 | chris | 7 | using System.Drawing; |
| 8 | using System.Drawing.Imaging; |
||
| 9 | |||
| 10 | using Tao.OpenGl; |
||
| 11 | |||
| 790 | chris | 12 | using BauzoidNET.graphics; |
| 13 | |||
| 1451 | chris | 14 | #pragma warning disable 0618 |
| 15 | |||
| 787 | chris | 16 | namespace BauzoidNET.graphics.texture |
| 17 | { |
||
| 790 | chris | 18 | public class Texture : GraphicsObject |
| 787 | chris | 19 | { |
| 20 | public enum Filter |
||
| 21 | { |
||
| 788 | chris | 22 | NEAREST = Gl.GL_NEAREST, |
| 23 | LINEAR = Gl.GL_LINEAR |
||
| 787 | chris | 24 | } |
| 25 | |||
| 788 | chris | 26 | public enum Wrap |
| 787 | chris | 27 | { |
| 788 | chris | 28 | MIRRORED_REPEAT = Gl.GL_MIRRORED_REPEAT, |
| 29 | CLAMP_TO_EDGE = Gl.GL_CLAMP_TO_EDGE, |
||
| 30 | REPEAT = Gl.GL_REPEAT |
||
| 787 | chris | 31 | } |
| 32 | |||
| 788 | chris | 33 | private static int[] TEXTUREID = new int[1]; |
| 34 | |||
| 35 | private Filter mTextureFilter = Filter.LINEAR; |
||
| 36 | private Wrap mTextureWrap = Wrap.CLAMP_TO_EDGE; |
||
| 37 | |||
| 797 | chris | 38 | private int mWidth = 0; |
| 39 | private int mHeight = 0; |
||
| 788 | chris | 40 | |
| 825 | chris | 41 | private int mTextureID = 0; |
| 788 | chris | 42 | |
| 790 | chris | 43 | public Texture(Graphics graphics, string path) |
| 44 | : base(graphics) |
||
| 788 | chris | 45 | { |
| 825 | chris | 46 | create(new Bitmap(path)); |
| 788 | chris | 47 | } |
| 48 | |||
| 825 | chris | 49 | public Texture(Graphics graphics, int width, int height) |
| 50 | : base(graphics) |
||
| 788 | chris | 51 | { |
| 825 | chris | 52 | create(new Bitmap(width, height, PixelFormat.Format32bppArgb)); |
| 53 | } |
||
| 788 | chris | 54 | |
| 1394 | chris | 55 | public Texture(Graphics graphics, Bitmap image) |
| 56 | : base(graphics) |
||
| 57 | { |
||
| 58 | create(image); |
||
| 59 | } |
||
| 60 | |||
| 825 | chris | 61 | public void create(Bitmap image) |
| 62 | { |
||
| 802 | chris | 63 | image.RotateFlip(RotateFlipType.RotateNoneFlipNone); |
| 788 | chris | 64 | Rectangle rect = new Rectangle(0, 0, image.Width, image.Height); |
| 797 | chris | 65 | mWidth = image.Width; |
| 66 | mHeight = image.Height; |
||
| 825 | chris | 67 | BitmapData bitmapdata = image.LockBits(rect, ImageLockMode.ReadOnly, PixelFormat.Format32bppArgb); |
| 788 | chris | 68 | |
| 69 | load(bitmapdata); |
||
| 70 | |||
| 71 | image.UnlockBits(bitmapdata); |
||
| 72 | image.Dispose(); |
||
| 73 | } |
||
| 74 | |||
| 75 | public void load(BitmapData data) |
||
| 76 | { |
||
| 77 | Gl.glGenTextures(1, TEXTUREID); |
||
| 78 | mTextureID = TEXTUREID[0]; |
||
| 79 | |||
| 80 | Gl.glEnable(Gl.GL_TEXTURE_2D); |
||
| 81 | bind(); |
||
| 82 | |||
| 802 | chris | 83 | Gl.glTexImage2D(Gl.GL_TEXTURE_2D, 0, Gl.GL_RGBA, mWidth, mHeight, 0, Gl.GL_BGRA, Gl.GL_UNSIGNED_BYTE, data.Scan0); |
| 84 | |||
| 85 | Gl.glTexParameteri(Gl.GL_TEXTURE_2D, Gl.GL_TEXTURE_MIN_FILTER, Gl.GL_NEAREST); |
||
| 86 | Gl.glTexParameteri(Gl.GL_TEXTURE_2D, Gl.GL_TEXTURE_MAG_FILTER, Gl.GL_NEAREST); |
||
| 87 | Gl.glTexParameteri(Gl.GL_TEXTURE_2D, Gl.GL_TEXTURE_WRAP_S, Gl.GL_CLAMP); |
||
| 88 | Gl.glTexParameteri(Gl.GL_TEXTURE_2D, Gl.GL_TEXTURE_WRAP_T, Gl.GL_CLAMP); |
||
| 788 | chris | 89 | } |
| 90 | |||
| 91 | public void dispose() |
||
| 92 | { |
||
| 797 | chris | 93 | if (mTextureID != 0) |
| 94 | { |
||
| 95 | TEXTUREID[0] = mTextureID; |
||
| 96 | Gl.glDeleteTextures(1, TEXTUREID); |
||
| 97 | } |
||
| 788 | chris | 98 | } |
| 99 | |||
| 787 | chris | 100 | public void bind() |
| 101 | { |
||
| 788 | chris | 102 | // TODO: bind using TextureStage/renderstate |
| 103 | Gl.glBindTexture(Gl.GL_TEXTURE_2D, mTextureID); |
||
| 787 | chris | 104 | } |
| 105 | |||
| 106 | public void setFilter(Filter minFilter, Filter magFilter) |
||
| 107 | { |
||
| 108 | } |
||
| 109 | |||
| 788 | chris | 110 | public void setWrap(Wrap wrapS, Wrap wrapT) |
| 111 | { |
||
| 112 | } |
||
| 113 | |||
| 114 | public int getTextureHandle() |
||
| 115 | { |
||
| 116 | return mTextureID; |
||
| 117 | } |
||
| 118 | |||
| 797 | chris | 119 | public int getWidth() |
| 120 | { |
||
| 121 | return mWidth; |
||
| 122 | } |
||
| 123 | |||
| 124 | public int getHeight() |
||
| 125 | { |
||
| 126 | return mHeight; |
||
| 127 | } |
||
| 128 | |||
| 787 | chris | 129 | } |
| 130 | } |