private float angle = 0.0f; // Поворот protected override void OnLoad(EventArgs e) { // цвет для окна // сначала на заднем буфере, после на сам экран, иначе было бы мерцающее изображение // вызывается один раз, иначе будет логать // задает цвет, которым будем очищать наш буфер // red, green, blue, alpha GL.ClearColor(0.3f, 0.3f, 0.4f, 1.0f); // Подключение буфера глубины GL.Enable(EnableCap.DepthTest); shader = new Shader("Shader.v", "Shader.f"); mesh = MeshLoader.LoadMesh("deer.obj"); VertexBufferObject = GL.GenBuffer(); // Вершины - ArrayBuffer, передается в шейдер GL.BindBuffer(BufferTarget.ArrayBuffer, VertexBufferObject); GL.BufferData(BufferTarget.ArrayBuffer, mesh.vertices.Length * Unsafe.SizeOf <Vertex>(), mesh.vertices, BufferUsageHint.StaticDraw); GL.VertexAttribPointer(shader.GetAttributeLocation("aPosition"), 3, VertexAttribPointerType.Float, false, Unsafe.SizeOf <Vertex>(), 0); GL.EnableVertexAttribArray(shader.GetAttributeLocation("aPosition")); GL.VertexAttribPointer(shader.GetAttributeLocation("aColor"), 3, VertexAttribPointerType.Float, false, Unsafe.SizeOf <Vertex>(), Unsafe.SizeOf <Vector3>()); GL.EnableVertexAttribArray(shader.GetAttributeLocation("aColor")); // Индексы // В шейдер не передается, используется для отрисовки треугольников // Создание IndexBufferObject = GL.GenBuffer(); // Привязка GL.BindBuffer(BufferTarget.ElementArrayBuffer, IndexBufferObject); // Передача данных GL.BufferData(BufferTarget.ElementArrayBuffer, mesh.indices.Length * sizeof(uint), mesh.indices, BufferUsageHint.StaticDraw); base.OnLoad(e); }
private void SetupRenderState(ImGuiNET.ImDrawDataPtr drawData, int width, int height, int VAO) { GL.Enable(EnableCap.Blend); GL.BlendEquation(BlendEquationMode.FuncAdd); GL.BlendFunc(BlendingFactor.SrcAlpha, BlendingFactor.OneMinusSrcAlpha); GL.Disable(EnableCap.CullFace); GL.Disable(EnableCap.DepthTest); GL.Enable(EnableCap.ScissorTest); GL.Viewport(0, 0, width, height); Matrix4 mvp = Matrix4.CreateOrthographicOffCenter( -1.0f, width, height, 0.0f, -1.0f, 1.0f); _shader.Use(); GL.UniformMatrix4(_shader.GetUniformLocation("uProjection"), false, ref mvp); GL.BindVertexArray(_vertexArray); GL.BindBuffer(BufferTarget.ArrayBuffer, _vertexBuffer); GL.BindBuffer(BufferTarget.ElementArrayBuffer, _indexBuffer); GL.EnableVertexAttribArray(_shader.GetAttributeLocation("aPosition")); GL.EnableVertexAttribArray(_shader.GetAttributeLocation("aUV")); GL.EnableVertexAttribArray(_shader.GetAttributeLocation("aColor")); GL.VertexAttribPointer(_shader.GetAttributeLocation("aPosition"), 2, VertexAttribPointerType.Float, false, Unsafe.SizeOf <ImDrawVert>(), 0); GL.VertexAttribPointer(_shader.GetAttributeLocation("aUV"), 2, VertexAttribPointerType.Float, false, Unsafe.SizeOf <ImDrawVert>(), 8); GL.VertexAttribPointer(_shader.GetAttributeLocation("aColor"), 4, VertexAttribPointerType.UnsignedByte, true, Unsafe.SizeOf <ImDrawVert>(), 16); }