Skip to content

SDL3 OpenGL shared context with no stencil bits prevents stencil usage in window OpenGL context with stencil bits -- intended? #12787

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
vittorioromeo opened this issue Apr 9, 2025 · 0 comments
Assignees
Milestone

Comments

@vittorioromeo
Copy link
Contributor

Is it normal that if I have a hidden base shared SDL OpenGL context with SDL_GL_STENCIL_SIZE=0 and then I create a window with its own SDL OpenGL context (that shares the base one) with SDL_GL_STENCIL_SIZE=8, then stencil testing doesn't work at all?

I also need to set the stencil size of the shared context to 8, but that doesn't make much sense as I'm not creating/using any framebuffer on the shared context.

As an additional data point, when recreating the same situation under SFML 3.x, the behavior is as I expect -- the shared context doesn't need to set any stencil or depth bits, and as long as the window context sets the correct amount, it works properly. SFML's internals also pass 0 to the shared context settings, so this seems like a SDL quirk.

Is it intended or a bug?


This is how I create my hidden base shared context:

SDL_GL_SetAttribute(SDL_GL_STENCIL_SIZE, 0);
// ...other attributes...

// Create a hidden window for the context
m_window = SDL_CreateWindow("", 1, 1, SDL_WINDOW_OPENGL | SDL_WINDOW_HIDDEN);
if (m_window == nullptr) { /* ...error handling... */ }

// Create the OpenGL context
m_context = SDL_GL_CreateContext(m_window);
if (!m_context) { /* ...error handling... */ }

And this is how I create my window context:

SDL_GL_SetAttribute(SDL_GL_STENCIL_SIZE, 8);
// ...other attributes...

// Activate shared context
SDL_GL_MakeCurrent(sharedCtx->m_window, sharedCtx->m_context);
SDL_GL_SetAttribute(SDL_GL_SHARE_WITH_CURRENT_CONTEXT, 1);

// ...create window...

// Create the OpenGL context
m_context = SDL_GL_CreateContext(m_window);
if (!m_context) { /* ...error handling... */ }
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants