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 class AliasModel
{ {
public static readonly Regex AnimationRegex = new Regex(@"^[a-zA-Z]+"); 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 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) public void AddAnimation(int startFrame, Mesh mesh)
{ {
animationMeshes.Add((startFrame, 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)] [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)] QAliasHeader header, IntPtr frames, [MarshalAs(UnmanagedType.LPArray, SizeConst = MaxAliasFrames)]
IntPtr[] poseVerts, IntPtr triangles, IntPtr stVerts); IntPtr[] poseVerts, IntPtr triangles, IntPtr stVerts);
[MonoPInvokeCallback(typeof(UploadAliasModelCallback))] [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) IntPtr[] poseVerts, IntPtr triangles, IntPtr stVerts)
{ {
if (header == null) if (header == null)
@ -58,7 +56,7 @@ public partial class RenderModule: CallbackHandler<RenderModule>
} }
return GetSelf(target).UploadAliasModel( return GetSelf(target).UploadAliasModel(
name, boundsMin, boundsMax, header, poseVertices,
name, header, poseVertices,
triangles.ToStructArray<QTriangle>(header.numTriangles), triangles.ToStructArray<QTriangle>(header.numTriangles),
stVerts.ToStructArray<QSTVert>(header.numVerts)); stVerts.ToStructArray<QSTVert>(header.numVerts));
} }

11
Assets/Scripts/Modules/RenderModule.cs

@ -13,7 +13,7 @@ public partial class RenderModule
private float xPos = -8f; 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) QTriVertex[][] poseVertices, QTriangle[] triangles, QSTVert[] stVertices)
{ {
Debug.Log($"Alias model '{name}' with {header.numVerts} vertices, {header.numTriangles} triangles, {header.numFrames} frame(s)"); 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); ConvertTriangles(triangles, out var indices);
ConvertUVs(stVertices, header.skinWidth, header.skinHeight, out var uvs); 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; Mesh mesh;
string animName = null; string animName = null;
@ -38,7 +39,7 @@ public partial class RenderModule
if (frameName != animName) if (frameName != animName)
{ {
// New animation sequence; convert the previous sequence into a blend shape animation // 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); aliasModel.AddAnimation(startFrame, mesh);
animName = frameName; 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); 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)); go.transform.SetPositionAndRotation(new Vector3(xPos, 0, 0), Quaternion.Euler(-90, 90, 0));
if (header.numFrames > 1) if (header.numFrames > 1)

4
engine/UniQuake/gl_uniquake.c

@ -10,7 +10,7 @@ typedef struct unity_glcalls_s
{ {
void *target; 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; } unity_glcalls_t;
const unity_glcalls_t *unity_glcalls; 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, // 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. // 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