*/}}
瀏覽代碼

GLES/Android adaptations

YimingWu 5 天之前
父節點
當前提交
9c8a406cbc
共有 4 個文件被更改,包括 28 次插入11 次删除
  1. 20 5
      la_kernel.c
  2. 1 1
      la_tns_kernel.c
  3. 4 4
      resources/la_tns_shader_infrastructure.cpp
  4. 3 1
      resources/la_tns_shaders.cpp

+ 20 - 5
la_kernel.c

@@ -8886,7 +8886,6 @@ static const int KeycodeMap[KEYCODE_MAP_SIZE] = {
 
 static int32_t la_AndroidInputCallback(struct android_app *app, AInputEvent *event)
 {
-    __android_log_print(ANDROID_LOG_DEBUG, "huh 5678", "123 input");
     if(!MAIN.AppEnabled){return 0;}
     //laRedrawAllWindows();
     static int prev_button_state=0;
@@ -9170,7 +9169,7 @@ void la_DisplayKeyboard(bool pShow) {
     jint lFlags = 0;
 
     JavaVM* lJavaVM = MAIN.app->activity->vm;
-    JNIEnv* lJNIEnv = MAIN.app->activity->env;
+    JNIEnv* lJNIEnv;// = MAIN.app->activity->env;
 
     JavaVMAttachArgs lJavaVMAttachArgs;
     lJavaVMAttachArgs.version = JNI_VERSION_1_6;
@@ -9244,13 +9243,19 @@ void la_DisplayKeyboard(bool pShow) {
             lBinder, lFlags);
     }
 
+    if((*lJNIEnv)->ExceptionOccurred(lJNIEnv)){
+        logPrintNew("Java exception occured in la_DisplayKeyboard().\n");
+        (*lJNIEnv)->ExceptionClear(lJNIEnv);
+    }
     // Finished with the JVM.
     (*lJavaVM)->DetachCurrentThread(lJavaVM);
 }
 
 bool la_check_permission(const char* permission) {
+    int granted=0;
     JavaVM* lJavaVM = MAIN.app->activity->vm;
-    JNIEnv* lJNIEnv = MAIN.app->activity->env;
+    JNIEnv* lJNIEnv=0;// = MAIN.app->activity->env;
+    (*lJavaVM)->AttachCurrentThread(lJavaVM, &lJNIEnv,0);logPrintNew("Attach\n"); 
     (*lJavaVM)->AttachCurrentThread(lJavaVM, &lJNIEnv,0);
     jobject lNativeActivity = MAIN.app->activity->clazz;
     jclass ClassNativeActivity = (*lJNIEnv)->GetObjectClass(lJNIEnv,lNativeActivity);
@@ -9258,12 +9263,18 @@ bool la_check_permission(const char* permission) {
     jstring jobj_permission = (*lJNIEnv)->NewStringUTF(lJNIEnv,permission);
 	jint    result          = (*lJNIEnv)->CallIntMethod(lJNIEnv,ClassNativeActivity, activity_checkSelfPermission, jobj_permission);
 	(*lJNIEnv)->DeleteLocalRef(lJNIEnv,jobj_permission);
+    granted = (result == 0);
+    if((*lJNIEnv)->ExceptionOccurred(lJNIEnv)){
+        logPrintNew("Java exception occured in la_check_permission().\n");
+        (*lJNIEnv)->ExceptionClear(lJNIEnv);
+        granted=0;
+    }
     (*lJavaVM)->DetachCurrentThread(lJavaVM);
-	return result == 0;
+	return granted;
 }
 void la_request_permission(const char* permission) {
     JavaVM* lJavaVM = MAIN.app->activity->vm;
-    JNIEnv* lJNIEnv = MAIN.app->activity->env;
+    JNIEnv* lJNIEnv=0;// = MAIN.app->activity->env;
     (*lJavaVM)->AttachCurrentThread(lJavaVM, &lJNIEnv,0);
     jobject lNativeActivity = MAIN.app->activity->clazz;
     jclass ClassNativeActivity = (*lJNIEnv)->GetObjectClass(lJNIEnv,lNativeActivity);
@@ -9275,6 +9286,10 @@ void la_request_permission(const char* permission) {
 	(*lJNIEnv)->CallVoidMethod       (lJNIEnv,lNativeActivity, activity_requestPermissions, jobj_permission_list, 0);
 	(*lJNIEnv)->DeleteLocalRef(lJNIEnv,jobj_permission);
 	(*lJNIEnv)->DeleteLocalRef(lJNIEnv,jobj_permission_list);
+    if((*lJNIEnv)->ExceptionOccurred(lJNIEnv)){
+        logPrintNew("Java exception occured in la_request_permission().\n");
+        (*lJNIEnv)->ExceptionClear(lJNIEnv);
+    }
     (*lJavaVM)->DetachCurrentThread(lJavaVM);
 }
 

+ 1 - 1
la_tns_kernel.c

@@ -440,7 +440,7 @@ tnsShader *tnsNewShaderProgram(int VertexShaderID, int FragmentShaderID, int Geo
     glGetProgramiv(tns->glProgramID, GL_LINK_STATUS, &status);
     if (status == GL_FALSE){
         glGetProgramInfoLog(tns->glProgramID, sizeof(error), 0, error);
-        printf("Shader Linking error:\n%s", error);
+        logPrintNew("Shader Linking error:\n%s\n", error);
         glDetachShader(tns->glProgramID, vso);
         glDetachShader(tns->glProgramID, fso);
         glDeleteShader(vso);

+ 4 - 4
resources/la_tns_shader_infrastructure.cpp

@@ -50,10 +50,10 @@ int tnsCheckShaderCompileStatus(GLuint shader_object, char* name){
     int status=0; char error[65536]={0};
     glGetShaderiv(shader_object, GL_COMPILE_STATUS, &status);
     if (status == GL_FALSE){
-        glGetShaderInfoLog(shader_object, sizeof(error), 0, error); logPrint("%s shader error:\n%s",name?name:"(unnamed)",error);
+        glGetShaderInfoLog(shader_object, sizeof(error), 0, error); logPrintNew("%s shader error:\n%s\n",name?name:"(unnamed)",error);
         glDeleteShader(shader_object); return 0;
     } else {
-        glGetShaderInfoLog(shader_object, sizeof(error), 0, error); if(error[0]) logPrint("%s shader info:\n%s",name?name:"(unnamed)",error);
+        glGetShaderInfoLog(shader_object, sizeof(error), 0, error); if(error[0]) logPrintNew("%s shader info:\n%s\n",name?name:"(unnamed)",error);
     }
     return 1;
 }
@@ -61,10 +61,10 @@ int tnsCheckProgramLinkStatus(GLuint program_object, char* name){
     int status=0; char error[65536]={0};
     glGetProgramiv(program_object, GL_LINK_STATUS, &status);
     if (status == GL_FALSE){
-        glGetProgramInfoLog(program_object, sizeof(error), 0, error); logPrintNew("%s program Linking error:\n%s",name?name:"(unnamed)",error); return 0;
+        glGetProgramInfoLog(program_object, sizeof(error), 0, error); logPrintNew("%s program Linking error:\n%s\n",name?name:"(unnamed)",error);
         glDeleteProgram(program_object); return 0;
     } else {
-        glGetProgramInfoLog(program_object, sizeof(error), 0, error); if (error[0]) logPrintNew("%s program Linking info:\n%s",name?name:"(unnamed)",error);
+        glGetProgramInfoLog(program_object, sizeof(error), 0, error); if (error[0]) logPrintNew("%s program Linking info:\n%s\n",name?name:"(unnamed)",error);
     }
     return 1;
 }

+ 3 - 1
resources/la_tns_shaders.cpp

@@ -19,7 +19,7 @@
 #include "la_5.h"
 
 #ifdef LA_USE_GLES
-#define TNS_SHADER_VERSION "#version 320 es"
+#define TNS_SHADER_VERSION "#version 320 es\n#define LA_USE_GLES"
 #else
 #define TNS_SHADER_VERSION "#version 430"
 #endif
@@ -684,7 +684,9 @@ void main(){
 })";
 
 extern "C" const char* LA_IMM_FRAGMENT_SHADER = TNS_SHADER_VERSION R"(
+#ifndef LA_USE_GLES
 #extension GL_ARB_shading_language_420pack : enable // uniform sampler binding
+#endif
 precision highp float;
 precision highp int;
 layout (binding=0) uniform highp sampler2D TexColor;