Exemplo n.º 1
0
        /// <summary>
        /// Sets the uniforms, sets render state, and draws the mesh.
        /// </summary>
        /// <param name="shader">The shader used for drawing</param>
        /// <param name="camera">The camera used to set matrix uniforms if not <c>null</c></param>
        /// <param name="count">The number of vertices to draw</param>
        /// <param name="offset">The offset into the index buffer</param>
        public void Draw(Shader shader, Camera camera, int count, int offset = 0)
        {
            if (!shader.LinkStatusIsOk)
            {
                return;
            }

            shader.UseProgram();

            // Only update when the shader changes.
            if (shader.Id != previousShaderId)
            {
                ConfigureVertexAttributes(shader);
                previousShaderId = shader.Id;
            }

            // Set shader uniforms.
            SetCameraUniforms(shader, camera);
            SetMaterialUniforms(shader, material);

            // TODO: Add an option to disable this.
            GLRenderSettings.SetRenderSettings(renderSettings);

            DrawGeometry(count, offset);
        }
Exemplo n.º 2
0
        public void Render(Camera c)
        {
            if (!hasCreatedRenderMeshes)
            {
                RefreshDisplay();
                hasCreatedRenderMeshes = true;
            }

            // Only initialize this once to improve frame rates.
            Shader shader = OpenTkSharedResources.shaders["Dat"];

            if (Runtime.renderType != Runtime.RenderTypes.Shaded)
            {
                shader = OpenTkSharedResources.shaders["DatDebug"];
            }
            shader.UseProgram();

            // TODO: Why is this flipped?
            GLRenderSettings.SetFaceCulling(new FaceCullingSettings(false, OpenTK.Graphics.OpenGL.CullFaceMode.Front));

            SetSharedUniforms(c, shader);

            // Melee roots can be deeper into the structure.
            List <MeleeRootNode> Nodes = GetAllRoots();

            foreach (MeleeRootNode n in Nodes)
            {
                n.Render(shader, c);
            }
        }
Exemplo n.º 3
0
        public void SetRenderSettings(Nud.Material material)
        {
            SetAlphaBlending(material);
            SetAlphaTesting(material);
            SetDepthTesting(material);
            SetFaceCulling(material);

            GLRenderSettings.SetRenderSettings(renderSettings);
        }
Exemplo n.º 4
0
        public void SetRenderSettings(DatDOBJ datDOBJ)
        {
            if (datDOBJ.Material == null)
            {
                return;
            }

            SetAlphaTesting(datDOBJ);
            SetAlphaBlending(datDOBJ);

            GLRenderSettings.SetRenderSettings(renderSettings);
        }
Exemplo n.º 5
0
        public void SetWireFrame(bool enabled)
        {
            if (enabled)
            {
                renderSettings.polygonModeSettings = new PolygonModeSettings(MaterialFace.Front, PolygonMode.Line);
            }
            else
            {
                renderSettings.polygonModeSettings = PolygonModeSettings.Default;
            }

            GLRenderSettings.SetRenderSettings(renderSettings);
        }
Exemplo n.º 6
0
        public void Render(Shader shader, Camera c)
        {
            if (!Checked)
            {
                return;
            }

            // Bones use immediate mode for drawing.
            if (Runtime.renderBones)
            {
                shader.UseProgram();
            }

            if (bonesUbo == null)
            {
                bonesUbo = new BufferObject(BufferTarget.UniformBuffer);
            }

            GL.UniformBlockBinding(shader.Id, shader.GetUniformBlockIndex("Bones"), 0);
            bonesUbo.BindBase(BufferRangeTarget.UniformBuffer, 0);

            Matrix4[] matrices = RenderBones.GetShaderMatricesNoInverse();
            Matrix4[] binds    = RenderBones.GetShaderMatrices();

            int mat4Size = 16 * 4;

            bonesUbo.SetCapacity(400 * mat4Size, BufferUsageHint.DynamicDraw);
            bonesUbo.SetSubData(matrices, 0);
            bonesUbo.SetSubData(binds, 200 * mat4Size);

            var previousRenderSettings = new RenderSettings();

            foreach (MeleeDataObjectNode n in DataObjects.Nodes)
            {
                var newRenderSettings = n.GetRenderSettings();
                GLRenderSettings.SetRenderSettings(newRenderSettings, previousRenderSettings);
                previousRenderSettings = newRenderSettings;

                n.Render(c, shader);
            }

            if (Runtime.renderBones)
            {
                GL.UseProgram(0);
                GL.PushAttrib(AttribMask.DepthBufferBit);
                GL.Disable(EnableCap.DepthTest);

                RenderTools.DrawVBN(RenderBones);
                GL.PopAttrib();
            }
        }