Esempio n. 1
0
        public void Init()
        {
            if (IsInitialized)
            {
                //throw new Exception("Mesh is already initialized");
                //Console.WriteLine("skipping Mesh init() because it was already initialized");
                return;
            }

            vao = new Vertexarray();

            vbo = new Buffer <vertex>();
            vbo.bufferdata(vertices.ToArray(), OpenTK.Graphics.OpenGL4.BufferUsageHint.StaticDraw);

            ebo = new Buffer <uint>();
            ebo.bufferdata(indices.ToArray(), OpenTK.Graphics.OpenGL4.BufferUsageHint.StaticDraw);

            vao.set_buffer(OpenTK.Graphics.OpenGL4.BufferTarget.ArrayBuffer, vbo);
            vao.set_buffer(OpenTK.Graphics.OpenGL4.BufferTarget.ElementArrayBuffer, ebo);

            /*
             * vao.attrib_pointer(0, 3, OpenTK.Graphics.OpenGL4.VertexAttribPointerType.Float, false, sizeof(float) * 8, 0);
             * vao.attrib_pointer(1, 2, OpenTK.Graphics.OpenGL4.VertexAttribPointerType.Float, false, sizeof(float) * 8, sizeof(float) * 3);
             * vao.attrib_pointer(2, 3, OpenTK.Graphics.OpenGL4.VertexAttribPointerType.Float, false, sizeof(float) * 8, sizeof(float) * 5);
             */
            const int stride = sizeof(float) * 8;

            vao.attrib_pointer(0, AttribType.Vec3, stride, 0);
            vao.attrib_pointer(1, AttribType.Vec2, stride, sizeof(float) * 3);
            vao.attrib_pointer(2, AttribType.Vec3, stride, sizeof(float) * 5);
        }
Esempio n. 2
0
        static Graphics()
        {
            vbo = new Buffer <float>();
            vbo.bufferdata(new float[] {
                -.5f, -.5f, 1, 0,
                -.5f, .5f, 0, 0,
                .5f, -.5f, 1, 1,
                .5f, .5f, 0, 1
            }, OpenTK.Graphics.OpenGL4.BufferUsageHint.StaticDraw);


            ebo = new Buffer <uint>();
            ebo.bufferdata(new uint[] {
                0, 2, 1,
                3, 1, 2
            }, OpenTK.Graphics.OpenGL4.BufferUsageHint.StaticDraw);


            vao = new Vertexarray();
            vao.set_buffer(OpenTK.Graphics.OpenGL4.BufferTarget.ArrayBuffer, vbo);
            vao.set_buffer(OpenTK.Graphics.OpenGL4.BufferTarget.ElementArrayBuffer, ebo);


            vao.attrib_pointer(0, 4, OpenTK.Graphics.OpenGL4.VertexAttribPointerType.Float, false, sizeof(float) * 4, 0);
        }
Esempio n. 3
0
 public Vao_vbo_ebo()
 {
     vao = new Vertexarray();
     vbo = new Buffer <T>();
     ebo = new Buffer <uint>();
     vao.set_buffer(OpenTK.Graphics.OpenGL4.BufferTarget.ArrayBuffer, vbo);
     vao.set_buffer(OpenTK.Graphics.OpenGL4.BufferTarget.ElementArrayBuffer, ebo);
 }
Esempio n. 4
0
        public void render()
        {
            vao.bind();
            int offset = 0;

            foreach (var item in entries)
            {
                item.Key.apply();
                Vertexarray.draw_elements(OpenTK.Graphics.OpenGL4.PrimitiveType.Triangles, item.Value, ElementsType.UnsignedInt, offset * sizeof(uint));
                offset += item.Value;
            }
            Vertexarray.unbind();
        }
Esempio n. 5
0
        static Skybox()
        {
            boxvao = new Vertexarray();
            vbo    = Glow.Buffer.create(new float[] {
                -1.0f, 1.0f, -1.0f,
                -1.0f, -1.0f, -1.0f,
                1.0f, -1.0f, -1.0f,
                1.0f, -1.0f, -1.0f,
                1.0f, 1.0f, -1.0f,
                -1.0f, 1.0f, -1.0f,

                -1.0f, -1.0f, 1.0f,
                -1.0f, -1.0f, -1.0f,
                -1.0f, 1.0f, -1.0f,
                -1.0f, 1.0f, -1.0f,
                -1.0f, 1.0f, 1.0f,
                -1.0f, -1.0f, 1.0f,

                1.0f, -1.0f, -1.0f,
                1.0f, -1.0f, 1.0f,
                1.0f, 1.0f, 1.0f,
                1.0f, 1.0f, 1.0f,
                1.0f, 1.0f, -1.0f,
                1.0f, -1.0f, -1.0f,

                -1.0f, -1.0f, 1.0f,
                -1.0f, 1.0f, 1.0f,
                1.0f, 1.0f, 1.0f,
                1.0f, 1.0f, 1.0f,
                1.0f, -1.0f, 1.0f,
                -1.0f, -1.0f, 1.0f,

                -1.0f, 1.0f, -1.0f,
                1.0f, 1.0f, -1.0f,
                1.0f, 1.0f, 1.0f,
                1.0f, 1.0f, 1.0f,
                -1.0f, 1.0f, 1.0f,
                -1.0f, 1.0f, -1.0f,

                -1.0f, -1.0f, -1.0f,
                -1.0f, -1.0f, 1.0f,
                1.0f, -1.0f, -1.0f,
                1.0f, -1.0f, -1.0f,
                -1.0f, -1.0f, 1.0f,
                1.0f, -1.0f, 1.0f
            });

            boxvao.set_buffer(BufferTarget.ArrayBuffer, vbo);
            boxvao.attrib_pointer(0, 3, VertexAttribPointerType.Float, false, sizeof(float) * 3, 0);
            //boxvao.set_attribute_pointer(0, AttribType.Vec3, vbo, vec3.bytesize);
        }
Esempio n. 6
0
        public AdvMesh()
        {
            // init buffers:
            vertex_buffer  = Glow.Buffer.create(this.vertices.ToArray());
            element_buffer = Glow.Buffer.create(this.indices.ToArray());

            // setup vao:
            vao = new Vertexarray();
            vao.set_buffer(OpenTK.Graphics.OpenGL4.BufferTarget.ArrayBuffer, vertex_buffer);
            vao.attrib_pointer(POSITION, AttribType.Vec3, vertex.bytesize, 0);
            vao.attrib_pointer(TEXCOORD, AttribType.Vec2, vertex.bytesize, vec3.bytesize);
            vao.attrib_pointer(NORMAL, AttribType.Vec3, vertex.bytesize, vec3.bytesize + vec2.bytesize);
            vao.set_elementbuffer(element_buffer);
        }
Esempio n. 7
0
 private static void InitializeScreenQuad()
 {
     imageEffectQuadVBO = new Buffer <float>();
     imageEffectQuadVBO.bufferdata(new float[] {
         -1f, -1f,
         1f, -1f,
         -1f, 1f,
         1f, 1f
     }, BufferUsageHint.StaticDraw);
     imageEffectQuadEBO = new Buffer <uint>();
     imageEffectQuadEBO.bufferdata(new uint[] {
         0, 1, 2,
         3, 2, 1
     }, BufferUsageHint.StaticDraw);
     imageEffectQuadVAO = new Vertexarray();
     imageEffectQuadVAO.set_buffer(BufferTarget.ArrayBuffer, imageEffectQuadVBO);
     imageEffectQuadVAO.set_buffer(BufferTarget.ElementArrayBuffer, imageEffectQuadEBO);
     imageEffectQuadVAO.attrib_pointer(0, 2, VertexAttribPointerType.Float, false, sizeof(float) * 2, 0);
 }
Esempio n. 8
0
        public Textbox()
        {
            vao = new Vertexarray();

            vbo = new Buffer <vec4>();
            ebo = new Buffer <uint>();

            vao.set_buffer(OpenTK.Graphics.OpenGL4.BufferTarget.ArrayBuffer, vbo);
            vao.set_buffer(OpenTK.Graphics.OpenGL4.BufferTarget.ElementArrayBuffer, ebo);

            vao.attrib_pointer(Canvas.rectShader.get_attrib_location("posuv"), 4, OpenTK.Graphics.OpenGL4.VertexAttribPointerType.Float, false, sizeof(float) * 4, 0);


            Game.window.KeyPress += Window_KeyPress;
            Game.window.KeyDown  += Window_KeyDown;
            base.OnFocus         += TextBox_OnFocus;
            base.OnUnfocus       += TextBox_OnUnfocus;

            this.initCursor();
        }
Esempio n. 9
0
        static void Main(string[] args)
        {
            GameWindow w = new GameWindow();

            ShaderProgram sp = null;

            Vertexarray    vao = null;
            Buffer <float> vbo = null;
            Buffer <uint>  ebo = null;

            Texture2D texture = null;

            w.Load += (s, a) => {
                GL.ClearColor(0, 0, 0, 1);

                // setting up shader
                var frag = new Shader(ShaderType.FragmentShader, File.ReadAllText("frag.glsl"));
                var vert = new Shader(ShaderType.VertexShader, File.ReadAllText("vert.glsl"));
                sp = new ShaderProgram(frag, vert);
                frag.Dispose();
                vert.Dispose();


                // setting up buffers
                vbo = new Buffer <float>();
                vbo.bufferdata(new float[] {
                    -.5f, -.5f, 0, -0.5f, -0.5f,
                    0, .5f, 0, .5f, 1.5f,
                    .5f, -.5f, 0, 1.5f, -0.5f
                }, BufferUsageHint.StaticDraw);

                ebo = new Buffer <uint>();
                ebo.bufferdata(new uint[] {
                    0, 1, 2
                }, BufferUsageHint.StaticDraw);


                // setting up vao
                vao = new Vertexarray();
                vao.set_buffer(BufferTarget.ArrayBuffer, vbo);
                vao.set_buffer(BufferTarget.ElementArrayBuffer, ebo);

                vao.attrib_pointer(sp.getAttribLocation("pos"), 3, VertexAttribPointerType.Float, false, sizeof(float) * 5, 0);
                vao.attrib_pointer(sp.getAttribLocation("uv"), 2, VertexAttribPointerType.Float, false, sizeof(float) * 5, sizeof(float) * 3);


                // setting up texture

                /*
                 * var r = new Random();
                 * var pixels = new Color32bit[16, 16];
                 * for (int x = 0; x < 16; x++) {
                 *  for (int y = 0; y < 16; y++) {
                 *      if (x == 0 || y == 0 || x == 15 || y == 15) {
                 *          pixels[x, y] = new Color32bit(1.0f);
                 *      } else {
                 *          pixels[x, y] = new Color32bit((float)r.NextDouble(), (float)r.NextDouble(), (float)r.NextDouble());
                 *      }
                 *  }
                 * }
                 * texture = new Texture2D(pixels) {
                 *  Filter = Filter.Nearest,
                 * };*/
                var sw = new Stopwatch();
                sw.Start();
                texture = new Texture2D("Skybox_back.png");
                sw.Stop();
                Console.WriteLine(sw.ElapsedMilliseconds);

                foreach (var item in GLObject.Instances)
                {
                    Console.WriteLine(item);
                }
            };

            w.RenderFrame += (s, e) => {
                GL.Clear(ClearBufferMask.ColorBufferBit);

                sp.use();
                texture.bind(TextureUnit.Texture0);
                //vao.DrawArrays(PrimitiveType.Triangles, 0, 9);
                vao.draw_elements(PrimitiveType.Triangles, 3, DrawElementsType.UnsignedInt);

                GL.Flush();
                w.SwapBuffers();
            };
            var r = new Random();

            w.UpdateFrame += (s, e) => {
                //texture.pixels[r.Next(texture.width), r.Next(texture.height)] = new color((float)r.NextDouble(), (float)r.NextDouble(), (float)r.NextDouble());
                var h = r.Next(texture.height);
                for (int i = 0; i < texture.width; i++)
                {
                    texture.pixels[i, h] = new color(1);
                }

                texture.apply();
            };

            w.Resize += (s, e) => {
                GL.Viewport(0, 0, w.Width, w.Height);
            };

            w.Run();
        }