use new Tessellator for Mesh- and ExtrusionLayer

This commit is contained in:
Hannes Janetzek
2014-09-19 22:12:31 +02:00
parent 7db70f239f
commit 20afbfe230
13 changed files with 948 additions and 762 deletions

View File

@@ -9,14 +9,14 @@ LOCAL_CPPFLAGS := $(LOCAL_C_INCLUDES:%=-I%) -O2 -Wall -D__ANDROID__ -Wall -std=c
LOCAL_LDLIBS := -lm -llog
LOCAL_ARM_MODE := arm
LOCAL_SRC_FILES := libtess2/Source/sweep.c\
LOCAL_SRC_FILES := org.oscim.utils.TessJNI.cpp\
libtess2/Source/sweep.c\
libtess2/Source/priorityq.c\
libtess2/Source/bucketalloc.c\
libtess2/Source/geom.c\
libtess2/Source/tess.c\
libtess2/Source/dict.c\
libtess2/Source/mesh.c\
org.oscim.utils.tess.Tesselator.cpp\
gl/utils.c
include $(BUILD_SHARED_LIBRARY)

View File

@@ -0,0 +1,155 @@
/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class org_oscim_utils_TessJNI */
#ifndef _Included_org_oscim_utils_TessJNI
#define _Included_org_oscim_utils_TessJNI
#ifdef __cplusplus
extern "C" {
#endif
/*
* Class: org_oscim_utils_TessJNI
* Method: newTess
* Signature: (I)J
*/
JNIEXPORT jlong JNICALL Java_org_oscim_utils_TessJNI_newTess
(JNIEnv *, jclass, jint);
/*
* Class: org_oscim_utils_TessJNI
* Method: freeTess
* Signature: (J)V
*/
JNIEXPORT void JNICALL Java_org_oscim_utils_TessJNI_freeTess
(JNIEnv *, jclass, jlong);
/*
* Class: org_oscim_utils_TessJNI
* Method: addContour
* Signature: (JI[FIII)V
*/
JNIEXPORT void JNICALL Java_org_oscim_utils_TessJNI_addContour
(JNIEnv *, jclass, jlong, jint, jfloatArray, jint, jint, jint);
/*
* Class: org_oscim_utils_TessJNI
* Method: addMultiContour2D
* Signature: (J[I[FII)V
*/
JNIEXPORT void JNICALL Java_org_oscim_utils_TessJNI_addMultiContour2D
(JNIEnv *, jclass, jlong, jintArray, jfloatArray, jint, jint);
/*
* Class: org_oscim_utils_TessJNI
* Method: tessContour2D
* Signature: (JIIII)I
*/
JNIEXPORT jint JNICALL Java_org_oscim_utils_TessJNI_tessContour2D
(JNIEnv *, jclass, jlong, jint, jint, jint, jint);
/*
* Class: org_oscim_utils_TessJNI
* Method: getVertexCount
* Signature: (J)I
*/
JNIEXPORT jint JNICALL Java_org_oscim_utils_TessJNI_getVertexCount
(JNIEnv *, jclass, jlong);
/*
* Class: org_oscim_utils_TessJNI
* Method: getVertices
* Signature: (J[FII)Z
*/
JNIEXPORT jboolean JNICALL Java_org_oscim_utils_TessJNI_getVertices
(JNIEnv *, jclass, jlong, jfloatArray, jint, jint);
/*
* Class: org_oscim_utils_TessJNI
* Method: getVerticesS
* Signature: (J[SIIF)V
*/
JNIEXPORT void JNICALL Java_org_oscim_utils_TessJNI_getVerticesS
(JNIEnv *, jclass, jlong, jshortArray, jint, jint, jfloat);
/*
* Class: org_oscim_utils_TessJNI
* Method: getVertexIndices
* Signature: (J[III)Z
*/
JNIEXPORT jboolean JNICALL Java_org_oscim_utils_TessJNI_getVertexIndices
(JNIEnv *, jclass, jlong, jintArray, jint, jint);
/*
* Class: org_oscim_utils_TessJNI
* Method: getElementCount
* Signature: (J)I
*/
JNIEXPORT jint JNICALL Java_org_oscim_utils_TessJNI_getElementCount
(JNIEnv *, jclass, jlong);
/*
* Class: org_oscim_utils_TessJNI
* Method: getElements
* Signature: (J[III)Z
*/
JNIEXPORT jboolean JNICALL Java_org_oscim_utils_TessJNI_getElements
(JNIEnv *, jclass, jlong, jintArray, jint, jint);
/*
* Class: org_oscim_utils_TessJNI
* Method: getElementsS
* Signature: (J[SII)V
*/
JNIEXPORT void JNICALL Java_org_oscim_utils_TessJNI_getElementsS
(JNIEnv *, jclass, jlong, jshortArray, jint, jint);
/*
* Class: org_oscim_utils_TessJNI
* Method: getElementsWithInputVertexIds
* Signature: (J[SIII)V
*/
JNIEXPORT void JNICALL Java_org_oscim_utils_TessJNI_getElementsWithInputVertexIds
(JNIEnv *, jclass, jlong, jshortArray, jint, jint, jint);
#ifdef __cplusplus
}
#endif
#endif
/* Header for class org_oscim_utils_TessJNI_ElementType */
#ifndef _Included_org_oscim_utils_TessJNI_ElementType
#define _Included_org_oscim_utils_TessJNI_ElementType
#ifdef __cplusplus
extern "C" {
#endif
#undef org_oscim_utils_TessJNI_ElementType_POLYGONS
#define org_oscim_utils_TessJNI_ElementType_POLYGONS 0L
#undef org_oscim_utils_TessJNI_ElementType_CONNECTED_POLYGONS
#define org_oscim_utils_TessJNI_ElementType_CONNECTED_POLYGONS 1L
#undef org_oscim_utils_TessJNI_ElementType_BOUNDARY_CONTOURS
#define org_oscim_utils_TessJNI_ElementType_BOUNDARY_CONTOURS 2L
#ifdef __cplusplus
}
#endif
#endif
/* Header for class org_oscim_utils_TessJNI_WindingRule */
#ifndef _Included_org_oscim_utils_TessJNI_WindingRule
#define _Included_org_oscim_utils_TessJNI_WindingRule
#ifdef __cplusplus
extern "C" {
#endif
#undef org_oscim_utils_TessJNI_WindingRule_ODD
#define org_oscim_utils_TessJNI_WindingRule_ODD 0L
#undef org_oscim_utils_TessJNI_WindingRule_NONZERO
#define org_oscim_utils_TessJNI_WindingRule_NONZERO 1L
#undef org_oscim_utils_TessJNI_WindingRule_POSITIVE
#define org_oscim_utils_TessJNI_WindingRule_POSITIVE 2L
#undef org_oscim_utils_TessJNI_WindingRule_NEGATIVE
#define org_oscim_utils_TessJNI_WindingRule_NEGATIVE 3L
#undef org_oscim_utils_TessJNI_WindingRule_ABS_GEQ_TWO
#define org_oscim_utils_TessJNI_WindingRule_ABS_GEQ_TWO 4L
#ifdef __cplusplus
}
#endif
#endif

View File

@@ -1,224 +0,0 @@
#include <org.oscim.utils.tess.Tesselator.h>
//@line:103
#include <tesselator.h>
#include <string.h>
JNIEXPORT jlong JNICALL Java_org_oscim_utils_tess_Tesselator_newTess(JNIEnv* env, jclass clazz) {
//@line:107
{
return (long)tessNewTess(0);
}
}
JNIEXPORT void JNICALL Java_org_oscim_utils_tess_Tesselator_freeTess(JNIEnv* env, jclass clazz, jlong inst) {
//@line:111
{
tessDeleteTess((TESStesselator*) inst);
}
}
JNIEXPORT void JNICALL Java_org_oscim_utils_tess_Tesselator_addContour(JNIEnv* env, jclass clazz, jlong inst, jint size, jfloatArray obj_contour, jint stride, jint offset, jint count) {
float* contour = (float*)env->GetPrimitiveArrayCritical(obj_contour, 0);
//@line:125
{
tessAddContour((TESStesselator*) inst, size, contour + (offset * stride), stride, count);
}
env->ReleasePrimitiveArrayCritical(obj_contour, contour, 0);
}
JNIEXPORT void JNICALL Java_org_oscim_utils_tess_Tesselator_addMultiContour2D(JNIEnv* env, jclass clazz, jlong inst, jintArray obj_index, jfloatArray obj_contour, jint idxStart, jint idxCount) {
int* index = (int*)env->GetPrimitiveArrayCritical(obj_index, 0);
float* contour = (float*)env->GetPrimitiveArrayCritical(obj_contour, 0);
//@line:129
{
TESStesselator* tess = (TESStesselator*) inst;
int offset = 0;
for (int i = 0; i < idxStart + idxCount; i++){
int len = index[i];
if ((len % 2 != 0) || (len < 0))
break;
if (len < 6 || i < idxStart) {
offset += len;
continue;
}
tessAddContour(tess, 2, contour + offset, 8, len >> 1);
offset += len;
}
}
env->ReleasePrimitiveArrayCritical(obj_index, index, 0);
env->ReleasePrimitiveArrayCritical(obj_contour, contour, 0);
}
JNIEXPORT jint JNICALL Java_org_oscim_utils_tess_Tesselator_tessContour2D(JNIEnv* env, jclass clazz, jlong inst, jint windingRule, jint elementType, jint polySize, jint vertexSize) {
//@line:161
{
return tessTesselate((TESStesselator*) inst, windingRule, elementType, polySize, vertexSize, 0);
}
}
JNIEXPORT jint JNICALL Java_org_oscim_utils_tess_Tesselator_getVertexCount(JNIEnv* env, jclass clazz, jlong inst) {
//@line:165
{
return tessGetVertexCount((TESStesselator*) inst);
}
}
static inline jboolean wrapped_Java_org_oscim_utils_tess_Tesselator_getVertices
(JNIEnv* env, jclass clazz, jlong inst, jfloatArray obj_out, jint offset, jint length, float* out) {
//@line:172
{
const TESSIOreal* vertices = tessGetVertices((TESStesselator*) inst);
//const TESSreal* vertices = tessGetVertices((TESStesselator*) inst);
if (!vertices)
return 0;
memcpy(out, vertices + offset, length * sizeof(TESSIOreal));
//memcpy(out, vertices + offset, length * sizeof(TESSreal));
return 1;
}
}
JNIEXPORT jboolean JNICALL Java_org_oscim_utils_tess_Tesselator_getVertices(JNIEnv* env, jclass clazz, jlong inst, jfloatArray obj_out, jint offset, jint length) {
float* out = (float*)env->GetPrimitiveArrayCritical(obj_out, 0);
jboolean JNI_returnValue = wrapped_Java_org_oscim_utils_tess_Tesselator_getVertices(env, clazz, inst, obj_out, offset, length, out);
env->ReleasePrimitiveArrayCritical(obj_out, out, 0);
return JNI_returnValue;
}
JNIEXPORT void JNICALL Java_org_oscim_utils_tess_Tesselator_getVerticesS(JNIEnv* env, jclass clazz, jlong inst, jshortArray obj_out, jint offset, jint length, jfloat scale) {
short* out = (short*)env->GetPrimitiveArrayCritical(obj_out, 0);
//@line:190
{
const TESSIOreal* vertices = tessGetVertices((TESStesselator*) inst);
//const TESSreal* vertices = tessGetVertices((TESStesselator*) inst);
for(int i = 0; i < length; i++)
out[i] = (short)(vertices[offset++] * scale + 0.5f);
}
env->ReleasePrimitiveArrayCritical(obj_out, out, 0);
}
static inline jboolean wrapped_Java_org_oscim_utils_tess_Tesselator_getVertexIndices
(JNIEnv* env, jclass clazz, jlong inst, jintArray obj_out, jint offset, jint length, int* out) {
//@line:206
{
const TESSindex* indices = tessGetVertexIndices((TESStesselator*) inst);
if (!indices)
return 0;
memcpy(out, indices + offset, length * sizeof(TESSindex));
return 1;
}
}
JNIEXPORT jboolean JNICALL Java_org_oscim_utils_tess_Tesselator_getVertexIndices(JNIEnv* env, jclass clazz, jlong inst, jintArray obj_out, jint offset, jint length) {
int* out = (int*)env->GetPrimitiveArrayCritical(obj_out, 0);
jboolean JNI_returnValue = wrapped_Java_org_oscim_utils_tess_Tesselator_getVertexIndices(env, clazz, inst, obj_out, offset, length, out);
env->ReleasePrimitiveArrayCritical(obj_out, out, 0);
return JNI_returnValue;
}
JNIEXPORT jint JNICALL Java_org_oscim_utils_tess_Tesselator_getElementCount(JNIEnv* env, jclass clazz, jlong inst) {
//@line:218
{
return tessGetElementCount((TESStesselator*) inst);
}
}
static inline jboolean wrapped_Java_org_oscim_utils_tess_Tesselator_getElements
(JNIEnv* env, jclass clazz, jlong inst, jintArray obj_out, jint offset, jint length, int* out) {
//@line:225
{
const TESSindex* elements = tessGetElements((TESStesselator*) inst);
if (!elements)
return 0;
memcpy(out, elements + offset, length * sizeof(TESSindex));
return 1;
}
}
JNIEXPORT jboolean JNICALL Java_org_oscim_utils_tess_Tesselator_getElements(JNIEnv* env, jclass clazz, jlong inst, jintArray obj_out, jint offset, jint length) {
int* out = (int*)env->GetPrimitiveArrayCritical(obj_out, 0);
jboolean JNI_returnValue = wrapped_Java_org_oscim_utils_tess_Tesselator_getElements(env, clazz, inst, obj_out, offset, length, out);
env->ReleasePrimitiveArrayCritical(obj_out, out, 0);
return JNI_returnValue;
}
JNIEXPORT void JNICALL Java_org_oscim_utils_tess_Tesselator_getElementsS(JNIEnv* env, jclass clazz, jlong inst, jshortArray obj_out, jint offset, jint length) {
short* out = (short*)env->GetPrimitiveArrayCritical(obj_out, 0);
//@line:238
{
const TESSindex* elements = tessGetElements((TESStesselator*) inst);
for(int i = 0; i < length; i++)
out[i] = (short)elements[offset++];
}
env->ReleasePrimitiveArrayCritical(obj_out, out, 0);
}
JNIEXPORT void JNICALL Java_org_oscim_utils_tess_Tesselator_getElementsWithInputVertexIds(JNIEnv* env, jclass clazz, jlong inst, jshortArray obj_out, jint dstOffset, jint offset, jint length) {
short* out = (short*)env->GetPrimitiveArrayCritical(obj_out, 0);
//@line:247
{
const TESSindex* elements = tessGetElements((TESStesselator*) inst);
const TESSindex* indices = tessGetVertexIndices((TESStesselator*) inst);
for(int i = 0; i < length; i++)
out[dstOffset++] = (short)indices[elements[offset++]];
}
env->ReleasePrimitiveArrayCritical(obj_out, out, 0);
}

View File

@@ -1,155 +0,0 @@
/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class org_oscim_utils_tess_Tesselator */
#ifndef _Included_org_oscim_utils_tess_Tesselator
#define _Included_org_oscim_utils_tess_Tesselator
#ifdef __cplusplus
extern "C" {
#endif
/*
* Class: org_oscim_utils_tess_Tesselator
* Method: newTess
* Signature: ()J
*/
JNIEXPORT jlong JNICALL Java_org_oscim_utils_tess_Tesselator_newTess
(JNIEnv *, jclass);
/*
* Class: org_oscim_utils_tess_Tesselator
* Method: freeTess
* Signature: (J)V
*/
JNIEXPORT void JNICALL Java_org_oscim_utils_tess_Tesselator_freeTess
(JNIEnv *, jclass, jlong);
/*
* Class: org_oscim_utils_tess_Tesselator
* Method: addContour
* Signature: (JI[FIII)V
*/
JNIEXPORT void JNICALL Java_org_oscim_utils_tess_Tesselator_addContour
(JNIEnv *, jclass, jlong, jint, jfloatArray, jint, jint, jint);
/*
* Class: org_oscim_utils_tess_Tesselator
* Method: addMultiContour2D
* Signature: (J[I[FII)V
*/
JNIEXPORT void JNICALL Java_org_oscim_utils_tess_Tesselator_addMultiContour2D
(JNIEnv *, jclass, jlong, jintArray, jfloatArray, jint, jint);
/*
* Class: org_oscim_utils_tess_Tesselator
* Method: tessContour2D
* Signature: (JIIII)I
*/
JNIEXPORT jint JNICALL Java_org_oscim_utils_tess_Tesselator_tessContour2D
(JNIEnv *, jclass, jlong, jint, jint, jint, jint);
/*
* Class: org_oscim_utils_tess_Tesselator
* Method: getVertexCount
* Signature: (J)I
*/
JNIEXPORT jint JNICALL Java_org_oscim_utils_tess_Tesselator_getVertexCount
(JNIEnv *, jclass, jlong);
/*
* Class: org_oscim_utils_tess_Tesselator
* Method: getVertices
* Signature: (J[FII)Z
*/
JNIEXPORT jboolean JNICALL Java_org_oscim_utils_tess_Tesselator_getVertices
(JNIEnv *, jclass, jlong, jfloatArray, jint, jint);
/*
* Class: org_oscim_utils_tess_Tesselator
* Method: getVerticesS
* Signature: (J[SIIF)V
*/
JNIEXPORT void JNICALL Java_org_oscim_utils_tess_Tesselator_getVerticesS
(JNIEnv *, jclass, jlong, jshortArray, jint, jint, jfloat);
/*
* Class: org_oscim_utils_tess_Tesselator
* Method: getVertexIndices
* Signature: (J[III)Z
*/
JNIEXPORT jboolean JNICALL Java_org_oscim_utils_tess_Tesselator_getVertexIndices
(JNIEnv *, jclass, jlong, jintArray, jint, jint);
/*
* Class: org_oscim_utils_tess_Tesselator
* Method: getElementCount
* Signature: (J)I
*/
JNIEXPORT jint JNICALL Java_org_oscim_utils_tess_Tesselator_getElementCount
(JNIEnv *, jclass, jlong);
/*
* Class: org_oscim_utils_tess_Tesselator
* Method: getElements
* Signature: (J[III)Z
*/
JNIEXPORT jboolean JNICALL Java_org_oscim_utils_tess_Tesselator_getElements
(JNIEnv *, jclass, jlong, jintArray, jint, jint);
/*
* Class: org_oscim_utils_tess_Tesselator
* Method: getElementsS
* Signature: (J[SII)V
*/
JNIEXPORT void JNICALL Java_org_oscim_utils_tess_Tesselator_getElementsS
(JNIEnv *, jclass, jlong, jshortArray, jint, jint);
/*
* Class: org_oscim_utils_tess_Tesselator
* Method: getElementsWithInputVertexIds
* Signature: (J[SIII)V
*/
JNIEXPORT void JNICALL Java_org_oscim_utils_tess_Tesselator_getElementsWithInputVertexIds
(JNIEnv *, jclass, jlong, jshortArray, jint, jint, jint);
#ifdef __cplusplus
}
#endif
#endif
/* Header for class org_oscim_utils_tess_Tesselator_ElementType */
#ifndef _Included_org_oscim_utils_tess_Tesselator_ElementType
#define _Included_org_oscim_utils_tess_Tesselator_ElementType
#ifdef __cplusplus
extern "C" {
#endif
#undef org_oscim_utils_tess_Tesselator_ElementType_POLYGONS
#define org_oscim_utils_tess_Tesselator_ElementType_POLYGONS 0L
#undef org_oscim_utils_tess_Tesselator_ElementType_CONNECTED_POLYGONS
#define org_oscim_utils_tess_Tesselator_ElementType_CONNECTED_POLYGONS 1L
#undef org_oscim_utils_tess_Tesselator_ElementType_BOUNDARY_CONTOURS
#define org_oscim_utils_tess_Tesselator_ElementType_BOUNDARY_CONTOURS 2L
#ifdef __cplusplus
}
#endif
#endif
/* Header for class org_oscim_utils_tess_Tesselator_WindingRule */
#ifndef _Included_org_oscim_utils_tess_Tesselator_WindingRule
#define _Included_org_oscim_utils_tess_Tesselator_WindingRule
#ifdef __cplusplus
extern "C" {
#endif
#undef org_oscim_utils_tess_Tesselator_WindingRule_ODD
#define org_oscim_utils_tess_Tesselator_WindingRule_ODD 0L
#undef org_oscim_utils_tess_Tesselator_WindingRule_NONZERO
#define org_oscim_utils_tess_Tesselator_WindingRule_NONZERO 1L
#undef org_oscim_utils_tess_Tesselator_WindingRule_POSITIVE
#define org_oscim_utils_tess_Tesselator_WindingRule_POSITIVE 2L
#undef org_oscim_utils_tess_Tesselator_WindingRule_NEGATIVE
#define org_oscim_utils_tess_Tesselator_WindingRule_NEGATIVE 3L
#undef org_oscim_utils_tess_Tesselator_WindingRule_ABS_GEQ_TWO
#define org_oscim_utils_tess_Tesselator_WindingRule_ABS_GEQ_TWO 4L
#ifdef __cplusplus
}
#endif
#endif