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); }
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); }
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); }