예제 #1
0
파일: Material.cs 프로젝트: johang88/triton
        /// <summary>
        /// Bind the material, this will call BeginInstance on the backend
        /// It is up to the caller to call EndInstance
        /// </summary>
        /// <param name="backend"></param>
        /// <param name="world"></param>
        /// <param name="worldView"></param>
        /// <param name="itWorldView"></param>
        /// <param name="modelViewProjection"></param>
        public void BindPerObject(Backend backend, ref Matrix4 world, ref Matrix4 worldView, ref Matrix4 itWorld, ref Matrix4 modelViewProjection, SkeletalAnimation.SkeletonInstance skeleton)
        {
            backend.BindShaderVariable(Handles.ModelViewProjection, ref modelViewProjection);
            backend.BindShaderVariable(Handles.World, ref world);
            backend.BindShaderVariable(Handles.WorldView, ref worldView);
            backend.BindShaderVariable(Handles.ItWorld, ref itWorld);

            if (skeleton != null)
            {
                backend.BindShaderVariable(Handles.Bones, ref skeleton.FinalBoneTransforms);
            }
        }
예제 #2
0
파일: Material.cs 프로젝트: johang88/triton
        public void BeginInstance(Backend backend, Camera camera, int renderStateId)
        {
            if (!Initialized)
            {
                Initialize(backend);
            }

            backend.BeginInstance(Shader.Handle, TextureHandles, samplers: Samplers, renderStateId: renderStateId);
            for (var i = 0; i < SamplerToTexture.Length; i++)
            {
                backend.BindShaderVariable(SamplerToTexture[i], i);
            }

            backend.BindShaderVariable(Handles.Time, backend.ElapsedTime);
            backend.BindShaderVariable(Handles.CameraPosition, ref camera.Position);
        }