{"action":"created","comment":{"url":"https://api.github.com/repos/Palm-Studios/sh3redux/pulls/comments/129541721","pull_request_review_id":52323971,"id":129541721,"diff_hunk":"@@ -0,0 +1,288 @@\n+/** @file\n+ *\n+ *  An abstraction of OpenGL Vertex Array Objects (VAO). Each mesh has its' own VAO, making it a lot simpler\n+ *  to reuse meshes (for instance, just after Heather leaves the bathroom in the corridor with 3-4 Double Heads).\n+ *\n+ *  Also gives us a nice abstract and typesafe way to deal with VAOs.\n+ *\n+ *  @copyright 2017 Palm Studios\n+ *\n+ *  @date 8-6-2017\n+ *\n+ *  @author Jesse Buhagiar\n+ */\n+#ifndef GLVERTARRAY_HPP_INCLUDED\n+#define GLVERTARRAY_HPP_INCLUDED\n+\n+#include <vector>\n+#include <array>\n+\n+#include \"GL/glew.h\"\n+#include \"GL/gl.h\"\n+\n+#include \"SH3/system/assert.hpp\"\n+#include \"SH3/system/glbuffer.hpp\"\n+\n+namespace sh3_gl{\n+\n+    /**\n+     *  Contains actual functionality of our VAO (@ref Bind, @ref Create etc).\n+     *\n+     *  @note Should <i>not</i> be directly instantiated, use @ref vao instead.\n+     */\n+    struct finalvao\n+    {\n+    protected:\n+\n+        /**\n+         *  Non indexed constructor.\n+         *\n+         *  @param verts Reference to our @ref buffer_object filled with vertex data.\n+         */\n+        finalvao(const buffer_object& verts):ibo(nullptr), vertices(verts)\n+        {\n+            Create();\n+        };\n+\n+        /**\n+         *  Indexed constructor.\n+         *\n+         *  @param ibo      Reference to our @ref buffer_object filled with vertex <i>indices</i> instead of vertex data.\n+         *  @param verts    Reference to our @ref buffer_object filled with vertex data.\n+         */\n+        finalvao(const buffer_object &ibo, const buffer_object& verts):ibo(&ibo), vertices(verts)\n+        {\n+            Create();\n+        };\n+\n+        //No virtual dtor, because finalvao should not be stored directly, i.e. this should only ever be used as a reference.\n+\n+    private:\n+        //Prevent dynamic instantiation since we have no virtual dtor.\n+        static void* operator new(std::size_t) = delete;\n+        static void* operator new[](std::size_t) = delete;\n+        static void operator delete(void*) = delete;\n+        static void operator delete[](void*) = delete;\n+\n+    public:\n+        /**\n+         *  Create a Vertex Attribute Object\n+         */\n+        void Create();\n+\n+        /**\n+         *  Realease our VAO.\n+         */\n+        void Release();\n+\n+        /**\n+         *  Bind this VAO.\n+         */\n+        void Bind();\n+\n+        /**\n+         * Unind this VAO.\n+         */\n+        void Unbind();\n+\n+        /**\n+         * Get the ID of this VAO.\n+         *\n+         *  @return @ref id of this VAO.\n+         */\n+        GLuint GetID() const {return id;}\n+\n+        /**\n+         *  Draw our VAO.\n+         */\n+        void Draw();\n+\n+    protected:\n+        GLuint  id;                         /**< Our VAO's identification number. **/\n+        const buffer_object& vertices;      /**< Vertex Buffer Object */\n+\n+        //FIXME: std::optional<buffer_object&> would be nicer\n+        const buffer_object *const ibo;     /**< (Optional) Buffer for indexed vertices. **/\n+    };\n+\n+    /**\n+     *  A VAO without indexed vertices.\n+     *\n+     *  You probably want to use @ref vao.\n+     *\n+     *  @tparam numbuffers Number of buffers that should be reserved in @ref buffers.\n+     */\n+    template<std::size_t numbuffers>\n+    struct mutablevao : public finalvao\n+    {\n+    protected:\n+\n+        /**\n+         *  Our VAO that inherits from @ref finalvao. Contains a list of all our @ref buffer_object structures.\n+         *\n+         *  @param vertices Reference to our vertices @ref buffer_object.\n+         *\n+         *  @note This should not be directly instantiated.\n+         */\n+        mutablevao(const buffer_object& vertices): finalvao(vertices) {}\n+        using finalvao::finalvao;\n+\n+    public:\n+        /**\n+         *  Specifies data type of data passed to paramater 3 of glVertexAttribPointer.\n+         */\n+        enum class DataType\n+        {\n+            BYTE    = GL_BYTE,\n+            UBYTE   = GL_UNSIGNED_BYTE,\n+            SHORT   = GL_SHORT,\n+            USHORT  = GL_UNSIGNED_SHORT,\n+            INT     = GL_INT,\n+            UINT    = GL_UNSIGNED_INT,\n+            FLOAT   = GL_FLOAT\n+        };\n+\n+        /**\n+         *  Set vertex shader location of data in VBO for specified attribute.\n+         *\n+         *  @param attrib   Attribute we want to map data input in our shader (using location = x).\n+         *  @param type     Data Type of data passed in.\n+         *  @param size     The size of each component per attribute.\n+         *  @param stride   Byte offset between vertex attributes.\n+         *  @param offset   Offset to attribute in buffer. Each attrib is then located at offset + stride.\n+         */\n+        void SetDataLocation(GLuint attrib, DataType type, GLint size, GLsizei stride, GLint offset);\n+\n+        /**\n+         *  Overload the [] operator to get a buffer stored in @ref buffers more easily.\n+         *\n+         *  @param slot Index slot where the buffer is stored. Usually in a @ref Attribute.\n+         *\n+         *  @return buffer_object& reference to the buffer object stored in @ref buffers.\n+         */\n+        buffer_object& operator[] (GLuint slot)\n+        {\n+            return buffers[slot];\n+        }\n+    protected:\n+        std::array<buffer_object, numbuffers> buffers; /**< Our list of current VBOs. */\n+\n+    private:\n+\n+        /**\n+         *  Get offset (stride) into a buffer stored in @ref buffers.\n+         *\n+         *  @param offset Offset to the first element.\n+         *\n+         *  @return void* Pointer to the first element of stride @p offset.\n+         */\n+        static constexpr void* buffer_offset(GLint offset){return static_cast<char *>(nullptr) + offset;}\n+    };\n+\n+    /**\n+     *  Set vertex shader location of data in VBO for specified attribute.\n+     *\n+     *  @tparam numbuffers  Number of buffers.\n+     *  @param attrib       Attribute we want to map data input in our shader (using location = x).\n+     *  @param type         Data Type of data passed in.\n+     *  @param size         The size of each component per attribute.\n+     *  @param stride       Byte offset between vertex attributes.\n+     *  @param offset       Offset to attribute in buffer. Each attrib is then located at offset + stride.\n+     */\n+    template<std::size_t numbuffers>\n+    void mutablevao<numbuffers>::SetDataLocation(GLuint attrib, DataType type, GLint size, GLsizei stride, GLint offset)\n+    {\n+        Bind();\n+        glEnableVertexAttribArray(attrib);\n+        ASSERT_MSG(attrib < numbuffers, \"VBO index (attribute) out of range\");\n+        buffers[attrib].Bind();\n+        glVertexAttribPointer(attrib, size, static_cast<GLenum>(type), GL_FALSE, stride, buffer_offset(offset));\n+    }\n+\n+    /**\n+     *  A VAO with indexed vertices.\n+     *\n+     *  You probably want to use @ref vao.\n+     *\n+     *  @tparam numbuffers  Number of buffers that should be reserved in @ref buffers.\n+     *  @tparam index_slot  The slot number where our index @ref buffer_object resides.\n+     */\n+    template<std::size_t numbuffers, std::size_t index_slot>\n+    struct indexedmutablevao : public mutablevao<numbuffers>\n+    {\n+    protected:\n+        /**\n+         *  Constructor.\n+         *\n+         *  @param vertices Reference to our vertices @ref buffer_object.\n+         *\n+         *  @note This should not be directly instantiated.\n+         */\n+        indexedmutablevao(const buffer_object& vertices): mutablevao<numbuffers>(mutablevao<numbuffers>::buffers[index_slot], numbuffers, vertices) {}\n+    };\n+\n+    /**\n+     *  Declares parent type for @ref vao.\n+     *\n+     *  Either @ref indexedmutablevao or @ref mutablevao (unindexed).\n+     *\n+     *  @tparam Attribute An attribute enum.\n+     *\n+     *  @p Attribute should have a value @c MAX to indicate the number of attributes (slots).\n+     *  If @p Attribute has a value @c INDEX_SLOT, then the @ref type is an @ref indexedmutablevao.\n+     *\n+     *  @note This class cannot be instantiated!\n+     */\n+    template<typename Attribute>\n+    struct vaoparent final\n+    {\n+    private:\n+        template<typename T>\n+        static constexpr indexedmutablevao<T::MAX, T::INDEX_SLOT> test(decltype(T::INDEX_SLOT)*);\n+\n+        template<typename T>\n+        static constexpr mutablevao<T::MAX> test(...);\n+\n+    public:\n+        using type = decltype(test<Attribute>(0)); /**< Type of vao this is (either @ref mutablevao or @ref indexedmutablevao) */\n+\n+    private:\n+        vaoparent() = delete;\n+    };\n+\n+    /**\n+     *  Our VAO object. This handles all @ref buffer_objects needed to draw data that has been.\n+     *  sent to the graphics card.\n+     *\n+     *  @tparam Attribute   @p Attribute enum that contains all slots required by this VAO, making it","path":"include/SH3/system/glvertarray.hpp","position":257,"original_position":257,"commit_id":"31045ccb4089e1939a3245ec3f8c929cd4c48414","original_commit_id":"31045ccb4089e1939a3245ec3f8c929cd4c48414","user":{"login":"z33ky","id":289819,"avatar_url":"https://avatars2.githubusercontent.com/u/289819?v=4","gravatar_id":"","url":"https://api.github.com/users/z33ky","html_url":"https://github.com/z33ky","followers_url":"https://api.github.com/users/z33ky/followers","following_url":"https://api.github.com/users/z33ky/following{/other_user}","gists_url":"https://api.github.com/users/z33ky/gists{/gist_id}","starred_url":"https://api.github.com/users/z33ky/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/z33ky/subscriptions","organizations_url":"https://api.github.com/users/z33ky/orgs","repos_url":"https://api.github.com/users/z33ky/repos","events_url":"https://api.github.com/users/z33ky/events{/privacy}","received_events_url":"https://api.github.com/users/z33ky/received_events","type":"User","site_admin":false},"body":"This is still a very long parameter description.\r\nThe idea is to be brief here and go into detail below.\r\nLook how `Attribute` is documented for `vaoparent`.","created_at":"2017-07-26T11:01:26Z","updated_at":"2017-07-26T11:01:29Z","html_url":"https://github.com/Palm-Studios/sh3redux/pull/94#discussion_r129541721","pull_request_url":"https://api.github.com/repos/Palm-Studios/sh3redux/pulls/94","_links":{"self":{"href":"https://api.github.com/repos/Palm-Studios/sh3redux/pulls/comments/129541721"},"html":{"href":"https://github.com/Palm-Studios/sh3redux/pull/94#discussion_r129541721"},"pull_request":{"href":"https://api.github.com/repos/Palm-Studios/sh3redux/pulls/94"}}},"pull_request":{"url":"https://api.github.com/repos/Palm-Studios/sh3redux/pulls/94","id":125646515,"html_url":"https://github.com/Palm-Studios/sh3redux/pull/94","diff_url":"https://github.com/Palm-Studios/sh3redux/pull/94.diff","patch_url":"https://github.com/Palm-Studios/sh3redux/pull/94.patch","issue_url":"https://api.github.com/repos/Palm-Studios/sh3redux/issues/94","number":94,"state":"open","locked":false,"title":"Abstraction of OpenGL Data types","user":{"login":"Quaker762","id":4768900,"avatar_url":"https://avatars0.githubusercontent.com/u/4768900?v=4","gravatar_id":"","url":"https://api.github.com/users/Quaker762","html_url":"https://github.com/Quaker762","followers_url":"https://api.github.com/users/Quaker762/followers","following_url":"https://api.github.com/users/Quaker762/following{/other_user}","gists_url":"https://api.github.com/users/Quaker762/gists{/gist_id}","starred_url":"https://api.github.com/users/Quaker762/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Quaker762/subscriptions","organizations_url":"https://api.github.com/users/Quaker762/orgs","repos_url":"https://api.github.com/users/Quaker762/repos","events_url":"https://api.github.com/users/Quaker762/events{/privacy}","received_events_url":"https://api.github.com/users/Quaker762/received_events","type":"User","site_admin":false},"body":"Very basic abstraction of more complex OpenGL concepts (Vertex Array Objects and Vertex Buffer Objects). Makes the whole thing _much_ more readable and easier to handle. Should also make everything a little bit\r\nmore typesafe and memory safe (no segfaults).\r\n\r\nThere's also a nice demo in main as to how it works. As is clearly visible, there is a LOT less OpenGL bullshit to type out, as the object does it all for you! :) ","created_at":"2017-06-14T17:05:07Z","updated_at":"2017-07-26T11:01:29Z","closed_at":null,"merged_at":null,"merge_commit_sha":"3c6167a24ffe96fb9b6370c82029687ceda3d738","assignee":{"login":"Quaker762","id":4768900,"avatar_url":"https://avatars0.githubusercontent.com/u/4768900?v=4","gravatar_id":"","url":"https://api.github.com/users/Quaker762","html_url":"https://github.com/Quaker762","followers_url":"https://api.github.com/users/Quaker762/followers","following_url":"https://api.github.com/users/Quaker762/following{/other_user}","gists_url":"https://api.github.com/users/Quaker762/gists{/gist_id}","starred_url":"https://api.github.com/users/Quaker762/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Quaker762/subscriptions","organizations_url":"https://api.github.com/users/Quaker762/orgs","repos_url":"https://api.github.com/users/Quaker762/repos","events_url":"https://api.github.com/users/Quaker762/events{/privacy}","received_events_url":"https://api.github.com/users/Quaker762/received_events","type":"User","site_admin":false},"assignees":[{"login":"Quaker762","id":4768900,"avatar_url":"https://avatars0.githubusercontent.com/u/4768900?v=4","gravatar_id":"","url":"https://api.github.com/users/Quaker762","html_url":"https://github.com/Quaker762","followers_url":"https://api.github.com/users/Quaker762/followers","following_url":"https://api.github.com/users/Quaker762/following{/other_user}","gists_url":"https://api.github.com/users/Quaker762/gists{/gist_id}","starred_url":"https://api.github.com/users/Quaker762/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Quaker762/subscriptions","organizations_url":"https://api.github.com/users/Quaker762/orgs","repos_url":"https://api.github.com/users/Quaker762/repos","events_url":"https://api.github.com/users/Quaker762/events{/privacy}","received_events_url":"https://api.github.com/users/Quaker762/received_events","type":"User","site_admin":false}],"requested_reviewers":[],"milestone":null,"commits_url":"https://api.github.com/repos/Palm-Studios/sh3redux/pulls/94/commits","review_comments_url":"https://api.github.com/repos/Palm-Studios/sh3redux/pulls/94/comments","review_comment_url":"https://api.github.com/repos/Palm-Studios/sh3redux/pulls/comments{/number}","comments_url":"https://api.github.com/repos/Palm-Studios/sh3redux/issues/94/comments","statuses_url":"https://api.github.com/repos/Palm-Studios/sh3redux/statuses/31045ccb4089e1939a3245ec3f8c929cd4c48414","head":{"label":"Quaker762:glbuffers","ref":"glbuffers","sha":"31045ccb4089e1939a3245ec3f8c929cd4c48414","user":{"login":"Quaker762","id":4768900,"avatar_url":"https://avatars0.githubusercontent.com/u/4768900?v=4","gravatar_id":"","url":"https://api.github.com/users/Quaker762","html_url":"https://github.com/Quaker762","followers_url":"https://api.github.com/users/Quaker762/followers","following_url":"https://api.github.com/users/Quaker762/following{/other_user}","gists_url":"https://api.github.com/users/Quaker762/gists{/gist_id}","starred_url":"https://api.github.com/users/Quaker762/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Quaker762/subscriptions","organizations_url":"https://api.github.com/users/Quaker762/orgs","repos_url":"https://api.github.com/users/Quaker762/repos","events_url":"https://api.github.com/users/Quaker762/events{/privacy}","received_events_url":"https://api.github.com/users/Quaker762/received_events","type":"User","site_admin":false},"repo":{"id":78095188,"name":"sh3redux","full_name":"Quaker762/sh3redux","owner":{"login":"Quaker762","id":4768900,"avatar_url":"https://avatars0.githubusercontent.com/u/4768900?v=4","gravatar_id":"","url":"https://api.github.com/users/Quaker762","html_url":"https://github.com/Quaker762","followers_url":"https://api.github.com/users/Quaker762/followers","following_url":"https://api.github.com/users/Quaker762/following{/other_user}","gists_url":"https://api.github.com/users/Quaker762/gists{/gist_id}","starred_url":"https://api.github.com/users/Quaker762/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Quaker762/subscriptions","organizations_url":"https://api.github.com/users/Quaker762/orgs","repos_url":"https://api.github.com/users/Quaker762/repos","events_url":"https://api.github.com/users/Quaker762/events{/privacy}","received_events_url":"https://api.github.com/users/Quaker762/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/Quaker762/sh3redux","description":"SILENT HILL 3 Engine Remake in OpenGL and C++","fork":true,"url":"https://api.github.com/repos/Quaker762/sh3redux","forks_url":"https://api.github.com/repos/Quaker762/sh3redux/forks","keys_url":"https://api.github.com/repos/Quaker762/sh3redux/keys{/key_id}","collaborators_url":"https://api.github.com/repos/Quaker762/sh3redux/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/Quaker762/sh3redux/teams","hooks_url":"https://api.github.com/repos/Quaker762/sh3redux/hooks","issue_events_url":"https://api.github.com/repos/Quaker762/sh3redux/issues/events{/number}","events_url":"https://api.github.com/repos/Quaker762/sh3redux/events","assignees_url":"https://api.github.com/repos/Quaker762/sh3redux/assignees{/user}","branches_url":"https://api.github.com/repos/Quaker762/sh3redux/branches{/branch}","tags_url":"https://api.github.com/repos/Quaker762/sh3redux/tags","blobs_url":"https://api.github.com/repos/Quaker762/sh3redux/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/Quaker762/sh3redux/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/Quaker762/sh3redux/git/refs{/sha}","trees_url":"https://api.github.com/repos/Quaker762/sh3redux/git/trees{/sha}","statuses_url":"https://api.github.com/repos/Quaker762/sh3redux/statuses/{sha}","languages_url":"https://api.github.com/repos/Quaker762/sh3redux/languages","stargazers_url":"https://api.github.com/repos/Quaker762/sh3redux/stargazers","contributors_url":"https://api.github.com/repos/Quaker762/sh3redux/contributors","subscribers_url":"https://api.github.com/repos/Quaker762/sh3redux/subscribers","subscription_url":"https://api.github.com/repos/Quaker762/sh3redux/subscription","commits_url":"https://api.github.com/repos/Quaker762/sh3redux/commits{/sha}","git_commits_url":"https://api.github.com/repos/Quaker762/sh3redux/git/commits{/sha}","comments_url":"https://api.github.com/repos/Quaker762/sh3redux/comments{/number}","issue_comment_url":"https://api.github.com/repos/Quaker762/sh3redux/issues/comments{/number}","contents_url":"https://api.github.com/repos/Quaker762/sh3redux/contents/{+path}","compare_url":"https://api.github.com/repos/Quaker762/sh3redux/compare/{base}...{head}","merges_url":"https://api.github.com/repos/Quaker762/sh3redux/merges","archive_url":"https://api.github.com/repos/Quaker762/sh3redux/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/Quaker762/sh3redux/downloads","issues_url":"https://api.github.com/repos/Quaker762/sh3redux/issues{/number}","pulls_url":"https://api.github.com/repos/Quaker762/sh3redux/pulls{/number}","milestones_url":"https://api.github.com/repos/Quaker762/sh3redux/milestones{/number}","notifications_url":"https://api.github.com/repos/Quaker762/sh3redux/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/Quaker762/sh3redux/labels{/name}","releases_url":"https://api.github.com/repos/Quaker762/sh3redux/releases{/id}","deployments_url":"https://api.github.com/repos/Quaker762/sh3redux/deployments","created_at":"2017-01-05T08:37:57Z","updated_at":"2017-01-05T08:37:59Z","pushed_at":"2017-07-26T10:44:28Z","git_url":"git://github.com/Quaker762/sh3redux.git","ssh_url":"git@github.com:Quaker762/sh3redux.git","clone_url":"https://github.com/Quaker762/sh3redux.git","svn_url":"https://github.com/Quaker762/sh3redux","homepage":null,"size":14955,"stargazers_count":0,"watchers_count":0,"language":"C++","has_issues":false,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":0,"mirror_url":null,"open_issues_count":0,"forks":0,"open_issues":0,"watchers":0,"default_branch":"master"}},"base":{"label":"Palm-Studios:master","ref":"master","sha":"66b2665b32aa4349d9dd2a9a4cab100c2ac0bddd","user":{"login":"Palm-Studios","id":24369067,"avatar_url":"https://avatars2.githubusercontent.com/u/24369067?v=4","gravatar_id":"","url":"https://api.github.com/users/Palm-Studios","html_url":"https://github.com/Palm-Studios","followers_url":"https://api.github.com/users/Palm-Studios/followers","following_url":"https://api.github.com/users/Palm-Studios/following{/other_user}","gists_url":"https://api.github.com/users/Palm-Studios/gists{/gist_id}","starred_url":"https://api.github.com/users/Palm-Studios/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Palm-Studios/subscriptions","organizations_url":"https://api.github.com/users/Palm-Studios/orgs","repos_url":"https://api.github.com/users/Palm-Studios/repos","events_url":"https://api.github.com/users/Palm-Studios/events{/privacy}","received_events_url":"https://api.github.com/users/Palm-Studios/received_events","type":"Organization","site_admin":false},"repo":{"id":76116619,"name":"sh3redux","full_name":"Palm-Studios/sh3redux","owner":{"login":"Palm-Studios","id":24369067,"avatar_url":"https://avatars2.githubusercontent.com/u/24369067?v=4","gravatar_id":"","url":"https://api.github.com/users/Palm-Studios","html_url":"https://github.com/Palm-Studios","followers_url":"https://api.github.com/users/Palm-Studios/followers","following_url":"https://api.github.com/users/Palm-Studios/following{/other_user}","gists_url":"https://api.github.com/users/Palm-Studios/gists{/gist_id}","starred_url":"https://api.github.com/users/Palm-Studios/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Palm-Studios/subscriptions","organizations_url":"https://api.github.com/users/Palm-Studios/orgs","repos_url":"https://api.github.com/users/Palm-Studios/repos","events_url":"https://api.github.com/users/Palm-Studios/events{/privacy}","received_events_url":"https://api.github.com/users/Palm-Studios/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/Palm-Studios/sh3redux","description":"SILENT HILL 3 Engine Remake in OpenGL and C++","fork":false,"url":"https://api.github.com/repos/Palm-Studios/sh3redux","forks_url":"https://api.github.com/repos/Palm-Studios/sh3redux/forks","keys_url":"https://api.github.com/repos/Palm-Studios/sh3redux/keys{/key_id}","collaborators_url":"https://api.github.com/repos/Palm-Studios/sh3redux/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/Palm-Studios/sh3redux/teams","hooks_url":"https://api.github.com/repos/Palm-Studios/sh3redux/hooks","issue_events_url":"https://api.github.com/repos/Palm-Studios/sh3redux/issues/events{/number}","events_url":"https://api.github.com/repos/Palm-Studios/sh3redux/events","assignees_url":"https://api.github.com/repos/Palm-Studios/sh3redux/assignees{/user}","branches_url":"https://api.github.com/repos/Palm-Studios/sh3redux/branches{/branch}","tags_url":"https://api.github.com/repos/Palm-Studios/sh3redux/tags","blobs_url":"https://api.github.com/repos/Palm-Studios/sh3redux/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/Palm-Studios/sh3redux/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/Palm-Studios/sh3redux/git/refs{/sha}","trees_url":"https://api.github.com/repos/Palm-Studios/sh3redux/git/trees{/sha}","statuses_url":"https://api.github.com/repos/Palm-Studios/sh3redux/statuses/{sha}","languages_url":"https://api.github.com/repos/Palm-Studios/sh3redux/languages","stargazers_url":"https://api.github.com/repos/Palm-Studios/sh3redux/stargazers","contributors_url":"https://api.github.com/repos/Palm-Studios/sh3redux/contributors","subscribers_url":"https://api.github.com/repos/Palm-Studios/sh3redux/subscribers","subscription_url":"https://api.github.com/repos/Palm-Studios/sh3redux/subscription","commits_url":"https://api.github.com/repos/Palm-Studios/sh3redux/commits{/sha}","git_commits_url":"https://api.github.com/repos/Palm-Studios/sh3redux/git/commits{/sha}","comments_url":"https://api.github.com/repos/Palm-Studios/sh3redux/comments{/number}","issue_comment_url":"https://api.github.com/repos/Palm-Studios/sh3redux/issues/comments{/number}","contents_url":"https://api.github.com/repos/Palm-Studios/sh3redux/contents/{+path}","compare_url":"https://api.github.com/repos/Palm-Studios/sh3redux/compare/{base}...{head}","merges_url":"https://api.github.com/repos/Palm-Studios/sh3redux/merges","archive_url":"https://api.github.com/repos/Palm-Studios/sh3redux/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/Palm-Studios/sh3redux/downloads","issues_url":"https://api.github.com/repos/Palm-Studios/sh3redux/issues{/number}","pulls_url":"https://api.github.com/repos/Palm-Studios/sh3redux/pulls{/number}","milestones_url":"https://api.github.com/repos/Palm-Studios/sh3redux/milestones{/number}","notifications_url":"https://api.github.com/repos/Palm-Studios/sh3redux/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/Palm-Studios/sh3redux/labels{/name}","releases_url":"https://api.github.com/repos/Palm-Studios/sh3redux/releases{/id}","deployments_url":"https://api.github.com/repos/Palm-Studios/sh3redux/deployments","created_at":"2016-12-10T14:13:46Z","updated_at":"2017-05-04T12:13:50Z","pushed_at":"2017-07-26T10:44:29Z","git_url":"git://github.com/Palm-Studios/sh3redux.git","ssh_url":"git@github.com:Palm-Studios/sh3redux.git","clone_url":"https://github.com/Palm-Studios/sh3redux.git","svn_url":"https://github.com/Palm-Studios/sh3redux","homepage":null,"size":14900,"stargazers_count":29,"watchers_count":29,"language":"C++","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":5,"mirror_url":null,"open_issues_count":12,"forks":5,"open_issues":12,"watchers":29,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/Palm-Studios/sh3redux/pulls/94"},"html":{"href":"https://github.com/Palm-Studios/sh3redux/pull/94"},"issue":{"href":"https://api.github.com/repos/Palm-Studios/sh3redux/issues/94"},"comments":{"href":"https://api.github.com/repos/Palm-Studios/sh3redux/issues/94/comments"},"review_comments":{"href":"https://api.github.com/repos/Palm-Studios/sh3redux/pulls/94/comments"},"review_comment":{"href":"https://api.github.com/repos/Palm-Studios/sh3redux/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/Palm-Studios/sh3redux/pulls/94/commits"},"statuses":{"href":"https://api.github.com/repos/Palm-Studios/sh3redux/statuses/31045ccb4089e1939a3245ec3f8c929cd4c48414"}}}}
{"actor":{"display_login":"z33ky"}}