Android 原生SDL glContext乱码图片
Android native SDL glContext messed up picture
我正在尝试使用自定义 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);
Window 是这样创建的:
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);
我以为外壳的尺寸可能是 window,但创建后尺寸适合屏幕。此外,此代码在 iOS 中运行良好。
我找不到问题的解决方案。连问题都找不出来。我是 Android 的新手,所以也许我应该了解有关 glContext 的一些信息?
找到问题了。
当我使用自己的帧缓冲区然后将其设置回默认值时会发生这种情况。
为了不在我的渲染器初始化时设置错误的缓冲区,我存储了默认的帧缓冲区
GLint default_buffer;
glGetIntegerv(GL_FRAMEBUFFER_BINDING, &default_buffer);
然后我可以恢复默认缓冲区以绘制到屏幕。
我正在尝试使用自定义 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);
Window 是这样创建的:
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);
我以为外壳的尺寸可能是 window,但创建后尺寸适合屏幕。此外,此代码在 iOS 中运行良好。 我找不到问题的解决方案。连问题都找不出来。我是 Android 的新手,所以也许我应该了解有关 glContext 的一些信息?
找到问题了。 当我使用自己的帧缓冲区然后将其设置回默认值时会发生这种情况。 为了不在我的渲染器初始化时设置错误的缓冲区,我存储了默认的帧缓冲区
GLint default_buffer;
glGetIntegerv(GL_FRAMEBUFFER_BINDING, &default_buffer);
然后我可以恢复默认缓冲区以绘制到屏幕。