Пример #1
0
        internal void LoadFromBitmap(Bitmap bitmap)
        {
            try
            {
                ImageGDI.LoadFromBitmap(ref bitmap, out Id, out textureTarget, out pixelFormat, out pixelType);
            }catch (Exception e) {
                RLog.Error("Error loading texture from bitmap...");
                RLog.Error(e);
            }
            if (Id == 0 || textureTarget == 0)
            {
                RLog.Error("Error generating OpenGL texture from bitmap");
            }
            // load succeeded, Texture can be used.

            /*Bind();
             * GL.TexParameter( textureTarget, TextureParameterName.TextureMagFilter, (int) RTextureMagFilter.Linear );
             * REngine.CheckGLError();
             *
             * GL.TexParameter( textureTarget, TextureParameterName.TextureMinFilter, (int) RTextureMinFilter.Linear );
             *
             * REngine.CheckGLError();
             * GL.TexParameter(textureTarget, TextureParameterName.TextureMaxLod, 0);
             * REngine.CheckGLError();
             * GL.TexParameter(textureTarget, TextureParameterName.TextureMinLod, 0);
             * REngine.CheckGLError();
             */
            Bounds = new Reactor.Math.Rectangle(0, 0, bitmap.Width, bitmap.Height);
        }
Пример #2
0
        internal void LoadFromDisk(string filename)
        {
            if (Path.GetExtension(filename).ToLower() == ".dds")
            {
                try
                {
                    ImageDDS.LoadFromDisk(RFileSystem.Instance.GetFilePath(filename), out Id, out textureTarget, out pixelFormat, out pixelType);
                }catch (Exception e) {
                    RLog.Error("Error loading texture from: " + filename);
                    RLog.Error(e);
                }
            }
            else
            {
                try
                {
                    ImageGDI.LoadFromDisk(RFileSystem.Instance.GetFilePath(filename), out Id, out textureTarget, out pixelFormat, out pixelType);
                }catch (Exception e) {
                    RLog.Error("Error loading texture from: " + filename);
                    RLog.Error(e);
                    return;
                }
            }
            if (Id == 0 || textureTarget == 0)
            {
                RLog.Error("Error generating OpenGL texture from: " + filename);
                return;
            }

            // load succeeded, Texture can be used.
            Bind();
            int max_level = 0;
            int min_level = 0;

            REngine.CheckGLError();
            GL.TexParameterI(textureTarget, TextureParameterName.TextureBaseLevel, ref min_level);
            REngine.CheckGLError();
            GL.TexParameterI(textureTarget, TextureParameterName.TextureMaxLevel, ref max_level);
            REngine.CheckGLError();
            GL.TexParameter(textureTarget, TextureParameterName.TextureMagFilter, (int)RTextureMagFilter.Linear);
            REngine.CheckGLError();
            GL.TexParameter(textureTarget, TextureParameterName.TextureMinFilter, (int)RTextureMinFilter.Linear);
            REngine.CheckGLError();
            GL.TexParameter(textureTarget, TextureParameterName.TextureMaxLod, 0);
            REngine.CheckGLError();
            GL.TexParameter(textureTarget, TextureParameterName.TextureMinLod, 0);
            REngine.CheckGLError();
            int height, width;

            GL.GetTexLevelParameter(textureTarget, 0, GetTextureParameter.TextureHeight, out height);
            REngine.CheckGLError();
            GL.GetTexLevelParameter(textureTarget, 0, GetTextureParameter.TextureWidth, out width);
            REngine.CheckGLError();
            Bounds = new Reactor.Math.Rectangle(0, 0, width, height);
            RLog.Info("Texture loaded from: " + filename);
        }
Пример #3
0
        internal void LoadFromData(byte[] data, string name, bool isCompressed)
        {
            if (isCompressed)
            {
                try
                {
                    ImageDDS.LoadFromData(data, name, out Id, out textureTarget, out pixelFormat, out pixelType);
                }catch (Exception e) {
                    RLog.Error("Error loading texture for: " + name);
                    RLog.Error(e.Message);
                    RLog.Error(e);
                }
            }
            else
            {
                try
                {
                    ImageGDI.LoadFromData(data, out Id, out textureTarget, out pixelFormat, out pixelType);
                }catch (Exception e) {
                    RLog.Error("Error loading texture for: " + name);
                    RLog.Error(e.Message);
                    RLog.Error(e);
                }
            }
            if (Id == 0 || textureTarget == 0)
            {
                RLog.Error("Error generating OpenGL texture for: " + name);
            }

            // load succeeded, Texture can be used.
            Bind();
            GL.TexParameter(textureTarget, TextureParameterName.TextureMagFilter, (int)RTextureMagFilter.Linear);
            int MipMapCount;

            GL.GetTexParameter(textureTarget, GetTextureParameter.TextureMaxLevel, out MipMapCount);
            if (MipMapCount == 0)   // if no MipMaps are present, use linear Filter
            {
                GL.TexParameter(textureTarget, TextureParameterName.TextureMinFilter, (int)RTextureMinFilter.Linear);
            }
            else // MipMaps are present, use trilinear Filter
            {
                GL.TexParameter(textureTarget, TextureParameterName.TextureMinFilter, (int)RTextureMinFilter.LinearMipmapLinear);
            }
            int height, width;

            GL.GetTexParameter(textureTarget, GetTextureParameter.TextureHeight, out height);
            GL.GetTexParameter(textureTarget, GetTextureParameter.TextureWidth, out width);

            Bounds = new Reactor.Math.Rectangle(0, 0, width, height);
            RLog.Info("Texture loaded for: " + name);
        }