Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/369.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Android原生SDL glContext搞乱了图片_Java_Android_C++_Opengl Es 2.0_Sdl 2 - Fatal编程技术网

Java Android原生SDL glContext搞乱了图片

Java Android原生SDL glContext搞乱了图片,java,android,c++,opengl-es-2.0,sdl-2,Java,Android,C++,Opengl Es 2.0,Sdl 2,我正在尝试使用自定义glContext设置SDL2本机应用程序。 Java部分:默认情况下,它具有绝对布局,这是不推荐的。我想知道我是否需要使用某种SurfaceView: mSurface = new SDLSurface(getApplication()); mLayout = new RelativeLayout(this); mLayout.setLeft(0); mLayout.setTop(0); mLayout.addView(mSurface); setContent

我正在尝试使用自定义glContext设置SDL2本机应用程序。 Java部分:默认情况下,它具有绝对布局,这是不推荐的。我想知道我是否需要使用某种SurfaceView:

mSurface = new SDLSurface(getApplication());    

mLayout = new RelativeLayout(this);
mLayout.setLeft(0);
mLayout.setTop(0);
mLayout.addView(mSurface);

setContentView(mLayout);
接下来,我将在本机代码中创建opengl上下文:

    SDL_SetHint(SDL_HINT_RENDER_DRIVER, "opengles2");
    SDL_SetHint(SDL_HINT_RENDER_OPENGL_SHADERS, "1");
    SDL_GL_SetAttribute(SDL_GL_CONTEXT_PROFILE_MASK, SDL_GL_CONTEXT_PROFILE_ES);
    SDL_GL_SetAttribute(SDL_GL_CONTEXT_MINOR_VERSION, 2);
    SDL_GL_SetAttribute(SDL_GL_CONTEXT_MAJOR_VERSION, 2);
    SDL_GL_SetAttribute( SDL_GL_DOUBLEBUFFER, 1 );
    SDL_GL_SetAttribute( SDL_GL_DEPTH_SIZE, 0 );
    SDL_GL_SetAttribute( SDL_GL_RED_SIZE, 8 );
    SDL_GL_SetAttribute( SDL_GL_GREEN_SIZE, 8 );
    SDL_GL_SetAttribute( SDL_GL_BLUE_SIZE, 8 );
    SDL_GL_SetAttribute( SDL_GL_ALPHA_SIZE, 8 );

    m_glContext = SDL_GL_CreateContext(_window);
    SDL_GL_MakeCurrent(_window, m_glContext);
窗口的创建方式如下:

m_mainWindow = SDL_CreateWindow("clovo", SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, 2048, 1536,
            SDL_WINDOW_SHOWN | SDL_WINDOW_OPENGL | SDL_WINDOW_RESIZABLE | SDL_WINDOW_ALLOW_HIGHDPI | SDL_WINDOW_FULLSCREEN);
我认为这个案例可能是窗口大小,但创建后的大小是适合屏幕的。此外,这段代码在iOS中运行良好。 我找不到解决问题的办法。甚至找不到问题。我是Android新手,所以也许我应该知道一些关于glContext的事情

找到了问题。 当我使用自己的帧缓冲区,然后将其设置回默认值时,就会发生这种情况。 为了在渲染器初始化时不设置错误的缓冲区,我将存储默认帧缓冲区

GLint default_buffer;
glGetIntegerv(GL_FRAMEBUFFER_BINDING, &default_buffer);
然后我可以恢复默认的缓冲区来绘制屏幕