Android原生SDL glContext搞砸了图片

时间:2016-03-10 10:29:44

标签: 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);

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?

Samsung galaxy tab 7 glXontext

1 个答案:

答案 0 :(得分:0)

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

GLint default_buffer;
glGetIntegerv(GL_FRAMEBUFFER_BINDING, &default_buffer);

然后我可以恢复默认缓冲区以绘制到屏幕。