Skip to content

Commit

Permalink
Fix: [OpenGL] Check maximum supported texture size against screen res…
Browse files Browse the repository at this point in the history
…olution.
  • Loading branch information
michicc committed Apr 21, 2021
1 parent 5ff1544 commit e533133
Show file tree
Hide file tree
Showing 5 changed files with 15 additions and 8 deletions.
2 changes: 1 addition & 1 deletion src/video/cocoa/cocoa_ogl.mm
Original file line number Diff line number Diff line change
Expand Up @@ -254,7 +254,7 @@ - (void)viewDidChangeBackingProperties

CGLSetCurrentContext(this->gl_context);

return OpenGLBackend::Create(&GetOGLProcAddressCallback);
return OpenGLBackend::Create(&GetOGLProcAddressCallback, this->GetScreenSize());
}

NSView *VideoDriver_CocoaOpenGL::AllocateDrawView()
Expand Down
13 changes: 10 additions & 3 deletions src/video/opengl.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -464,16 +464,17 @@ void SetupDebugOutput()
/**
* Create and initialize the singleton back-end class.
* @param get_proc Callback to get an OpenGL function from the OS driver.
* @param screen_res Current display resolution.
* @return nullptr on success, error message otherwise.
*/
/* static */ const char *OpenGLBackend::Create(GetOGLProcAddressProc get_proc)
/* static */ const char *OpenGLBackend::Create(GetOGLProcAddressProc get_proc, const Dimension &screen_res)
{
if (OpenGLBackend::instance != nullptr) OpenGLBackend::Destroy();

GetOGLProcAddress = get_proc;

OpenGLBackend::instance = new OpenGLBackend();
return OpenGLBackend::instance->Init();
return OpenGLBackend::instance->Init(screen_res);
}

/**
Expand Down Expand Up @@ -521,9 +522,10 @@ OpenGLBackend::~OpenGLBackend()

/**
* Check for the needed OpenGL functionality and allocate all resources.
* @param screen_res Current display resolution.
* @return Error string or nullptr if successful.
*/
const char *OpenGLBackend::Init()
const char *OpenGLBackend::Init(const Dimension &screen_res)
{
if (!BindBasicInfoProcs()) return "OpenGL not supported";

Expand Down Expand Up @@ -581,6 +583,11 @@ const char *OpenGLBackend::Init()
}
if (this->persistent_mapping_supported) DEBUG(driver, 3, "OpenGL: Using persistent buffer mapping");

/* Check maximum texture size against screen resolution. */
GLint max_tex_size = 0;
_glGetIntegerv(GL_MAX_TEXTURE_SIZE, &max_tex_size);
if (std::max(screen_res.width, screen_res.height) > (uint)max_tex_size) return "Max supported texture size is too small";

/* Check available texture units. */
GLint max_tex_units = 0;
_glGetIntegerv(GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS, &max_tex_units);
Expand Down
4 changes: 2 additions & 2 deletions src/video/opengl.h
Original file line number Diff line number Diff line change
Expand Up @@ -74,7 +74,7 @@ class OpenGLBackend : public ZeroedMemoryAllocator, SpriteEncoder {
OpenGLBackend();
~OpenGLBackend();

const char *Init();
const char *Init(const Dimension &screen_res);
bool InitShaders();

void InternalClearCursorCache();
Expand All @@ -87,7 +87,7 @@ class OpenGLBackend : public ZeroedMemoryAllocator, SpriteEncoder {
{
return OpenGLBackend::instance;
}
static const char *Create(GetOGLProcAddressProc get_proc);
static const char *Create(GetOGLProcAddressProc get_proc, const Dimension &screen_res);
static void Destroy();

void PrepareContext();
Expand Down
2 changes: 1 addition & 1 deletion src/video/sdl2_opengl_v.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -117,7 +117,7 @@ const char *VideoDriver_SDL_OpenGL::AllocateContext()

ToggleVsync(_video_vsync);

return OpenGLBackend::Create(&GetOGLProcAddressCallback);
return OpenGLBackend::Create(&GetOGLProcAddressCallback, this->GetScreenSize());
}

void VideoDriver_SDL_OpenGL::PopulateSystemSprites()
Expand Down
2 changes: 1 addition & 1 deletion src/video/win32_v.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1380,7 +1380,7 @@ const char *VideoDriver_Win32OpenGL::AllocateContext()
this->ToggleVsync(_video_vsync);

this->gl_rc = rc;
return OpenGLBackend::Create(&GetOGLProcAddressCallback);
return OpenGLBackend::Create(&GetOGLProcAddressCallback, this->GetScreenSize());
}

bool VideoDriver_Win32OpenGL::ToggleFullscreen(bool full_screen)
Expand Down

0 comments on commit e533133

Please sign in to comment.