尝试在Android上使用OpenGL上下文设置SDL。获取错误消息";加载eglChooseConfig失败“;
我正在尝试在android上运行我的第一个SDL hello world项目。我使用SDL源代码包中提供的android项目模板,它使用一个名为SDL的类与android和本机c/c++代码通信。我将它们导入EclipseAndroid项目,然后稍微修改jni文件夹中的AndroidManifest.xml、Application.mk和jni/src文件夹中的android.mk 项目编译成功。但当它在模拟器上运行时(我使用GenyMotion),我在logcat中得到了错误消息尝试在Android上使用OpenGL上下文设置SDL。获取错误消息";加载eglChooseConfig失败“;,android,sdl,native-code,egl,android.mk,Android,Sdl,Native Code,Egl,Android.mk,我正在尝试在android上运行我的第一个SDL hello world项目。我使用SDL源代码包中提供的android项目模板,它使用一个名为SDL的类与android和本机c/c++代码通信。我将它们导入EclipseAndroid项目,然后稍微修改jni文件夹中的AndroidManifest.xml、Application.mk和jni/src文件夹中的android.mk 项目编译成功。但当它在模拟器上运行时(我使用GenyMotion),我在logcat中得到了错误消息 E/SDLA
E/SDLActivity(1472): Failed loading eglChooseConfig: Invalid library handle
我还尝试在真实设备上调试。我得到了这个信息:
E/SDLActivity(28020): Failed loading eglChooseConfig: dlsym library handle is null
我试图在SDLActivity.java中添加“System.loadLibrary(“EGL”);”。不工作
这是我在jni/src中的Android.mk
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := main
SDL_PATH := ../SDL
LOCAL_C_INCLUDES := $(LOCAL_PATH)/$(SDL_PATH)/include
# Add your application source files here...
LOCAL_SRC_FILES := $(SDL_PATH)/src/main/android/SDL_android_main.c \
main.cpp
LOCAL_SHARED_LIBRARIES :=SDL2
LOCAL_LDLIBS := -lGLESv1_CM -lGLESv2 -llog -lEGL
include $(BUILD_SHARED_LIBRARY)
我最终在youtube上找到了一个不错的网站。我看了这个视频,我的应用程序运行得很好。我已经在虚拟和真实设备上测试了我的应用程序
下面是youtube录像机使用的示例代码。我不是下面代码的作者。在这里放一份
#include <stdlib.h>
#include <stdio.h>
#include <time.h>
#include "SDL.h"
int main(int argc, char *argv[])
{
SDL_Window* window = 0;
SDL_GLContext gl = 0;
if(0 != SDL_Init(SDL_INIT_VIDEO))
{
fprintf(stderr,"Unable to initialize SDL: %s\n",SDL_GetError());
return 1;
}
SDL_LogSetAllPriority(SDL_LOG_PRIORITY_VERBOSE);
SDL_GL_SetAttribute(SDL_GL_CONTEXT_PROFILE_MASK, SDL_GL_CONTEXT_PROFILE_ES);
SDL_GL_SetAttribute(SDL_GL_CONTEXT_MAJOR_VERSION,2);
SDL_GL_SetAttribute(SDL_GL_DOUBLEBUFFER,1);
SDL_DisplayMode mode;
SDL_GetDisplayMode(0,0,&mode);
int width = mode.w;
int height = mode.h;
SDL_Log("Width = %d, Heigh = %d. \n",width,height);
SDL_GL_SetAttribute(SDL_GL_ACCELERATED_VISUAL,1);
SDL_GL_SetAttribute(SDL_GL_DOUBLEBUFFER,1);
SDL_GL_SetAttribute(SDL_GL_DEPTH_SIZE,24);
window = SDL_CreateWindow(NULL,0,0,width,height,SDL_WINDOW_OPENGL | SDL_WINDOW_FULLSCREEN | SDL_WINDOW_RESIZABLE);
if(window == 0)
{
SDL_Log("Failed to create window.");
SDL_Quit();
return 1;
}
//Create an opengl context
gl = SDL_GL_CreateContext(window);
/*Main Render Loop*/
Uint8 done = 0;
SDL_Event event;
int count = 0;
while(!done)
{
/*Check for events*/
while(SDL_PollEvent(&event))
{
if(event.type == SDL_QUIT || event.type == SDL_KEYDOWN || event.type == SDL_FINGERDOWN)
{
done = 1;
}
}
SDL_Log("%d\n",count++);
SDL_GL_SwapWindow(window);
SDL_Delay(10);
}
exit(0);
}
到
我有完全相同的问题,我使用Note4作为设备。
SDL_GL_SetAttribute(SDL_GL_CONTEXT_MAJOR_VERSION,2);
SDL_GL_SetAttribute(SDL_GL_CONTEXT_MAJOR_VERSION,1);
SDL_GL_SetAttribute(SDL_GL_CONTEXT_MINOR_VERSION,1);