mirror of
https://git.huckle.dev/Huckles-Minecraft-Archive/PCK-Studio.git
synced 2026-05-22 17:35:10 +00:00
59 lines
2.1 KiB
C#
59 lines
2.1 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.Drawing;
|
|
using System.Drawing.Imaging;
|
|
using System.Linq;
|
|
using System.Text;
|
|
using System.Threading.Tasks;
|
|
using OpenTK.Graphics.OpenGL;
|
|
using PckStudio.Core.Extensions;
|
|
|
|
namespace PckStudio.Rendering.Texture
|
|
{
|
|
public class CubeTexture : Texture
|
|
{
|
|
public CubeTexture() : base(TextureTarget.TextureCubeMap)
|
|
{
|
|
}
|
|
|
|
public override void SetTexture(Image image)
|
|
{
|
|
Bind();
|
|
|
|
int heightPerFace = image.Height / 3;
|
|
int widthPerFace = image.Width / 4;
|
|
|
|
Size faceSize = new Size(widthPerFace, heightPerFace);
|
|
|
|
Image[] faces = new Image[6];
|
|
|
|
Point rightFace = new Point(widthPerFace * 2, heightPerFace * 1);
|
|
faces[0] = image.GetArea(new Rectangle(rightFace, faceSize));
|
|
|
|
Point lefttFace = new Point(widthPerFace * 0, heightPerFace * 1);
|
|
faces[1] = image.GetArea(new Rectangle(lefttFace, faceSize));
|
|
|
|
Point topFace = new Point(widthPerFace * 1, heightPerFace * 0);
|
|
faces[2] = image.GetArea(new Rectangle(topFace, faceSize));
|
|
|
|
Point bottomFace = new Point(widthPerFace * 1, heightPerFace * 2);
|
|
faces[3] = image.GetArea(new Rectangle(bottomFace, faceSize));
|
|
|
|
Point frontFace = new Point(widthPerFace * 1, heightPerFace * 1);
|
|
faces[4] = image.GetArea(new Rectangle(frontFace, faceSize));
|
|
|
|
Point backFace = new Point(widthPerFace * 3, heightPerFace * 1);
|
|
faces[5] = image.GetArea(new Rectangle(backFace, faceSize));
|
|
|
|
for (int i = 0; i < 6; i++)
|
|
{
|
|
var texture = new Bitmap(faces[i]);
|
|
BitmapData data = texture.LockBits(new Rectangle(Point.Empty, texture.Size), ImageLockMode.ReadOnly, System.Drawing.Imaging.PixelFormat.Format32bppArgb);
|
|
GL.TexImage2D(TextureTarget.TextureCubeMapPositiveX + i, 0, InternalPixelFormat, widthPerFace, heightPerFace, 0, PixelFormat, PixelType.UnsignedByte, data.Scan0);
|
|
}
|
|
Unbind();
|
|
}
|
|
|
|
}
|
|
}
|