Remove PBO

It was not used correctly and is actually not really required so save the time fixing it...
This commit is contained in:
Flamefire committed 2014-09-20 15:09:23 +02:00
1 parent 1ce085b49f
commit 4d197bda9a
3 files changed
+18 -79

No files matched your search

+5 -4
View File
@@ -42,9 +42,10 @@ namespace Vocaluxe.Lib.Draw
}
}
class CD3DTexture:CTextureBase,IDisposable
class CD3DTexture : CTextureBase, IDisposable
{
public readonly Texture D3DTexture;
public CD3DTexture(Device device, Size dataSize, int texWidth = 0, int texHeight = 0) : base(dataSize, texWidth, texHeight)
{
D3DTexture = new Texture(device, W2, H2, 0, Usage.AutoGenerateMipMap, Format.A8R8G8B8, Pool.Managed);
@@ -52,7 +53,7 @@ namespace Vocaluxe.Lib.Draw
public void Dispose()
{
if(D3DTexture.Disposed)
if (D3DTexture.Disposed)
throw new ObjectDisposedException(GetType().Name);
D3DTexture.Dispose();
RefCount = 0;
@@ -482,7 +483,7 @@ namespace Vocaluxe.Lib.Draw
/// </summary>
public CTextureRef CopyScreen()
{
var tex = _CreateTexture(new Size(_W, _H));
CD3DTexture tex = _CreateTexture(new Size(_W, _H));
Surface backbufferSurface = _Device.GetBackBuffer(0, 0);
Surface textureSurface = tex.D3DTexture.GetSurfaceLevel(0);
Surface.FromSurface(textureSurface, backbufferSurface, Filter.Default, 0, new Rectangle(0, 0, _W, _H), new Rectangle(0, 0, _W, _H));
@@ -630,7 +631,7 @@ namespace Vocaluxe.Lib.Draw
return false; // Texture memory to big
texture.DataSize = new Size(w, h);
}
_WriteDataToTexture(texture.D3DTexture, w, data);
_WriteDataToTexture(texture.D3DTexture, w, data);
return true;
}
+9 -25
View File
@@ -396,33 +396,17 @@ namespace Vocaluxe.Lib.Draw
return true;
}
/// <summary>
/// Checks if a texture exists
/// </summary>
/// <param name="texture">The texture to check</param>
/// <returns>True if the texture exists</returns>
protected bool _TextureExists(CTextureRef texture)
{
TTextureType t;
return _GetTexture(texture, out t);
}
protected TTextureType _GetTexture(CTextureRef textureRef)
{
if (textureRef == null)
return null;
TTextureType texture;
lock (_Textures)
{
_Textures.TryGetValue(textureRef.ID, out texture);
}
return texture;
}
protected bool _GetTexture(CTextureRef textureRef, out TTextureType texture)
{
texture = _GetTexture(textureRef);
return texture != null;
if (textureRef == null)
{
texture = null;
return false;
}
lock (_Textures)
{
return _Textures.TryGetValue(textureRef.ID, out texture) && texture!=null;
}
}
/// <summary>
+4 -50
View File
@@ -21,7 +21,6 @@ using OpenTK.Graphics;
using System;
using System.Drawing;
using System.IO;
using System.Runtime.InteropServices;
using System.Windows.Forms;
using Vocaluxe.Base;
using VocaluxeLib;
@@ -29,9 +28,6 @@ using VocaluxeLib.Draw;
using BeginMode = OpenTK.Graphics.OpenGL.BeginMode;
using BlendingFactorDest = OpenTK.Graphics.OpenGL.BlendingFactorDest;
using BlendingFactorSrc = OpenTK.Graphics.OpenGL.BlendingFactorSrc;
using BufferAccess = OpenTK.Graphics.OpenGL.BufferAccess;
using BufferTarget = OpenTK.Graphics.OpenGL.BufferTarget;
using BufferUsageHint = OpenTK.Graphics.OpenGL.BufferUsageHint;
using ClearBufferMask = OpenTK.Graphics.OpenGL.ClearBufferMask;
using DepthFunction = OpenTK.Graphics.OpenGL.DepthFunction;
using EnableCap = OpenTK.Graphics.OpenGL.EnableCap;
@@ -60,15 +56,14 @@ namespace Vocaluxe.Lib.Draw
}
}
class COGLTexture : CTextureBase,IDisposable
class COGLTexture : CTextureBase, IDisposable
{
public int PBO;
//The texture "name" according to the specs
public readonly int Name;
private bool _IsDisposed;
public COGLTexture( int name, Size dataSize, int texWidth = 0, int texHeight = 0) : base(dataSize, texWidth, texHeight)
public COGLTexture(int name, Size dataSize, int texWidth = 0, int texHeight = 0) : base(dataSize, texWidth, texHeight)
{
Name = name;
}
@@ -79,8 +74,6 @@ namespace Vocaluxe.Lib.Draw
throw new ObjectDisposedException(GetType().Name);
_IsDisposed = true;
GL.DeleteTexture(Name);
if (PBO > 0)
GL.DeleteBuffers(1, ref PBO);
RefCount = 0;
}
}
@@ -89,7 +82,6 @@ namespace Vocaluxe.Lib.Draw
{
#region private vars
private readonly GLControl _Control;
private bool _UsePBO;
#endregion private vars
public COpenGL()
@@ -284,7 +276,7 @@ namespace Vocaluxe.Lib.Draw
GL.BindTexture(TextureTarget.Texture2D, texture.Name);
GL.TexImage2D(TextureTarget.Texture2D, 0, PixelInternalFormat.Rgba, texture.W2, texture.H2, 0, PixelFormat.Bgra, PixelType.UnsignedByte, IntPtr.Zero);
GL.CopyTexSubImage2D(TextureTarget.Texture2D, 0, 0, 0, 0, 0, size.Width,size.Height);//TODO: Use _X,_Y and _W,_H?
GL.CopyTexSubImage2D(TextureTarget.Texture2D, 0, 0, 0, 0, 0, size.Width, size.Height); //TODO: Use _X,_Y and _W,_H?
GL.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureMagFilter, (int)TextureMagFilter.Linear);
GL.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureMinFilter, (int)TextureMinFilter.Linear);
@@ -426,7 +418,6 @@ namespace Vocaluxe.Lib.Draw
GL.BindTexture(TextureTarget.Texture2D, texture.Name);
GL.PixelStore(PixelStoreParameter.UnpackAlignment, 1);
GL.TexImage2D(TextureTarget.Texture2D, 0, PixelInternalFormat.Rgba, texture.W2, texture.H2, 0, PixelFormat.Bgra, PixelType.UnsignedByte, IntPtr.Zero);
GL.TexSubImage2D(TextureTarget.Texture2D, 0, 0, 0, texture.DataSize.Width, texture.DataSize.Height, PixelFormat.Bgra, PixelType.UnsignedByte, data);
@@ -444,22 +435,6 @@ namespace Vocaluxe.Lib.Draw
{
COGLTexture texture = _CreateTexture(dataSize);
if (_UsePBO)
{
try
{
GL.GenBuffers(1, out texture.PBO);
GL.BindBuffer(BufferTarget.PixelUnpackBuffer, texture.PBO);
GL.BufferData(BufferTarget.PixelUnpackBuffer, (IntPtr)data.Length, IntPtr.Zero, BufferUsageHint.StreamDraw);
GL.BindBuffer(BufferTarget.PixelUnpackBuffer, 0);
}
catch (Exception e)
{
CLog.LogError("PBO creation failed. Using fallback solution.", false, false, e);
_UsePBO = false;
}
}
GL.BindTexture(TextureTarget.Texture2D, texture.Name);
GL.TexImage2D(TextureTarget.Texture2D, 0, PixelInternalFormat.Rgba, texture.W2, texture.H2, 0, PixelFormat.Bgra, PixelType.UnsignedByte, IntPtr.Zero);
@@ -480,7 +455,7 @@ namespace Vocaluxe.Lib.Draw
public override bool UpdateTexture(CTextureRef textureRef, int w, int h, byte[] data)
{
COGLTexture texture;
if (_GetTexture(textureRef,out texture))
if (_GetTexture(textureRef, out texture))
return false;
if (texture.DataSize.Width != w || texture.DataSize.Height != h)
{
@@ -491,27 +466,6 @@ namespace Vocaluxe.Lib.Draw
texture.DataSize = new Size(w, h);
}
if (_UsePBO)
{
GL.BindBuffer(BufferTarget.PixelUnpackBuffer, texture.PBO);
IntPtr buffer = GL.MapBuffer(BufferTarget.PixelUnpackBuffer, BufferAccess.WriteOnly);
Marshal.Copy(data, 0, buffer, data.Length);
GL.UnmapBuffer(BufferTarget.PixelUnpackBuffer);
GL.BindTexture(TextureTarget.Texture2D, texture.Name);
GL.TexSubImage2D(TextureTarget.Texture2D, 0, 0, 0, w, h, PixelFormat.Bgra, PixelType.UnsignedByte, IntPtr.Zero);
GL.Ext.GenerateMipmap(GenerateMipmapTarget.Texture2D);
GL.BindTexture(TextureTarget.Texture2D, 0);
GL.BindBuffer(BufferTarget.PixelUnpackBuffer, 0);
return true;
}
GL.BindTexture(TextureTarget.Texture2D, texture.Name);
GL.TexSubImage2D(TextureTarget.Texture2D, 0, 0, 0, w, h, PixelFormat.Bgra, PixelType.UnsignedByte, data);