Ejemplo n.º 1
0
        public Model(ObjFile objModel, int groupNum, ShaderProgram program)
        {
            var group   = objModel.Groups[groupNum];
            var tempPos = new List <Vector3> ();
            var tempTex = new List <Vector2> ();

            foreach (ObjFace f in group.Faces)
            {
                foreach (ObjFaceVertex vert in f.Vertices)
                {
                    tempPos.Add(objModel.Vertices[vert.VertexIndex - 1]);
                    tempTex.Add(objModel.Textures[vert.TextureIndex - 1]);
                }
            }
            var v_pos = new GLBuffer <Vector3> (GLBufferSettings.StaticDraw3FloatArray, tempPos);
            var v_tex = new GLBuffer <Vector2> (GLBufferSettings.StaticDraw2FloatArray, tempTex);
            var m_ind = new GLBuffer <uint> (GLBufferSettings.StaticIndices, Array.ConvertAll <int, uint> (Enumerable.Range(0, tempPos.Count).ToArray(), x => (uint)x));

            Geometry = new Geometry(BeginMode.Quads)
                       .AddBuffer("v_pos", v_pos)
                       .AddBuffer("v_tex", v_tex);

            Position = Vector3.Zero;
            Scale    = Vector3.One;
            Rotation = Vector3.Zero;
        }
Ejemplo n.º 2
0
        /// <summary>
        /// Unbind the specified buffer.
        /// </summary>
        /// <param name="buffer">Buffer.</param>
        /// <typeparam name="BuffType">The 1st type parameter.</typeparam>
        public static void Unbind <BuffType>(GLBuffer <BuffType> buffer) where BuffType : struct
        {
            // Check if the buffer is null
            if (buffer == null)
            {
                LogExtensions.ThrowStatic("Cannot unbind buffer: buffer is null");
            }

            // Unbind the buffer
            GL.BindBuffer(buffer.Settings.Target, 0);
        }
Ejemplo n.º 3
0
 /// <summary>
 /// Unbind the buffer.
 /// </summary>
 public void Unbind()
 {
     // Unbind the buffer
     GLBuffer <T> .Unbind(this);
 }
Ejemplo n.º 4
0
 /// <summary>
 /// Bind the buffer.
 /// </summary>
 public void Bind()
 {
     // Bind the buffer
     GLBuffer <T> .Bind(this);
 }
Ejemplo n.º 5
0
 public Geometry SetIndices(GLBuffer <uint> indices)
 {
     Indices = indices;
     return(this);
 }
Ejemplo n.º 6
0
        /// <summary>
        /// Initializes a new instance of the <see cref="nginz.SpriteBatch"/> class.
        /// </summary>
        /// <param name = "game">The game.</param>
        /// <param name="shader">Shader.</param>
        public SpriteBatch(Game game, ShaderProgram shader = null)
        {
            // Set the game
            Game = game;

            // Compile predefined shaders if no shader program is given
            if (shader == null)
            {
                var vertShader = new VertexShader(vert_source);
                var fragShader = new FragmentShader(frag_source);
                Program = new ShaderProgram(vertShader, fragShader);
                Program.Link();
            }
            else
            {
                Program = shader;
            }

            // Create the optimal buffer settings
            var settings = new GLBufferSettings {
                AttribSize = 0,
                Hint       = BufferUsageHint.DynamicDraw,
                Normalized = false,
                Offset     = 0,
                Target     = BufferTarget.ArrayBuffer,
                Type       = VertexAttribPointerType.Float
            };

            // Create temp variables for indices
            int indPtr      = 0;
            var tempIndices = new uint[MAX_INDICES];

            // Fill temporary indices
            for (uint i = 0; i < MAX_VERTICES; i += 4)
            {
                // Triangle 1
                tempIndices [indPtr++] = i;
                tempIndices [indPtr++] = i + 1;
                tempIndices [indPtr++] = i + 2;

                // Triangle 2
                tempIndices [indPtr++] = i + 1;
                tempIndices [indPtr++] = i + 3;
                tempIndices [indPtr++] = i + 2;
            }

            // Set camera
            InternalCamera = new Camera(60f, game.Resolution, 0, 16, type: ProjectionType.Orthographic);

            // Set current texture
            CurrentTexture = Texture2D.Dot;

            // Generate array buffer object
            abo = GL.GenVertexArray();

            // Create vertex buffer object
            vbo = new GLBufferDynamic <Vertex2D> (settings, Vertex2D.Size, MAX_VERTICES);

            // Create index buffer object
            ibo = new GLBuffer <uint> (GLBufferSettings.DynamicIndices, tempIndices);

            // Initialize vertices
            Vertices = new Vertex2D[MAX_VERTICES];

            framebuffer = new Framebuffer(FramebufferTarget.Framebuffer, Game.Resolution.Width, game.Resolution.Height)
                          .AttachTexture(FboAttachment.DiffuseAttachment, DrawBuffersEnum.ColorAttachment0, PixelInternalFormat.Rgb, PixelFormat.Rgb, PixelType.UnsignedByte, InterpolationMode.Linear);
        }