diff --git a/Engine/source/gfx/gl/gfxGLDevice.cpp b/Engine/source/gfx/gl/gfxGLDevice.cpp index 1c82b4e74..40884bb05 100644 --- a/Engine/source/gfx/gl/gfxGLDevice.cpp +++ b/Engine/source/gfx/gl/gfxGLDevice.cpp @@ -51,6 +51,10 @@ #include "shaderGen/shaderGen.h" #include "gfxGLUtils.h" +#if defined(TORQUE_OS_WIN) +#include "gfx/gl/tGL/tWGL.h" +#endif + GFXAdapter::CreateDeviceInstanceDelegate GFXGLDevice::mCreateDeviceInstance(GFXGLDevice::createInstance); GFXDevice *GFXGLDevice::createInstance( U32 adapterIndex ) @@ -1073,8 +1077,36 @@ U32 GFXGLDevice::getTotalVideoMemory_GL_EXT() return mem / 1024; } - // TODO OPENGL, add supprt for INTEL cards. - + +#if defined(TORQUE_OS_WIN) + else if( (gglHasWExtension(AMD_gpu_association)) ) + { + // Just assume 1 AMD gpu. Who uses crossfire anyways now? And, crossfire doesn't double + // vram anyways, so does it really matter? + UINT id; + if (wglGetGPUIDsAMD(1, &id) != 0) + { + S32 memorySize; + if (wglGetGPUInfoAMD(id, WGL_GPU_RAM_AMD, GL_INT, 1, &memorySize) != -1) + { + // memory size is returned in MB + return memorySize; + } + } + } +#endif + +#if defined(TORQUE_OS_LINUX) + else if ( (gglHasXExtension(MESA_query_renderer)) ) + { + // memory size is in mb + S32 memorySize; + glXQueryCurrentRendererIntegerMESA(GLX_RENDERER_VIDEO_MEMORY_MESA, &memorySize); + return memorySize; + } +#endif + + // No other way, sad. Probably windows Intel. return 0; } diff --git a/Engine/source/gfx/gl/tGL/tGL.cpp b/Engine/source/gfx/gl/tGL/tGL.cpp index b13fec60a..93e1e5a51 100644 --- a/Engine/source/gfx/gl/tGL/tGL.cpp +++ b/Engine/source/gfx/gl/tGL/tGL.cpp @@ -25,8 +25,10 @@ #include "core/strings/stringFunctions.h" #include "console/console.h" -#ifdef TORQUE_OS_WIN - #include "tWGL.h" +#if defined(TORQUE_OS_WIN) +#include "tWGL.h" +#elif defined(TORQUE_OS_LINUX) +#include "tXGL.h" #endif namespace GL @@ -41,7 +43,17 @@ namespace GL void gglPerformExtensionBinds(void *context) { - +#if defined(TORQUE_OS_WIN) + if (!gladLoadWGL((HDC)context)) + { + AssertFatal(false, "Unable to load WGL in GLAD. Make sure your OpenGL drivers are up to date!"); + } +#elif defined(TORQUE_OS_LINUX) + if (!gladLoadGLX()) + { + AssertFatal(false, "Unable to load GLX in GLAD. Make sure your OpenGL drivers are up to date!"); + } +#endif } }