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; }
/// <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); }
/// <summary> /// Unbind the buffer. /// </summary> public void Unbind() { // Unbind the buffer GLBuffer <T> .Unbind(this); }
/// <summary> /// Bind the buffer. /// </summary> public void Bind() { // Bind the buffer GLBuffer <T> .Bind(this); }
public Geometry SetIndices(GLBuffer <uint> indices) { Indices = indices; return(this); }
/// <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); }