Coder Social home page Coder Social logo

Comments (4)

DanOlivier avatar DanOlivier commented on July 28, 2024

I had the very same thing happen to me, under (probably) different circumstances.
Switching to the capture tab initializes OpenGL for the 1st time.

I'm running Orbit on a Windows Laptop (Dell XPS 13, with an Intel HD 520 graphics card) over a kind of "docking station" (Displaylink D3100), which allows me to extend the desktop, or clones the display, over to a larger screen. If I launch Orbit when using this device, I would get a failure, where a call to glGetString(GL_VERSION) was returning "1.1" (I think), an ancient version with no capabilities.

The failure occurs here:

>	glew32d.dll!glewContextInit(...) Line 16177	C	Symbols loaded.
 	glew32d.dll!glewInit() Line 20866	C	Symbols loaded.
 	OrbitQt.exe!GlCanvas::Initialize() Line 109	C++	Symbols loaded.
 	OrbitQt.exe!OrbitGLWidget::initializeGL() Line 81	C++	Symbols loaded.
 	Qt5Widgetsd.dll!QOpenGLWidgetPrivate::initialize() Line 804	C++	Symbols loaded.
 	Qt5Widgetsd.dll!QOpenGLWidget::resizeEvent(QResizeEvent * e) Line 1178	C++	Symbols loaded.
 	Qt5Widgetsd.dll!QWidget::event(QEvent * event) Line 8942	C++	Symbols loaded.
 	Qt5Widgetsd.dll!QOpenGLWidget::event(QEvent * e) Line 1351	C++	Symbols loaded.
 	Qt5Widgetsd.dll!QApplicationPrivate::notify_helper(QObject * receiver, QEvent * e) Line 3745	C++	Symbols loaded.
 	Qt5Widgetsd.dll!QApplication::notify(QObject * receiver, QEvent * e) Line 3708	C++	Symbols loaded.
 	Qt5Cored.dll!QCoreApplication::notifyInternal2(QObject * receiver, QEvent * event) Line 988	C++	Symbols loaded.
 	Qt5Cored.dll!QCoreApplication::sendEvent(QObject * receiver, QEvent * event) Line 231	C++	Symbols loaded.
 	Qt5Widgetsd.dll!QWidgetPrivate::sendPendingMoveAndResizeEvents(bool recursive, bool disableUpdates) Line 7809	C++	Symbols loaded.
 	Qt5Widgetsd.dll!QWidgetPrivate::show_helper() Line 7862	C++	Symbols loaded.
 	Qt5Widgetsd.dll!QWidget::setVisible(bool visible) Line 8216	C++	Symbols loaded.
 	Qt5Widgetsd.dll!QWidget::show() Line 7767	C++	Symbols loaded.
 	Qt5Widgetsd.dll!QWidgetPrivate::showChildren(bool spontaneous) Line 8299	C++	Symbols loaded.
 	Qt5Widgetsd.dll!QWidgetPrivate::show_helper() Line 7869	C++	Symbols loaded.
 	Qt5Widgetsd.dll!QWidget::setVisible(bool visible) Line 8216	C++	Symbols loaded.
 	Qt5Widgetsd.dll!QWidget::show() Line 7767	C++	Symbols loaded.
 	Qt5Widgetsd.dll!QStackedLayout::setCurrentIndex(int index) Line 326	C++	Symbols loaded.
 	Qt5Widgetsd.dll!QStackedWidget::setCurrentIndex(int index) Line 217	C++	Symbols loaded.
 	Qt5Widgetsd.dll!QTabWidgetPrivate::_q_showTab(int index) Line 745	C++	Symbols loaded.
 	Qt5Widgetsd.dll!QTabWidget::qt_static_metacall(QObject * _o, QMetaObject::Call _c, int _id, void * * _a) Line 176	C++	Symbols loaded.
 	Qt5Cored.dll!QMetaObject::activate(QObject * sender, int signalOffset, int local_signal_index, void * * argv) Line 3742	C++	Symbols loaded.
 	Qt5Cored.dll!QMetaObject::activate(QObject * sender, const QMetaObject * m, int local_signal_index, void * * argv) Line 3603	C++	Symbols loaded.
 	Qt5Widgetsd.dll!QTabBar::currentChanged(int _t1) Line 335	C++	Symbols loaded.
 	Qt5Widgetsd.dll!QTabBar::setCurrentIndex(int index) Line 1348	C++	Symbols loaded.
 	Qt5Widgetsd.dll!QTabBar::mousePressEvent(QMouseEvent * event) Line 1939	C++	Symbols loaded.
 	Qt5Widgetsd.dll!QWidget::event(QEvent * event) Line 8777	C++	Symbols loaded.
 	Qt5Widgetsd.dll!QTabBar::event(QEvent * event) Line 1664	C++	Symbols loaded.
 	Qt5Widgetsd.dll!QApplicationPrivate::notify_helper(QObject * receiver, QEvent * e) Line 3745	C++	Symbols loaded.
 	Qt5Widgetsd.dll!QApplication::notify(QObject * receiver, QEvent * e) Line 3219	C++	Symbols loaded.
 	Qt5Cored.dll!QCoreApplication::notifyInternal2(QObject * receiver, QEvent * event) Line 988	C++	Symbols loaded.
 	Qt5Cored.dll!QCoreApplication::sendSpontaneousEvent(QObject * receiver, QEvent * event) Line 234	C++	Symbols loaded.
 	Qt5Widgetsd.dll!QApplicationPrivate::sendMouseEvent(QWidget * receiver, QMouseEvent * event, QWidget * alienWidget, QWidget * nativeWidget, QWidget * * buttonDown, QPointer<QWidget> & lastMouseReceiver, bool spontaneous) Line 2713	C++	Symbols loaded.
 	Qt5Widgetsd.dll!QWidgetWindow::handleMouseEvent(QMouseEvent * event) Line 618	C++	Symbols loaded.
 	Qt5Widgetsd.dll!QWidgetWindow::event(QEvent * event) Line 240	C++	Symbols loaded.
 	Qt5Widgetsd.dll!QApplicationPrivate::notify_helper(QObject * receiver, QEvent * e) Line 3745	C++	Symbols loaded.
 	Qt5Widgetsd.dll!QApplication::notify(QObject * receiver, QEvent * e) Line 3105	C++	Symbols loaded.
 	Qt5Cored.dll!QCoreApplication::notifyInternal2(QObject * receiver, QEvent * event) Line 988	C++	Symbols loaded.
 	Qt5Cored.dll!QCoreApplication::sendSpontaneousEvent(QObject * receiver, QEvent * event) Line 234	C++	Symbols loaded.
 	Qt5Guid.dll!QGuiApplicationPrivate::processMouseEvent(QWindowSystemInterfacePrivate::MouseEvent * e) Line 1928	C++	Symbols loaded.
 	Qt5Guid.dll!QGuiApplicationPrivate::processWindowSystemEvent(QWindowSystemInterfacePrivate::WindowSystemEvent * e) Line 1712	C++	Symbols loaded.
 	Qt5Guid.dll!QWindowSystemInterface::sendWindowSystemEvents(QFlags<enum QEventLoop::ProcessEventsFlag> flags) Line 716	C++	Symbols loaded.
 	qwindowsd.dll!QWindowsGuiEventDispatcher::sendPostedEvents() Line 83	C++	Symbols loaded.
 	Qt5Cored.dll!qt_internal_proc(HWND__ * hwnd, unsigned int message, unsigned __int64 wp, __int64 lp) Line 223	C++	Symbols loaded.
 	[External Code]		Annotated Frame
 	Qt5Cored.dll!QEventDispatcherWin32::processEvents(QFlags<enum QEventLoop::ProcessEventsFlag> flags) Line 613	C++	Symbols loaded.
 	qwindowsd.dll!QWindowsGuiEventDispatcher::processEvents(QFlags<enum QEventLoop::ProcessEventsFlag> flags) Line 74	C++	Symbols loaded.
 	Qt5Cored.dll!QEventLoop::processEvents(QFlags<enum QEventLoop::ProcessEventsFlag> flags) Line 135	C++	Symbols loaded.
 	Qt5Cored.dll!QEventLoop::exec(QFlags<enum QEventLoop::ProcessEventsFlag> flags) Line 212	C++	Symbols loaded.
 	Qt5Cored.dll!QCoreApplication::exec() Line 1261	C++	Symbols loaded.
 	Qt5Guid.dll!QGuiApplication::exec() Line 1658	C++	Symbols loaded.
 	Qt5Widgetsd.dll!QApplication::exec() Line 2922	C++	Symbols loaded.
 	OrbitQt.exe!main(int argc, char * * argv) Line 49	C++	Symbols loaded.
 	[External Code]		Annotated Frame

So it turns out that the Dell version of Intel drivers lag behind the Intel versions, and upgrading them yielded better results. The call to getString now returns "4.5.0 - Build 22.20.16.4815", but unfortunately, this doesn't entirely resolve my problem (but that is another matter).

Check your display drivers, and try to run the glew utilities (glewinfo and visualinfo).

from orbit.

wadetb avatar wadetb commented on July 28, 2024

I can confirm that the VM's OpenGL capabilities are limited to OpenGL 1.1. Does Qt provide a software renderer that can be used in these circumstances?

glewinfo.txt

from orbit.

DanOlivier avatar DanOlivier commented on July 28, 2024

From the docs:

The Qt OpenGL module is implemented as a platform-independent Qt/C++ wrapper around the platform-dependent GLX (version 1.3 or later), WGL, or AGL C APIs. Although the basic functionality provided is very similar to Mark Kilgard's GLUT library, applications using the Qt OpenGL module can take advantage of the whole Qt API for non-OpenGL-specific GUI functionality.

So it's just a wrapper.
Glew will not initialize (within your virtualized environment) without greater capabilities.

It looks like RemoteFX vGPU would be required, and that might require a Windows Server (not just Professional)... though I'm going out on a limb here...

from orbit.

pierricgimmig avatar pierricgimmig commented on July 28, 2024

As a workaround, you could consider the following: Orbit can be used to profile a process running on another machine. (I have never tried it in a VM but it should work). The matching .pdb files need to be accessible from the Host machine for Orbit to run properly. Make sure you add the proper directories in OrbitProfiler\config\Symbols.txt so that Orbit knows where to find symbols. Orbit will make sure that the symbols on the host match the modules on the target machine.

On the target side, inject Orbit.dll in the target application from a temporary instance of Orbit.exe running on the target machine (Orbit needs to be installed on both machines). The host machine will run the UI version of Orbit while the target machine will use the command line version of Orbit to inject the dll into the target process. Orbit.exe will then terminate on the target machine.

On the target machine’s command line, run:

"Orbit.exe inject:MyProcess host:192.168.0.1" (with the ip of the host machine...)

Orbit will find the first process matching the name “MyProcess” and inject Orbit.dll.

Another option is to control the loading of Orbit.dll from your code. Include "Orbit.h" in your project and call OrbitAPI::Connect with the IP of the machine running the Orbit UI (a_Host) and the port to connect to (a_Port). Note that the Orbit API is header-only, simply add Orbit.h to your project, no lib required.

From Orbit.h:
//-----------------------------------------------------------------------------
struct OrbitAPI
{
static inline bool Connect( const char* a_Host, int a_Port = 1789 );
static inline bool IsConnected();

};

Sampling profiling is disabled when remote debugging, it has not yet been implemented. It's on my todo list.

from orbit.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.