コード例 #1
0
ファイル: VAO.cs プロジェクト: rho24/OpenCAD
        public VAO(OpenGL gl, IShaderProgram program, VBO vbo)
        {
            _gl = gl;
            _program = program;
            VBO = vbo;

            var buffers = new uint[1];
            gl.GenVertexArrays(1, buffers);
            Handle = buffers[0];

            using (new Bind(program))
            using (new Bind(this))
            using (new Bind(vbo))
            {
                var stride = Vect3f.SizeInBytes * 2 + Vect4f.SizeInBytes;

                gl.EnableVertexAttribArray(0);
                gl.VertexAttribPointer(0, 3, OpenGL.GL_FLOAT, true, stride, IntPtr.Zero);
                gl.BindAttribLocation(program.Handle, 0, "vert_position");

                gl.EnableVertexAttribArray(1);
                gl.VertexAttribPointer(1, 3, OpenGL.GL_FLOAT, true, stride, new IntPtr(Vect3f.SizeInBytes));
                gl.BindAttribLocation(program.Handle, 1, "vert_normal");

                gl.EnableVertexAttribArray(2);
                gl.VertexAttribPointer(2, 4, OpenGL.GL_FLOAT, false, stride, new IntPtr(Vect3f.SizeInBytes * 2));
                gl.BindAttribLocation(program.Handle, 2, "vert_colour");
            }
        }
コード例 #2
0
        public void Apply(IVertexArrayAdapter adapter, IShaderProgram shaderProgram)
        {
            if (adapter == null)
            {
                throw new ArgumentNullException(nameof(adapter));
            }
            if (shaderProgram == null)
            {
                throw new ArgumentNullException(nameof(shaderProgram));
            }
            shaderProgram.ThrowIfDisposed();

            foreach (var element in Elements)
            {
                /* Let ShaderAttributeNotFoundException bubble up
                 * If we can't find an attribute in the shaderProgram that matches
                 * the usages defined in the given vertex declaration. */
                int location = shaderProgram.GetAttributeLocation(element.Usage);
                adapter.EnableVertexAttribArray(location);
                //TODO: cache these values
                adapter.VertexAttribPointer(
                    location,
                    element.NumberOfComponents,
                    element.PointerType,
                    element.Normalised,
                    Stride,
                    element.Offset
                );
            }
        }
コード例 #3
0
ファイル: DatumPlaneLeaf.cs プロジェクト: rho24/OpenCAD
        public DatumPlaneLeaf(OpenGL gl, IShaderProgram shader, IEnumerable<DatumPlane> planes)
        {
            _gl = gl;
            _shader = shader;
            var linedata = new List<Vert>();
            var quaddata = new List<Vert>();

            const float size = 20f;
            foreach (var plane in planes)
            {

                var v1 = (plane.Transform * Mat4.Translate(new Vect3(-size / 2.0, -size / 2.0, 0))).ToVect3();
                var v2 = (plane.Transform * Mat4.Translate(new Vect3(size / 2.0, -size / 2.0, 0))).ToVect3();
                var v3 = (plane.Transform * Mat4.Translate(new Vect3(size / 2.0, size / 2.0, 0))).ToVect3();
                var v4 = (plane.Transform * Mat4.Translate(new Vect3(-size / 2.0, size / 2.0, 0))).ToVect3();

                linedata.Add(new Vert(v1, Vect3.Zero, _edgecolour));
                linedata.Add(new Vert(v2, Vect3.Zero, _edgecolour));
                linedata.Add(new Vert(v2, Vect3.Zero, _edgecolour));
                linedata.Add(new Vert(v3, Vect3.Zero, _edgecolour));
                linedata.Add(new Vert(v3, Vect3.Zero, _edgecolour));
                linedata.Add(new Vert(v4, Vect3.Zero, _edgecolour));
                linedata.Add(new Vert(v4, Vect3.Zero, _edgecolour));
                linedata.Add(new Vert(v1, Vect3.Zero, _edgecolour));

                quaddata.AddRange(new[] { new Vert(v1, Vect3.Zero, _basecolour), new Vert(v2, Vect3.Zero, _basecolour), new Vert(v3, Vect3.Zero, _basecolour), new Vert(v4, Vect3.Zero, _basecolour) });
                quaddata.AddRange(new[] { new Vert(v4, Vect3.Zero, _basecolour), new Vert(v3, Vect3.Zero, _basecolour), new Vert(v2, Vect3.Zero, _basecolour), new Vert(v1, Vect3.Zero, _basecolour) });

            }
            _lineVAO = new VAO(gl, _shader, new VBO(gl, BeginMode.Lines, linedata));
            _quadVAO = new VAO(gl, _shader, new VBO(gl, BeginMode.Quads, quaddata));
        }
コード例 #4
0
ファイル: FullTextureProcessor.cs プロジェクト: Zulkir/RAVC
        public FullTextureProcessor(IClientSettings settings, IContext context, string fragmentShaderText, string[] samplerNames)
        {
            var header = settings.IsEs ? EsHeader : DesktopHeader;
            var vertexShader = context.Create.VertexShader(header + VertexShaderText);

            var decodeFragmentShader = context.Create.FragmentShader(header + fragmentShaderText);
            program = context.Create.Program(new ShaderProgramDescription
            {
                VertexShaders = new[] { vertexShader },
                FragmentShaders = new[] { decodeFragmentShader },
                VertexAttributeNames = new[] { "in_position" },
                SamplerNames = samplerNames
            });

            var vertexBuffer = context.Create.Buffer(BufferTarget.ArrayBuffer, 4 * Vertex.Size, BufferUsageHint.StaticDraw, new[]
            {
                new Vertex(-1f, 1f),
                new Vertex(1f, 1f),
                new Vertex(1f, -1f),
                new Vertex(-1f, -1f)
            });

            var elementArrayBuffer = context.Create.Buffer(BufferTarget.ElementArrayBuffer, 6 * sizeof(ushort), BufferUsageHint.StaticDraw, new ushort[]
            {
                0, 1, 2, 0, 2, 3
            });

            vertexArray = context.Create.VertexArray();
            vertexArray.SetVertexAttributeF(0, vertexBuffer, VertexAttributeDimension.Two, VertexAttribPointerType.Float, false, Vertex.Size, 0);
            vertexArray.SetElementArrayBuffer(elementArrayBuffer);
        }
コード例 #5
0
ファイル: Window.cs プロジェクト: rho24/OpenCAD
        protected override void OnLoad(EventArgs e)
        {
            GL.Enable(EnableCap.Texture2D);
            GL.Enable(EnableCap.CullFace);
            GL.Enable(EnableCap.DepthTest);
            GL.Enable(EnableCap.Blend);
            GL.BlendFunc(BlendingFactorSrc.SrcAlpha, BlendingFactorDest.OneMinusSrcAlpha);

            //solid = new Cube();
            var data = new List<OpenGLVertex>
            {
                new OpenGLVertex {Position = new Vector3(-1, -1, 0), Colour  =new Color4(0.118f, 0.118f, 0.118f, 1f).ToVector4()},//bottom left
                new OpenGLVertex {Position = new Vector3(1, -1, 0), Colour= new Color4(0.118f, 0.118f, 0.118f, 1f).ToVector4() }, //bottom right
                new OpenGLVertex {Position = new Vector3(1, 1, 0), Colour = new Color4(0.176f, 0.176f, 0.188f, 1f).ToVector4() },//top right
                new OpenGLVertex {Position = new Vector3(-1, 1, 0), Colour =  new Color4(0.176f, 0.176f, 0.188f, 1f).ToVector4()},//top left
            };

            _ubo = new CameraUBO();

            _shader = new FlatShaderProgram();
            _basicShader = new BasicShaderProgram(_ubo);

            _vbo = new VBO(data) { BeginMode = BeginMode.Quads };
            _vao = new VAO(_shader, _vbo);

            var dotdata = new List<OpenGLVertex>
            {
                new OpenGLVertex {Position = new Vector3(0, 0, 0)},
                new OpenGLVertex {Position = new Vector3(10, 10, 0)},
            };

            _dotsvbo = new VBO(dotdata) { BeginMode = BeginMode.Lines };
            _dotsvao = new VAO(_basicShader, _dotsvbo);

            var stl = new STL("rounded_cube.stl", Color.GreenYellow);

            var cubedata = new List<OpenGLVertex>();
            var col = stl.Color.ToVector4();

            foreach (var ele in stl.Elements)
            {
                cubedata.Add(new OpenGLVertex { Position = ele.P1.ToVector3(), Normal = ele.Normal.ToVector3(), Colour = col });
                cubedata.Add(new OpenGLVertex { Position = ele.P2.ToVector3(), Normal = ele.Normal.ToVector3(), Colour = col });
                cubedata.Add(new OpenGLVertex { Position = ele.P3.ToVector3(), Normal = ele.Normal.ToVector3(), Colour = col });
            }

            _geovbo = new VBO(cubedata) { BeginMode = BeginMode.Triangles };
            _geovao = new VAO(_basicShader, _geovbo);

            var err = GL.GetError();
            if (err != ErrorCode.NoError)
                Console.WriteLine("Error at OnLoad: " + err);
        }
コード例 #6
0
 public void SetUp(IShaderProgram shaderProgram, IVertexDeclaration vertexDeclaration)
 {
     this.ThrowIfDisposed();
     if (shaderProgram == null)
     {
         throw new ArgumentNullException(nameof(shaderProgram));
     }
     if (vertexDeclaration == null)
     {
         throw new ArgumentNullException(nameof(vertexDeclaration));
     }
     vertexDeclaration.Apply(adapter, shaderProgram);
 }
コード例 #7
0
        public CoordinateSystemLeaf(OpenGL gl, IShaderProgram shader, IEnumerable<CoordinateSystem> coordinateSystems)
        {
            _shader = shader;
            var data = new List<Vert>();

            foreach (var csys in coordinateSystems)
            {
                var origin = csys.Transform.ToVect3();
                data.Add(new Vert(origin, Vect3.Zero, Color.Blue.ToVector4()));
                data.Add(new Vert((csys.Transform * Mat4.Translate(new Vect3(Size, 0, 0))).ToVect3(), Vect3.Zero, Color.Blue.ToVector4()));
                data.Add(new Vert(origin, Vect3.Zero, Color.Red.ToVector4()));
                data.Add(new Vert((csys.Transform * Mat4.Translate(new Vect3(0, Size, 0))).ToVect3(), Vect3.Zero, Color.Red.ToVector4()));
                data.Add(new Vert(origin, Vect3.Zero, Color.Green.ToVector4()));
                data.Add(new Vert((csys.Transform * Mat4.Translate(new Vect3(0, 0, Size))).ToVect3(), Vect3.Zero, Color.Green.ToVector4()));
            }
            _vao = new VAO(gl, _shader, new VBO(gl, BeginMode.Lines, data));
        }
コード例 #8
0
ファイル: BlockBatchView.cs プロジェクト: veggielane/BlockRTS
        public void Load()
        {
            _shader = _assets.Shader<BlockShaderProgram>();

            var stl = new STL("chamfer_cube.stl", Color.Yellow);
            var cubedata = new List<float>();

            foreach (var vertex in stl.ToMesh().Vertices)
            {
                cubedata.Add((float)vertex.Position.X);
                cubedata.Add((float)vertex.Position.Y);
                cubedata.Add((float)vertex.Position.Z);
            }
            foreach (var vertex in stl.ToMesh().Vertices)
            {
                cubedata.Add((float)vertex.Normal.X);
                cubedata.Add((float)vertex.Normal.Y);
                cubedata.Add((float)vertex.Normal.Z);
            }

            _squareVertices = cubedata.ToArray();

            GL.GenVertexArrays(1, out _squareVao);
            GL.GenBuffers(1, out _squareVbo);
            GL.BindVertexArray(_squareVao);
            GL.BindBuffer(BufferTarget.ArrayBuffer, _squareVbo);

            GL.EnableVertexAttribArray(0);
            GL.EnableVertexAttribArray(1);
            GL.EnableVertexAttribArray(2);
            GL.EnableVertexAttribArray(3);
            GL.EnableVertexAttribArray(4);

            GL.Arb.VertexAttribDivisor(2, 1);//position
            GL.Arb.VertexAttribDivisor(3, 1);//rotation
            GL.Arb.VertexAttribDivisor(4, 1);//color

            GL.VertexAttribPointer(0, 3, VertexAttribPointerType.Float, false, 0, 0);
            GL.VertexAttribPointer(1, 3, VertexAttribPointerType.Float, false, 0, 0);
            GL.VertexAttribPointer(2, 3, VertexAttribPointerType.Float, false, 11 * sizeof(float), _squareVertices.Length * sizeof(float));
            GL.VertexAttribPointer(3, 4, VertexAttribPointerType.Float, false, 11 * sizeof(float), (_squareVertices.Length + 3) * sizeof(float));
            GL.VertexAttribPointer(4, 4, VertexAttribPointerType.Float, false, 11 * sizeof(float), (_squareVertices.Length + 3 + 4) * sizeof(float));

            Loaded = true;
        }
コード例 #9
0
        public override void OnLoad(OpenGL gl)
        {
            gl.Enable(OpenGL.GL_CULL_FACE);
            gl.Enable(OpenGL.GL_DEPTH_TEST);
            gl.Enable(OpenGL.GL_BLEND);
            gl.BlendFunc(BlendingSourceFactor.SourceAlpha, BlendingDestinationFactor.OneMinusSourceAlpha);

            _camera = new OrthographicCamera();
            _camera.View *= Mat4.RotateY(Angle.FromDegrees(15));

            _shader = new BasicShader(gl);
            _modelUniform = gl.GetUniformLocation(_shader.Handle, "Model");
            _viewUniform = gl.GetUniformLocation(_shader.Handle, "View");
            _projectionUniform = gl.GetUniformLocation(_shader.Handle, "Projection");

            _graph = new OpenGLSceneGraph();
            _graph.Nodes.Add(new CoordinateSystemLeaf(gl, _shader, _model.Features.OfType<CoordinateSystem>()));
            _graph.Nodes.Add(new DatumPlaneLeaf(gl, _shader, _model.Features.OfType<DatumPlane>()));
            _graph.Nodes.Add(new GeometryLeaf(gl, _shader));
        }
コード例 #10
0
ファイル: SpriteBatch.cs プロジェクト: rmckirby/XogoEngine
        internal SpriteBatch(
            ISpriteSheet spriteSheet,
            IShaderProgram shaderProgram,
            IVertexArrayObject vao,
            IVertexBuffer<VertexPositionColourTexture> vbo,
            IDrawAdapter adapter)
        {
            spriteSheet.ThrowIfNull(nameof(spriteSheet));
            this.spriteSheet = spriteSheet;
            Debug.Assert(shaderProgram != null, $"{nameof(shaderProgram)} was null in SpriteBatch");
            Debug.Assert(vao != null, $"{nameof(vao)} was null in SpriteBatch");
            Debug.Assert(vbo != null, $"{nameof(vbo)} was null ins SpriteBatch");
            Debug.Assert(adapter != null, $"{nameof(adapter)} was null in SpriteBatch");
            this.shaderProgram = shaderProgram;
            this.vao = vao;
            this.vbo = vbo;
            this.adapter = adapter;

            Initialise();
        }
コード例 #11
0
ファイル: VAO.cs プロジェクト: rho24/OpenCAD
        public VAO(IShaderProgram program, VBO vbo)
        {
            _program = program;
            VBO = vbo;
            GL.GenVertexArrays(1, out _handle);
            using (new Bind(program))
            using (new Bind(this))
            using (new Bind(vbo))
            {
                var stride = Vector3.SizeInBytes * 2 + Vector4.SizeInBytes;

                GL.EnableVertexAttribArray(0);
                GL.VertexAttribPointer(0, 3, VertexAttribPointerType.Float, true, stride, 0);
                GL.BindAttribLocation(program.Handle, 0, "vert_position");

                GL.EnableVertexAttribArray(1);
                GL.VertexAttribPointer(1, 3, VertexAttribPointerType.Float, true, stride, Vector3.SizeInBytes);
                GL.BindAttribLocation(program.Handle, 1, "vert_normal");

                GL.EnableVertexAttribArray(2);
                GL.VertexAttribPointer(2, 4, VertexAttribPointerType.Float, false, stride, Vector3.SizeInBytes * 2);
                GL.BindAttribLocation(program.Handle, 2, "vert_colour");
            }
        }
コード例 #12
0
ファイル: WebGL.cs プロジェクト: colin-dumitru/GLSharp
 /* --------------------------------------Attributes and Uniforms---------------------------------------------------*/
 public abstract void BindAttributeLocation(IShaderProgram program, int index, String name);
コード例 #13
0
ファイル: WebGL.cs プロジェクト: colin-dumitru/GLSharp
 /* --------------------------------------------Shaders---------------------------------------------------*/
 public abstract void AttachShader(IShaderProgram program, IShader shader);
コード例 #14
0
ファイル: WebGL.cs プロジェクト: colin-dumitru/GLSharp
 public abstract void LinkProgram(IShaderProgram program);
コード例 #15
0
        public override void Initialize()
        {
            var vertexBuffer = Context.Create.Buffer(BufferTarget.Array, 24 * 8 * sizeof(float), BufferUsageHint.StaticDraw, new[]
            {
                new Vertex(1f, -1f, 1f, 1f, 0.0f, 0.0f, 0f, 0f),
                new Vertex(1f, 1f, 1f, 1f, 0.0f, 0.0f, 1f, 0f),
                new Vertex(1f, 1f, -1f, 1f, 0.0f, 0.0f, 1f, 1f),
                new Vertex(1f, -1f, -1f, 1f, 0.0f, 0.0f, 0f, 1f),

                new Vertex(1f, 1f, 1f, 0.0f, 1f, 0.0f, 0f, 0f),
                new Vertex(-1f, 1f, 1f, 0.0f, 1f, 0.0f, 1f, 0f),
                new Vertex(-1f, 1f, -1f, 0.0f, 1f, 0.0f, 1f, 1f),
                new Vertex(1f, 1f, -1f, 0.0f, 1f, 0.0f, 0f, 1f),

                new Vertex(-1f, 1f, 1f, -1f, 0.0f, 0.0f, 0f, 0f),
                new Vertex(-1f, -1f, 1f, -1f, 0.0f, 0.0f, 1f, 0f),
                new Vertex(-1f, -1f, -1f, -1f, 0.0f, 0.0f, 1f, 1f),
                new Vertex(-1f, 1f, -1f, -1f, 0.0f, 0.0f, 0f, 1f),

                new Vertex(-1f, -1f, 1f, 0.0f, -1f, 0.0f, 0f, 0f),
                new Vertex(1f, -1f, 1f, 0.0f, -1f, 0.0f, 1f, 0f),
                new Vertex(1f, -1f, -1f, 0.0f, -1f, 0.0f, 1f, 1f),
                new Vertex(-1f, -1f, -1f, 0.0f, -1f, 0.0f, 0f, 1f),

                new Vertex(-1f, -1f, 1f, 0.0f, 0.0f, 1f, 0f, 0f),
                new Vertex(-1f, 1f, 1f, 0.0f, 0.0f, 1f, 1f, 0f),
                new Vertex(1f, 1f, 1f, 0.0f, 0.0f, 1f, 1f, 1f),
                new Vertex(1f, -1f, 1f, 0.0f, 0.0f, 1f, 0f, 1f),

                new Vertex(-1f, 1f, -1f, 0.0f, 0.0f, -1f, 0f, 0f),
                new Vertex(-1f, -1f, -1f, 0.0f, 0.0f, -1f, 1f, 0f),
                new Vertex(1f, -1f, -1f, 0.0f, 0.0f, -1f, 1f, 1f),
                new Vertex(1f, 1f, -1f, 0.0f, 0.0f, -1f, 0f, 1f)
            });

            var indexBuffer = Context.Create.Buffer(BufferTarget.ElementArray, 36 * sizeof(ushort), BufferUsageHint.StaticDraw, new ushort[]
            {
                0, 1, 2, 0, 2, 3,
                4, 5, 6, 4, 6, 7,
                8, 9, 10, 8, 10, 11,
                12, 13, 14, 12, 14, 15,
                16, 17, 18, 16, 18, 19,
                20, 21, 22, 20, 22, 23
            });

            vertexArray = Context.Create.VertexArray();
            vertexArray.SetElementArrayBuffer(indexBuffer);
            vertexArray.SetVertexAttributeF(0, vertexBuffer, VertexAttributeDimension.Three, VertexAttribPointerType.Float, false, 32, 0);
            vertexArray.SetVertexAttributeF(1, vertexBuffer, VertexAttributeDimension.Three, VertexAttribPointerType.Float, false, 32, 12);
            vertexArray.SetVertexAttributeF(2, vertexBuffer, VertexAttributeDimension.Two, VertexAttribPointerType.Float, false, 32, 24);

            transformBuffer   = Context.Create.Buffer(BufferTarget.Uniform, 64, BufferUsageHint.DynamicDraw);
            cameraBuffer      = Context.Create.Buffer(BufferTarget.Uniform, 64, BufferUsageHint.DynamicDraw);
            cameraExtraBuffer = Context.Create.Buffer(BufferTarget.Uniform, 12, BufferUsageHint.DynamicDraw);
            lightBuffer       = Context.Create.Buffer(BufferTarget.Uniform, 12, BufferUsageHint.DynamicDraw);

            using (var textureLoader = new TextureLoader("../Textures/DiffuseTest.png"))
            {
                diffuseMap = Context.Create.Texture2D(textureLoader.Width, textureLoader.Height, TextureHelper.CalculateMipCount(textureLoader.Width, textureLoader.Height, 1), Format.Rgba8);
                for (int i = 0; i < diffuseMap.MipCount; i++)
                {
                    diffuseMap.SetData(i, textureLoader.GetMipData(i), FormatColor.Rgba, FormatType.UnsignedByte);
                }
            }

            using (var textureLoader = new TextureLoader("../Textures/SpecularTest.png"))
            {
                specularMap = Context.Create.Texture2D(textureLoader.Width, textureLoader.Height, TextureHelper.CalculateMipCount(textureLoader.Width, textureLoader.Height, 1), Format.Rgba8);
                for (int i = 0; i < diffuseMap.MipCount; i++)
                {
                    specularMap.SetData(i, textureLoader.GetMipData(i), FormatColor.Rgba, FormatType.UnsignedByte);
                }
            }

            sampler = Context.Create.Sampler();
            sampler.SetMagFilter(TextureMagFilter.Linear);
            sampler.SetMinFilter(TextureMinFilter.LinearMipmapLinear);
            sampler.SetMaxAnisotropy(16f);

            var vsh = Context.Create.VertexShader(VertexShaderText);
            var fsh = Context.Create.FragmentShader(FragmentShaderText);

            program = Context.Create.Program(new ShaderProgramDescription
            {
                VertexShaders        = new[] { vsh },
                FragmentShaders      = new[] { fsh },
                VertexAttributeNames = new[] { "in_position", "in_normal", "in_tex_coord" },
                UniformBufferNames   = new[] { "Transform", "Camera", "CameraExtra", "Light" },
                SamplerNames         = new[] { "DiffuseMap", "SpecularMap" }
            });
        }
コード例 #16
0
 public PointRenderer(OpenGL gl, IShaderProgram shader, IEnumerable<Vert> data)
 {
     _shader = shader;
     _vbo = new VBO(gl, BeginMode.Lines, data);
     _vao = new VAO(gl, _shader, _vbo);
 }
コード例 #17
0
ファイル: OpenGLWindow.cs プロジェクト: veggielane/BlockRTS
        protected override void OnLoad(EventArgs e)
        {
            GL.Enable(EnableCap.Texture2D);
            GL.Enable(EnableCap.CullFace);
            GL.Enable(EnableCap.DepthTest);
            GL.Enable(EnableCap.Blend);
            GL.BlendFunc(BlendingFactorSrc.SrcAlpha, BlendingFactorDest.OneMinusSrcAlpha);
            _fbo = new FBO(Width,Height);
            _assetManager.Load();
            _shader = _assetManager.Shader<DefaultShaderProgram>();

            var data = new List<OpenGLVertex>
            {
                new OpenGLVertex {Position = new Vector3(-1, -1, 0),TexCoord = new Vector2(0,0)},
                new OpenGLVertex {Position = new Vector3(1, -1, 0),TexCoord = new Vector2(1,0)},
                new OpenGLVertex {Position = new Vector3(1, 1, 0),TexCoord = new Vector2(1,1)},
                new OpenGLVertex {Position = new Vector3(-1, 1, 0),TexCoord = new Vector2(0,1)}
            };

            _vbo = new VBO(data){BeginMode = BeginMode.Quads};
            _vao = new VAO(_assetManager.Shader<FlatShaderProgram>(), _vbo);

            var dotdata = new List<OpenGLVertex>
            {
                new OpenGLVertex {Position = new Vector3(0, 0, 0)},
                new OpenGLVertex {Position = new Vector3(10, 10, 0)},
            };
            _dotsvbo = new VBO(dotdata) { BeginMode = BeginMode.Lines };
            _dotsvao = new VAO(_assetManager.Shader<BasicShaderProgram>(), _dotsvbo);

            _viewManager.Load();

            Bus.Add(new DebugMessage(Timer.LastTickTime, "Loaded OpenGL Window"));
            var err = GL.GetError();
            if (err != ErrorCode.NoError)
                Console.WriteLine("Error at OnLoad: " + err);
        }
コード例 #18
0
ファイル: TexturedQuadScene.cs プロジェクト: Zulkir/ObjectGL
        public override void Initialize()
        {
            var vertexBuffer = Context.Create.Buffer(BufferTarget.Array, 4 * 8 * sizeof(float), BufferUsageHint.StaticDraw, new[]
            {
                new Vertex(-1f, -1f, 0f, 1f),
                new Vertex(-1f, 1f, 0f, 0f),
                new Vertex(1f, 1f, 1f, 0f),
                new Vertex(1f, -1f, 1f, 1f),
            });

            var indexBuffer = Context.Create.Buffer(BufferTarget.ElementArray, 6 * sizeof(ushort), BufferUsageHint.StaticDraw, new ushort[]
            {
                0, 1, 2, 0, 2, 3
            });

            vertexArray = Context.Create.VertexArray();
            vertexArray.SetElementArrayBuffer(indexBuffer);
            vertexArray.SetVertexAttributeF(0, vertexBuffer, VertexAttributeDimension.Four, VertexAttribPointerType.Float, false, 32, 0);
            vertexArray.SetVertexAttributeF(1, vertexBuffer, VertexAttributeDimension.Four, VertexAttribPointerType.Float, false, 32, 16);

            using (var textureLoader = new TextureLoader("../Textures/Chess256.png"))
            {
                diffuseMap = Context.Create.Texture2D(textureLoader.Width, textureLoader.Height, TextureHelper.CalculateMipCount(textureLoader.Width, textureLoader.Height, 1), Format.Srgb8Alpha8);
                for (int i = 0; i < diffuseMap.MipCount; i++)
                    diffuseMap.SetData(i, textureLoader.GetMipData(i), FormatColor.Rgba, FormatType.UnsignedByte);
            }

            sampler = Context.Create.Sampler();
            sampler.SetMagFilter(TextureMagFilter.Linear);
            sampler.SetMinFilter(TextureMinFilter.LinearMipmapLinear);
            sampler.SetMaxAnisotropy(16f);

            var vsh = Context.Create.VertexShader(VertexShaderText);
            var fsh = Context.Create.FragmentShader(FragmentShaderText);
            program = Context.Create.Program(new ShaderProgramDescription
            {
                VertexShaders = new[] {vsh},
                FragmentShaders = new[] {fsh},
                VertexAttributeNames = new[] {"in_position", "in_tex_coord"},
                SamplerNames = new[] {"DiffuseMap"}
            });
        }
コード例 #19
0
ファイル: WebGL.cs プロジェクト: colin-dumitru/GLSharp
 public abstract int GetAttribLocation(IShaderProgram program, String name);
コード例 #20
0
ファイル: WebGL.cs プロジェクト: colin-dumitru/GLSharp
 public abstract List<IShader> GetAttachedShaders(IShaderProgram program);
コード例 #21
0
ファイル: WebGL.cs プロジェクト: colin-dumitru/GLSharp
 public abstract IActiveInfo GetActiveUniform(IShaderProgram program, int index);
コード例 #22
0
 public Addition(IContentLoader contentLoader, byte fboTexComponentCount = 4, bool fboTexFloat = false)
 {
     _addProgram           = contentLoader.LoadPixelShader("addition.glsl");
     _fboTexComponentCount = fboTexComponentCount;
     _fboTexFloat          = fboTexFloat;
 }
コード例 #23
0
ファイル: WebGL.cs プロジェクト: colin-dumitru/GLSharp
 public abstract void UseProgram(IShaderProgram program);
コード例 #24
0
ファイル: TriangleScene.cs プロジェクト: Zulkir/ObjectGL
        public override void Initialize()
        {
            var vertexBuffer = Context.Create.Buffer(BufferTarget.Array, 3 * 8 * sizeof(float), BufferUsageHint.StaticDraw, new[]
            {
                new Vertex { Position = new Vector4(-0.5f, -0.5f, 0f, 1f), Color = new Color4(1, 0, 0, 1)},
                new Vertex { Position = new Vector4(0.0f, 0.5f, 0f, 1f), Color = new Color4(0, 1, 0, 1)},
                new Vertex { Position = new Vector4(0.5f, -0.5f, 0f, 1f), Color = new Color4(1, 1, 0, 1)}
            });

            var indexBuffer = Context.Create.Buffer(BufferTarget.ElementArray, 3 * sizeof(ushort), BufferUsageHint.StaticDraw, new ushort[] { 0, 1, 2 });

            vertexArray = Context.Create.VertexArray();
            vertexArray.SetElementArrayBuffer(indexBuffer);
            vertexArray.SetVertexAttributeF(0, vertexBuffer, VertexAttributeDimension.Four, VertexAttribPointerType.Float, false, 32, 0);
            vertexArray.SetVertexAttributeF(1, vertexBuffer, VertexAttributeDimension.Four, VertexAttribPointerType.Float, false, 32, 16);

            IVertexShader vsh = Context.Create.VertexShader(VertexShaderText);
            IFragmentShader fsh = Context.Create.FragmentShader(FragmentShaderText);
            program = Context.Create.Program(new ShaderProgramDescription
            {
                VertexShaders = new[] {vsh},
                FragmentShaders = new[] {fsh},
                VertexAttributeNames = new[] {"in_position", "in_color"}
            });
        }
コード例 #25
0
ファイル: WebGL.cs プロジェクト: colin-dumitru/GLSharp
 public abstract void ValidateProgram(IShaderProgram program);
コード例 #26
0
 public void SetLightViewMesh(VAO mesh, IShaderProgram shader)
 {
     lightViewMesh   = mesh;
     lightViewShader = shader;
 }
コード例 #27
0
 public void SetDeferredGeometryMesh(VAO mesh, IShaderProgram shader)
 {
     deferredMesh   = mesh;
     deferredShader = shader;
 }
コード例 #28
0
ファイル: MeshVisual.cs プロジェクト: Michael-Zp/GraphicsWar
 /// <summary>
 /// Initializes a new instance of the <see cref="MeshVisual"/> class.
 /// </summary>
 /// <param name="drawable"></param>
 /// <param name="shader">The shader.</param>
 /// <param name="textureBindings">The texture bindings.</param>
 public MeshVisual(IDrawable drawable, IShaderProgram shader, IEnumerable <TextureBinding> textureBindings = null)
 {
     ShaderProgram   = shader;
     Drawable        = drawable;
     TextureBindings = textureBindings;
 }
コード例 #29
0
 public void SetShadowMapMesh(VAO mesh, IShaderProgram shader)
 {
     shadowMapMesh   = mesh;
     shadowMapShader = shader;
 }
コード例 #30
0
ファイル: WebGL.cs プロジェクト: colin-dumitru/GLSharp
 public abstract bool IsShaderProgram(IShaderProgram shaderProgram);
コード例 #31
0
ファイル: WebGL.cs プロジェクト: colin-dumitru/GLSharp
 public abstract String GetProgramInfoLog(IShaderProgram program);
コード例 #32
0
        //public void UpdateInstanceAttribute<DATA_ELEMENT_TYPE>(string name, DATA_ELEMENT_TYPE[] data) where DATA_ELEMENT_TYPE : struct
        //{
        //	Vao.SetAttribute(GetAttributeShaderLocationAndCheckVao(name), data, VertexAttribPointerType.Float, 3, true);
        //}

        /// <summary>
        /// Updates the mesh shader.
        /// </summary>
        /// <param name="mesh">The mesh.</param>
        /// <param name="shaderProgram">The shader program.</param>
        /// <exception cref="ArgumentNullException">
        /// mesh
        /// or
        /// shaderProgram
        /// or
        /// A shaderName is required
        /// </exception>
        /// <exception cref="ArgumentException">Shader '" + shaderName + "' does not exist</exception>
        public void UpdateMeshShader(DefaultMesh mesh, IShaderProgram shaderProgram)
        {
            ShaderProgram = shaderProgram ?? throw new ArgumentNullException(nameof(shaderProgram));
            Vao           = mesh is null ? null : VAOLoader.FromMesh(mesh, ShaderProgram);
        }
コード例 #33
0
ファイル: WebGL.cs プロジェクト: colin-dumitru/GLSharp
 public abstract Object GetProgramParameter(IShaderProgram program, int pName);
コード例 #34
0
ファイル: WebGL.cs プロジェクト: colin-dumitru/GLSharp
 public abstract List<float> GetUniform(IShaderProgram program, IUniformLocation location);
コード例 #35
0
ファイル: CursorRenderer.cs プロジェクト: Zulkir/RAVC
        public CursorRenderer(IClientSettings settings, IContext context, ITextureLoader textureLoader)
        {
            var header = settings.IsEs ? EsHeader : DesktopHeader;
            var vertexShader = context.Create.VertexShader(header + VertexShaderText);
            var fragmentShader = context.Create.FragmentShader(header + FragmentShaderText);
            program = context.Create.Program(new ShaderProgramDescription
            {
                VertexShaders = new[] { vertexShader },
                FragmentShaders = new[] { fragmentShader },
                VertexAttributeNames = new[] { "in_position", "in_tex_coord" },
                SamplerNames = new[] { "DiffTexture" }
            });

            var vertexBuffer = context.Create.Buffer(BufferTarget.ArrayBuffer, 4 * Vertex.Size, BufferUsageHint.StaticDraw, new[]
            {
                new Vertex(-1f, 1f, 0f, 0f),
                new Vertex(1f, 1f, 1f, 0f),
                new Vertex(1f, -1f, 1f, 1f),
                new Vertex(-1f, -1f, 0f, 1f)
            });

            var indexBuffer = context.Create.Buffer(BufferTarget.ElementArrayBuffer, 6 * sizeof(ushort), BufferUsageHint.StaticDraw, new ushort[]
            {
                0, 1, 2, 0, 2, 3
            });

            vertexArray = context.Create.VertexArray();
            vertexArray.SetVertexAttributeF(0, vertexBuffer, VertexAttributeDimension.Two, VertexAttribPointerType.Float, false, Vertex.Size, 0);
            vertexArray.SetVertexAttributeF(1, vertexBuffer, VertexAttributeDimension.Two, VertexAttribPointerType.Float, false, Vertex.Size, 2 * sizeof(float));
            vertexArray.SetElementArrayBuffer(indexBuffer);

            texture = textureLoader.LoadTexture(context, "Cursor.png");
            sampler = context.Create.Sampler();
            sampler.SetMagFilter(TextureMagFilter.Nearest);
        }
コード例 #36
0
ファイル: WebGL.cs プロジェクト: colin-dumitru/GLSharp
 public abstract IUniformLocation GetUniformLocation(IShaderProgram program, String name);
コード例 #37
0
        public override void Initialize()
        {
            renderTarget = Context.Create.Texture2D(RenderTargetSize, RenderTargetSize, TextureHelper.CalculateMipCount(RenderTargetSize, 1, 1), Format.Rgba8);
            depthStencil = Context.Create.Renderbuffer(RenderTargetSize, RenderTargetSize, Format.Depth24Stencil8);

            framebuffer = Context.Create.Framebuffer();
            framebuffer.AttachTextureImage(FramebufferAttachmentPoint.Color0, renderTarget, 0);
            framebuffer.AttachRenderbuffer(FramebufferAttachmentPoint.DepthStencil, depthStencil);

            var vertexBuffer = Context.Create.Buffer(BufferTarget.Array, 24 * 8 * sizeof(float), BufferUsageHint.StaticDraw, new[]
            {
                new Vertex(1f, -1f, 1f, 1f, 0f, 0f, 0f, 0f),
                new Vertex(1f, 1f, 1f, 1f, 0f, 0f, 1f, 0f),
                new Vertex(1f, 1f, -1f, 1f, 0f, 0f, 1f, 1f),
                new Vertex(1f, -1f, -1f, 1f, 0f, 0f, 0f, 1f),

                new Vertex(1f, 1f, 1f, 0f, 1f, 0f, 0f, 0f),
                new Vertex(-1f, 1f, 1f, 0f, 1f, 0f, 1f, 0f),
                new Vertex(-1f, 1f, -1f, 0f, 1f, 0f, 1f, 1f),
                new Vertex(1f, 1f, -1f, 0f, 1f, 0f, 0f, 1f),

                new Vertex(-1f, 1f, 1f, -1f, 0f, 0f, 0f, 0f),
                new Vertex(-1f, -1f, 1f, -1f, 0f, 0f, 1f, 0f),
                new Vertex(-1f, -1f, -1f, -1f, 0f, 0f, 1f, 1f),
                new Vertex(-1f, 1f, -1f, -1f, 0f, 0f, 0f, 1f),

                new Vertex(-1f, -1f, 1f, 0f, -1f, 0f, 0f, 0f),
                new Vertex(1f, -1f, 1f, 0f, -1f, 0f, 1f, 0f),
                new Vertex(1f, -1f, -1f, 0f, -1f, 0f, 1f, 1f),
                new Vertex(-1f, -1f, -1f, 0f, -1f, 0f, 0f, 1f),

                new Vertex(-1f, -1f, 1f, 0f, 0f, 1f, 0f, 0f),
                new Vertex(-1f, 1f, 1f, 0f, 0f, 1f, 1f, 0f),
                new Vertex(1f, 1f, 1f, 0f, 0f, 1f, 1f, 1f),
                new Vertex(1f, -1f, 1f, 0f, 0f, 1f, 0f, 1f),

                new Vertex(-1f, 1f, -1f, 0f, 0f, -1f, 0f, 0f),
                new Vertex(-1f, -1f, -1f, 0f, 0f, -1f, 1f, 0f),
                new Vertex(1f, -1f, -1f, 0f, 0f, -1f, 1f, 1f),
                new Vertex(1f, 1f, -1f, 0f, 0f, -1f, 0f, 1f)
            });

            var indexBuffer = Context.Create.Buffer(BufferTarget.ElementArray, 36 * sizeof(ushort), BufferUsageHint.StaticDraw, new ushort[]
            {
                0, 1, 2, 0, 2, 3,
                4, 5, 6, 4, 6, 7,
                8, 9, 10, 8, 10, 11,
                12, 13, 14, 12, 14, 15,
                16, 17, 18, 16, 18, 19,
                20, 21, 22, 20, 22, 23
            });

            vertexArray = Context.Create.VertexArray();
            vertexArray.SetElementArrayBuffer(indexBuffer);
            vertexArray.SetVertexAttributeF(0, vertexBuffer, VertexAttributeDimension.Three, VertexAttribPointerType.Float, false, 32, 0);
            vertexArray.SetVertexAttributeF(1, vertexBuffer, VertexAttributeDimension.Three, VertexAttribPointerType.Float, false, 32, 12);
            vertexArray.SetVertexAttributeF(2, vertexBuffer, VertexAttributeDimension.Two, VertexAttribPointerType.Float, false, 32, 24);

            transformBuffer = Context.Create.Buffer(BufferTarget.Uniform, 64, BufferUsageHint.DynamicDraw);
            cameraBuffer = Context.Create.Buffer(BufferTarget.Uniform, 64, BufferUsageHint.DynamicDraw);
            #if INTEL_WORKAROUND
            cameraOutsideBuffer = Context.Create.Buffer(BufferTarget.Uniform, 64, BufferUsageHint.DynamicDraw);
            #endif
            cameraExtraBuffer = Context.Create.Buffer(BufferTarget.Uniform, 12, BufferUsageHint.DynamicDraw);
            lightBuffer = Context.Create.Buffer(BufferTarget.Uniform, 12, BufferUsageHint.DynamicDraw);

            using (var textureLoader = new TextureLoader("../Textures/DiffuseTest.png"))
            {
                diffuseMap = Context.Create.Texture2D(textureLoader.Width, textureLoader.Height, TextureHelper.CalculateMipCount(textureLoader.Width, textureLoader.Height, 1), Format.Rgba8);
                for (int i = 0; i < diffuseMap.MipCount; i++)
                    diffuseMap.SetData(i, textureLoader.GetMipData(i), FormatColor.Rgba, FormatType.UnsignedByte);
            }

            sampler = Context.Create.Sampler();
            sampler.SetMagFilter(TextureMagFilter.Linear);
            sampler.SetMinFilter(TextureMinFilter.LinearMipmapLinear);
            sampler.SetMaxAnisotropy(16f);

            IVertexShader vsh = Context.Create.VertexShader(VertexShaderText);
            IFragmentShader fsh = Context.Create.FragmentShader(FragmentShaderText);
            program = Context.Create.Program(new ShaderProgramDescription
            {
                VertexShaders = new[] {vsh},
                FragmentShaders = new[] {fsh},
                VertexAttributeNames = new[] {"in_position", "in_normal", "in_tex_coord"},
                UniformBufferNames = new[] {"Transform", "Camera", "Light"},
                SamplerNames = new[] {"DiffuseMap"}
            });
        }
コード例 #38
0
ファイル: MeshVisual.cs プロジェクト: Michael-Zp/GraphicsWar
 /// <summary>
 /// Initializes a new instance of the <see cref="MeshVisual"/> class.
 /// </summary>
 /// <param name="mesh">The mesh.</param>
 /// <param name="shader">The shader.</param>
 /// <param name="textureBindings">The texture bindings.</param>
 public MeshVisual(DefaultMesh mesh, IShaderProgram shader, IEnumerable <TextureBinding> textureBindings = null)
     : this(VAOLoader.FromMesh(mesh, shader), shader, textureBindings)
 {
 }