Hy, comprei recentemente um Dell Inspiron 15 "5570, a versão com intel i5 8250u e apenas o iGPU intel UHD 620. Depois de instalar o Ubuntu eu tive algumas trepidação de tela e eu consegui usando o A solução alternativa de Joakim mas agora estou enfrentando outro problema que não consegui descobrir. Eu preciso do OpenGL 4, que o suporte ao gpu integrado, mas eu não sei como "habilitá-lo". Essa é a glxinfo | grep -i opengl output:
glxinfo | grep -i opengl
OpenGL vendor string: Intel Open Source Technology Center
OpenGL renderer string: Mesa DRI Intel(R) UHD Graphics 620 (Kabylake GT2)
OpenGL core profile version string: 4.5 (Core Profile) Mesa 18.2.0-devel
OpenGL core profile shading language version string: 4.50
OpenGL core profile context flags: (none)
OpenGL core profile profile mask: core profile
OpenGL core profile extensions:
OpenGL version string: 3.0 Mesa 18.2.0-devel
OpenGL shading language version string: 1.30
OpenGL context flags: (none)
OpenGL extensions:
OpenGL ES profile version string: OpenGL ES 3.2 Mesa 18.2.0-devel
OpenGL ES profile shading language version string: OpenGL ES GLSL ES 3.20
OpenGL ES profile extensions:
E esta é outra parte do glxinfo que pode ser útil:
Extended renderer info (GLX_MESA_query_renderer):
Vendor: Intel Open Source Technology Center (0x8086)
Device: Mesa DRI Intel(R) UHD Graphics 620 (Kabylake GT2) (0x5917)
Version: 18.2.0
Accelerated: yes
Video memory: 3072MB
Unified memory: yes
Preferred profile: core (0x1)
Max core profile version: 4.5
Max compat profile version: 3.0
Max GLES1 profile version: 1.1
Max GLES[23] profile version: 3.2
E este é o erro de saída quando tento iniciar o programa que precisa do opengl 4:
X Error of failed request: GLXBadFBConfig
Major opcode of failed request: 155 (GLX)
Minor opcode of failed request: 34 ()
Serial number of failed request: 40
Current serial number in output stream: 39
Eu ouvi sobre essa opção de inicialização alfa para habilitar o driver alpha para o meu processador, mas só sinto falta disso, obrigado antecipadamente pela ajuda.
- UPDATE-- Eu realmente "consegui" o erro, tentei outros programas que precisam de funcionalidade openGL 4, contexto openGL 4.5, e funciona sem problemas, mas quando eu quero usar este programa openGl "legado" que precisa de um contexto 4.5
#include <cstdlib>
#include <cmath>
#include <iostream>
#ifdef __APPLE__
# include <GL/glew.h>
# include <GL/freeglut.h>
# include <OpenGL/glext.h>
#else
# include <GL/glew.h>
# include <GL/freeglut.h>
# include <GL/glext.h>
#pragma comment(lib, "glew32.lib")
#endif
#define PI 3.14159265358979324
using namespace std;
// Globals.
static float R = 40.0; // Radius of circle.
static float X = 50.0; // X-coordinate of center of circle.
static float Y = 50.0; // Y-coordinate of center of circle.
static int numVertices = 10; // Number of vertices on circle.
// Drawing routine.
void drawScene(void)
{
float t = 0; // Angle parameter.
glClear(GL_COLOR_BUFFER_BIT);
glColor3f(0.0, 0.0, 0.0);
// Draw a line loop with vertices at equal angles apart on a circle
// with center at (X, Y) and radius R, The vertices are colored randomly.
/* Funzione seno esercizio pag56 2.27
glBegin(GL_LINE_STRIP);
for(float i = -PI; i <= PI; i+=PI/20.0)
{
glColor3f((float)rand()/(float)RAND_MAX, (float)rand()/(float)RAND_MAX, (float)rand()/(float)RAND_MAX);
glVertex3f(i, sin(i), 0.0);
//cout<<"x="<<i<<";y="<<sin(i);
//t += 2 * PI / numVertices;
}
glEnd();*/
//Ellisse esercizio pag56 2.28
//x = X + A*cos(t), y = Y + B*sin(t), z=0, 0<=t<=2PI
glBegin(GL_LINE_LOOP);
for(int i = 0; i < numVertices; i++)
{
glColor3f((float)rand()/(float)RAND_MAX, (float)rand()/(float)RAND_MAX, (float)rand()/(float)RAND_MAX);
glVertex3f((R+10)*cos(t), (R-10)*sin(t), 0.0);
//cout<<"x="<<i<<";y="<<sin(i);
t += 2 * PI / numVertices;
}
glEnd();
glFlush();
}
// Initialization routine.
void setup(void)
{
glClearColor(1.0, 1.0, 1.0, 0.0);
}
// OpenGL window reshape routine.
void resize(int w, int h)
{
glViewport(0, 0, w, h);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrtho(-50, 50, -50, 50, -1.0, 1.0);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
}
// Keyboard input processing routine.
void keyInput(unsigned char key, int x, int y)
{
switch(key)
{
case 27:
exit(0);
break;
case '+':
numVertices++;
glutPostRedisplay();
break;
case '-':
if (numVertices > 3) numVertices--;
glutPostRedisplay();
break;
default:
break;
}
}
// Routine to output interaction instructions to the C++ window.
void printInteraction(void)
{
cout << "Interaction:" << endl;
cout << "Press +/- to increase/decrease the number of vertices on the circle." << endl;
}
// Main routine.
int main(int argc, char **argv)
{
printInteraction();
glutInit(&argc, argv);
glutInitContextVersion(4,5);
glutInitContextProfile(GLUT_COMPATIBILITY_PROFILE);
glutInitDisplayMode(GLUT_SINGLE | GLUT_RGBA);
glutInitWindowSize(500, 500);
glutInitWindowPosition(100, 100);
glutCreateWindow("circle.cpp");
glutDisplayFunc(drawScene);
glutReshapeFunc(resize);
glutKeyboardFunc(keyInput);
glewExperimental = GL_TRUE;
glewInit();
setup();
glutMainLoop();
}
Dá o erro:
X Error of failed request: GLXBadFBConfig
Major opcode of failed request: 155 (GLX)
Minor opcode of failed request: 34 ()
Serial number of failed request: 40
Mas, na verdade, posso usá-lo da seguinte forma:
MESA_GL_VERSION_OVERRIDE=4.5 ./circle
Eu não sei porque talvez seja um bug, porque quando eu tento compilar os outros programas, que funciona sem prefixo MESA .., com: glutInitContextVersion (4, 6); Ao invés de: glutInitContextVersion (4, 5); Dá o mesmo erro de GLXBadFBConfig Portanto, não há nenhuma atenuação errada de configurações de contexto do OpenGL no próprio programa.