From 1d45cd0ff12c1feb29f74e73c9a3ffcac9bb760e Mon Sep 17 00:00:00 2001 From: "V.VamsiKrishna" Date: Thu, 19 Mar 2015 10:31:36 +0530 Subject: Fix Javascript build. --- drivers/etc1/rg_etc1.cpp | 7 +++++++ 1 file changed, 7 insertions(+) (limited to 'drivers') diff --git a/drivers/etc1/rg_etc1.cpp b/drivers/etc1/rg_etc1.cpp index cad9af8830..28502191da 100644 --- a/drivers/etc1/rg_etc1.cpp +++ b/drivers/etc1/rg_etc1.cpp @@ -24,6 +24,9 @@ namespace rg_etc1 { + inline long labs(long val) { + return val < 0 ? -val : val; + } inline int intabs(int val) { @@ -1915,7 +1918,11 @@ done: int v = etc1_decode_value(diff, inten, selector, packed_c); uint err = intabs(v - color); //printf("err: %d - %u = %u\n",v,color,err); + #ifdef JAVASCRIPT_ENABLED + if (err < best_error || best_error == cUINT32_MAX) + #else if (err < best_error) + #endif { best_error = err; best_packed_c = packed_c; -- cgit v1.2.3 From 743b3157bc4912ec98aae21f0b864ee738c09105 Mon Sep 17 00:00:00 2001 From: "V.VamsiKrishna" Date: Thu, 19 Mar 2015 10:35:24 +0530 Subject: Fix for newer gcc. Picked from GoogleCode --- drivers/etc1/rg_etc1.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'drivers') diff --git a/drivers/etc1/rg_etc1.cpp b/drivers/etc1/rg_etc1.cpp index 28502191da..7eb1427d7a 100644 --- a/drivers/etc1/rg_etc1.cpp +++ b/drivers/etc1/rg_etc1.cpp @@ -1916,7 +1916,7 @@ done: for (uint packed_c = 0; packed_c < limit; packed_c++) { int v = etc1_decode_value(diff, inten, selector, packed_c); - uint err = intabs(v - color); + uint err = labs(v - static_cast(color)); //printf("err: %d - %u = %u\n",v,color,err); #ifdef JAVASCRIPT_ENABLED if (err < best_error || best_error == cUINT32_MAX) -- cgit v1.2.3 From 41b729ccff74e5a9154bee7db0d36ffd74641eae Mon Sep 17 00:00:00 2001 From: "V.VamsiKrishna" Date: Fri, 20 Mar 2015 10:18:13 +0530 Subject: Removing etc1 from build for javascript platform. Based on inputs from reduz 1) Made etc1 optional driver and default yes. 2) Reverted the hack in rg_etc1.cpp 3) Disabled etc1 for javascript plaform. --- drivers/etc1/rg_etc1.cpp | 4 ---- 1 file changed, 4 deletions(-) (limited to 'drivers') diff --git a/drivers/etc1/rg_etc1.cpp b/drivers/etc1/rg_etc1.cpp index 7eb1427d7a..d2959da386 100644 --- a/drivers/etc1/rg_etc1.cpp +++ b/drivers/etc1/rg_etc1.cpp @@ -1918,11 +1918,7 @@ done: int v = etc1_decode_value(diff, inten, selector, packed_c); uint err = labs(v - static_cast(color)); //printf("err: %d - %u = %u\n",v,color,err); - #ifdef JAVASCRIPT_ENABLED - if (err < best_error || best_error == cUINT32_MAX) - #else if (err < best_error) - #endif { best_error = err; best_packed_c = packed_c; -- cgit v1.2.3 From d3280f91a13da6c106f95c289c095714c638d201 Mon Sep 17 00:00:00 2001 From: "V.VamsiKrishna" Date: Fri, 20 Mar 2015 11:06:28 +0530 Subject: Missed some things in prev commit. --- drivers/etc1/SCsub | 3 ++- drivers/register_driver_types.cpp | 3 +++ 2 files changed, 5 insertions(+), 1 deletion(-) (limited to 'drivers') diff --git a/drivers/etc1/SCsub b/drivers/etc1/SCsub index 152dc3f4d0..251c3ffb86 100644 --- a/drivers/etc1/SCsub +++ b/drivers/etc1/SCsub @@ -6,7 +6,8 @@ etc_sources = [ "etc1/rg_etc1.cpp" ] -env.drivers_sources+=etc_sources +if (env["etc1"] != "no"): + env.drivers_sources+=etc_sources #env.add_source_files(env.drivers_sources, etc_sources) diff --git a/drivers/register_driver_types.cpp b/drivers/register_driver_types.cpp index e4bb1a343a..e730171fbb 100644 --- a/drivers/register_driver_types.cpp +++ b/drivers/register_driver_types.cpp @@ -222,7 +222,10 @@ void register_driver_types() { #endif #endif +#ifdef ETC1_ENABLED _register_etc1_compress_func(); +#endif + initialize_chibi(); } -- cgit v1.2.3 From 9965e93f7eb7297490de597cc8ed8e18b4ba2872 Mon Sep 17 00:00:00 2001 From: "V.VamsiKrishna" Date: Fri, 20 Mar 2015 11:12:13 +0530 Subject: Revert "Removing etc1 from build for javascript platform." This reverts commit 41b729ccff74e5a9154bee7db0d36ffd74641eae. --- drivers/etc1/rg_etc1.cpp | 4 ++++ 1 file changed, 4 insertions(+) (limited to 'drivers') diff --git a/drivers/etc1/rg_etc1.cpp b/drivers/etc1/rg_etc1.cpp index d2959da386..7eb1427d7a 100644 --- a/drivers/etc1/rg_etc1.cpp +++ b/drivers/etc1/rg_etc1.cpp @@ -1918,7 +1918,11 @@ done: int v = etc1_decode_value(diff, inten, selector, packed_c); uint err = labs(v - static_cast(color)); //printf("err: %d - %u = %u\n",v,color,err); + #ifdef JAVASCRIPT_ENABLED + if (err < best_error || best_error == cUINT32_MAX) + #else if (err < best_error) + #endif { best_error = err; best_packed_c = packed_c; -- cgit v1.2.3 From 2e59788aa9be6dab49e06588fcb1cf812e55a0cf Mon Sep 17 00:00:00 2001 From: "V.VamsiKrishna" Date: Fri, 20 Mar 2015 11:12:59 +0530 Subject: Revert "Missed some things in prev commit." This reverts commit d3280f91a13da6c106f95c289c095714c638d201. --- drivers/etc1/SCsub | 3 +-- drivers/register_driver_types.cpp | 3 --- 2 files changed, 1 insertion(+), 5 deletions(-) (limited to 'drivers') diff --git a/drivers/etc1/SCsub b/drivers/etc1/SCsub index 251c3ffb86..152dc3f4d0 100644 --- a/drivers/etc1/SCsub +++ b/drivers/etc1/SCsub @@ -6,8 +6,7 @@ etc_sources = [ "etc1/rg_etc1.cpp" ] -if (env["etc1"] != "no"): - env.drivers_sources+=etc_sources +env.drivers_sources+=etc_sources #env.add_source_files(env.drivers_sources, etc_sources) diff --git a/drivers/register_driver_types.cpp b/drivers/register_driver_types.cpp index e730171fbb..e4bb1a343a 100644 --- a/drivers/register_driver_types.cpp +++ b/drivers/register_driver_types.cpp @@ -222,10 +222,7 @@ void register_driver_types() { #endif #endif -#ifdef ETC1_ENABLED _register_etc1_compress_func(); -#endif - initialize_chibi(); } -- cgit v1.2.3 From eb3c88b3ddbe27826f634912b048589dff435847 Mon Sep 17 00:00:00 2001 From: "V.VamsiKrishna" Date: Fri, 20 Mar 2015 11:47:56 +0530 Subject: Revert "Revert "Removing etc1 from build for javascript platform."" This reverts commit 9965e93f7eb7297490de597cc8ed8e18b4ba2872. --- drivers/etc1/rg_etc1.cpp | 4 ---- 1 file changed, 4 deletions(-) (limited to 'drivers') diff --git a/drivers/etc1/rg_etc1.cpp b/drivers/etc1/rg_etc1.cpp index 7eb1427d7a..d2959da386 100644 --- a/drivers/etc1/rg_etc1.cpp +++ b/drivers/etc1/rg_etc1.cpp @@ -1918,11 +1918,7 @@ done: int v = etc1_decode_value(diff, inten, selector, packed_c); uint err = labs(v - static_cast(color)); //printf("err: %d - %u = %u\n",v,color,err); - #ifdef JAVASCRIPT_ENABLED - if (err < best_error || best_error == cUINT32_MAX) - #else if (err < best_error) - #endif { best_error = err; best_packed_c = packed_c; -- cgit v1.2.3 From beab10ab9b18c8081ad85d2a59ce23e943f835b0 Mon Sep 17 00:00:00 2001 From: "V.VamsiKrishna" Date: Fri, 20 Mar 2015 11:48:21 +0530 Subject: Revert "Revert "Missed some things in prev commit."" This reverts commit 2e59788aa9be6dab49e06588fcb1cf812e55a0cf. --- drivers/etc1/SCsub | 3 ++- drivers/register_driver_types.cpp | 3 +++ 2 files changed, 5 insertions(+), 1 deletion(-) (limited to 'drivers') diff --git a/drivers/etc1/SCsub b/drivers/etc1/SCsub index 152dc3f4d0..251c3ffb86 100644 --- a/drivers/etc1/SCsub +++ b/drivers/etc1/SCsub @@ -6,7 +6,8 @@ etc_sources = [ "etc1/rg_etc1.cpp" ] -env.drivers_sources+=etc_sources +if (env["etc1"] != "no"): + env.drivers_sources+=etc_sources #env.add_source_files(env.drivers_sources, etc_sources) diff --git a/drivers/register_driver_types.cpp b/drivers/register_driver_types.cpp index e4bb1a343a..e730171fbb 100644 --- a/drivers/register_driver_types.cpp +++ b/drivers/register_driver_types.cpp @@ -222,7 +222,10 @@ void register_driver_types() { #endif #endif +#ifdef ETC1_ENABLED _register_etc1_compress_func(); +#endif + initialize_chibi(); } -- cgit v1.2.3 From 372fa5277c43d152ab75d7e15d2e0a59fd79fd3c Mon Sep 17 00:00:00 2001 From: "V.VamsiKrishna" Date: Sat, 21 Mar 2015 10:12:25 +0530 Subject: Fix for canvas_draw_polygon on webgl. --- drivers/gles2/rasterizer_gles2.cpp | 112 ++++++++++++++++++++++++++++++++----- drivers/gles2/rasterizer_gles2.h | 3 + 2 files changed, 101 insertions(+), 14 deletions(-) (limited to 'drivers') diff --git a/drivers/gles2/rasterizer_gles2.cpp b/drivers/gles2/rasterizer_gles2.cpp index a21b0775e9..0774b03190 100644 --- a/drivers/gles2/rasterizer_gles2.cpp +++ b/drivers/gles2/rasterizer_gles2.cpp @@ -91,6 +91,10 @@ static RasterizerGLES2* _singleton = NULL; +#ifdef GLES_NO_CLIENT_ARRAYS +static float GlobalVertexBuffer[MAX_POLYGON_VERTICES * 8] = {0}; +#endif + static const GLenum prim_type[]={GL_POINTS,GL_LINES,GL_TRIANGLES,GL_TRIANGLE_FAN}; _FORCE_INLINE_ static void _set_color_attrib(const Color& p_color) { @@ -8337,20 +8341,22 @@ void RasterizerGLES2::canvas_draw_primitive(const Vector& p_points, cons void RasterizerGLES2::canvas_draw_polygon(int p_vertex_count, const int* p_indices, const Vector2* p_vertices, const Vector2* p_uvs, const Color* p_colors,const RID& p_texture,bool p_singlecolor) { - bool do_colors=false; + bool do_colors=false; + Color m; + if (p_singlecolor) { + m = *p_colors; + m.a*=canvas_opacity; + _set_color_attrib(m); + } else if (!p_colors) { + m = Color(1, 1, 1, canvas_opacity); + _set_color_attrib(m); + } else + do_colors=true; - if (p_singlecolor) { - Color m = *p_colors; - m.a*=canvas_opacity; - _set_color_attrib(m); - } else if (!p_colors) { - _set_color_attrib( Color(1,1,1,canvas_opacity)); - } else - do_colors=true; - - Texture *texture = _bind_canvas_texture(p_texture); + Texture *texture = _bind_canvas_texture(p_texture); - glEnableVertexAttribArray(VS::ARRAY_VERTEX); +#ifndef GLES_NO_CLIENT_ARRAYS + glEnableVertexAttribArray(VS::ARRAY_VERTEX); glVertexAttribPointer( VS::ARRAY_VERTEX, 2 ,GL_FLOAT, false, sizeof(Vector2), p_vertices ); if (do_colors) { @@ -8380,11 +8386,78 @@ void RasterizerGLES2::canvas_draw_polygon(int p_vertex_count, const int* p_indic }; glDrawElements(GL_TRIANGLES, p_vertex_count, GL_UNSIGNED_SHORT, _draw_poly_indices ); #endif - //glDrawElements(GL_TRIANGLES, p_vertex_count, GL_UNSIGNED_INT, p_indices ); } else { glDrawArrays(GL_TRIANGLES,0,p_vertex_count); } + +#else //WebGL specific impl. + glBindBuffer(GL_ARRAY_BUFFER, gui_quad_buffer); + float *b = GlobalVertexBuffer; + int ofs = 0; + if(p_vertex_count > MAX_POLYGON_VERTICES){ + print_line("Too many vertices to render"); + return; + } + glEnableVertexAttribArray(VS::ARRAY_VERTEX); + glVertexAttribPointer( VS::ARRAY_VERTEX, 2 ,GL_FLOAT, false, sizeof(float)*2, ((float*)0)+ofs ); + for(int i=0;i _max_draw_poly_indices); + static uint16_t _draw_poly_indices[_max_draw_poly_indices]; + for (int i=0; iprint("ind: %d ", p_indices[i]); + }; + + //copy the data to GPU. + glBufferSubData(GL_ELEMENT_ARRAY_BUFFER, 0, p_vertex_count * sizeof(uint16_t), &_draw_poly_indices[0]); + + //draw the triangles. + glDrawElements(GL_TRIANGLES, p_vertex_count, GL_UNSIGNED_SHORT, 0); + + glBindBuffer(GL_ARRAY_BUFFER, 0); + glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0); +#endif + _rinfo.ci_draw_commands++; }; @@ -10579,10 +10652,21 @@ void RasterizerGLES2::init() { glGenBuffers(1,&gui_quad_buffer); glBindBuffer(GL_ARRAY_BUFFER,gui_quad_buffer); - glBufferData(GL_ARRAY_BUFFER,128,NULL,GL_DYNAMIC_DRAW); +#ifdef GLES_NO_CLIENT_ARRAYS //WebGL specific implementation. + glBufferData(GL_ARRAY_BUFFER, 8 * MAX_POLYGON_VERTICES,NULL,GL_DYNAMIC_DRAW); +#else + glBufferData(GL_ARRAY_BUFFER,128,NULL,GL_DYNAMIC_DRAW); +#endif glBindBuffer(GL_ARRAY_BUFFER,0); //unbind +#ifdef GLES_NO_CLIENT_ARRAYS //webgl indices buffer + glGenBuffers(1, &indices_buffer); + glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, indices_buffer); + glBufferData(GL_ELEMENT_ARRAY_BUFFER, 16*1024, NULL, GL_DYNAMIC_DRAW); + glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0);// unbind +#endif + using_canvas_bg=false; _update_framebuffer(); DEBUG_TEST_ERROR("Initializing"); diff --git a/drivers/gles2/rasterizer_gles2.h b/drivers/gles2/rasterizer_gles2.h index b7895ad82e..f59260ace6 100644 --- a/drivers/gles2/rasterizer_gles2.h +++ b/drivers/gles2/rasterizer_gles2.h @@ -31,6 +31,8 @@ #include "servers/visual/rasterizer.h" +#define MAX_POLYGON_VERTICES 4096 //used for WebGL canvas_draw_polygon call. + #ifdef GLES2_ENABLED #include "image.h" @@ -828,6 +830,7 @@ class RasterizerGLES2 : public Rasterizer { GLuint base_framebuffer; GLuint gui_quad_buffer; + GLuint indices_buffer; -- cgit v1.2.3 From 4fa71a6ee0ea72289d9e647eb0aeea59cf8a7192 Mon Sep 17 00:00:00 2001 From: "V.VamsiKrishna" Date: Sat, 21 Mar 2015 22:25:48 +0530 Subject: Removing Print statement effects perf. --- drivers/gles2/rasterizer_gles2.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'drivers') diff --git a/drivers/gles2/rasterizer_gles2.cpp b/drivers/gles2/rasterizer_gles2.cpp index 0774b03190..22aecec0b7 100644 --- a/drivers/gles2/rasterizer_gles2.cpp +++ b/drivers/gles2/rasterizer_gles2.cpp @@ -8445,7 +8445,7 @@ void RasterizerGLES2::canvas_draw_polygon(int p_vertex_count, const int* p_indic static uint16_t _draw_poly_indices[_max_draw_poly_indices]; for (int i=0; iprint("ind: %d ", p_indices[i]); + //OS::get_singleton()->print("ind: %d ", p_indices[i]); }; //copy the data to GPU. -- cgit v1.2.3