{"action":"created","comment":{"url":"https://api.github.com/repos/SFML/SFML/pulls/comments/146139544","pull_request_review_id":71040567,"id":146139544,"diff_hunk":"@@ -0,0 +1,373 @@\n+////////////////////////////////////////////////////////////\n+//\n+// SFML - Simple and Fast Multimedia Library\n+// Copyright (C) 2007-2017 Laurent Gomila (laurent@sfml-dev.org)\n+//\n+// This software is provided 'as-is', without any express or implied warranty.\n+// In no event will the authors be held liable for any damages arising from the use of this software.\n+//\n+// Permission is granted to anyone to use this software for any purpose,\n+// including commercial applications, and to alter it and redistribute it freely,\n+// subject to the following restrictions:\n+//\n+// 1. The origin of this software must not be misrepresented;\n+//    you must not claim that you wrote the original software.\n+//    If you use this software in a product, an acknowledgment\n+//    in the product documentation would be appreciated but is not required.\n+//\n+// 2. Altered source versions must be plainly marked as such,\n+//    and must not be misrepresented as being the original software.\n+//\n+// 3. This notice may not be removed or altered from any source distribution.\n+//\n+////////////////////////////////////////////////////////////\n+\n+////////////////////////////////////////////////////////////\n+// Headers\n+////////////////////////////////////////////////////////////\n+#include <SFML/Graphics/VertexBuffer.hpp>\n+#include <SFML/Graphics/RenderTarget.hpp>\n+#include <SFML/Graphics/Vertex.hpp>\n+#include <SFML/Graphics/GLCheck.hpp>\n+#include <SFML/System/Mutex.hpp>\n+#include <SFML/System/Lock.hpp>\n+#include <SFML/System/Err.hpp>\n+#include <cstring>\n+\n+namespace\n+{\n+    sf::Mutex isAvailableMutex;\n+\n+    GLenum usageToGlEnum(sf::VertexBuffer::Usage usage)\n+    {\n+        switch (usage)\n+        {\n+            case sf::VertexBuffer::Static:  return GLEXT_GL_STATIC_DRAW;\n+            case sf::VertexBuffer::Dynamic: return GLEXT_GL_DYNAMIC_DRAW;\n+            default:                        return GLEXT_GL_STREAM_DRAW;\n+        }\n+    }\n+}\n+\n+\n+namespace sf\n+{\n+////////////////////////////////////////////////////////////\n+VertexBuffer::VertexBuffer() :\n+m_buffer       (0),\n+m_size         (0),\n+m_primitiveType(Points)\n+{\n+}\n+\n+\n+////////////////////////////////////////////////////////////\n+VertexBuffer::VertexBuffer(PrimitiveType type) :\n+m_buffer       (0),\n+m_size         (0),\n+m_primitiveType(type),\n+m_usage        (Stream)\n+{\n+}\n+\n+\n+////////////////////////////////////////////////////////////\n+VertexBuffer::VertexBuffer(VertexBuffer::Usage usage) :\n+m_buffer       (0),\n+m_size         (0),\n+m_primitiveType(Points),\n+m_usage        (usage)\n+{\n+}\n+\n+\n+////////////////////////////////////////////////////////////\n+VertexBuffer::VertexBuffer(PrimitiveType type, VertexBuffer::Usage usage) :\n+m_buffer       (0),\n+m_size         (0),\n+m_primitiveType(type),\n+m_usage        (usage)\n+{\n+}\n+\n+\n+////////////////////////////////////////////////////////////\n+VertexBuffer::VertexBuffer(const VertexBuffer& copy) :\n+m_buffer       (0),\n+m_size         (0),\n+m_primitiveType(copy.m_primitiveType)\n+{\n+    if (copy.m_buffer && copy.m_size)\n+    {\n+        if (!create(copy.m_size))\n+        {\n+            err() << \"Could not create vertex buffer for copying\" << std::endl;\n+            return;\n+        }\n+\n+        if (!update(copy))\n+            err() << \"Could not copy vertex buffer\" << std::endl;\n+    }\n+}\n+\n+\n+////////////////////////////////////////////////////////////\n+VertexBuffer::~VertexBuffer()\n+{\n+    if (m_buffer)\n+    {\n+        TransientContextLock contextLock;\n+\n+        glCheck(GLEXT_glDeleteBuffers(1, &m_buffer));\n+    }\n+}\n+\n+\n+////////////////////////////////////////////////////////////\n+bool VertexBuffer::create(std::size_t vertexCount)\n+{\n+    if (!isAvailable())\n+        return false;\n+\n+    TransientContextLock contextLock;\n+\n+    if (!m_buffer)\n+        glCheck(GLEXT_glGenBuffers(1, &m_buffer));\n+\n+    if (!m_buffer)\n+    {\n+        err() << \"Could not create vertex buffer, generation failed\" << std::endl;\n+        return false;\n+    }\n+\n+    glCheck(GLEXT_glBindBuffer(GLEXT_GL_ARRAY_BUFFER, m_buffer));\n+    glCheck(GLEXT_glBufferData(GLEXT_GL_ARRAY_BUFFER, sizeof(Vertex) * vertexCount, 0, usageToGlEnum(m_usage)));\n+    glCheck(GLEXT_glBindBuffer(GLEXT_GL_ARRAY_BUFFER, 0));\n+\n+    m_size = vertexCount;\n+\n+    return true;\n+}\n+\n+\n+////////////////////////////////////////////////////////////\n+std::size_t VertexBuffer::getVertexCount() const\n+{\n+    return m_size;\n+}\n+\n+\n+////////////////////////////////////////////////////////////\n+bool VertexBuffer::update(const Vertex* vertices)\n+{\n+    return update(vertices, m_size, 0);\n+}\n+\n+\n+////////////////////////////////////////////////////////////\n+bool VertexBuffer::update(const Vertex* vertices, std::size_t vertexCount, unsigned int offset)\n+{\n+    // Sanity checks\n+    if (!m_buffer)\n+        return false;\n+\n+    if (!vertices)\n+        return false;\n+\n+    if (offset && (offset + vertexCount > m_size))\n+        return false;\n+\n+    TransientContextLock contextLock;\n+\n+    glCheck(GLEXT_glBindBuffer(GLEXT_GL_ARRAY_BUFFER, m_buffer));\n+\n+    // Check if we need to resize or orphan the buffer\n+    if (vertexCount >= m_size)\n+    {\n+        glCheck(GLEXT_glBufferData(GLEXT_GL_ARRAY_BUFFER, sizeof(Vertex) * vertexCount, 0, usageToGlEnum(m_usage)));\n+\n+        m_size = vertexCount;\n+    }\n+\n+    glCheck(GLEXT_glBufferSubData(GLEXT_GL_ARRAY_BUFFER, sizeof(Vertex) * offset, sizeof(Vertex) * vertexCount, vertices));\n+\n+    glCheck(GLEXT_glBindBuffer(GLEXT_GL_ARRAY_BUFFER, 0));\n+\n+    return true;\n+}\n+\n+\n+////////////////////////////////////////////////////////////\n+bool VertexBuffer::update(const VertexBuffer& vertexBuffer)\n+{\n+#ifdef SFML_OPENGL_ES\n+\n+    return false;\n+\n+#else\n+\n+    if (!m_buffer || !vertexBuffer.m_buffer)\n+        return false;\n+\n+    TransientContextLock contextLock;\n+\n+    // Make sure that extensions are initialized\n+    sf::priv::ensureExtensionsInit();\n+\n+    if (GLEXT_copy_buffer)\n+    {\n+        glCheck(GLEXT_glBindBuffer(GLEXT_GL_COPY_READ_BUFFER, vertexBuffer.m_buffer));\n+        glCheck(GLEXT_glBindBuffer(GLEXT_GL_COPY_WRITE_BUFFER, m_buffer));\n+\n+        glCheck(GLEXT_glCopyBufferSubData(GLEXT_GL_COPY_READ_BUFFER, GLEXT_GL_COPY_WRITE_BUFFER, 0, 0, sizeof(Vertex) * vertexBuffer.m_size));\n+\n+        glCheck(GLEXT_glBindBuffer(GLEXT_GL_COPY_WRITE_BUFFER, 0));\n+        glCheck(GLEXT_glBindBuffer(GLEXT_GL_COPY_READ_BUFFER, 0));\n+\n+        return true;\n+    }\n+\n+    glCheck(GLEXT_glBindBuffer(GLEXT_GL_ARRAY_BUFFER, m_buffer));\n+    glCheck(GLEXT_glBufferData(GLEXT_GL_ARRAY_BUFFER, sizeof(Vertex) * vertexBuffer.m_size, 0, usageToGlEnum(m_usage)));\n+\n+    void* destination = 0;\n+    glCheck(destination = GLEXT_glMapBuffer(GLEXT_GL_ARRAY_BUFFER, GLEXT_GL_WRITE_ONLY));\n+\n+    glCheck(GLEXT_glBindBuffer(GLEXT_GL_ARRAY_BUFFER, vertexBuffer.m_buffer));\n+\n+    void* source = 0;\n+    glCheck(source = GLEXT_glMapBuffer(GLEXT_GL_ARRAY_BUFFER, GLEXT_GL_READ_ONLY));\n+\n+    std::memcpy(destination, source, sizeof(Vertex) * vertexBuffer.m_size);\n+\n+    GLboolean sourceResult = GL_FALSE;\n+    glCheck(sourceResult = GLEXT_glUnmapBuffer(GLEXT_GL_ARRAY_BUFFER));\n+\n+    glCheck(GLEXT_glBindBuffer(GLEXT_GL_ARRAY_BUFFER, m_buffer));\n+\n+    GLboolean destinationResult = GL_FALSE;\n+    glCheck(destinationResult = GLEXT_glUnmapBuffer(GLEXT_GL_ARRAY_BUFFER));\n+\n+    glCheck(GLEXT_glBindBuffer(GLEXT_GL_ARRAY_BUFFER, 0));\n+\n+    if ((sourceResult == GL_FALSE) || (destinationResult == GL_FALSE))\n+        return false;\n+\n+    return true;\n+\n+#endif // SFML_OPENGL_ES\n+}\n+\n+\n+////////////////////////////////////////////////////////////\n+void VertexBuffer::clear()\n+{\n+    if (m_buffer)\n+    {\n+        TransientContextLock contextLock;\n+\n+        glCheck(GLEXT_glBindBuffer(GLEXT_GL_ARRAY_BUFFER, m_buffer));\n+        glCheck(GLEXT_glBufferData(GLEXT_GL_ARRAY_BUFFER, 0, 0, usageToGlEnum(m_usage)));\n+        glCheck(GLEXT_glBindBuffer(GLEXT_GL_ARRAY_BUFFER, 0));\n+    }\n+}\n+\n+\n+////////////////////////////////////////////////////////////\n+VertexBuffer& VertexBuffer::operator =(const VertexBuffer& right)\n+{\n+    VertexBuffer temp(right);\n+\n+    swap(temp);\n+\n+    return *this;\n+}\n+\n+\n+////////////////////////////////////////////////////////////\n+void VertexBuffer::swap(VertexBuffer& right)\n+{\n+    std::swap(m_size,          right.m_size);\n+    std::swap(m_buffer,        right.m_buffer);\n+    std::swap(m_primitiveType, right.m_primitiveType);\n+}\n+\n+\n+////////////////////////////////////////////////////////////\n+unsigned int VertexBuffer::getNativeHandle() const\n+{\n+    return m_buffer;\n+}\n+\n+\n+////////////////////////////////////////////////////////////\n+void VertexBuffer::bind(const VertexBuffer* vertexBuffer)\n+{\n+    if (!isAvailable())\n+        return;\n+\n+    TransientContextLock lock;\n+\n+    glCheck(GLEXT_glBindBuffer(GLEXT_GL_ARRAY_BUFFER, vertexBuffer ? vertexBuffer->m_buffer : 0));\n+}\n+\n+\n+////////////////////////////////////////////////////////////\n+void VertexBuffer::setPrimitiveType(PrimitiveType type)\n+{\n+    m_primitiveType = type;\n+}\n+\n+\n+////////////////////////////////////////////////////////////\n+PrimitiveType VertexBuffer::getPrimitiveType() const\n+{\n+    return m_primitiveType;\n+}\n+\n+\n+////////////////////////////////////////////////////////////\n+void VertexBuffer::setUsage(VertexBuffer::Usage usage)\n+{\n+    m_usage = usage;\n+}\n+\n+\n+////////////////////////////////////////////////////////////\n+VertexBuffer::Usage VertexBuffer::getUsage() const\n+{\n+    return m_usage;\n+}\n+\n+\n+////////////////////////////////////////////////////////////\n+bool VertexBuffer::isAvailable()\n+{\n+    Lock lock(isAvailableMutex);\n+\n+    static bool checked = false;\n+    static bool available = false;\n+\n+    if (!checked)\n+    {\n+        checked = true;\n+\n+        TransientContextLock contextLock;\n+\n+        // Make sure that extensions are initialized\n+        sf::priv::ensureExtensionsInit();\n+\n+        available = GLEXT_vertex_buffer_object;\n+    }\n+\n+    return available;\n+}\n+\n+\n+////////////////////////////////////////////////////////////\n+void VertexBuffer::draw(RenderTarget&, RenderStates) const\n+{\n+    // This should never be called","path":"src/SFML/Graphics/VertexBuffer.cpp","position":370,"original_position":370,"commit_id":"2155b89b535be079ae5f18804b4458d9a3716519","original_commit_id":"2155b89b535be079ae5f18804b4458d9a3716519","user":{"login":"binary1248","id":949359,"avatar_url":"https://avatars1.githubusercontent.com/u/949359?v=4","gravatar_id":"","url":"https://api.github.com/users/binary1248","html_url":"https://github.com/binary1248","followers_url":"https://api.github.com/users/binary1248/followers","following_url":"https://api.github.com/users/binary1248/following{/other_user}","gists_url":"https://api.github.com/users/binary1248/gists{/gist_id}","starred_url":"https://api.github.com/users/binary1248/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/binary1248/subscriptions","organizations_url":"https://api.github.com/users/binary1248/orgs","repos_url":"https://api.github.com/users/binary1248/repos","events_url":"https://api.github.com/users/binary1248/events{/privacy}","received_events_url":"https://api.github.com/users/binary1248/received_events","type":"User","site_admin":false},"body":"Wouldn't this end up in infinite recursion?\r\n\r\nRenderTarget::draw() -> VertexBuffer::draw() -> RenderTarget::draw() -> VertexBuffer::draw() ...","created_at":"2017-10-22T18:10:29Z","updated_at":"2017-10-22T18:10:29Z","html_url":"https://github.com/SFML/SFML/pull/1308#discussion_r146139544","pull_request_url":"https://api.github.com/repos/SFML/SFML/pulls/1308","author_association":"OWNER","_links":{"self":{"href":"https://api.github.com/repos/SFML/SFML/pulls/comments/146139544"},"html":{"href":"https://github.com/SFML/SFML/pull/1308#discussion_r146139544"},"pull_request":{"href":"https://api.github.com/repos/SFML/SFML/pulls/1308"}},"in_reply_to_id":146128986},"pull_request":{"url":"https://api.github.com/repos/SFML/SFML/pulls/1308","id":147966366,"html_url":"https://github.com/SFML/SFML/pull/1308","diff_url":"https://github.com/SFML/SFML/pull/1308.diff","patch_url":"https://github.com/SFML/SFML/pull/1308.patch","issue_url":"https://api.github.com/repos/SFML/SFML/issues/1308","number":1308,"state":"open","locked":false,"title":"Added sf::VertexBuffer class","user":{"login":"binary1248","id":949359,"avatar_url":"https://avatars1.githubusercontent.com/u/949359?v=4","gravatar_id":"","url":"https://api.github.com/users/binary1248","html_url":"https://github.com/binary1248","followers_url":"https://api.github.com/users/binary1248/followers","following_url":"https://api.github.com/users/binary1248/following{/other_user}","gists_url":"https://api.github.com/users/binary1248/gists{/gist_id}","starred_url":"https://api.github.com/users/binary1248/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/binary1248/subscriptions","organizations_url":"https://api.github.com/users/binary1248/orgs","repos_url":"https://api.github.com/users/binary1248/repos","events_url":"https://api.github.com/users/binary1248/events{/privacy}","received_events_url":"https://api.github.com/users/binary1248/received_events","type":"User","site_admin":false},"body":"Also added an example demonstrating VertexBuffer, Shader and Thread usage.\r\n\r\nIf anybody feels like tweaking the generation parameters a bit to make the example output look better feel free to do so. Being an artist is not one of my strong points...","created_at":"2017-10-21T22:49:14Z","updated_at":"2017-10-22T18:10:29Z","closed_at":null,"merged_at":null,"merge_commit_sha":"9722c83e691763a85d4decf215d41eb9c3f082df","assignee":{"login":"binary1248","id":949359,"avatar_url":"https://avatars1.githubusercontent.com/u/949359?v=4","gravatar_id":"","url":"https://api.github.com/users/binary1248","html_url":"https://github.com/binary1248","followers_url":"https://api.github.com/users/binary1248/followers","following_url":"https://api.github.com/users/binary1248/following{/other_user}","gists_url":"https://api.github.com/users/binary1248/gists{/gist_id}","starred_url":"https://api.github.com/users/binary1248/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/binary1248/subscriptions","organizations_url":"https://api.github.com/users/binary1248/orgs","repos_url":"https://api.github.com/users/binary1248/repos","events_url":"https://api.github.com/users/binary1248/events{/privacy}","received_events_url":"https://api.github.com/users/binary1248/received_events","type":"User","site_admin":false},"assignees":[{"login":"binary1248","id":949359,"avatar_url":"https://avatars1.githubusercontent.com/u/949359?v=4","gravatar_id":"","url":"https://api.github.com/users/binary1248","html_url":"https://github.com/binary1248","followers_url":"https://api.github.com/users/binary1248/followers","following_url":"https://api.github.com/users/binary1248/following{/other_user}","gists_url":"https://api.github.com/users/binary1248/gists{/gist_id}","starred_url":"https://api.github.com/users/binary1248/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/binary1248/subscriptions","organizations_url":"https://api.github.com/users/binary1248/orgs","repos_url":"https://api.github.com/users/binary1248/repos","events_url":"https://api.github.com/users/binary1248/events{/privacy}","received_events_url":"https://api.github.com/users/binary1248/received_events","type":"User","site_admin":false}],"requested_reviewers":[{"login":"mantognini","id":693483,"avatar_url":"https://avatars2.githubusercontent.com/u/693483?v=4","gravatar_id":"","url":"https://api.github.com/users/mantognini","html_url":"https://github.com/mantognini","followers_url":"https://api.github.com/users/mantognini/followers","following_url":"https://api.github.com/users/mantognini/following{/other_user}","gists_url":"https://api.github.com/users/mantognini/gists{/gist_id}","starred_url":"https://api.github.com/users/mantognini/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/mantognini/subscriptions","organizations_url":"https://api.github.com/users/mantognini/orgs","repos_url":"https://api.github.com/users/mantognini/repos","events_url":"https://api.github.com/users/mantognini/events{/privacy}","received_events_url":"https://api.github.com/users/mantognini/received_events","type":"User","site_admin":false},{"login":"eXpl0it3r","id":920861,"avatar_url":"https://avatars1.githubusercontent.com/u/920861?v=4","gravatar_id":"","url":"https://api.github.com/users/eXpl0it3r","html_url":"https://github.com/eXpl0it3r","followers_url":"https://api.github.com/users/eXpl0it3r/followers","following_url":"https://api.github.com/users/eXpl0it3r/following{/other_user}","gists_url":"https://api.github.com/users/eXpl0it3r/gists{/gist_id}","starred_url":"https://api.github.com/users/eXpl0it3r/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/eXpl0it3r/subscriptions","organizations_url":"https://api.github.com/users/eXpl0it3r/orgs","repos_url":"https://api.github.com/users/eXpl0it3r/repos","events_url":"https://api.github.com/users/eXpl0it3r/events{/privacy}","received_events_url":"https://api.github.com/users/eXpl0it3r/received_events","type":"User","site_admin":false},{"login":"MarioLiebisch","id":1854245,"avatar_url":"https://avatars1.githubusercontent.com/u/1854245?v=4","gravatar_id":"","url":"https://api.github.com/users/MarioLiebisch","html_url":"https://github.com/MarioLiebisch","followers_url":"https://api.github.com/users/MarioLiebisch/followers","following_url":"https://api.github.com/users/MarioLiebisch/following{/other_user}","gists_url":"https://api.github.com/users/MarioLiebisch/gists{/gist_id}","starred_url":"https://api.github.com/users/MarioLiebisch/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/MarioLiebisch/subscriptions","organizations_url":"https://api.github.com/users/MarioLiebisch/orgs","repos_url":"https://api.github.com/users/MarioLiebisch/repos","events_url":"https://api.github.com/users/MarioLiebisch/events{/privacy}","received_events_url":"https://api.github.com/users/MarioLiebisch/received_events","type":"User","site_admin":false}],"milestone":null,"commits_url":"https://api.github.com/repos/SFML/SFML/pulls/1308/commits","review_comments_url":"https://api.github.com/repos/SFML/SFML/pulls/1308/comments","review_comment_url":"https://api.github.com/repos/SFML/SFML/pulls/comments{/number}","comments_url":"https://api.github.com/repos/SFML/SFML/issues/1308/comments","statuses_url":"https://api.github.com/repos/SFML/SFML/statuses/2155b89b535be079ae5f18804b4458d9a3716519","head":{"label":"SFML:feature/vertex_buffer","ref":"feature/vertex_buffer","sha":"2155b89b535be079ae5f18804b4458d9a3716519","user":{"login":"SFML","id":4226899,"avatar_url":"https://avatars3.githubusercontent.com/u/4226899?v=4","gravatar_id":"","url":"https://api.github.com/users/SFML","html_url":"https://github.com/SFML","followers_url":"https://api.github.com/users/SFML/followers","following_url":"https://api.github.com/users/SFML/following{/other_user}","gists_url":"https://api.github.com/users/SFML/gists{/gist_id}","starred_url":"https://api.github.com/users/SFML/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/SFML/subscriptions","organizations_url":"https://api.github.com/users/SFML/orgs","repos_url":"https://api.github.com/users/SFML/repos","events_url":"https://api.github.com/users/SFML/events{/privacy}","received_events_url":"https://api.github.com/users/SFML/received_events","type":"Organization","site_admin":false},"repo":{"id":1524684,"name":"SFML","full_name":"SFML/SFML","owner":{"login":"SFML","id":4226899,"avatar_url":"https://avatars3.githubusercontent.com/u/4226899?v=4","gravatar_id":"","url":"https://api.github.com/users/SFML","html_url":"https://github.com/SFML","followers_url":"https://api.github.com/users/SFML/followers","following_url":"https://api.github.com/users/SFML/following{/other_user}","gists_url":"https://api.github.com/users/SFML/gists{/gist_id}","starred_url":"https://api.github.com/users/SFML/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/SFML/subscriptions","organizations_url":"https://api.github.com/users/SFML/orgs","repos_url":"https://api.github.com/users/SFML/repos","events_url":"https://api.github.com/users/SFML/events{/privacy}","received_events_url":"https://api.github.com/users/SFML/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/SFML/SFML","description":"Simple and Fast Multimedia Library","fork":false,"url":"https://api.github.com/repos/SFML/SFML","forks_url":"https://api.github.com/repos/SFML/SFML/forks","keys_url":"https://api.github.com/repos/SFML/SFML/keys{/key_id}","collaborators_url":"https://api.github.com/repos/SFML/SFML/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/SFML/SFML/teams","hooks_url":"https://api.github.com/repos/SFML/SFML/hooks","issue_events_url":"https://api.github.com/repos/SFML/SFML/issues/events{/number}","events_url":"https://api.github.com/repos/SFML/SFML/events","assignees_url":"https://api.github.com/repos/SFML/SFML/assignees{/user}","branches_url":"https://api.github.com/repos/SFML/SFML/branches{/branch}","tags_url":"https://api.github.com/repos/SFML/SFML/tags","blobs_url":"https://api.github.com/repos/SFML/SFML/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/SFML/SFML/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/SFML/SFML/git/refs{/sha}","trees_url":"https://api.github.com/repos/SFML/SFML/git/trees{/sha}","statuses_url":"https://api.github.com/repos/SFML/SFML/statuses/{sha}","languages_url":"https://api.github.com/repos/SFML/SFML/languages","stargazers_url":"https://api.github.com/repos/SFML/SFML/stargazers","contributors_url":"https://api.github.com/repos/SFML/SFML/contributors","subscribers_url":"https://api.github.com/repos/SFML/SFML/subscribers","subscription_url":"https://api.github.com/repos/SFML/SFML/subscription","commits_url":"https://api.github.com/repos/SFML/SFML/commits{/sha}","git_commits_url":"https://api.github.com/repos/SFML/SFML/git/commits{/sha}","comments_url":"https://api.github.com/repos/SFML/SFML/comments{/number}","issue_comment_url":"https://api.github.com/repos/SFML/SFML/issues/comments{/number}","contents_url":"https://api.github.com/repos/SFML/SFML/contents/{+path}","compare_url":"https://api.github.com/repos/SFML/SFML/compare/{base}...{head}","merges_url":"https://api.github.com/repos/SFML/SFML/merges","archive_url":"https://api.github.com/repos/SFML/SFML/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/SFML/SFML/downloads","issues_url":"https://api.github.com/repos/SFML/SFML/issues{/number}","pulls_url":"https://api.github.com/repos/SFML/SFML/pulls{/number}","milestones_url":"https://api.github.com/repos/SFML/SFML/milestones{/number}","notifications_url":"https://api.github.com/repos/SFML/SFML/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/SFML/SFML/labels{/name}","releases_url":"https://api.github.com/repos/SFML/SFML/releases{/id}","deployments_url":"https://api.github.com/repos/SFML/SFML/deployments","created_at":"2011-03-25T08:05:25Z","updated_at":"2017-10-22T09:19:13Z","pushed_at":"2017-10-21T22:49:14Z","git_url":"git://github.com/SFML/SFML.git","ssh_url":"git@github.com:SFML/SFML.git","clone_url":"https://github.com/SFML/SFML.git","svn_url":"https://github.com/SFML/SFML","homepage":"http://www.sfml-dev.org/","size":86720,"stargazers_count":3748,"watchers_count":3748,"language":"C++","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":813,"mirror_url":null,"archived":false,"open_issues_count":99,"forks":813,"open_issues":99,"watchers":3748,"default_branch":"master"}},"base":{"label":"SFML:master","ref":"master","sha":"013d053277c980946bc7761a2a088f1cbb788f8c","user":{"login":"SFML","id":4226899,"avatar_url":"https://avatars3.githubusercontent.com/u/4226899?v=4","gravatar_id":"","url":"https://api.github.com/users/SFML","html_url":"https://github.com/SFML","followers_url":"https://api.github.com/users/SFML/followers","following_url":"https://api.github.com/users/SFML/following{/other_user}","gists_url":"https://api.github.com/users/SFML/gists{/gist_id}","starred_url":"https://api.github.com/users/SFML/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/SFML/subscriptions","organizations_url":"https://api.github.com/users/SFML/orgs","repos_url":"https://api.github.com/users/SFML/repos","events_url":"https://api.github.com/users/SFML/events{/privacy}","received_events_url":"https://api.github.com/users/SFML/received_events","type":"Organization","site_admin":false},"repo":{"id":1524684,"name":"SFML","full_name":"SFML/SFML","owner":{"login":"SFML","id":4226899,"avatar_url":"https://avatars3.githubusercontent.com/u/4226899?v=4","gravatar_id":"","url":"https://api.github.com/users/SFML","html_url":"https://github.com/SFML","followers_url":"https://api.github.com/users/SFML/followers","following_url":"https://api.github.com/users/SFML/following{/other_user}","gists_url":"https://api.github.com/users/SFML/gists{/gist_id}","starred_url":"https://api.github.com/users/SFML/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/SFML/subscriptions","organizations_url":"https://api.github.com/users/SFML/orgs","repos_url":"https://api.github.com/users/SFML/repos","events_url":"https://api.github.com/users/SFML/events{/privacy}","received_events_url":"https://api.github.com/users/SFML/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/SFML/SFML","description":"Simple and Fast Multimedia Library","fork":false,"url":"https://api.github.com/repos/SFML/SFML","forks_url":"https://api.github.com/repos/SFML/SFML/forks","keys_url":"https://api.github.com/repos/SFML/SFML/keys{/key_id}","collaborators_url":"https://api.github.com/repos/SFML/SFML/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/SFML/SFML/teams","hooks_url":"https://api.github.com/repos/SFML/SFML/hooks","issue_events_url":"https://api.github.com/repos/SFML/SFML/issues/events{/number}","events_url":"https://api.github.com/repos/SFML/SFML/events","assignees_url":"https://api.github.com/repos/SFML/SFML/assignees{/user}","branches_url":"https://api.github.com/repos/SFML/SFML/branches{/branch}","tags_url":"https://api.github.com/repos/SFML/SFML/tags","blobs_url":"https://api.github.com/repos/SFML/SFML/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/SFML/SFML/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/SFML/SFML/git/refs{/sha}","trees_url":"https://api.github.com/repos/SFML/SFML/git/trees{/sha}","statuses_url":"https://api.github.com/repos/SFML/SFML/statuses/{sha}","languages_url":"https://api.github.com/repos/SFML/SFML/languages","stargazers_url":"https://api.github.com/repos/SFML/SFML/stargazers","contributors_url":"https://api.github.com/repos/SFML/SFML/contributors","subscribers_url":"https://api.github.com/repos/SFML/SFML/subscribers","subscription_url":"https://api.github.com/repos/SFML/SFML/subscription","commits_url":"https://api.github.com/repos/SFML/SFML/commits{/sha}","git_commits_url":"https://api.github.com/repos/SFML/SFML/git/commits{/sha}","comments_url":"https://api.github.com/repos/SFML/SFML/comments{/number}","issue_comment_url":"https://api.github.com/repos/SFML/SFML/issues/comments{/number}","contents_url":"https://api.github.com/repos/SFML/SFML/contents/{+path}","compare_url":"https://api.github.com/repos/SFML/SFML/compare/{base}...{head}","merges_url":"https://api.github.com/repos/SFML/SFML/merges","archive_url":"https://api.github.com/repos/SFML/SFML/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/SFML/SFML/downloads","issues_url":"https://api.github.com/repos/SFML/SFML/issues{/number}","pulls_url":"https://api.github.com/repos/SFML/SFML/pulls{/number}","milestones_url":"https://api.github.com/repos/SFML/SFML/milestones{/number}","notifications_url":"https://api.github.com/repos/SFML/SFML/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/SFML/SFML/labels{/name}","releases_url":"https://api.github.com/repos/SFML/SFML/releases{/id}","deployments_url":"https://api.github.com/repos/SFML/SFML/deployments","created_at":"2011-03-25T08:05:25Z","updated_at":"2017-10-22T09:19:13Z","pushed_at":"2017-10-21T22:49:14Z","git_url":"git://github.com/SFML/SFML.git","ssh_url":"git@github.com:SFML/SFML.git","clone_url":"https://github.com/SFML/SFML.git","svn_url":"https://github.com/SFML/SFML","homepage":"http://www.sfml-dev.org/","size":86720,"stargazers_count":3748,"watchers_count":3748,"language":"C++","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":813,"mirror_url":null,"archived":false,"open_issues_count":99,"forks":813,"open_issues":99,"watchers":3748,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/SFML/SFML/pulls/1308"},"html":{"href":"https://github.com/SFML/SFML/pull/1308"},"issue":{"href":"https://api.github.com/repos/SFML/SFML/issues/1308"},"comments":{"href":"https://api.github.com/repos/SFML/SFML/issues/1308/comments"},"review_comments":{"href":"https://api.github.com/repos/SFML/SFML/pulls/1308/comments"},"review_comment":{"href":"https://api.github.com/repos/SFML/SFML/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/SFML/SFML/pulls/1308/commits"},"statuses":{"href":"https://api.github.com/repos/SFML/SFML/statuses/2155b89b535be079ae5f18804b4458d9a3716519"}},"author_association":"OWNER"}}
{"actor":{"display_login":"binary1248"}}