mirror of
https://git.do.srb2.org/STJr/SRB2.git
synced 2024-11-22 04:21:23 +00:00
53 lines
1.4 KiB
C
53 lines
1.4 KiB
C
#define LOG_TAG "SRB2-main"
|
|
#include "utils/Log.h"
|
|
|
|
#include "../doomdef.h"
|
|
#include "../d_main.h"
|
|
#include "../m_argv.h"
|
|
|
|
#include "i_video.h"
|
|
|
|
#include "jni_main.h"
|
|
|
|
int srb2_main()
|
|
{
|
|
// startup SRB2
|
|
CONS_Printf ("Setting up SRB2 (fo' real)...");
|
|
D_SRB2Main();
|
|
CONS_Printf ("Entering main game loop...");
|
|
// never return
|
|
D_SRB2Loop();
|
|
LOGD("Control left SRB2. Good bye.");
|
|
|
|
// return to OS
|
|
return 0;
|
|
}
|
|
|
|
JNIEXPORT jint JNICALL Java_org_srb2_nativecode_Main_main
|
|
(JNIEnv * env, jobject self, jobject video) {
|
|
jobject fbBuf;
|
|
jfieldID fbBufField;
|
|
|
|
// a global reference to JNI Env, so my callbacks can use it:
|
|
jni_env = env;
|
|
androidVideo = video;
|
|
|
|
jclass videoClass = (*env)->FindClass(env, "org/srb2/nativecode/Video");
|
|
if(videoClass == NULL) {
|
|
LOGE("Could not find Video class from JNI!");
|
|
return -1;
|
|
}
|
|
fbBufField = (*env)->GetFieldID(env, videoClass, "fb", "Ljava/nio/ByteBuffer;");
|
|
fbBuf = (*env)->GetObjectField(env, video, fbBufField);
|
|
if(fbBuf == NULL) {
|
|
LOGE("Couldn't get Video object from JNI!");
|
|
return -1;
|
|
}
|
|
videoFrameCB = (*env)->GetMethodID(env, videoClass, "gotFrame", "()V");
|
|
if(videoFrameCB == NULL) {
|
|
LOGE("Couldn't get method ID of Video#gotFrame() callback!");
|
|
return -1;
|
|
}
|
|
android_surface = (UINT8*) (*env)->GetDirectBufferAddress(env, fbBuf);
|
|
return srb2_main();
|
|
}
|