// Token: 0x0600057F RID: 1407 RVA: 0x0001B6A4 File Offset: 0x000198A4 public static global::UnityEngine.Vector3[] GetMappedPoints(this global::UnityEngine.Mesh aMesh, global::UnityEngine.Vector2 aUVPos) { global::System.Collections.Generic.List <global::UnityEngine.Vector3> list = new global::System.Collections.Generic.List <global::UnityEngine.Vector3>(); global::UnityEngine.Vector3[] vertices = aMesh.vertices; global::UnityEngine.Vector2[] uv = aMesh.uv; int[] triangles = aMesh.triangles; for (int i = 0; i < triangles.Length; i += 3) { int num = triangles[i]; int num2 = triangles[i + 1]; int num3 = triangles[i + 2]; global::UnityEngine.Vector3 barycentric = global::VRGIN.Helpers.MeshExtension.GetBarycentric(uv[num], uv[num2], uv[num3], aUVPos); bool flag = global::VRGIN.Helpers.MeshExtension.InTriangle(barycentric); if (flag) { global::UnityEngine.Vector3 vector = barycentric.x * vertices[num] + barycentric.y * vertices[num2] + barycentric.z * vertices[num3]; list.Add(vector); } } return(list.ToArray()); }
// Token: 0x060000A2 RID: 162 RVA: 0x00007B2C File Offset: 0x00005D2C public void BuildMesh() { global::Valve.VR.HmdQuad_t hmdQuad_t = default(global::Valve.VR.HmdQuad_t); bool flag = !global::SteamVR_PlayArea.GetBounds(this.size, ref hmdQuad_t); if (!flag) { global::Valve.VR.HmdVector3_t[] array = new global::Valve.VR.HmdVector3_t[] { hmdQuad_t.vCorners0, hmdQuad_t.vCorners1, hmdQuad_t.vCorners2, hmdQuad_t.vCorners3 }; this.vertices = new global::UnityEngine.Vector3[array.Length * 2]; for (int i = 0; i < array.Length; i++) { global::Valve.VR.HmdVector3_t hmdVector3_t = array[i]; this.vertices[i] = new global::UnityEngine.Vector3(hmdVector3_t.v0, 0.01f, hmdVector3_t.v2); } bool flag2 = this.borderThickness == 0f; if (flag2) { base.GetComponent <global::UnityEngine.MeshFilter>().mesh = null; } else { for (int j = 0; j < array.Length; j++) { int num = (j + 1) % array.Length; int num2 = (j + array.Length - 1) % array.Length; global::UnityEngine.Vector3 normalized = (this.vertices[num] - this.vertices[j]).normalized; global::UnityEngine.Vector3 normalized2 = (this.vertices[num2] - this.vertices[j]).normalized; global::UnityEngine.Vector3 vector = this.vertices[j]; vector += global::UnityEngine.Vector3.Cross(normalized, global::UnityEngine.Vector3.up) * this.borderThickness; vector += global::UnityEngine.Vector3.Cross(normalized2, global::UnityEngine.Vector3.down) * this.borderThickness; this.vertices[array.Length + j] = vector; } int[] triangles = new int[] { 0, 1, 4, 1, 5, 4, 1, 2, 5, 2, 6, 5, 2, 3, 6, 3, 7, 6, 3, 0, 7, 0, 4, 7 }; global::UnityEngine.Vector2[] uv = new global::UnityEngine.Vector2[] { new global::UnityEngine.Vector2(0f, 0f), new global::UnityEngine.Vector2(1f, 0f), new global::UnityEngine.Vector2(0f, 0f), new global::UnityEngine.Vector2(1f, 0f), new global::UnityEngine.Vector2(0f, 1f), new global::UnityEngine.Vector2(1f, 1f), new global::UnityEngine.Vector2(0f, 1f), new global::UnityEngine.Vector2(1f, 1f) }; global::UnityEngine.Color[] colors = new global::UnityEngine.Color[] { this.color, this.color, this.color, this.color, new global::UnityEngine.Color(this.color.r, this.color.g, this.color.b, 0f), new global::UnityEngine.Color(this.color.r, this.color.g, this.color.b, 0f), new global::UnityEngine.Color(this.color.r, this.color.g, this.color.b, 0f), new global::UnityEngine.Color(this.color.r, this.color.g, this.color.b, 0f) }; global::UnityEngine.Mesh mesh = new global::UnityEngine.Mesh(); base.GetComponent <global::UnityEngine.MeshFilter>().mesh = mesh; mesh.vertices = this.vertices; mesh.uv = uv; mesh.colors = colors; mesh.triangles = triangles; global::UnityEngine.MeshRenderer component = base.GetComponent <global::UnityEngine.MeshRenderer>(); component.material = global::UnityEngine.Resources.GetBuiltinResource <global::UnityEngine.Material>("Sprites-Default.mat"); component.reflectionProbeUsage = 0; component.shadowCastingMode = 0; component.receiveShadows = false; component.useLightProbes = false; } } }
// Token: 0x06000102 RID: 258 RVA: 0x0000AC3C File Offset: 0x00008E3C public static global::UnityEngine.Mesh CreateHiddenAreaMesh(global::Valve.VR.HiddenAreaMesh_t src, global::Valve.VR.VRTextureBounds_t bounds) { bool flag = src.unTriangleCount == 0U; global::UnityEngine.Mesh result; if (flag) { result = null; } else { float[] array = new float[src.unTriangleCount * 3U * 2U]; global::System.Runtime.InteropServices.Marshal.Copy(src.pVertexData, array, 0, array.Length); global::UnityEngine.Vector3[] array2 = new global::UnityEngine.Vector3[src.unTriangleCount * 3U + 12U]; int[] array3 = new int[src.unTriangleCount * 3U + 24U]; float num = 2f * bounds.uMin - 1f; float num2 = 2f * bounds.uMax - 1f; float num3 = 2f * bounds.vMin - 1f; float num4 = 2f * bounds.vMax - 1f; int num5 = 0; int num6 = 0; while ((long)num5 < (long)((ulong)(src.unTriangleCount * 3U))) { float num7 = global::SteamVR_Utils.Lerp(num, num2, array[num6++]); float num8 = global::SteamVR_Utils.Lerp(num3, num4, array[num6++]); array2[num5] = new global::UnityEngine.Vector3(num7, num8, 0f); array3[num5] = num5; num5++; } int num9 = (int)(src.unTriangleCount * 3U); int num10 = num9; array2[num10++] = new global::UnityEngine.Vector3(-1f, -1f, 0f); array2[num10++] = new global::UnityEngine.Vector3(num, -1f, 0f); array2[num10++] = new global::UnityEngine.Vector3(-1f, 1f, 0f); array2[num10++] = new global::UnityEngine.Vector3(num, 1f, 0f); array2[num10++] = new global::UnityEngine.Vector3(num2, -1f, 0f); array2[num10++] = new global::UnityEngine.Vector3(1f, -1f, 0f); array2[num10++] = new global::UnityEngine.Vector3(num2, 1f, 0f); array2[num10++] = new global::UnityEngine.Vector3(1f, 1f, 0f); array2[num10++] = new global::UnityEngine.Vector3(num, num3, 0f); array2[num10++] = new global::UnityEngine.Vector3(num2, num3, 0f); array2[num10++] = new global::UnityEngine.Vector3(num, num4, 0f); array2[num10++] = new global::UnityEngine.Vector3(num2, num4, 0f); int num11 = num9; array3[num11++] = num9; array3[num11++] = num9 + 1; array3[num11++] = num9 + 2; array3[num11++] = num9 + 2; array3[num11++] = num9 + 1; array3[num11++] = num9 + 3; array3[num11++] = num9 + 4; array3[num11++] = num9 + 5; array3[num11++] = num9 + 6; array3[num11++] = num9 + 6; array3[num11++] = num9 + 5; array3[num11++] = num9 + 7; array3[num11++] = num9 + 1; array3[num11++] = num9 + 4; array3[num11++] = num9 + 8; array3[num11++] = num9 + 8; array3[num11++] = num9 + 4; array3[num11++] = num9 + 9; array3[num11++] = num9 + 10; array3[num11++] = num9 + 11; array3[num11++] = num9 + 3; array3[num11++] = num9 + 3; array3[num11++] = num9 + 11; array3[num11++] = num9 + 6; result = new global::UnityEngine.Mesh { vertices = array2, triangles = array3, bounds = new global::UnityEngine.Bounds(global::UnityEngine.Vector3.zero, new global::UnityEngine.Vector3(float.MaxValue, float.MaxValue, float.MaxValue)) }; } return(result); }
// Token: 0x06000075 RID: 117 RVA: 0x00005330 File Offset: 0x00003530 public void UpdateModel() { this.fovLeft = global::UnityEngine.Mathf.Clamp(this.fovLeft, 1f, 89f); this.fovRight = global::UnityEngine.Mathf.Clamp(this.fovRight, 1f, 89f); this.fovTop = global::UnityEngine.Mathf.Clamp(this.fovTop, 1f, 89f); this.fovBottom = global::UnityEngine.Mathf.Clamp(this.fovBottom, 1f, 89f); this.farZ = global::UnityEngine.Mathf.Max(this.farZ, this.nearZ + 0.01f); this.nearZ = global::UnityEngine.Mathf.Clamp(this.nearZ, 0.01f, this.farZ - 0.01f); float num = global::UnityEngine.Mathf.Sin(-this.fovLeft * 0.0174532924f); float num2 = global::UnityEngine.Mathf.Sin(this.fovRight * 0.0174532924f); float num3 = global::UnityEngine.Mathf.Sin(this.fovTop * 0.0174532924f); float num4 = global::UnityEngine.Mathf.Sin(-this.fovBottom * 0.0174532924f); float num5 = global::UnityEngine.Mathf.Cos(-this.fovLeft * 0.0174532924f); float num6 = global::UnityEngine.Mathf.Cos(this.fovRight * 0.0174532924f); float num7 = global::UnityEngine.Mathf.Cos(this.fovTop * 0.0174532924f); float num8 = global::UnityEngine.Mathf.Cos(-this.fovBottom * 0.0174532924f); global::UnityEngine.Vector3[] array = new global::UnityEngine.Vector3[] { new global::UnityEngine.Vector3(num * this.nearZ / num5, num3 * this.nearZ / num7, this.nearZ), new global::UnityEngine.Vector3(num2 * this.nearZ / num6, num3 * this.nearZ / num7, this.nearZ), new global::UnityEngine.Vector3(num2 * this.nearZ / num6, num4 * this.nearZ / num8, this.nearZ), new global::UnityEngine.Vector3(num * this.nearZ / num5, num4 * this.nearZ / num8, this.nearZ), new global::UnityEngine.Vector3(num * this.farZ / num5, num3 * this.farZ / num7, this.farZ), new global::UnityEngine.Vector3(num2 * this.farZ / num6, num3 * this.farZ / num7, this.farZ), new global::UnityEngine.Vector3(num2 * this.farZ / num6, num4 * this.farZ / num8, this.farZ), new global::UnityEngine.Vector3(num * this.farZ / num5, num4 * this.farZ / num8, this.farZ) }; int[] array2 = new int[] { 0, 4, 7, 0, 7, 3, 0, 7, 4, 0, 3, 7, 1, 5, 6, 1, 6, 2, 1, 6, 5, 1, 2, 6, 0, 4, 5, 0, 5, 1, 0, 5, 4, 0, 1, 5, 2, 3, 7, 2, 7, 6, 2, 7, 3, 2, 6, 7 }; int num9 = 0; global::UnityEngine.Vector3[] array3 = new global::UnityEngine.Vector3[array2.Length]; global::UnityEngine.Vector3[] array4 = new global::UnityEngine.Vector3[array2.Length]; for (int i = 0; i < array2.Length / 3; i++) { global::UnityEngine.Vector3 vector = array[array2[i * 3]]; global::UnityEngine.Vector3 vector2 = array[array2[i * 3 + 1]]; global::UnityEngine.Vector3 vector3 = array[array2[i * 3 + 2]]; global::UnityEngine.Vector3 normalized = global::UnityEngine.Vector3.Cross(vector2 - vector, vector3 - vector).normalized; array4[i * 3] = normalized; array4[i * 3 + 1] = normalized; array4[i * 3 + 2] = normalized; array3[i * 3] = vector; array3[i * 3 + 1] = vector2; array3[i * 3 + 2] = vector3; array2[i * 3] = num9++; array2[i * 3 + 1] = num9++; array2[i * 3 + 2] = num9++; } global::UnityEngine.Mesh mesh = new global::UnityEngine.Mesh(); mesh.vertices = array3; mesh.normals = array4; mesh.triangles = array2; base.GetComponent <global::UnityEngine.MeshFilter>().mesh = mesh; }
// Token: 0x06000672 RID: 1650 RVA: 0x0001F681 File Offset: 0x0001D881 public RenderModel(global::UnityEngine.Mesh mesh, global::UnityEngine.Material material) { this.mesh = mesh; this.material = material; }
// Token: 0x060000C9 RID: 201 RVA: 0x00008D80 File Offset: 0x00006F80 private global::SteamVR_RenderModel.RenderModel LoadRenderModel(global::Valve.VR.CVRRenderModels renderModels, string renderModelName, string baseName) { global::System.IntPtr zero = global::System.IntPtr.Zero; global::Valve.VR.EVRRenderModelError evrrenderModelError; for (;;) { evrrenderModelError = renderModels.LoadRenderModel_Async(renderModelName, ref zero); bool flag = evrrenderModelError != global::Valve.VR.EVRRenderModelError.Loading; if (flag) { break; } global::System.Threading.Thread.Sleep(1); } bool flag2 = evrrenderModelError > global::Valve.VR.EVRRenderModelError.None; global::SteamVR_RenderModel.RenderModel result; if (flag2) { global::UnityEngine.Debug.LogError(string.Format("Failed to load render model {0} - {1}", renderModelName, evrrenderModelError.ToString())); result = null; } else { global::Valve.VR.RenderModel_t renderModel_t = (global::Valve.VR.RenderModel_t)global::System.Runtime.InteropServices.Marshal.PtrToStructure(zero, typeof(global::Valve.VR.RenderModel_t)); global::UnityEngine.Vector3[] array = new global::UnityEngine.Vector3[renderModel_t.unVertexCount]; global::UnityEngine.Vector3[] array2 = new global::UnityEngine.Vector3[renderModel_t.unVertexCount]; global::UnityEngine.Vector2[] array3 = new global::UnityEngine.Vector2[renderModel_t.unVertexCount]; global::System.Type typeFromHandle = typeof(global::Valve.VR.RenderModel_Vertex_t); int num = 0; while ((long)num < (long)((ulong)renderModel_t.unVertexCount)) { global::System.IntPtr intPtr; intPtr..ctor(renderModel_t.rVertexData.ToInt64() + (long)(num * global::System.Runtime.InteropServices.Marshal.SizeOf(typeFromHandle))); global::Valve.VR.RenderModel_Vertex_t renderModel_Vertex_t = (global::Valve.VR.RenderModel_Vertex_t)global::System.Runtime.InteropServices.Marshal.PtrToStructure(intPtr, typeFromHandle); array[num] = new global::UnityEngine.Vector3(renderModel_Vertex_t.vPosition.v0, renderModel_Vertex_t.vPosition.v1, -renderModel_Vertex_t.vPosition.v2); array2[num] = new global::UnityEngine.Vector3(renderModel_Vertex_t.vNormal.v0, renderModel_Vertex_t.vNormal.v1, -renderModel_Vertex_t.vNormal.v2); array3[num] = new global::UnityEngine.Vector2(renderModel_Vertex_t.rfTextureCoord0, renderModel_Vertex_t.rfTextureCoord1); num++; } int num2 = (int)(renderModel_t.unTriangleCount * 3U); short[] array4 = new short[num2]; global::System.Runtime.InteropServices.Marshal.Copy(renderModel_t.rIndexData, array4, 0, array4.Length); int[] array5 = new int[num2]; int num3 = 0; while ((long)num3 < (long)((ulong)renderModel_t.unTriangleCount)) { array5[num3 * 3] = (int)array4[num3 * 3 + 2]; array5[num3 * 3 + 1] = (int)array4[num3 * 3 + 1]; array5[num3 * 3 + 2] = (int)array4[num3 * 3]; num3++; } global::UnityEngine.Mesh mesh = new global::UnityEngine.Mesh(); mesh.vertices = array; mesh.normals = array2; mesh.uv = array3; mesh.triangles = array5; mesh.Optimize(); global::UnityEngine.Material material = global::SteamVR_RenderModel.materials[renderModel_t.diffuseTextureId] as global::UnityEngine.Material; bool flag3 = material == null || material.mainTexture == null; if (flag3) { global::System.IntPtr zero2 = global::System.IntPtr.Zero; for (;;) { evrrenderModelError = renderModels.LoadTexture_Async(renderModel_t.diffuseTextureId, ref zero2); bool flag4 = evrrenderModelError != global::Valve.VR.EVRRenderModelError.Loading; if (flag4) { break; } global::System.Threading.Thread.Sleep(1); } bool flag5 = evrrenderModelError == global::Valve.VR.EVRRenderModelError.None; if (flag5) { global::Valve.VR.RenderModel_TextureMap_t renderModel_TextureMap_t = (global::Valve.VR.RenderModel_TextureMap_t)global::System.Runtime.InteropServices.Marshal.PtrToStructure(zero2, typeof(global::Valve.VR.RenderModel_TextureMap_t)); global::UnityEngine.Texture2D texture2D = new global::UnityEngine.Texture2D((int)renderModel_TextureMap_t.unWidth, (int)renderModel_TextureMap_t.unHeight, 5, false); bool flag6 = global::UnityEngine.SystemInfo.graphicsDeviceVersion.StartsWith("OpenGL"); if (flag6) { byte[] array6 = new byte[(int)(renderModel_TextureMap_t.unWidth * renderModel_TextureMap_t.unHeight * '\u0004')]; global::System.Runtime.InteropServices.Marshal.Copy(renderModel_TextureMap_t.rubTextureMapData, array6, 0, array6.Length); global::UnityEngine.Color32[] array7 = new global::UnityEngine.Color32[(int)(renderModel_TextureMap_t.unWidth * renderModel_TextureMap_t.unHeight)]; int num4 = 0; for (int i = 0; i < (int)renderModel_TextureMap_t.unHeight; i++) { for (int j = 0; j < (int)renderModel_TextureMap_t.unWidth; j++) { byte b = array6[num4++]; byte b2 = array6[num4++]; byte b3 = array6[num4++]; byte b4 = array6[num4++]; array7[i * (int)renderModel_TextureMap_t.unWidth + j] = new global::UnityEngine.Color32(b, b2, b3, b4); } } texture2D.SetPixels32(array7); texture2D.Apply(); } else { texture2D.Apply(); for (;;) { evrrenderModelError = renderModels.LoadIntoTextureD3D11_Async(renderModel_t.diffuseTextureId, texture2D.GetNativeTexturePtr()); bool flag7 = evrrenderModelError != global::Valve.VR.EVRRenderModelError.Loading; if (flag7) { break; } global::System.Threading.Thread.Sleep(1); } } material = new global::UnityEngine.Material((this.shader != null) ? this.shader : global::EscalationVR.UnityHelper.GetShader("Standard")); material.mainTexture = texture2D; global::SteamVR_RenderModel.materials[renderModel_t.diffuseTextureId] = material; renderModels.FreeTexture(zero2); } else { global::UnityEngine.Debug.Log("Failed to load render model texture for render model " + renderModelName); } } base.StartCoroutine(this.FreeRenderModel(zero)); result = new global::SteamVR_RenderModel.RenderModel(mesh, material); } return(result); }