/// <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); }
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); } }
public void SetRenderSettings(Nud.Material material) { SetAlphaBlending(material); SetAlphaTesting(material); SetDepthTesting(material); SetFaceCulling(material); GLRenderSettings.SetRenderSettings(renderSettings); }
public void SetRenderSettings(DatDOBJ datDOBJ) { if (datDOBJ.Material == null) { return; } SetAlphaTesting(datDOBJ); SetAlphaBlending(datDOBJ); GLRenderSettings.SetRenderSettings(renderSettings); }
public void SetWireFrame(bool enabled) { if (enabled) { renderSettings.polygonModeSettings = new PolygonModeSettings(MaterialFace.Front, PolygonMode.Line); } else { renderSettings.polygonModeSettings = PolygonModeSettings.Default; } GLRenderSettings.SetRenderSettings(renderSettings); }
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(); } }