{"action":"created","issue":{"url":"https://api.github.com/repos/godotengine/godot/issues/20077","repository_url":"https://api.github.com/repos/godotengine/godot","labels_url":"https://api.github.com/repos/godotengine/godot/issues/20077/labels{/name}","comments_url":"https://api.github.com/repos/godotengine/godot/issues/20077/comments","events_url":"https://api.github.com/repos/godotengine/godot/issues/20077/events","html_url":"https://github.com/godotengine/godot/pull/20077","id":339631015,"node_id":"MDExOlB1bGxSZXF1ZXN0MjAwMjM4Mjc1","number":20077,"title":"Fix GLES2 rendering performance","user":{"login":"dragmz","id":447143,"node_id":"MDQ6VXNlcjQ0NzE0Mw==","avatar_url":"https://avatars2.githubusercontent.com/u/447143?v=4","gravatar_id":"","url":"https://api.github.com/users/dragmz","html_url":"https://github.com/dragmz","followers_url":"https://api.github.com/users/dragmz/followers","following_url":"https://api.github.com/users/dragmz/following{/other_user}","gists_url":"https://api.github.com/users/dragmz/gists{/gist_id}","starred_url":"https://api.github.com/users/dragmz/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/dragmz/subscriptions","organizations_url":"https://api.github.com/users/dragmz/orgs","repos_url":"https://api.github.com/users/dragmz/repos","events_url":"https://api.github.com/users/dragmz/events{/privacy}","received_events_url":"https://api.github.com/users/dragmz/received_events","type":"User","site_admin":false},"labels":[{"id":73330066,"node_id":"MDU6TGFiZWw3MzMzMDA2Ng==","url":"https://api.github.com/repos/godotengine/godot/labels/enhancement","name":"enhancement","color":"44bbff","default":true},{"id":279098111,"node_id":"MDU6TGFiZWwyNzkwOTgxMTE=","url":"https://api.github.com/repos/godotengine/godot/labels/topic:rendering","name":"topic:rendering","color":"ffdd44","default":false}],"state":"open","locked":false,"assignee":null,"assignees":[],"milestone":{"url":"https://api.github.com/repos/godotengine/godot/milestones/7","html_url":"https://github.com/godotengine/godot/milestone/7","labels_url":"https://api.github.com/repos/godotengine/godot/milestones/7/labels","id":2529217,"node_id":"MDk6TWlsZXN0b25lMjUyOTIxNw==","number":7,"title":"3.1","description":"","creator":{"login":"akien-mga","id":4701338,"node_id":"MDQ6VXNlcjQ3MDEzMzg=","avatar_url":"https://avatars0.githubusercontent.com/u/4701338?v=4","gravatar_id":"","url":"https://api.github.com/users/akien-mga","html_url":"https://github.com/akien-mga","followers_url":"https://api.github.com/users/akien-mga/followers","following_url":"https://api.github.com/users/akien-mga/following{/other_user}","gists_url":"https://api.github.com/users/akien-mga/gists{/gist_id}","starred_url":"https://api.github.com/users/akien-mga/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/akien-mga/subscriptions","organizations_url":"https://api.github.com/users/akien-mga/orgs","repos_url":"https://api.github.com/users/akien-mga/repos","events_url":"https://api.github.com/users/akien-mga/events{/privacy}","received_events_url":"https://api.github.com/users/akien-mga/received_events","type":"User","site_admin":false},"open_issues":1054,"closed_issues":1929,"state":"open","created_at":"2017-05-18T13:33:56Z","updated_at":"2018-07-17T17:22:44Z","due_on":null,"closed_at":null},"comments":1,"created_at":"2018-07-09T22:37:53Z","updated_at":"2018-07-17T18:05:18Z","closed_at":null,"author_association":"CONTRIBUTOR","pull_request":{"url":"https://api.github.com/repos/godotengine/godot/pulls/20077","html_url":"https://github.com/godotengine/godot/pull/20077","diff_url":"https://github.com/godotengine/godot/pull/20077.diff","patch_url":"https://github.com/godotengine/godot/pull/20077.patch"},"body":"Fixes a problem described in #19943 but for GLES2 only. The fix reduces the number of glBufferSubData calls by splitting canvas rendering into two phases:\r\n\r\n1. Prepare polygons data and send the data to GPU\r\n2. Render the polygons from the GPU buffers\r\n\r\nI'm getting 4-10 times performance boost for the project attached to #19943 when run with \"--video-driver GLES2\" flag.\r\n\r\nPerformance tests (FPS comparison [after vs before]):\r\n\r\n#### Core i5-650, GTX 950:\r\n  - 480 polygons: 730 vs 330 = 2,21\r\n  - 1920 polygons: 270 vs 92 = 2,93\r\n  - 7680 polygons: 72 vs 25 = 2,88\r\n  - sprites: no change\r\n\r\n#### Core i7-4790K, Intel 4600:\r\n  - 480 polygons: 325 vs 60 = 5,42\r\n  - 1920 polygons: 185 vs 19 = 9,74\r\n  - 7680 polygons: 77 vs 5 = 15,4\r\n  - sprites: no change\r\n\r\n#### Core i3-2310M, Intel 3000:\r\n  - 480 polygons: 60 vs 10 = 6\r\n  - 1920 polygons: 24 vs 3 = 8\r\n  - 7680 polygons: 7 vs 1 = 7\r\n  - sprites: no change\r\n\r\nTasks:\r\n- [X] Split rendering into prepare and flush phases\r\n- [X] Support multiline polylines (draw_multiline)\r\n- [x] Do performance tests on different hardware"},"comment":{"url":"https://api.github.com/repos/godotengine/godot/issues/comments/405673817","html_url":"https://github.com/godotengine/godot/pull/20077#issuecomment-405673817","issue_url":"https://api.github.com/repos/godotengine/godot/issues/20077","id":405673817,"node_id":"MDEyOklzc3VlQ29tbWVudDQwNTY3MzgxNw==","user":{"login":"dragmz","id":447143,"node_id":"MDQ6VXNlcjQ0NzE0Mw==","avatar_url":"https://avatars2.githubusercontent.com/u/447143?v=4","gravatar_id":"","url":"https://api.github.com/users/dragmz","html_url":"https://github.com/dragmz","followers_url":"https://api.github.com/users/dragmz/followers","following_url":"https://api.github.com/users/dragmz/following{/other_user}","gists_url":"https://api.github.com/users/dragmz/gists{/gist_id}","starred_url":"https://api.github.com/users/dragmz/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/dragmz/subscriptions","organizations_url":"https://api.github.com/users/dragmz/orgs","repos_url":"https://api.github.com/users/dragmz/repos","events_url":"https://api.github.com/users/dragmz/events{/privacy}","received_events_url":"https://api.github.com/users/dragmz/received_events","type":"User","site_admin":false},"created_at":"2018-07-17T18:05:18Z","updated_at":"2018-07-17T18:05:18Z","author_association":"CONTRIBUTOR","body":"@akien-mga Yes, similar optimizations are relevant for the GLES3 renderer as it also currently uses a per-polygon glBufferSubData. It's not a part of this PR because there's quite a lot of refactoring required and I wanted to get some feedback on the proposed GLES2 changes first."}}
{"actor":{"display_login":"dragmz"}}