static public int SetGlobalMatrix(IntPtr l) { try { int argc = LuaDLL.lua_gettop(l); if (matchType(l, argc, 2, typeof(int), typeof(UnityEngine.Matrix4x4))) { UnityEngine.Rendering.CommandBuffer self = (UnityEngine.Rendering.CommandBuffer)checkSelf(l); System.Int32 a1; checkType(l, 2, out a1); UnityEngine.Matrix4x4 a2; checkValueType(l, 3, out a2); self.SetGlobalMatrix(a1, a2); return(0); } else if (matchType(l, argc, 2, typeof(string), typeof(UnityEngine.Matrix4x4))) { UnityEngine.Rendering.CommandBuffer self = (UnityEngine.Rendering.CommandBuffer)checkSelf(l); System.String a1; checkType(l, 2, out a1); UnityEngine.Matrix4x4 a2; checkValueType(l, 3, out a2); self.SetGlobalMatrix(a1, a2); return(0); } LuaDLL.luaL_error(l, "No matched override function to call"); return(0); } catch (Exception e) { LuaDLL.luaL_error(l, e.ToString()); return(0); } }
internal override void RenderVectors(Camera camera, CommandBuffer renderCB, float scale, Quality quality) { if (this.m_initialized && !this.m_error && this.m_meshRenderer.isVisible) { bool flag = (this.m_owner.Instance.CullingMask & 1 << this.m_obj.gameObject.layer) != 0; if (!flag || (flag && this.m_moved)) { int num = (!flag) ? 255 : this.m_owner.Instance.GenerateObjectId(this.m_obj.gameObject); Matrix4x4 value; if (this.m_obj.FixedStep) { value = this.m_owner.PrevViewProjMatrixRT * this.m_currLocalToWorld; } else { value = this.m_owner.PrevViewProjMatrixRT * this.m_prevLocalToWorld; } renderCB.SetGlobalMatrix("_AM_MATRIX_PREV_MVP", value); renderCB.SetGlobalFloat("_AM_OBJECT_ID", (float)num * 0.003921569f); renderCB.SetGlobalFloat("_AM_MOTION_SCALE", (!flag) ? 0f : scale); int num2 = (quality != Quality.Mobile) ? 2 : 0; for (int i = 0; i < this.m_sharedMaterials.Length; i++) { MotionState.MaterialDesc materialDesc = this.m_sharedMaterials[i]; int shaderPass = num2 + ((!materialDesc.coverage) ? 0 : 1); if (materialDesc.coverage) { Texture mainTexture = materialDesc.material.mainTexture; if (mainTexture != null) { materialDesc.propertyBlock.SetTexture("_MainTex", mainTexture); } if (materialDesc.cutoff) { materialDesc.propertyBlock.SetFloat("_Cutoff", materialDesc.material.GetFloat("_Cutoff")); } } renderCB.DrawMesh(this.m_mesh, this.m_transform.localToWorldMatrix, this.m_owner.Instance.SolidVectorsMaterial, i, shaderPass, materialDesc.propertyBlock); } } } }
internal override void RenderVectors(Camera camera, CommandBuffer renderCB, float scale, Quality quality) { if (this.m_initialized && !this.m_error && this.m_renderer.isVisible) { bool flag = (this.m_owner.Instance.CullingMask & 1 << this.m_obj.gameObject.layer) != 0; int num = (!flag) ? 255 : this.m_owner.Instance.GenerateObjectId(this.m_obj.gameObject); Vector3[] vertices = this.m_cloth.vertices; for (int i = 0; i < this.m_targetVertexCount; i++) { this.m_currVertices[i] = vertices[this.m_targetRemap[i]]; } if (this.m_starting || !this.m_wasVisible) { Array.Copy(this.m_currVertices, this.m_prevVertices, this.m_targetVertexCount); } this.m_clonedMesh.vertices = this.m_currVertices; this.m_clonedMesh.normals = this.m_prevVertices; Matrix4x4 value; if (this.m_obj.FixedStep) { value = this.m_owner.PrevViewProjMatrixRT * this.m_currLocalToWorld; } else { value = this.m_owner.PrevViewProjMatrixRT * this.m_prevLocalToWorld; } renderCB.SetGlobalMatrix("_AM_MATRIX_PREV_MVP", value); renderCB.SetGlobalFloat("_AM_OBJECT_ID", (float)num * 0.003921569f); renderCB.SetGlobalFloat("_AM_MOTION_SCALE", (!flag) ? 0f : scale); int num2 = (quality != Quality.Mobile) ? 2 : 0; for (int j = 0; j < this.m_sharedMaterials.Length; j++) { MotionState.MaterialDesc materialDesc = this.m_sharedMaterials[j]; int shaderPass = num2 + ((!materialDesc.coverage) ? 0 : 1); if (materialDesc.coverage) { Texture mainTexture = materialDesc.material.mainTexture; if (mainTexture != null) { materialDesc.propertyBlock.SetTexture("_MainTex", mainTexture); } if (materialDesc.cutoff) { materialDesc.propertyBlock.SetFloat("_Cutoff", materialDesc.material.GetFloat("_Cutoff")); } } renderCB.DrawMesh(this.m_clonedMesh, this.m_currLocalToWorld, this.m_owner.Instance.ClothVectorsMaterial, j, shaderPass, materialDesc.propertyBlock); } } }
private void CloneToBuffer(Material mat, CommandBuffer buf) { foreach (KeyValuePair<object, object> field in cache) { object obj = field.Value; //float int id = (int)field.Key; if (obj.GetType() == typeof(float)) { float value = mat.GetFloat(id); buf.SetGlobalFloat(id, value); } //Color else if (obj.GetType() == typeof(Color)) { Color value = mat.GetColor(id); buf.SetGlobalColor(id, value); } //Color32 else if (obj.GetType() == typeof(Color32)) { Color value = mat.GetColor(id); buf.SetGlobalColor(id, value); }//Vector2 else if (obj.GetType() == typeof(Vector2)) { Vector4 value = mat.GetVector(id); buf.SetGlobalVector(id, value); } //Vector3 else if (obj.GetType() == typeof(Vector3)) { Vector4 value = mat.GetVector(id); buf.SetGlobalVector(id, value); } //Vector4 else if (obj.GetType() == typeof(Vector4)) { Vector4 value = mat.GetVector(id); buf.SetGlobalVector(id, value); } //Matrix else if (obj.GetType() == typeof(Matrix4x4)) { Matrix4x4 value = mat.GetMatrix(id); buf.SetGlobalMatrix(id, value); } } }
void RenderReprojectionVectors( CommandBuffer commandBuffer, RenderTexture destination, float scale ) { commandBuffer.SetGlobalMatrix( "_AM_MATRIX_CURR_REPROJ", m_baseCamera.PrevViewProjMatrix * m_baseCamera.InvViewProjMatrix ); commandBuffer.SetGlobalFloat( "_AM_MOTION_SCALE", scale ); RenderTexture dummy = null; commandBuffer.Blit( new RenderTargetIdentifier( dummy ), destination, m_reprojectionMaterial ); }
internal override void RenderVectors( Camera camera, CommandBuffer renderCB, float scale, AmplifyMotion.Quality quality ) { if ( m_initialized && !m_error && m_renderer.isVisible ) { Profiler.BeginSample( "Skinned.Update" ); if ( !m_useFallback ) { if ( !m_useGPU ) WaitForAsyncUpdate(); } Profiler.EndSample(); Profiler.BeginSample( "Skinned.Render" ); if ( !m_useGPU ) { if ( !m_useFallback ) m_clonedMesh.vertices = m_currVertices; m_clonedMesh.normals = m_prevVertices; } const float rcp255 = 1 / 255.0f; bool mask = ( m_owner.Instance.CullingMask & ( 1 << m_obj.gameObject.layer ) ) != 0; int objectId = mask ? m_owner.Instance.GenerateObjectId( m_obj.gameObject ) : 255; Matrix4x4 prevModelViewProj; if ( m_obj.FixedStep ) prevModelViewProj = m_owner.PrevViewProjMatrixRT * m_currLocalToWorld; else prevModelViewProj = m_owner.PrevViewProjMatrixRT * m_prevLocalToWorld; renderCB.SetGlobalMatrix( "_AM_MATRIX_PREV_MVP", prevModelViewProj ); renderCB.SetGlobalFloat( "_AM_OBJECT_ID", objectId * rcp255 ); renderCB.SetGlobalFloat( "_AM_MOTION_SCALE", mask ? scale : 0 ); if ( m_useGPU ) { #if !UNITY_4 Vector4 vertexTexelSize = new Vector4( 1.0f / m_gpuVertexTexWidth, 1.0f / m_gpuVertexTexHeight, m_gpuVertexTexWidth, m_gpuVertexTexHeight ); renderCB.SetGlobalVector( "_AM_VERTEX_TEXEL_SIZE", vertexTexelSize ); renderCB.SetGlobalVector( "_AM_VERTEX_TEXEL_HALFSIZE", vertexTexelSize * 0.5f ); renderCB.SetGlobalTexture( "_AM_PREV_VERTEX_TEX", m_gpuPrevVertices ); renderCB.SetGlobalTexture( "_AM_CURR_VERTEX_TEX", m_gpuCurrVertices ); #endif } int hardwarePass = m_useGPU ? 4 : 0; int qualityPass = ( quality == AmplifyMotion.Quality.Mobile ) ? 0 : 2; int basePass = hardwarePass + qualityPass; for ( int i = 0; i < m_sharedMaterials.Length; i++ ) { MaterialDesc matDesc = m_sharedMaterials[ i ]; int pass = basePass + ( matDesc.coverage ? 1 : 0 ); if ( matDesc.coverage ) { Texture mainTex = matDesc.material.mainTexture; if ( mainTex != null ) matDesc.propertyBlock.SetTexture( "_MainTex", mainTex ); if ( matDesc.cutoff ) matDesc.propertyBlock.SetFloat( "_Cutoff", matDesc.material.GetFloat( "_Cutoff" ) ); } renderCB.DrawMesh( m_clonedMesh, m_currLocalToWorld, m_owner.Instance.SkinnedVectorsMaterial, i, pass, matDesc.propertyBlock ); } Profiler.EndSample(); } }
private void UpdateVerticesGPU( CommandBuffer updateCB, bool starting ) { if ( !starting && m_wasVisible ) { AmplifyMotionEffectBase.DiscardContents( m_gpuPrevVertices ); updateCB.Blit( new RenderTargetIdentifier( m_gpuCurrVertices ), m_gpuPrevVertices ); } updateCB.SetGlobalMatrix( "_AM_WORLD_TO_LOCAL_MATRIX", m_worldToLocalMatrix ); AmplifyMotionEffectBase.DiscardContents( m_gpuCurrVertices ); RenderTexture dummy = null; updateCB.Blit( new RenderTargetIdentifier( dummy ), m_gpuCurrVertices, m_gpuSkinDeformMat, Mathf.Min( m_weightCount - 1, 2 ) ); if ( starting || !m_wasVisible ) { AmplifyMotionEffectBase.DiscardContents( m_gpuPrevVertices ); updateCB.Blit( new RenderTargetIdentifier( m_gpuCurrVertices ), m_gpuPrevVertices ); } }
internal override void RenderVectors( Camera camera, CommandBuffer renderCB, float scale, AmplifyMotion.Quality quality ) { if ( m_initialized && !m_error && m_meshRenderer.isVisible ) { Profiler.BeginSample( "Solid.Render" ); bool mask = ( m_owner.Instance.CullingMask & ( 1 << m_obj.gameObject.layer ) ) != 0; if ( !mask || ( mask && m_moved ) ) { const float rcp255 = 1 / 255.0f; int objectId = mask ? m_owner.Instance.GenerateObjectId( m_obj.gameObject ) : 255; Matrix4x4 prevModelViewProj; if ( m_obj.FixedStep ) prevModelViewProj = m_owner.PrevViewProjMatrixRT * m_currLocalToWorld; else prevModelViewProj = m_owner.PrevViewProjMatrixRT * m_prevLocalToWorld; renderCB.SetGlobalMatrix( "_AM_MATRIX_PREV_MVP", prevModelViewProj ); renderCB.SetGlobalFloat( "_AM_OBJECT_ID", objectId * rcp255 ); renderCB.SetGlobalFloat( "_AM_MOTION_SCALE", mask ? scale : 0 ); // TODO: cache property blocks int qualityPass = ( quality == AmplifyMotion.Quality.Mobile ) ? 0 : 2; for ( int i = 0; i < m_sharedMaterials.Length; i++ ) { MaterialDesc matDesc = m_sharedMaterials[ i ]; int pass = qualityPass + ( matDesc.coverage ? 1 : 0 ); if ( matDesc.coverage ) { Texture mainTex = matDesc.material.mainTexture; if ( mainTex != null ) matDesc.propertyBlock.SetTexture( "_MainTex", mainTex ); if ( matDesc.cutoff ) matDesc.propertyBlock.SetFloat( "_Cutoff", matDesc.material.GetFloat( "_Cutoff" ) ); } renderCB.DrawMesh( m_mesh, m_transform.localToWorldMatrix, m_owner.Instance.SolidVectorsMaterial, i, pass, matDesc.propertyBlock ); } } Profiler.EndSample(); } }
internal override void RenderVectors( Camera camera, CommandBuffer renderCB, float scale, AmplifyMotion.Quality quality ) { Profiler.BeginSample( "Particle.Render" ); // TODO: batch if ( m_initialized && !m_error && m_renderer.isVisible ) { bool mask = ( m_owner.Instance.CullingMask & ( 1 << m_obj.gameObject.layer ) ) != 0; if ( !mask || ( mask && m_moved ) ) { const float rcp255 = 1 / 255.0f; int objectId = mask ? m_owner.Instance.GenerateObjectId( m_obj.gameObject ) : 255; renderCB.SetGlobalFloat( "_AM_OBJECT_ID", objectId * rcp255 ); renderCB.SetGlobalFloat( "_AM_MOTION_SCALE", mask ? scale : 0 ); int qualityPass = ( quality == AmplifyMotion.Quality.Mobile ) ? 0 : 2; for ( int i = 0; i < m_sharedMaterials.Length; i++ ) { MaterialDesc matDesc = m_sharedMaterials[ i ]; int pass = qualityPass + ( matDesc.coverage ? 1 : 0 ); if ( matDesc.coverage ) { Texture mainTex = matDesc.material.mainTexture; if ( mainTex != null ) matDesc.propertyBlock.SetTexture( "_MainTex", mainTex ); if ( matDesc.cutoff ) matDesc.propertyBlock.SetFloat( "_Cutoff", matDesc.material.GetFloat( "_Cutoff" ) ); } var enumerator = m_particleDict.GetEnumerator(); while ( enumerator.MoveNext() ) { KeyValuePair<uint, Particle> pair = enumerator.Current; Matrix4x4 prevModelViewProj = m_owner.PrevViewProjMatrixRT * pair.Value.prevLocalToWorld; renderCB.SetGlobalMatrix( "_AM_MATRIX_PREV_MVP", prevModelViewProj ); renderCB.DrawMesh( m_mesh, pair.Value.currLocalToWorld, m_owner.Instance.SolidVectorsMaterial, i, pass, matDesc.propertyBlock ); } } } } Profiler.EndSample(); }