OpenGL Versions Problem

Alles rund um die Programmierung mit Qt
Antworten
Treehouse
Beiträge: 100
Registriert: 18. Juni 2007 10:21

OpenGL Versions Problem

Beitrag von Treehouse »

Hallo zusammen,

ich habe folgendes Problem ich zeichne auf eine 2D Fläche eine QImage objekt. Dazu gehe ich wie folgt vor:

INIT-Funktion:

Code: Alles auswählen

initializeGL()
{
	// setup viewport, projection etc.:
	glViewport(0, 0, (GLint)width(), (GLint)height());
	glEnable(GL_TEXTURE_2D);
	glClearColor( 0.0f, 0.0f, 0.0f, 0.0f );
	glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);


	glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); 
	glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
	glRotatef(180.0f, 180.0f,0.0f,0.0f); // Rotate

}
PAINT-Funktion:

Code: Alles auswählen

	glClearColor( 0.0f, 0.0f, 0.0f, 0.0f );

	glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);



	glTexImage2D(
		GL_TEXTURE_2D,
		0,
		GL_LUMINANCE,
		m_image.width(),
		m_image.height(),
		0, GL_LUMINANCE,
		GL_UNSIGNED_BYTE,
		m_image.bits());	

	

	glEnable(GL_TEXTURE_2D);
	glBegin(GL_QUADS);      // Start Drawing A Textured Quad
	glTexCoord2f(0.0f, 0.0f); glVertex3f(-1.0f, -1.0f, 0.0f); // Bottom Left
	glTexCoord2f(1.0f, 0.0f); glVertex3f( 1.0f, -1.0f, 0.0f); // Bottom Right
	glTexCoord2f(1.0f, 1.0f); glVertex3f( 1.0f, 1.0f, 0.0f);  // Top Right
	glTexCoord2f(0.0f, 1.0f); glVertex3f(-1.0f, 1.0f, 0.0f);  // Top Left
	glEnd();           // Done Drawing The Quad	
	glDisable(GL_TEXTURE_2D);
Dieser Code funktioniert absolut perfekt auf Systemen mit einer modernen Nvidia oder ATI Grafikkarte. Wenn ich nun aber den selben Code auf meinem älteren Laptop mit Intel mobile Graphic Chip und OpenGL 1.4 laufen lasse. Dann bekomme ich nur eine weiße Textur.

Ich suche jetzt schon ewig danach woran das liegen könnte. Könnte mir vielleicht jemand sagen was der Grund dafür sein könnte?? Das Qimage ist ein vielfaches von 2, diesen Fehler habe ich schon in erwägung gezogen.

Es wäre absolut super wenn mir jemand helfen könnte da ich einfach keinen Lösungsansatz mehr weiß und finde.

Gruß

Treehouse
Volker
Beiträge: 343
Registriert: 30. Juni 2005 05:27

Beitrag von Volker »

Ist eine orthogonale Projektion per Default gegeben? Oder wo wird die Projektionsmatrix gesetzt? Und wo ist der Aufruf von glGenTextures und glBindTexture? Ist das Bild wirklich ein Graustufen Bild?

Mit dem abgebildeten Code frag ich mich allerdings, warum das auf einer ATI oder NVIDIA Karte überhaupt geht.
Bitte seid so nett und ändert den Titel von Beiträgen die gelöst wurden, auf [gelöst] Beitragstitel
Treehouse
Beiträge: 100
Registriert: 18. Juni 2007 10:21

Beitrag von Treehouse »

Volker hat geschrieben:Ist eine orthogonale Projektion per Default gegeben? Oder wo wird die Projektionsmatrix gesetzt? Und wo ist der Aufruf von glGenTextures und glBindTexture? Ist das Bild wirklich ein Graustufen Bild?

Mit dem abgebildeten Code frag ich mich allerdings, warum das auf einer ATI oder NVIDIA Karte überhaupt geht.
Hallo Volker,

also die Projektionsmatrix habe ich nicht gesetzt ich dachte das ist per Default vorgegeben sonst würde das ja nicht funktionieren oder ?

Wenn man ein QGLWidget erzeugt wird diesem Widget ja auch eine Texture zugeteilt die für die dann die Einstellungen getroffen werden in der INIT Funktion. So habe ich das zumindest verstanden.

Und ja es handelt sich um ein Graustufen Bild.

Und ja diese Code funktioniert einwandfrei auf einer NVIDIA oder ATI Karte, weil dass so ist kann ich dir auch erstmal nicht mehr sagen.

Gruß

Treehouse
Volker
Beiträge: 343
Registriert: 30. Juni 2005 05:27

Beitrag von Volker »

Ich hab mir den Code vom QGLWidget nicht angeschaut, kann schon sein, dass dort irgendwelche Default Einstellungen gemacht werden, auf die Du aufbauen kannst. Ich sag ja nur, dass der Code allein innerhalb normalem OpenGL wohl nicht reichen würde. Keine der Befehle enthält Code der nicht mit OpenGL 1.4 kompatibel wäre, d.h. wenn dann liegt ja evtl. das Problem beim QGLWidget. Von dem her, hätte ich gesagt, initialisiere mal alles selber, evtl. gehts ja dann auch mit 1.4.
Bitte seid so nett und ändert den Titel von Beiträgen die gelöst wurden, auf [gelöst] Beitragstitel
Treehouse
Beiträge: 100
Registriert: 18. Juni 2007 10:21

Beitrag von Treehouse »

Volker hat geschrieben:Ich hab mir den Code vom QGLWidget nicht angeschaut, kann schon sein, dass dort irgendwelche Default Einstellungen gemacht werden, auf die Du aufbauen kannst. Ich sag ja nur, dass der Code allein innerhalb normalem OpenGL wohl nicht reichen würde. Keine der Befehle enthält Code der nicht mit OpenGL 1.4 kompatibel wäre, d.h. wenn dann liegt ja evtl. das Problem beim QGLWidget. Von dem her, hätte ich gesagt, initialisiere mal alles selber, evtl. gehts ja dann auch mit 1.4.
Hallo Volker,

tja ich weiß auch nicht mehr wirklich was ich noch machen soll. Wenns auf allen Rechnern nicht laufen würde dann würde ich dass verstehen, dann wäre es ganz klar ein Code Fehler. Aber da es ja nur auf älteren Rechnern nicht läuft bin ich ziemlich ratlos wo ich noch suchen soll.

Gruß

Treehouse
Antworten