From 918d13128562e7e0fa0d54daa050f352873098d3 Mon Sep 17 00:00:00 2001 From: Sergey Bogolepov <1580082+sbogolepov@users.noreply.github.com> Date: Tue, 4 Sep 2018 18:51:47 +0700 Subject: [PATCH] Fixed samples for 0.9 (#2002) --- .../src/main/kotlin/Engine.kt | 44 ++++++++--------- .../src/main/kotlin/JniBridge.kt | 6 ++- .../src/main/kotlin/Renderer.kt | 47 +++++++++---------- samples/python_extension/build.sh | 4 +- samples/torch/src/main/kotlin/Dataset.kt | 2 +- 5 files changed, 52 insertions(+), 51 deletions(-) diff --git a/samples/androidNativeActivity/src/main/kotlin/Engine.kt b/samples/androidNativeActivity/src/main/kotlin/Engine.kt index 8b8dbbba0ac..f08c027dae8 100644 --- a/samples/androidNativeActivity/src/main/kotlin/Engine.kt +++ b/samples/androidNativeActivity/src/main/kotlin/Engine.kt @@ -22,11 +22,11 @@ import platform.gles3.* import platform.linux.* fun logError(message: String) { - __android_log_write(ANDROID_LOG_ERROR, "KonanActivity", message) + __android_log_write(ANDROID_LOG_ERROR.convert(), "KonanActivity", message) } fun logInfo(message: String) { - __android_log_write(ANDROID_LOG_INFO, "KonanActivity", message) + __android_log_write(ANDROID_LOG_INFO.convert(), "KonanActivity", message) } private fun getUnixError() = strerror(posix_errno())!!.toKString() @@ -35,7 +35,7 @@ const val LOOPER_ID_INPUT = 2 inline fun CPointer<*>?.dereferenceAs(): T = this!!.reinterpret().pointed -class Engine(val state: NativeActivityState): DisposableContainer() { +class Engine(val state: NativeActivityState) : DisposableContainer() { private val renderer = Renderer(this, state.activity!!.pointed, state.savedState) private var queue: CPointer? = null private var rendererState: COpaquePointer? = null @@ -94,22 +94,22 @@ class Engine(val state: NativeActivityState): DisposableContainer() { private val jniBrigde = JniBridge(state.activity!!.pointed.vm!!) private fun callToManagedAPI() = jniBrigde.withLocalFrame { - // Actually, this is a context pointer. - val context = JniObject(state.activity!!.pointed.clazz!!) + // Actually, this is a context pointer. + val context = JniObject(state.activity!!.pointed.clazz!!) - val contextClass = FindClass("android/content/Context") - val getSystemServiceMethod = GetMethodID( - contextClass, "getSystemService", "(Ljava/lang/String;)Ljava/lang/Object;")!! - val vibrator = CallObjectMethod(context, getSystemServiceMethod, "vibrator") - if (vibrator != null) { - val vibratorClass = FindClass("android/os/Vibrator") - val vibrateMethod = GetMethodID(vibratorClass, "vibrate", "(J)V")!! - CallVoidMethod(vibrator, vibrateMethod, 500L) - } + val contextClass = FindClass("android/content/Context") + val getSystemServiceMethod = GetMethodID( + contextClass, "getSystemService", "(Ljava/lang/String;)Ljava/lang/Object;")!! + val vibrator = CallObjectMethod(context, getSystemServiceMethod, "vibrator") + if (vibrator != null) { + val vibratorClass = FindClass("android/os/Vibrator") + val vibrateMethod = GetMethodID(vibratorClass, "vibrate", "(J)V")!! + CallVoidMethod(vibrator, vibrateMethod, 500L) + } } private fun processSysEvent(fd: IntVar): Boolean { - val readBytes = read(fd.value, eventPointer.ptr, pointerSize.narrow()).toLong() + val readBytes = read(fd.value, eventPointer.ptr, pointerSize.convert()).toLong() if (readBytes != pointerSize.toLong()) { logError("Failure reading event, $readBytes read: ${getUnixError()}") return true @@ -163,12 +163,12 @@ class Engine(val state: NativeActivityState): DisposableContainer() { NativeActivityEventKind.SAVE_INSTANCE_STATE -> { val saveStateEvent = eventPointer.value.dereferenceAs() val state = renderer.getState() - val dataSize = state.second.signExtend() - rendererState = realloc(rendererState, dataSize) - memcpy(rendererState, state.first, dataSize) + val dataSize = state.second + rendererState = realloc(rendererState, dataSize.convert()) + memcpy(rendererState, state.first, dataSize.convert()) logInfo("Saving instance state to $rendererState: $dataSize bytes") saveStateEvent.savedState = rendererState - saveStateEvent.savedStateSize = dataSize + saveStateEvent.savedStateSize = dataSize.convert() } } } finally { @@ -183,7 +183,7 @@ class Engine(val state: NativeActivityState): DisposableContainer() { } private fun getEventPoint(event: CPointer?, i: Int) = - Vector2(AMotionEvent_getRawX(event, i.signExtend()), AMotionEvent_getRawY(event, i.signExtend())) + Vector2(AMotionEvent_getRawX(event, i.convert()), AMotionEvent_getRawY(event, i.convert())) private fun getEventTime(event: CPointer?) = AMotionEvent_getEventTime(event) / 1_000_000_000.0f @@ -195,8 +195,8 @@ class Engine(val state: NativeActivityState): DisposableContainer() { } val event = inputEvent.value val eventType = AInputEvent_getType(event) - if (eventType == AINPUT_EVENT_TYPE_MOTION) { - val action = AKeyEvent_getAction(event) and AMOTION_EVENT_ACTION_MASK + if (eventType.toUInt() == AINPUT_EVENT_TYPE_MOTION) { + val action = AKeyEvent_getAction(event).toUInt() and AMOTION_EVENT_ACTION_MASK when (action) { AMOTION_EVENT_ACTION_DOWN -> { animating = false diff --git a/samples/androidNativeActivity/src/main/kotlin/JniBridge.kt b/samples/androidNativeActivity/src/main/kotlin/JniBridge.kt index 635e1193b0b..598a3978002 100644 --- a/samples/androidNativeActivity/src/main/kotlin/JniBridge.kt +++ b/samples/androidNativeActivity/src/main/kotlin/JniBridge.kt @@ -24,8 +24,10 @@ data class JniMethod(val jmethod: jmethodID) fun asJniClass(jclass: jclass?) = if (jclass != null) JniClass(jclass) else null + fun asJniObject(jobject: jobject?) = if (jobject != null) JniObject(jobject) else null + fun asJniMethod(jmethodID: jmethodID?) = if (jmethodID != null) JniMethod(jmethodID) else null @@ -52,7 +54,7 @@ class JniBridge(val vm: CPointer) { val fPopLocalFrame = envFunctions.PopLocalFrame!! private fun check() { - if (fExceptionCheck(jniEnv) != 0.toByte()) { + if (fExceptionCheck(jniEnv) != 0.toUByte()) { fExceptionDescribe(jniEnv) fExceptionClear(jniEnv) throw Error("JVM exception thrown") @@ -89,7 +91,7 @@ class JniBridge(val vm: CPointer) { fun GetMethodID(clazz: JniClass?, name: String, signature: String) = memScoped { val result = asJniMethod(fGetMethodID(jniEnv, clazz?.jclass, name.cstr.ptr, signature.cstr.ptr)) check() - result + result } fun CallVoidMethod(receiver: JniObject?, method: JniMethod, vararg arguments: Any?) = memScoped { diff --git a/samples/androidNativeActivity/src/main/kotlin/Renderer.kt b/samples/androidNativeActivity/src/main/kotlin/Renderer.kt index c8ca1354a8b..ccae3662ff8 100644 --- a/samples/androidNativeActivity/src/main/kotlin/Renderer.kt +++ b/samples/androidNativeActivity/src/main/kotlin/Renderer.kt @@ -73,21 +73,21 @@ class Renderer(val container: DisposableContainer, if (savedMatrix != null) { memcpy(matrix, savedMatrix, 16 * 4) } else { - for (i in 0 .. 3) - for (j in 0 .. 3) + for (i in 0..3) + for (j in 0..3) matrix[i * 4 + j] = if (i == j) 1.0f else 0.0f } } fun initialize(window: CPointer): Boolean { - with (container.arena) { + with(container.arena) { logInfo("Initializing context..") display = eglGetDisplay(null) if (display == null) { logError("eglGetDisplay() returned error ${eglGetError()}") return false } - if (eglInitialize(display, null, null) == 0) { + if (eglInitialize(display, null, null) == 0u) { logError("eglInitialize() returned error ${eglGetError()}") return false } @@ -100,11 +100,11 @@ class Renderer(val container: DisposableContainer, EGL_NONE ) val numConfigs = alloc() - if (eglChooseConfig(display, attribs, null, 0, numConfigs.ptr) == 0) { + if (eglChooseConfig(display, attribs, null, 0, numConfigs.ptr) == 0u) { throw Error("eglChooseConfig()#1 returned error ${eglGetError()}") } val supportedConfigs = allocArray(numConfigs.value) - if (eglChooseConfig(display, attribs, supportedConfigs, numConfigs.value, numConfigs.ptr) == 0) { + if (eglChooseConfig(display, attribs, supportedConfigs, numConfigs.value, numConfigs.ptr) == 0u) { throw Error("eglChooseConfig()#2 returned error ${eglGetError()}") } var configIndex = 0 @@ -113,11 +113,11 @@ class Renderer(val container: DisposableContainer, val g = alloc() val b = alloc() val d = alloc() - if (eglGetConfigAttrib(display, supportedConfigs[configIndex], EGL_RED_SIZE, r.ptr) != 0 && - eglGetConfigAttrib(display, supportedConfigs[configIndex], EGL_GREEN_SIZE, g.ptr) != 0 && - eglGetConfigAttrib(display, supportedConfigs[configIndex], EGL_BLUE_SIZE, b.ptr) != 0 && - eglGetConfigAttrib(display, supportedConfigs[configIndex], EGL_DEPTH_SIZE, d.ptr) != 0 && - r.value == 8 && g.value == 8 && b.value == 8 && d.value == 0) break + if (eglGetConfigAttrib(display, supportedConfigs[configIndex], EGL_RED_SIZE, r.ptr) != 0u && + eglGetConfigAttrib (display, supportedConfigs[configIndex], EGL_GREEN_SIZE, g.ptr) != 0u && + eglGetConfigAttrib(display, supportedConfigs[configIndex], EGL_BLUE_SIZE, b.ptr) != 0u && + eglGetConfigAttrib(display, supportedConfigs[configIndex], EGL_DEPTH_SIZE, d.ptr) != 0u && + r.value == 8 && g.value == 8 && b.value == 8 && d.value == 0) break ++configIndex } if (configIndex >= numConfigs.value) @@ -133,16 +133,16 @@ class Renderer(val container: DisposableContainer, throw Error("eglCreateContext() returned error ${eglGetError()}") } - if (eglMakeCurrent(display, surface, surface, context) == 0) { + if (eglMakeCurrent(display, surface, surface, context) == 0u) { throw Error("eglMakeCurrent() returned error ${eglGetError()}") } val width = alloc() val height = alloc() - if (eglQuerySurface(display, surface, EGL_WIDTH, width.ptr) == 0 - || eglQuerySurface(display, surface, EGL_HEIGHT, height.ptr) == 0) { - throw Error("eglQuerySurface() returned error ${eglGetError()}") - } + if (eglQuerySurface(display, surface, EGL_WIDTH, width.ptr) == 0u + || eglQuerySurface (display, surface, EGL_HEIGHT, height.ptr) == 0u) { + throw Error("eglQuerySurface() returned error ${eglGetError()}") + } this@Renderer.screen = Vector2(width.value.toFloat(), height.value.toFloat()) @@ -198,14 +198,13 @@ class Renderer(val container: DisposableContainer, } - private fun loadTexture(assetName: String): Unit = memScoped { - val asset = AAssetManager_open(nativeActivity.assetManager, assetName, AASSET_MODE_BUFFER) + val asset = AAssetManager_open(nativeActivity.assetManager, assetName, AASSET_MODE_BUFFER.convert()) ?: throw Error("Error opening asset $assetName") try { val length = AAsset_getLength(asset) val buffer = allocArray(length) - if (AAsset_read(asset, buffer, length) != length.toInt()) { + if (AAsset_read(asset, buffer, length.convert()) != length.toInt()) { throw Error("Error reading asset") } with(BMPHeader(buffer.rawValue)) { @@ -247,7 +246,7 @@ class Renderer(val container: DisposableContainer, glMultMatrixf(matrix) - glClear(GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT) + glClear((GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT).toUInt()) glEnableClientState(GL_VERTEX_ARRAY) glEnableClientState(GL_NORMAL_ARRAY) @@ -289,15 +288,15 @@ class Renderer(val container: DisposableContainer, glPopMatrix() - if (eglSwapBuffers(display, surface) == 0) { + if (eglSwapBuffers(display, surface) == 0u) { val error = eglGetError() if (error != EGL_BAD_SURFACE) throw Error("eglSwapBuffers() returned error $error") else { - if (eglMakeCurrent(display, surface, surface, context) == 0) { + if (eglMakeCurrent(display, surface, surface, context) == 0u) { throw Error("Reinit eglMakeCurrent() returned error ${eglGetError()}") } - if (eglSwapBuffers(display, surface) == 0) + if (eglSwapBuffers(display, surface) == 0u) throw Error("Bad eglSwapBuffers() after surface reinit: ${eglGetError()}") } } @@ -306,7 +305,7 @@ class Renderer(val container: DisposableContainer, fun start() { logInfo("Starting renderer..") if (initialized) { - if (eglMakeCurrent(display, surface, surface, context) == 0) { + if (eglMakeCurrent(display, surface, surface, context) == 0u) { throw Error("eglMakeCurrent() returned error ${eglGetError()}") } } diff --git a/samples/python_extension/build.sh b/samples/python_extension/build.sh index b45841ddebb..a52657159ad 100755 --- a/samples/python_extension/build.sh +++ b/samples/python_extension/build.sh @@ -6,5 +6,5 @@ source "$DIR/../konan.sh" PYTHON=python -konanc -p dynamic src/main/kotlin/Server.kt -o server -sudo $PYTHON src/main/python/setup.py install +konanc -p dynamic ${DIR}/src/main/kotlin/Server.kt -o server +sudo $PYTHON ${DIR}/src/main/python/setup.py install diff --git a/samples/torch/src/main/kotlin/Dataset.kt b/samples/torch/src/main/kotlin/Dataset.kt index 2f97b25d793..1ad8da8ac8d 100644 --- a/samples/torch/src/main/kotlin/Dataset.kt +++ b/samples/torch/src/main/kotlin/Dataset.kt @@ -28,7 +28,7 @@ object MNIST { val file = fopen(path, "rb") ?: fail() try { - ByteArray(size).also { fread(it.refTo(0), 1, size.signExtend(), file) } + ByteArray(size).also { fread(it.refTo(0), 1, size.convert(), file) } } finally { fclose(file) }