public void DrawTextured(object context, Coordinate cameraLocation, ShaderProgram program) { // Todo abstract this out a bit, repeated code all over the place _array.Bind(context, 0); foreach (var subset in _array.TextureSubsets) { var tex = subset.Instance; if (tex != null) tex.Bind(); else TextureHelper.Unbind(); program.Set("isTextured", tex != null); _array.Array.DrawElements(0, subset.Start, subset.Count); } _array.Bind(context, 1); foreach (var subset in _array.TransparentSubsets.OrderByDescending(x => (cameraLocation - x.Instance.Origin).LengthSquared())) { var tf = subset.Instance; if (tf.Texture != null) tf.Texture.Bind(); else TextureHelper.Unbind(); program.Set("isTextured", tf.Texture != null); _array.Array.DrawElements(0, subset.Start, subset.Count); } _array.Unbind(); GL.Disable(EnableCap.CullFace); _decalArray.Bind(context, 0); foreach (var subset in _decalArray.TextureSubsets) { var tex = subset.Instance; if (tex != null) tex.Bind(); else TextureHelper.Unbind(); program.Set("isTextured", tex != null); _decalArray.Array.DrawElements(0, subset.Start, subset.Count); } _decalArray.Unbind(); GL.Enable(EnableCap.CullFace); }
public GridRenderable(Document document) { _program = new ShaderProgram( new Shader(ShaderType.VertexShader, VertexShader), new Shader(ShaderType.FragmentShader, FragmentShader)); _document = document; _step = -1; _buffer = new VertexBuffer<float>(Specification, Modes, 0, sizeof(float), new float[0], new[] { new uint[0] }); _array = new VertexArray<float>(_buffer); RebuildGrid(1); }
public MapObject2DShader() { Shader = new ShaderProgram(GetShader(ShaderType.VertexShader), GetShader(ShaderType.FragmentShader)); Shader.Bind(); Perspective = Camera = ModelView = SelectionTransform = Matrix4.Identity; SelectedOnly = UnselectedOnly = false; SelectedColour = new Vector4(1, 0, 0, 0.5f); Shader.Unbind(); }
public void DrawWireframe(object context, ShaderProgram program) { _array.Bind(context, 2); foreach (var subset in _array.WireframeSubsets) { _array.Array.DrawElements(1, subset.Start, subset.Count); } _array.Unbind(); _decalArray.Bind(context, 1); foreach (var subset in _decalArray.WireframeSubsets) { _decalArray.Array.DrawElements(1, subset.Start, subset.Count); } _decalArray.Unbind(); }
public MapObject3DShader() { Shader = new ShaderProgram(GetShader(ShaderType.VertexShader), GetShader(ShaderType.FragmentShader)); Shader.Bind(); Perspective = Camera = ModelView = SelectionTransform = Matrix4.Identity; IsTextured = true; IsLit = true; Show3DGrid = false; GridSpacing = 64; SelectionColourMultiplier = new Vector4(1, 0.5f, 0.5f, 1); Transformation = Matrix4.Identity; GL.ActiveTexture(TextureUnit.Texture0); Shader.Set("currentTexture", 0); Shader.Unbind(); }
public ArrayRendererGL3(Document document) { _document = document; _array = new ArrayManager(document.Map); Shader = new ShaderProgram( new Shader(ShaderType.VertexShader, VertexShader), new Shader(ShaderType.FragmentShader, FragmentShader)); GridRenderables = ViewportManager.Viewports.OfType<Viewport2D>().ToDictionary(x => (ViewportBase)x, x => new GridRenderable(_document)); // Set up default values Shader.Bind(); Perspective = Camera = ModelView = SelectionTransform = Matrix4.Identity; IsTextured = IsWireframe = In3D = false; Show3DGrid = document.Map.Show3DGrid; GridSpacing = (float) document.Map.GridSpacing; WireframeColour = Vector4.Zero; SelectionColourMultiplier = new Vector4(1, 0.5f, 0.5f, 1); Shader.Unbind(); }