public void ChangeSize(Vec2i size) { Size = size; if (colorBuffer != -1) { TextureTarget textureTarget = multisampledColor ? TextureTarget.Texture2DMultisample : TextureTarget.Texture2D; Ogl.BindTexture(textureTarget, colorBuffer); if (multisampledColor) { Ogl.TexImage2DMultisample(TextureTargetMultisample.Texture2DMultisample, 4, PixelInternalFormat.Rgb, Size.x, Size.y, true); } else { Ogl.TexImage2D(TextureTarget.Texture2D, 0, PixelInternalFormat.Rgb, Size.x, Size.y, 0, PixelFormat.Rgb, PixelType.UnsignedByte, null); } } if (depthBuffer != -1) { TextureTarget textureTarget = multisampledDepth ? TextureTarget.Texture2DMultisample : TextureTarget.Texture2D; Ogl.BindTexture(textureTarget, depthBuffer); if (multisampledDepth) { Ogl.TexImage2DMultisample(TextureTargetMultisample.Texture2DMultisample, 4, PixelInternalFormat.DepthComponent, Size.x, Size.y, true); } else { Ogl.TexImage2D(TextureTarget.Texture2D, 0, PixelInternalFormat.DepthComponent, Size.x, Size.y, 0, PixelFormat.DepthComponent, PixelType.Float, null); } } }
protected override void CalculatePackedData() { packedData = new byte[6][]; Ogl.BindTexture(TextureTarget.TextureCubeMap, handle); for (int i = 0; i < facesPixels.Length; i++) { Rgba32[] pixels = facesPixels[i]; packedData[i] = new byte[pixels.Length * 4]; for (int p = 0, packedIndex = 0; p < pixels.Length; p++) { packedData[i][packedIndex++] = pixels[p].R; packedData[i][packedIndex++] = pixels[p].G; packedData[i][packedIndex++] = pixels[p].B; packedData[i][packedIndex++] = pixels[p].A; } GL.TexImage2D(TextureTarget.TextureCubeMapPositiveX + i, 0, PixelInternalFormat.Rgba, width, height, 0, PixelFormat.Rgba, PixelType.UnsignedByte, packedData[i]); } Ogl.TexParameter(TextureTarget.TextureCubeMap, TextureParameterName.TextureMinFilter, TextureMinFilter.Linear); Ogl.TexParameter(TextureTarget.TextureCubeMap, TextureParameterName.TextureMagFilter, TextureMagFilter.Linear); Ogl.TexParameter(TextureTarget.TextureCubeMap, TextureParameterName.TextureWrapS, TextureWrapMode.ClampToEdge); Ogl.TexParameter(TextureTarget.TextureCubeMap, TextureParameterName.TextureWrapT, TextureWrapMode.ClampToEdge); Ogl.TexParameter(TextureTarget.TextureCubeMap, TextureParameterName.TextureWrapR, TextureWrapMode.ClampToEdge); //GL.GenerateMipmap(GenerateMipmapTarget.TextureCubeMap); }
public void SetSize(Vec2i size) { width = size.x; height = size.y; Ogl.BindTexture(TextureTarget.Texture2D, handle); Ogl.TexImage2D(TextureTarget.Texture2D, 0, PixelInternalFormat.Rgba, width, height, 0, PixelFormat.Rgba, PixelType.UnsignedByte, packedData); Ogl.GenerateMipmap(GenerateMipmapTarget.Texture2D); }
public void UseTexture(TextureUnit unit) { if (HasChanged) { HasChanged = false; CalculatePackedData(); } Ogl.ActiveTexture(unit); Ogl.BindTexture(TextureType, Handle); }
public Texture2D(string path, string name) { this.handle = Ogl.GenTexture(name); Ogl.BindTexture(TextureTarget.Texture2D, handle); Ogl.TexImage2D(TextureTarget.Texture2D, 0, PixelInternalFormat.Rgba, width, height, 0, PixelFormat.Rgba, PixelType.UnsignedByte, null); Ogl.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureMinFilter, TextureMinFilter.Linear); Ogl.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureMagFilter, TextureMagFilter.Linear); Ogl.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureWrapS, TextureWrapMode.Repeat); Ogl.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureWrapT, TextureWrapMode.Repeat); LoadFromPath(path); }
private int LoadBitmapOnChar(int width, int height, IntPtr buffer) { int textureID = Ogl.GenTexture("Char"); Ogl.BindTexture(TextureTarget.Texture2D, textureID); Ogl.TexImage2D(TextureTarget.Texture2D, 0, PixelInternalFormat.R8, width, height , 0, PixelFormat.Red, PixelType.UnsignedByte, buffer); Ogl.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureWrapS, TextureWrapMode.ClampToEdge); Ogl.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureWrapT, TextureWrapMode.ClampToEdge); Ogl.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureMinFilter, TextureMinFilter.Linear); Ogl.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureMagFilter, TextureMagFilter.Linear); return(textureID); }
public void SetSize(Vec2i resolution) { width = resolution.x; height = resolution.y; Ogl.BindTexture(TextureTarget.Texture2D, handle); Ogl.TexImage2D(TextureTarget.Texture2D, 0, PixelInternalFormat.DepthComponent, width, height, 0, PixelFormat.DepthComponent, PixelType.Float, null); Ogl.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureMinFilter, TextureMinFilter.Nearest); Ogl.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureMagFilter, TextureMagFilter.Nearest); Ogl.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureWrapS, TextureWrapMode.ClampToBorder); Ogl.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureWrapT, TextureWrapMode.ClampToBorder); Ogl.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureBorderColor, new float[] { 1, 1, 1, 1 }); }
protected override void CalculatePackedData() { packedData = new byte[pixels.Length * 4]; for (int i = 0, packedIndex = 0; i < pixels.Length; i++) { packedData[packedIndex++] = pixels[i].R; packedData[packedIndex++] = pixels[i].G; packedData[packedIndex++] = pixels[i].B; packedData[packedIndex++] = pixels[i].A; } Ogl.BindTexture(TextureTarget.Texture2D, handle); Ogl.TexImage2D(TextureTarget.Texture2D, 0, PixelInternalFormat.Rgba, width, height, 0, PixelFormat.Rgba, PixelType.UnsignedByte, packedData); Ogl.GenerateMipmap(GenerateMipmapTarget.Texture2D); }
public DepthTexture(int width, int height, string name) { handle = Ogl.GenTexture(name); Ogl.BindTexture(TextureTarget.Texture2D, handle); Ogl.TexImage2D(TextureTarget.Texture2D, 0, PixelInternalFormat.DepthComponent, width, height, 0, PixelFormat.DepthComponent, PixelType.Float, null); Ogl.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureMinFilter, TextureMinFilter.Nearest); Ogl.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureMagFilter, TextureMagFilter.Nearest); Ogl.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureWrapS, TextureWrapMode.ClampToBorder); Ogl.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureWrapT, TextureWrapMode.ClampToBorder); Ogl.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureBorderColor, new float[] { 1, 1, 1, 1 }); this.width = width; this.height = height; }
public Texture2D(int width, int height, string name) { handle = Ogl.GenTexture(name); Ogl.BindTexture(TextureTarget.Texture2D, handle); Ogl.TexImage2D(TextureTarget.Texture2D, 0, PixelInternalFormat.Rgba, width, height, 0, PixelFormat.Rgba, PixelType.UnsignedByte, null); Ogl.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureMinFilter, TextureMinFilter.Linear); Ogl.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureMagFilter, TextureMagFilter.Linear); Ogl.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureWrapS, TextureWrapMode.Repeat); Ogl.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureWrapT, TextureWrapMode.Repeat); this.width = width; this.height = height; pixels = new Rgba32[width * height]; packedData = new byte[pixels.Length * 4]; }
public void AddDepthBuffer(bool multisampling) { if (depthBuffer != -1) { DevConsole.Log(LogType.Error, "Framebuffer already has depth buffer"); return; } multisampledDepth = multisampling; TextureTarget textureTarget = multisampling ? TextureTarget.Texture2DMultisample : TextureTarget.Texture2D; depthBuffer = Ogl.GenTexture($"{name} - Depth"); Ogl.BindTexture(textureTarget, depthBuffer); if (multisampling) { Ogl.TexImage2DMultisample(TextureTargetMultisample.Texture2DMultisample, 4, PixelInternalFormat.DepthComponent, Size.x, Size.y, true); } else { Ogl.TexImage2D(TextureTarget.Texture2D, 0, PixelInternalFormat.DepthComponent, Size.x, Size.y, 0, PixelFormat.DepthComponent, PixelType.Float, null); Ogl.TexParameter(textureTarget, TextureParameterName.TextureMinFilter, TextureMinFilter.Nearest); Ogl.TexParameter(textureTarget, TextureParameterName.TextureMagFilter, TextureMagFilter.Nearest); Ogl.TexParameter(textureTarget, TextureParameterName.TextureWrapS, TextureWrapMode.ClampToBorder); Ogl.TexParameter(textureTarget, TextureParameterName.TextureWrapT, TextureWrapMode.ClampToBorder); Ogl.TexParameter(textureTarget, TextureParameterName.TextureBorderColor, new float[] { 1, 1, 1, 1 }); } Ogl.BindFramebuffer(FramebufferTarget.Framebuffer, handle); Ogl.FramebufferTexture2D(FramebufferTarget.Framebuffer, FramebufferAttachment.DepthAttachment, textureTarget, depthBuffer, 0); var error = Ogl.CheckFramebufferStatus(FramebufferTarget.Framebuffer); if (error != FramebufferErrorCode.FramebufferComplete) { DevConsole.Log(LogType.Warning, error); } Ogl.BindFramebuffer(FramebufferTarget.Framebuffer, 0); }
public void AddColorBuffer(bool multisampling) { if (colorBuffer != -1) { DevConsole.Log(LogType.Error, "Framebuffer already has color buffer"); return; } multisampledColor = multisampling; TextureTarget textureTarget = multisampling ? TextureTarget.Texture2DMultisample : TextureTarget.Texture2D; colorBuffer = Ogl.GenTexture($"{name} - Color"); Ogl.BindTexture(textureTarget, colorBuffer); if (multisampling) { Ogl.TexImage2DMultisample(TextureTargetMultisample.Texture2DMultisample, 4, PixelInternalFormat.Rgb, Size.x, Size.y, true); } else { Ogl.TexImage2D(TextureTarget.Texture2D, 0, PixelInternalFormat.Rgb, Size.x, Size.y, 0, PixelFormat.Rgb, PixelType.UnsignedByte, null); Ogl.TexParameter(textureTarget, TextureParameterName.TextureMinFilter, TextureMinFilter.Linear); Ogl.TexParameter(textureTarget, TextureParameterName.TextureMagFilter, TextureMagFilter.Linear); Ogl.TexParameter(textureTarget, TextureParameterName.TextureWrapS, TextureWrapMode.Repeat); Ogl.TexParameter(textureTarget, TextureParameterName.TextureWrapT, TextureWrapMode.Repeat); } Ogl.BindFramebuffer(FramebufferTarget.Framebuffer, handle); Ogl.FramebufferTexture2D(FramebufferTarget.Framebuffer, FramebufferAttachment.ColorAttachment0, textureTarget, colorBuffer, 0); var error = Ogl.CheckFramebufferStatus(FramebufferTarget.Framebuffer); if (error != FramebufferErrorCode.FramebufferComplete) { DevConsole.Log(LogType.Warning, error); } Ogl.BindFramebuffer(FramebufferTarget.Framebuffer, 0); }
public void FreeTexture() { Ogl.BindTexture(TextureType, 0); }
public void SetRawData(IntPtr data) { Ogl.BindTexture(TextureTarget.Texture2D, handle); Ogl.TexImage2D(TextureTarget.Texture2D, 0, PixelInternalFormat.Rgba, width, height, 0, PixelFormat.Rgba, PixelType.UnsignedByte, data); Ogl.GenerateMipmap(GenerateMipmapTarget.Texture2D); }