void SplatRenderer::init(QGLWidget *qglw) { mIsSupported = true; if(qglw) qglw->makeCurrent(); const char* rs = (const char*)glGetString(GL_RENDERER); QString rendererString(""); if(rs) rendererString = QString(rs); mWorkaroundATI = rendererString.startsWith("ATI") || rendererString.startsWith("AMD"); // FIXME: maybe some recent HW correctly supports floating point blending... mBuggedAtiBlending = rendererString.startsWith("ATI") || rendererString.startsWith("AMD"); if (mWorkaroundATI && mDummyTexId==0) { viewer->glActiveTexture(GL_TEXTURE0); viewer->glGenTextures(1,&mDummyTexId); viewer->glBindTexture(GL_TEXTURE_2D, mDummyTexId); viewer->glTexImage2D(GL_TEXTURE_2D, 0, GL_LUMINANCE, 4, 4, 0, GL_LUMINANCE, GL_UNSIGNED_BYTE, 0); } // let's check the GPU capabilities mSupportedMask = DEPTH_CORRECTION_BIT | BACKFACE_SHADING_BIT; if (!QGLFramebufferObject::hasOpenGLFramebufferObjects ()) { std::cout << "SplatRenderer: error OpenGL frame buffer objects are not supported. (please, try to update your drivers)\n"; mIsSupported = false; return; } mSupportedMask |= FLOAT_BUFFER_BIT; mSupportedMask |= DEFERRED_SHADING_BIT; mSupportedMask |= OUTPUT_DEPTH_BIT; mFlags = mFlags & mSupportedMask; // load shader source mShaderSrcs[0] = loadSource("VisibilityVP","Raycasting.glsl"); mShaderSrcs[1] = loadSource("VisibilityFP","Raycasting.glsl"); mShaderSrcs[2] = loadSource("AttributeVP","Raycasting.glsl"); mShaderSrcs[3] = loadSource("AttributeFP","Raycasting.glsl"); mShaderSrcs[4] = ""; mShaderSrcs[5] = loadSource("Finalization","Finalization.glsl"); mCurrentPass = 2; mBindedPass = -1; mIsInitialized = true; }
bool IsD3D9() { std::string rendererString(reinterpret_cast<const char *>(glGetString(GL_RENDERER))); return (rendererString.find("Direct3D9") != std::string::npos); }
bool IsNVIDIA() { std::string rendererString(reinterpret_cast<const char *>(glGetString(GL_RENDERER))); return (rendererString.find("NVIDIA") != std::string::npos); }
bool IsAMD() { std::string rendererString(reinterpret_cast<const char *>(glGetString(GL_RENDERER))); return (rendererString.find("AMD") != std::string::npos) || (rendererString.find("ATI") != std::string::npos); }
bool ANGLETest::isD3DSM3() const { std::string rendererString(reinterpret_cast<const char *>(glGetString(GL_RENDERER))); return isD3D9() || isD3D11_FL93(); }
bool ANGLETest::isD3D11_FL93() const { std::string rendererString(reinterpret_cast<const char *>(glGetString(GL_RENDERER))); return (rendererString.find("Direct3D11 vs_4_0_") != std::string::npos); }
bool ANGLETest::isNVidia() const { std::string rendererString(reinterpret_cast<const char *>(glGetString(GL_RENDERER))); return (rendererString.find("NVIDIA") != std::string::npos); }