Browse Source

Some cleanup

console
Nico de Poel 5 years ago
parent
commit
e8a3313d88
  1. 8
      Assets/Scripts/Modules/AliasModel.cs
  2. 10
      Assets/Scripts/Modules/RenderModule.Interop.cs
  3. 11
      Assets/Scripts/Modules/RenderModule.cs
  4. 4
      engine/UniQuake/gl_uniquake.c

8
Assets/Scripts/Modules/AliasModel.cs

@ -5,9 +5,15 @@ using UnityEngine;
public class AliasModel
{
public static readonly Regex AnimationRegex = new Regex(@"^[a-zA-Z]+");
private readonly string name;
private readonly List<(int, Mesh)> animationMeshes = new List<(int, Mesh)>(); // TODO: make this a fixed array after initialization
public AliasModel(string name)
{
this.name = name;
}
public void AddAnimation(int startFrame, Mesh mesh)
{
animationMeshes.Add((startFrame, mesh));

10
Assets/Scripts/Modules/RenderModule.Interop.cs

@ -31,15 +31,13 @@ public partial class RenderModule: CallbackHandler<RenderModule>
}
[UnmanagedFunctionPointer(CallingConvention.Cdecl, CharSet = CharSet.Ansi)]
private delegate int UploadAliasModelCallback(IntPtr target,
[MarshalAs(UnmanagedType.LPStr)] string name, QVec3 boundsMin, QVec3 boundsMax,
private delegate int UploadAliasModelCallback(IntPtr target, [MarshalAs(UnmanagedType.LPStr)] string name,
QAliasHeader header, IntPtr frames, [MarshalAs(UnmanagedType.LPArray, SizeConst = MaxAliasFrames)]
IntPtr[] poseVerts, IntPtr triangles, IntPtr stVerts);
[MonoPInvokeCallback(typeof(UploadAliasModelCallback))]
private static int Callback_UploadAliasModel(IntPtr target,
string name, QVec3 boundsMin, QVec3 boundsMax,
QAliasHeader header, IntPtr frames,
private static int Callback_UploadAliasModel(IntPtr target,
string name, QAliasHeader header, IntPtr frames,
IntPtr[] poseVerts, IntPtr triangles, IntPtr stVerts)
{
if (header == null)
@ -58,7 +56,7 @@ public partial class RenderModule: CallbackHandler<RenderModule>
}
return GetSelf(target).UploadAliasModel(
name, boundsMin, boundsMax, header, poseVertices,
name, header, poseVertices,
triangles.ToStructArray<QTriangle>(header.numTriangles),
stVerts.ToStructArray<QSTVert>(header.numVerts));
}

11
Assets/Scripts/Modules/RenderModule.cs

@ -13,7 +13,7 @@ public partial class RenderModule
private float xPos = -8f;
private int UploadAliasModel(string name, QVec3 boundsMin, QVec3 boundsMax, QAliasHeader header,
private int UploadAliasModel(string name, QAliasHeader header,
QTriVertex[][] poseVertices, QTriangle[] triangles, QSTVert[] stVertices)
{
Debug.Log($"Alias model '{name}' with {header.numVerts} vertices, {header.numTriangles} triangles, {header.numFrames} frame(s)");
@ -21,7 +21,8 @@ public partial class RenderModule
ConvertTriangles(triangles, out var indices);
ConvertUVs(stVertices, header.skinWidth, header.skinHeight, out var uvs);
AliasModel aliasModel = new AliasModel();
string modelName = System.IO.Path.GetFileNameWithoutExtension(name);
AliasModel aliasModel = new AliasModel(modelName);
Mesh mesh;
string animName = null;
@ -38,7 +39,7 @@ public partial class RenderModule
if (frameName != animName)
{
// New animation sequence; convert the previous sequence into a blend shape animation
mesh = CreateAnimatedMesh(header, poseVertices, indices, uvs, animName, startFrame, frameIdx);
mesh = CreateAnimatedMesh(header, poseVertices, indices, uvs, $"{modelName}_{animName}", startFrame, frameIdx);
aliasModel.AddAnimation(startFrame, mesh);
animName = frameName;
@ -46,10 +47,10 @@ public partial class RenderModule
}
}
mesh = CreateAnimatedMesh(header, poseVertices, indices, uvs, animName, startFrame, header.numFrames);
mesh = CreateAnimatedMesh(header, poseVertices, indices, uvs, $"{modelName}_{animName}", startFrame, header.numFrames);
aliasModel.AddAnimation(startFrame, mesh);
var go = new GameObject(System.IO.Path.GetFileNameWithoutExtension(name));
var go = new GameObject(modelName);
go.transform.SetPositionAndRotation(new Vector3(xPos, 0, 0), Quaternion.Euler(-90, 90, 0));
if (header.numFrames > 1)

4
engine/UniQuake/gl_uniquake.c

@ -10,7 +10,7 @@ typedef struct unity_glcalls_s
{
void *target;
int(*UploadAliasModel)(void *target, const char *name, vec3_t mins, vec3_t maxs, aliashdr_t *aliashdr, maliasframedesc_t *frames, trivertx_t **poseVerts, mtriangle_t *triangles, stvert_t *stVerts);
int(*UploadAliasModel)(void *target, const char *name, aliashdr_t *aliashdr, maliasframedesc_t *frames, trivertx_t **poseVerts, mtriangle_t *triangles, stvert_t *stVerts);
} unity_glcalls_t;
const unity_glcalls_t *unity_glcalls;
@ -19,5 +19,5 @@ int UQ_GL_UploadAliasModel(qmodel_t *model, aliashdr_t *aliashdr, trivertx_t **p
{
// C# doesn't really understand this idea of a variable-length embedded array of structs,
// so we pass along the pointer to the first frame struct which allows us to manually marshal the entire array.
return unity_glcalls->UploadAliasModel(unity_glcalls->target, model->name, model->mins, model->maxs, aliashdr, &aliashdr->frames[0], poseVerts, triangles, stVerts);
return unity_glcalls->UploadAliasModel(unity_glcalls->target, model->name, aliashdr, &aliashdr->frames[0], poseVerts, triangles, stVerts);
}
Loading…
Cancel
Save