Subversion Repositories AndroidProjects

Rev

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
}