Some speed improvements

This commit is contained in:
KillzXGaming 2019-05-28 20:02:58 -04:00
parent f9ccce42df
commit cb6cc251bd
4 changed files with 46 additions and 45 deletions

Binary file not shown.

View file

@ -36,22 +36,26 @@ namespace FirstPlugin
int vbo_position;
int ibo_elements;
private List<FMDL> _models = new List<FMDL>();
public List<FMDL> models
{
get
{
List<FMDL> fmdls = new List<FMDL>();
return _models;
}
}
private void UpdateModelList()
{
foreach (var node in ResFileNode.Nodes)
{
if (node is BFRESGroupNode &&
((BFRESGroupNode)node).Type == BRESGroupType.Models)
{
foreach (FMDL mdl in ((BFRESGroupNode)node).Nodes)
fmdls.Add(mdl);
_models.Add(mdl);
}
}
return fmdls;
}
}
public BFRES ResFileNode;
@ -84,11 +88,11 @@ namespace FirstPlugin
private void TransformBones()
{
foreach (var model in models)
for (int mdl = 0; mdl < models.Count; mdl++)
{
foreach (var bone in model.Skeleton.bones)
for (int b = 0; b < models[mdl].Skeleton.bones.Count; b++)
{
bone.ModelMatrix = ModelTransform;
models[mdl].Skeleton.bones[b].ModelMatrix = ModelTransform;
}
}
}
@ -200,11 +204,11 @@ namespace FirstPlugin
public void CenterCamera(GL_ControlModern control)
{
var spheres = new List<Vector4>();
foreach (var mdl in models)
for (int mdl = 0; mdl < models.Count; mdl++)
{
foreach (FSHP shp in mdl.shapes)
for (int shp = 0; shp < models[mdl].shapes.Count; shp++)
{
var vertexPositions = shp.vertices.Select(x => x.pos).Distinct();
var vertexPositions = models[mdl].shapes[shp].vertices.Select(x => x.pos).Distinct();
spheres.Add(control.GenerateBoundingSphere(vertexPositions));
}
}
@ -265,9 +269,6 @@ namespace FirstPlugin
if (models.Count > 0)
{
// if (models[0].Parent.Parent.IsSelected)
// CenterCamera(control);
if (models[0].shapes.Count > 0)
{
if (models[0].shapes[0].GetMaterial().shaderassign.ShaderModel == "uking_mat")
@ -353,28 +354,28 @@ namespace FirstPlugin
private void DrawModels(SF.Shader shader, GL_ControlModern control)
{
shader.EnableVertexAttributes();
foreach (FMDL mdl in models)
for (int m = 0; m < models.Count; m++)
{
if (mdl.Checked)
if (models[m].Checked)
{
List<FSHP> opaque = new List<FSHP>();
List<FSHP> transparent = new List<FSHP>();
foreach (FSHP m in mdl.depthSortedMeshes)
for (int shp = 0; shp < models[m].shapes.Count; shp++)
{
if (m.GetMaterial().isTransparent)
transparent.Add(m);
if (models[m].shapes[shp].GetMaterial().isTransparent)
transparent.Add(models[m].shapes[shp]);
else
opaque.Add(m);
opaque.Add(models[m].shapes[shp]);
}
foreach (FSHP shp in mdl.shapes)
for (int shp = 0; shp < models[m].shapes.Count; shp++)
{
DrawModel(shp, mdl, shader, mdl.IsSelected);
DrawModel(models[m].shapes[shp], models[m], shader, models[m].IsSelected);
}
}
}
shader.DisableVertexAttributes();
}
@ -472,8 +473,10 @@ namespace FirstPlugin
LoadPBRMaps(shader);
foreach (MatTexture matex in mat.TextureMaps)
for (int t = 0; t < mat.TextureMaps.Count; t++)
{
MatTexture matex = (MatTexture)mat.TextureMaps[t];
if (matex.Type == MatTexture.TextureType.Diffuse)
TextureUniform(shader, mat, mat.HasDiffuseMap, "DiffuseMap", matex);
else if (matex.Type == MatTexture.TextureType.Normal)
@ -547,7 +550,6 @@ namespace FirstPlugin
{
foreach (var ftexContainer in PluginRuntime.ftexContainers)
{
if (ftexContainer.ResourceNodes.ContainsKey(activeTex))
{
FTEX ftex = (FTEX)ftexContainer.ResourceNodes[activeTex];
@ -686,6 +688,8 @@ namespace FirstPlugin
if (!Runtime.OpenTKInitialized)
return;
UpdateModelList();
STProgressBar progressBar = new STProgressBar();
progressBar.Task = "Updating Vertex Data...";
progressBar.Value = 0;
@ -705,34 +709,31 @@ namespace FirstPlugin
int TotalShapeCount = models.Sum(b => b.shapes.Count);
int curShape = 0;
int value = 0;
foreach (FMDL mdl in models)
for (int m = 0; m < models.Count; m++)
{
//Reset min/max
mdl.MaxPosition = new Vector3(0);
mdl.MinPosition = new Vector3(0);
models[m].MaxPosition = new Vector3(0);
models[m].MinPosition = new Vector3(0);
foreach (FSHP m in mdl.shapes)
for (int shp = 0; shp < models[m].shapes.Count; shp++)
{
progressBar.Task = "Updating Shape... " + m.Text;
value = ((curShape * 100) / TotalShapeCount);
progressBar.Task = "Updating Shape... " + models[m].shapes[shp].Text;
value = ((shp * 100) / TotalShapeCount);
progressBar.Value = value;
progressBar.Refresh();
m.Offset = poffset * 4;
List<DisplayVertex> pv = m.CreateDisplayVertices(mdl);
models[m].shapes[shp].Offset = poffset * 4;
List<DisplayVertex> pv = models[m].shapes[shp].CreateDisplayVertices(models[m]);
Vs.AddRange(pv);
for (int i = 0; i < m.lodMeshes[m.DisplayLODIndex].displayFaceSize; i++)
for (int i = 0; i < models[m].shapes[shp].lodMeshes[models[m].shapes[shp].DisplayLODIndex].displayFaceSize; i++)
{
Ds.Add(m.display[i] + voffset);
Ds.Add(models[m].shapes[shp].display[i] + voffset);
}
poffset += m.lodMeshes[m.DisplayLODIndex].displayFaceSize;
poffset += models[m].shapes[shp].lodMeshes[models[m].shapes[shp].DisplayLODIndex].displayFaceSize;
voffset += pv.Count;
curShape++;
}
}
@ -807,8 +808,8 @@ namespace FirstPlugin
{
AglShaderTurbo aglShader = new AglShaderTurbo();
foreach (var renderInfo in mat.renderinfo)
aglShader.LoadRenderInfo(renderInfo);
for (int i = 0; i < mat.renderinfo.Count; i++)
aglShader.LoadRenderInfo(mat.renderinfo[i]);
// aglShader.LoadRenderPass(mat, shader);
}