summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorWildemann Stefan <stefan.wildemann@corpuls.com>2020-01-22 08:52:17 +0100
committerWildemann Stefan <stefan.wildemann@corpuls.com>2020-01-22 08:52:17 +0100
commitf82889027e73838abae9369bdb8fadf665f32eb8 (patch)
tree58f11243d46e13731684dbbfb6c7a065bf050ee6
parenta6c5fe3919fa23f60c4e625a2ffdd78b7d756c91 (diff)
downloadnavit-f82889027e73838abae9369bdb8fadf665f32eb8.tar.gz
g_malloc JNI arrays instead of using stack. Draw triangles.
We now know that polygons with holes tend to get big so don't even try to allocate that on stack.
-rw-r--r--navit/android/src/org/navitproject/navit/NavitGraphics.java2
-rw-r--r--navit/graphics/android/graphics_android.c12
2 files changed, 10 insertions, 4 deletions
diff --git a/navit/android/src/org/navitproject/navit/NavitGraphics.java b/navit/android/src/org/navitproject/navit/NavitGraphics.java
index 855f93d87..79ee27d81 100644
--- a/navit/android/src/org/navitproject/navit/NavitGraphics.java
+++ b/navit/android/src/org/navitproject/navit/NavitGraphics.java
@@ -893,7 +893,7 @@ class NavitGraphics {
// for every hole
for (int i = 0; i < ccount.length; i++) {
// drop holes with less than 3 coordinates
- if (ccount[i] > 6) {
+ if (ccount[i] >= 6) {
path.moveTo(holes[coordinatesUsed + 0], holes[coordinatesUsed + 1]);
for (int j = 2; j < ccount[i]; j += 2) {
path.lineTo(holes[coordinatesUsed + j], holes[coordinatesUsed + j + 1]);
diff --git a/navit/graphics/android/graphics_android.c b/navit/graphics/android/graphics_android.c
index 5acaf3517..fc6712815 100644
--- a/navit/graphics/android/graphics_android.c
+++ b/navit/graphics/android/graphics_android.c
@@ -301,10 +301,13 @@ static void draw_polygon_with_holes (struct graphics_priv *gra, struct graphics_
/* need to get us some arrays for java */
int java_p_size;
jintArray java_p;
+ jint * j_p=NULL;
int java_ccount_size;
jintArray java_ccount;
+ jint * j_ccount=NULL;
int java_holes_size;
jintArray java_holes;
+ jint * j_holes=NULL;
/* Don't even try to draw a polygon with less than 3 points */
if(count < 3)
@@ -313,7 +316,7 @@ static void draw_polygon_with_holes (struct graphics_priv *gra, struct graphics_
/* get java array for coordinates */
java_p_size=count*2;
java_p = (*jnienv)->NewIntArray(jnienv,java_p_size);
- jint j_p[java_p_size];
+ j_p = g_malloc(sizeof(jint) * java_p_size);
for (i = 0 ; i < count ; i++) {
j_p[i*2]=p[i].x;
j_p[(i*2)+1]=p[i].y;
@@ -322,7 +325,7 @@ static void draw_polygon_with_holes (struct graphics_priv *gra, struct graphics_
/* get java array for ccount */
java_ccount_size = hole_count;
java_ccount=(*jnienv)->NewIntArray(jnienv,java_ccount_size);
- jint j_ccount[java_ccount_size];
+ j_ccount=g_malloc(sizeof(jint) * java_ccount_size);
/* get java array for hole coordinates */
java_holes_size = 0;
for(i=0; i < hole_count; i ++) {
@@ -331,7 +334,7 @@ static void draw_polygon_with_holes (struct graphics_priv *gra, struct graphics_
java_holes=(*jnienv)->NewIntArray(jnienv,java_holes_size);
/* copy over the holes to the jint array */
int j_holes_used=0;
- jint j_holes[java_holes_size];
+ j_holes=g_malloc(sizeof(jint) * java_holes_size);
for(i=0; i < hole_count; i ++) {
int j;
j_ccount[i] = ccount[i] * 2;
@@ -352,6 +355,9 @@ static void draw_polygon_with_holes (struct graphics_priv *gra, struct graphics_
(*jnienv)->DeleteLocalRef(jnienv, java_holes);
(*jnienv)->DeleteLocalRef(jnienv, java_ccount);
(*jnienv)->DeleteLocalRef(jnienv, java_p);
+ g_free(j_p);
+ g_free(j_ccount);
+ g_free(j_holes);
}
static void draw_polygon(struct graphics_priv *gra, struct graphics_gc_priv *gc, struct point *p, int count) {