Sample: textured dodecahedron rotated by fingers

This commit is contained in:
Igor Chevdar
2017-06-14 15:00:27 +03:00
parent 2151e55576
commit 3a55c123d7
20 changed files with 819 additions and 30 deletions
+26 -23
View File
@@ -20,7 +20,8 @@
#include "KString.h"
#include "Types.h"
#ifdef ANDROID
#ifdef KONAN_ANDROID
#include <unistd.h>
#include <pthread.h>
#include <sys/types.h>
@@ -43,9 +44,11 @@
//--- main --------------------------------------------------------------------//
extern "C" KInt Konan_start(const ObjHeader*);
static int pipeC, pipeKonan;
namespace {
int pipeC, pipeKonan;
static NativeActivityState nativeActivityState;
NativeActivityState nativeActivityState;
}
extern "C" void getNativeActivityState(NativeActivityState* state) {
state->activity = nativeActivityState.activity;
@@ -54,13 +57,13 @@ extern "C" void getNativeActivityState(NativeActivityState* state) {
state->looper = nativeActivityState.looper;
}
extern "C" void notifySysEventProcessed(int fd) {
if (fd != pipeKonan) return;
extern "C" void notifySysEventProcessed() {
int8_t message;
write(pipeKonan, &message, sizeof(message));
}
static void* entry(void* param) {
namespace {
void* entry(void* param) {
ALooper* looper = ALooper_prepare(ALOOPER_PREPARE_ALLOW_NON_CALLBACKS);
ALooper_addFd(looper, pipeKonan, LOOPER_ID_SYS, ALOOPER_EVENT_INPUT, NULL, NULL);
nativeActivityState.looper = looper;
@@ -83,7 +86,7 @@ static void* entry(void* param) {
return nullptr;
}
static void runKonan_start() {
void runKonan_start() {
int pipes[2];
if (socketpair(AF_UNIX, SOCK_STREAM, 0, pipes)) {
LOGE("Could not create pipe: %s", strerror(errno));
@@ -99,7 +102,7 @@ static void runKonan_start() {
pthread_create(&thread, &attr, entry, nullptr);
}
static void putEventSynchronously(void* event) {
void putEventSynchronously(void* event) {
uint64_t value = static_cast<uint64_t>(reinterpret_cast<uintptr_t>(event));
if (write(pipeC, &value, sizeof(value)) != sizeof(value)) {
LOGE("Failure writing event: %s\n", strerror(errno));
@@ -110,25 +113,25 @@ static void putEventSynchronously(void* event) {
}
}
static void onDestroy(ANativeActivity* activity) {
void onDestroy(ANativeActivity* activity) {
LOGV("onDestroy called");
NativeActivityEvent event = { DESTROY };
putEventSynchronously(&event);
}
static void onStart(ANativeActivity* activity) {
void onStart(ANativeActivity* activity) {
LOGV("onStart called");
NativeActivityEvent event = { START };
putEventSynchronously(&event);
}
static void onResume(ANativeActivity* activity) {
void onResume(ANativeActivity* activity) {
LOGV("onResume called");
NativeActivitySaveStateEvent event = { RESUME };
putEventSynchronously(&event);
}
static void* onSaveInstanceState(ANativeActivity* activity, size_t* outLen) {
void* onSaveInstanceState(ANativeActivity* activity, size_t* outLen) {
LOGV("onSaveInstanceState called");
NativeActivitySaveStateEvent event = { SAVE_INSTANCE_STATE };
putEventSynchronously(&event);
@@ -136,61 +139,61 @@ static void* onSaveInstanceState(ANativeActivity* activity, size_t* outLen) {
return event.savedState;
}
static void onPause(ANativeActivity* activity) {
void onPause(ANativeActivity* activity) {
LOGV("onPause called");
NativeActivityEvent event = { PAUSE };
putEventSynchronously(&event);
}
static void onStop(ANativeActivity* activity) {
void onStop(ANativeActivity* activity) {
LOGV("onStop called");
NativeActivityEvent event = { STOP };
putEventSynchronously(&event);
}
static void onConfigurationChanged(ANativeActivity* activity) {
void onConfigurationChanged(ANativeActivity* activity) {
LOGV("onConfigurationChanged called");
NativeActivityEvent event = { CONFIGURATION_CHANGED };
putEventSynchronously(&event);
}
static void onLowMemory(ANativeActivity* activity) {
void onLowMemory(ANativeActivity* activity) {
LOGV("onLowMemory called");
NativeActivityEvent event = { LOW_MEMORY };
putEventSynchronously(&event);
}
static void onWindowFocusChanged(ANativeActivity* activity, int focused) {
void onWindowFocusChanged(ANativeActivity* activity, int focused) {
LOGV("onWindowFocusChanged called");
NativeActivityEvent event = { focused ? WINDOW_GAINED_FOCUS : WINDOW_LOST_FOCUS };
putEventSynchronously(&event);
}
static void onNativeWindowCreated(ANativeActivity* activity, ANativeWindow* window) {
void onNativeWindowCreated(ANativeActivity* activity, ANativeWindow* window) {
LOGV("onNativeWindowCreated called");
NativeActivityWindowEvent event = { NATIVE_WINDOW_CREATED, window };
putEventSynchronously(&event);
}
static void onNativeWindowDestroyed(ANativeActivity* activity, ANativeWindow* window) {
void onNativeWindowDestroyed(ANativeActivity* activity, ANativeWindow* window) {
LOGV("onNativeWindowDestroyed called");
NativeActivityWindowEvent event = { NATIVE_WINDOW_DESTROYED, window };
putEventSynchronously(&event);
}
static void onInputQueueCreated(ANativeActivity* activity, AInputQueue* queue) {
void onInputQueueCreated(ANativeActivity* activity, AInputQueue* queue) {
LOGV("onInputQueueCreated called");
NativeActivityQueueEvent event = { INPUT_QUEUE_CREATED, queue };
putEventSynchronously(&event);
}
static void onInputQueueDestroyed(ANativeActivity* activity, AInputQueue* queue) {
void onInputQueueDestroyed(ANativeActivity* activity, AInputQueue* queue) {
LOGV("onInputQueueDestroyed called");
NativeActivityQueueEvent event = { INPUT_QUEUE_DESTROYED, queue };
putEventSynchronously(&event);
}
}
// ANativeActivity_onCreate.
extern "C" void Konan_main(ANativeActivity* activity, void* savedState, size_t savedStateSize) {
nativeActivityState = {activity, savedState, savedStateSize};
@@ -211,4 +214,4 @@ extern "C" void Konan_main(ANativeActivity* activity, void* savedState, size_t s
runKonan_start();
}
#endif
#endif // KONAN_ANDROID
+1 -1
View File
@@ -36,7 +36,7 @@ struct NativeActivityState {
void getNativeActivityState(struct NativeActivityState* state);
void notifySysEventProcessed(int fd);
void notifySysEventProcessed();
#define LOOPER_ID_SYS 1
+1 -1
View File
@@ -20,7 +20,7 @@
#include "KString.h"
#include "Types.h"
#ifndef ANDROID
#ifndef KONAN_ANDROID
//--- Setup args --------------------------------------------------------------//
+3 -3
View File
@@ -34,7 +34,7 @@
#include "utf8.h"
#ifdef ANDROID
#ifdef KONAN_ANDROID
#include <android/log.h>
#endif
@@ -1133,7 +1133,7 @@ void Kotlin_io_Console_print(KString message) {
const KChar* utf16 = CharArrayAddressOfElementAt(message, 0);
std::string utf8;
utf8::utf16to8(utf16, utf16 + message->count_, back_inserter(utf8));
#ifdef ANDROID
#ifdef KONAN_ANDROID
__android_log_print(ANDROID_LOG_INFO, "Konan_main", "%s", utf8.c_str());
#else
write(STDOUT_FILENO, utf8.c_str(), utf8.size());
@@ -1146,7 +1146,7 @@ void Kotlin_io_Console_println(KString message) {
}
void Kotlin_io_Console_println0() {
#ifdef ANDROID
#ifdef KONAN_ANDROID
__android_log_print(ANDROID_LOG_INFO, "Konan_main", "\n");
#else
write(STDOUT_FILENO, "\n", 1);