/// <summary> /// Create submesh from ModelFile's Geometry entry<para/> /// Создание сабмеша из данных Geometry /// </summary> /// <param name="g">Loaded Geometry<para/>Загруженая Geometry</param> public SubMesh(Branch parent, Model model, ModelFile.Geometry g) { // Setting up the fields // Настройка полей State = ReadyState.Empty; Parent = parent; ParentModel = model; geometry = g; }
/// <summary> /// Release memory used by this mesh<para/> /// Очистка памяти, используемой этим мешем /// </summary> public void Release() { // Removing surfaces // Удаляем поверхности foreach (Surface s in Surfaces) { s.IndexData = null; s.Material = null; if (s.IndexBuffer != 0) { GL.DeleteBuffer(s.IndexBuffer); } } geometry = null; Parent = null; ParentModel = null; // Removing buffers // Удаляем буфферы vertexData = null; normalData = null; colorData = null; texCoord1Data = null; texCoord2Data = null; boneData = null; boneWeightData = null; if (vertexBuffer != 0) { GL.DeleteBuffer(vertexBuffer); } if (normalBuffer != 0) { GL.DeleteBuffer(normalBuffer); } if (colorBuffer != 0) { GL.DeleteBuffer(colorBuffer); } if (tex1Buffer != 0) { GL.DeleteBuffer(tex1Buffer); } if (tex2Buffer != 0) { GL.DeleteBuffer(tex2Buffer); } if (boneBuffer != 0) { GL.DeleteBuffer(boneBuffer); } if (boneWeightBuffer != 0) { GL.DeleteBuffer(boneWeightBuffer); } }
/// <summary> /// Setup uniforms for specified surface<para/> /// Установка параметров шейдера для поверхности /// </summary> /// <param name="surf">Surface<para/>Поверхность</param> /// <param name="mat">Material<para/>Материал поверхности</param> public override void SetupSurface(Model.SubMesh.Surface surf, Model.Material mat, ModelFile.Geometry geom, Model.SubMesh subMesh) { GL.Uniform1(StaticShader.AppearValue, Fading ? FadingDelta : 1f); GL.Uniform3(StaticShader.AmbientColor, Renderer.SkyState.AmbientStatic); GL.Uniform3(StaticShader.DiffuseColor, Renderer.SkyState.DirectLight); GL.Uniform4(StaticShader.TintColor, new Color4(mat.Color[0], mat.Color[1], mat.Color[2], mat.Color[3])); }
/// <summary> /// Setup uniforms for specified surface<para/> /// Установка параметров шейдера для поверхности /// </summary> /// <param name="surf">Surface<para/>Поверхность</param> /// <param name="mat">Material<para/>Материал поверхности</param> public abstract void SetupSurface(Model.SubMesh.Surface surf, Model.Material mat, ModelFile.Geometry geom, Model.SubMesh subMesh);
/// <summary> /// Setup uniforms for specified surface<para/> /// Установка параметров шейдера для поверхности /// </summary> /// <param name="surf">Surface<para/>Поверхность</param> /// <param name="mat">Material<para/>Материал поверхности</param> public override void SetupSurface(Model.SubMesh.Surface surf, Model.Material mat, ModelFile.Geometry geom, Model.SubMesh subMesh) { //GL.Uniform1(StaticShader.AppearValue, Fading ? FadingDelta : 1f); //GL.Uniform3(StaticShader.AmbientColor, Renderer.SkyState.AmbientStatic); //GL.Uniform3(StaticShader.DiffuseColor, Renderer.SkyState.DirectLight); //GL.Uniform4(StaticShader.TintColor, new Color4(mat.Color[0], mat.Color[1], mat.Color[2], mat.Color[3])); GL.EnableVertexAttribArray(SkinnedShader.BoneIndexAttrib); GL.BindBuffer(BufferTarget.ArrayBuffer, subMesh.BoneIndexBuffer); GL.VertexAttribPointer(SkinnedShader.BoneIndexAttrib, 4, VertexAttribPointerType.Byte, false, 0, IntPtr.Zero); GL.EnableVertexAttribArray(SkinnedShader.BoneWeightAttrib); GL.BindBuffer(BufferTarget.ArrayBuffer, subMesh.BoneWeightBuffer); GL.VertexAttribPointer(SkinnedShader.BoneWeightAttrib, 4, VertexAttribPointerType.Float, false, 0, IntPtr.Zero); }