Exemple #1
0
        public void CreateVbo(long key, int dataSize, IntPtr hostAddress)
        {
            int handle = GL.GenBuffer();

            _vboCache.AddOrUpdate(key, handle, dataSize);

            IntPtr length = new IntPtr(dataSize);

            GL.BindBuffer(BufferTarget.ArrayBuffer, handle);
            GL.BufferData(BufferTarget.ArrayBuffer, length, hostAddress, BufferUsageHint.StreamDraw);
        }
Exemple #2
0
        public void Create(long key, int size, GalImage image)
        {
            int handle = GL.GenTexture();

            TextureTarget target = ImageUtils.GetTextureTarget(image.TextureTarget);

            GL.BindTexture(target, handle);

            const int level  = 0; //TODO: Support mipmap textures.
            const int border = 0;

            _textureCache.AddOrUpdate(key, new ImageHandler(handle, image), (uint)size);

            if (ImageUtils.IsCompressed(image.Format))
            {
                throw new InvalidOperationException("Surfaces with compressed formats are not supported!");
            }

            (PixelInternalFormat internalFmt,
             PixelFormat format,
             PixelType type) = OglEnumConverter.GetImageFormat(image.Format);

            switch (target)
            {
            case TextureTarget.Texture1D:
                GL.TexImage1D(
                    target,
                    level,
                    internalFmt,
                    image.Width,
                    border,
                    format,
                    type,
                    IntPtr.Zero);
                break;

            case TextureTarget.Texture2D:
                GL.TexImage2D(
                    target,
                    level,
                    internalFmt,
                    image.Width,
                    image.Height,
                    border,
                    format,
                    type,
                    IntPtr.Zero);
                break;

            case TextureTarget.Texture3D:
                GL.TexImage3D(
                    target,
                    level,
                    internalFmt,
                    image.Width,
                    image.Height,
                    image.Depth,
                    border,
                    format,
                    type,
                    IntPtr.Zero);
                break;

            case TextureTarget.Texture2DArray:
                GL.TexImage3D(
                    target,
                    level,
                    internalFmt,
                    image.Width,
                    image.Height,
                    image.LayerCount,
                    border,
                    format,
                    type,
                    IntPtr.Zero);
                break;

            default:
                throw new NotImplementedException($"Unsupported texture target type: {target}");
            }
        }
Exemple #3
0
        public void Create(long key, long size)
        {
            OglStreamBuffer buffer = new OglStreamBuffer(BufferTarget.UniformBuffer, size);

            _cache.AddOrUpdate(key, buffer, size);
        }