Ejemplo n.º 1
0
        private unsafe void SetFaceData(RenderContext renderContext, CubeMapDirection direction, Image <Rgba32> image)
        {
            fixed(void *data = &MemoryMarshal.GetReference(ImageHelper.GetPixelSpan(image)))
            {
                var previousTexture = renderContext.GetCurrentTexture(0);

                renderContext.BindTextureCubeMap(0, this);

                GL.TexImage2D(GetTextureTarget(direction),
                              0,
                              PixelInternalFormat.Rgba,
                              image.Width,
                              image.Height,
                              0,
                              PixelFormat.Rgba,
                              PixelType.UnsignedByte,
                              new IntPtr(data));

                if (previousTexture != null)
                {
                    previousTexture.Bind(0, renderContext);
                }
                else
                {
                    renderContext.UnbindTextureCubeMap(0);
                }
            }
        }
Ejemplo n.º 2
0
        private TextureTarget GetTextureTarget(CubeMapDirection dir)
        {
            switch (dir)
            {
            case CubeMapDirection.Front:
                return(TextureTarget.TextureCubeMapPositiveX);

            case CubeMapDirection.Back:
                return(TextureTarget.TextureCubeMapNegativeX);

            case CubeMapDirection.Up:
                return(TextureTarget.TextureCubeMapPositiveY);

            case CubeMapDirection.Down:
                return(TextureTarget.TextureCubeMapNegativeY);

            case CubeMapDirection.Right:
                return(TextureTarget.TextureCubeMapPositiveZ);

            case CubeMapDirection.Left:
                return(TextureTarget.TextureCubeMapNegativeZ);

            default:
                throw new ArgumentOutOfRangeException(nameof(dir), dir, null);
            }
        }