protected virtual void renderBlock(EnumBlock block, float scale, int x, int y) { var UVs = TextureManager.getUVsFromBlock(block); GraphicsManager.overrideModelUVsInVAO(itemModel.rawModel.bufferIDs[1], UVs.getUVForSide(EnumFacing.SOUTH).ToArray()); var unit = new Vector2(1f / Game.INSTANCE.ClientSize.Width, 1f / Game.INSTANCE.ClientSize.Height); float width = 16; float height = 16; float scaledWidth = 16 * scale; float scaledHeight = 16 * scale; float posX = x + scaledWidth / 2; float posY = -y - scaledHeight / 2; var pos = new Vector2(posX, posY) * unit; var mat = MatrixHelper.createTransformationMatrix(pos * 2 - Vector2.UnitX + Vector2.UnitY, scale * new Vector2(width, height) * unit); itemModel.shader.start(); itemModel.shader.loadTransformationMatrix(mat); GL.BindVertexArray(itemModel.rawModel.vaoID); GL.EnableVertexAttribArray(0); GL.EnableVertexAttribArray(1); GL.ActiveTexture(TextureUnit.Texture0); GL.BindTexture(TextureTarget.Texture2D, TextureManager.blockTextureAtlasID); GL.DrawArrays(itemModel.shader.renderType, 0, 4); GL.DisableVertexAttribArray(0); GL.DisableVertexAttribArray(1); GL.BindVertexArray(0); itemModel.shader.stop(); }