Switch-Toolbox/Switch_FileFormatsMain/GL/BMD_Renderer.cs

95 lines
3.2 KiB
C#
Raw Normal View History

2019-07-11 23:38:29 +00:00
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Switch_Toolbox.Library.Rendering;
using Switch_Toolbox.Library;
2019-07-11 23:38:29 +00:00
using GL_EditorFramework.GL_Core;
using GL_EditorFramework.Interfaces;
using OpenTK;
using OpenTK.Graphics.OpenGL;
2019-07-13 00:13:27 +00:00
using SuperBMDLib.Materials.Enums;
2019-07-11 23:38:29 +00:00
namespace FirstPlugin
{
public class BMD_Renderer : GenericModelRenderer
{
public List<BMDTextureWrapper> TextureList = new List<BMDTextureWrapper>();
2019-07-11 23:38:29 +00:00
public override void OnRender(GLControl control)
{
}
public override void DrawModels(ShaderProgram shader, GL_ControlModern control)
{
shader.EnableVertexAttributes();
List<STGenericObject> opaque = new List<STGenericObject>();
List<STGenericObject> transparent = new List<STGenericObject>();
for (int m = 0; m < Meshes.Count; m++)
{
if (((BMDMaterialWrapper)Meshes[m].GetMaterial()).isTransparent)
transparent.Add(Meshes[m]);
else
opaque.Add(Meshes[m]);
}
for (int m = 0; m < transparent.Count; m++)
{
DrawModel(control, Skeleton, transparent[m].GetMaterial(), transparent[m], shader);
}
for (int m = 0; m < opaque.Count; m++)
{
DrawModel(control, Skeleton, opaque[m].GetMaterial(), opaque[m], shader);
}
shader.DisableVertexAttributes();
}
2019-07-13 00:13:27 +00:00
public override void SetRenderData(STGenericMaterial mat, ShaderProgram shader, STGenericObject m)
{
var bmdMaterial = (BMDMaterialWrapper)mat;
shader.SetBoolToInt("isTransparent", bmdMaterial.isTransparent);
GXToOpenGL.SetBlendState(bmdMaterial.Material.BMode);
GXToOpenGL.SetCullState(bmdMaterial.Material.CullMode);
GXToOpenGL.SetDepthState(bmdMaterial.Material.ZMode, false);
GXToOpenGL.SetDitherEnabled(bmdMaterial.Material.Dither);
}
public static TextureMagFilter GetMagFilter(SuperBMDLib.Materials.BinaryTextureImage.FilterMode fromMode)
{
switch (fromMode)
2019-07-13 00:13:27 +00:00
{
case SuperBMDLib.Materials.BinaryTextureImage.FilterMode.Nearest: return TextureMagFilter.Nearest;
case SuperBMDLib.Materials.BinaryTextureImage.FilterMode.Linear: return TextureMagFilter.Linear;
2019-07-13 00:13:27 +00:00
}
return TextureMagFilter.Nearest;
2019-07-13 00:13:27 +00:00
}
public override int BindTexture(STGenericMatTexture tex, ShaderProgram shader)
{
GL.ActiveTexture(TextureUnit.Texture0 + tex.textureUnit + 1);
GL.BindTexture(TextureTarget.Texture2D, RenderTools.defaultTex.RenderableTex.TexID);
string activeTex = tex.Name;
foreach (var texture in TextureList)
{
if (TextureList.IndexOf(texture) == ((BMDTextureMap)tex).TextureIndex)
{
BindGLTexture(tex, shader, TextureList[((BMDTextureMap)tex).TextureIndex]);
return tex.textureUnit + 1;
}
}
return tex.textureUnit + 1;
}
2019-07-11 23:38:29 +00:00
}
}