Files |  Tutorials |  Articles |  Links |  Home |  Team |  Forum |  Wiki |  Impressum

Aktuelle Zeit: Sa Jul 05, 2025 03:57

Foren-Übersicht » Programmierung » Allgemein
Unbeantwortete Themen | Aktive Themen



Ein neues Thema erstellen Auf das Thema antworten  [ 12 Beiträge ] 
Autor Nachricht
BeitragVerfasst: Di Mär 15, 2011 19:51 
Offline
DGL Member

Registriert: Di Mär 15, 2011 16:49
Beiträge: 7
Abgetrennt von http://www.delphigl.com/forum/viewtopic.php?f=3&t=8285 durch Horazont. Langsam nimmt die Thread-Nekromantie (Ausdruck von Frase)hier überhand.

Hallo zusammen,

das gleiche Problem habe ich auch, möchte glew (1.5.8 als binaries und auch als source gedownloadet) mit Code::Blocks 10.05 verwenden und habe diese Postings genau durchgelesen, aber bei mir klappt's trotzdem nicht. Inzwischen habe ich ja verstanden, dass man die Source-Dateien selbst nochmal kompilieren soll und habe den oben beschriebenen Befehl
gcc -c -O2 -Wall -W -DGLEW_STATIC -I../include -o glew32.a glew.c

gemacht, wie auch die Settings gesetzt. Dann noch

#define GLEW_STATIC

hinzugefügt.

Ich habe nicht wirklich verstanden, was ich da eingentlich gemacht habe - jedenfalls compiliert das Programm inzwischen wenigstens fehlerfrei.

Trotzdem bekomme ich einen Laufzeitfehler und Schuld ist immer wieder diese Zeile:

// erzeuge Shader Obeject
int type = GL_VERTEX_SHADER;
int vertexShader = glCreateShader(type); // <--

Es ist übrigens die gleiche Zeile, die vorher schon immer beim Kompilieren Probleme verursacht hatte. Hat jemand von euch eine Idee?

Grüße

Betty


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Di Mär 15, 2011 22:21 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 29, 2005 12:28
Beiträge: 2249
Wohnort: Düsseldorf
Programmiersprache: C++, C#, Java
Hast du glewInit() aufgerufen?

_________________
Yeah! :mrgreen:


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Di Mär 15, 2011 23:13 
Offline
DGL Member

Registriert: Di Mär 15, 2011 16:49
Beiträge: 7
Nein, aber ich hab es jetzt mal schnell eingebaut, so wie es im Tutorial beschrieben ist:
--------------------------
glutInit(&argc, argv);
GLenum err = glewInit();
if (GLEW_OK != err)
{
/* Problem: glewInit failed, something is seriously wrong. */
fprintf(stderr, "Error: %s\n", glewGetErrorString(err));

}
fprintf(stdout, "Status: Using GLEW %s\n", glewGetString(GLEW_VERSION));
--------------------------

Ergebnis ist:
Error: Missing GL version
Status: Using GLEW 1.5.8

Weißt Du, was das jetzt bedeutet bzw. was ich noch machen kann?


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Di Mär 15, 2011 23:21 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 29, 2005 12:28
Beiträge: 2249
Wohnort: Düsseldorf
Programmiersprache: C++, C#, Java
gl.h eingebunden? Und zwar direkt nach der glew.h?

_________________
Yeah! :mrgreen:


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Mi Mär 16, 2011 09:08 
Offline
DGL Member

Registriert: Di Mär 15, 2011 16:49
Beiträge: 7
Habe ich nachgetragen, aber ändert auch nichts.

Hier ist mal der komplette Code ds Programms. Es tut nichts sinnvolles, alles nur zum Testen verschiedener Dinge gedacht. Es erzeugt keine Compilerfehler, stürzt aber zur Laufzeit nach der Ausgabe

Error: Missing GL version
Status: Using GLEW 1.5.8

ab. "Hello World" wird natürlich auch nicht ausgegeben.

--------------------------
/*
* hello.c
* This is a simple, introductory OpenGL program.
*/

#define GLEW_STATIC
#include <GL/glew.h>
#include <GL/gl.h>
#include <GL/wglew.h>
#include <GL/glut.h>
#include <stdio.h>

void display(void)
{
/* clear all pixels */
glClear (GL_COLOR_BUFFER_BIT);

/* draw white polygon (rectangle) with corners at
* (0.25, 0.25, 0.0) and (0.75, 0.75, 0.0)
*/
glColor3f (1.0, 1.0, 1.0);
glBegin(GL_POLYGON);
glVertex3f (0.25, 0.25, 0.0);
glVertex3f (0.75, 0.25, 0.0);
glVertex3f (0.75, 0.75, 0.0);
glVertex3f (0.25, 0.75, 0.0);
glEnd();

/* don't wait!
* start processing buffered OpenGL routines
*/
glFlush ();
}

void init (void)
{
// Setup Fixed Pipeline

// Hintergrundfarbe des Framebuffers
glClearColor (0.0, 0.0, 0.0, 0.0);
// Tiefentest
glEnable(GL_DEPTH);
// Transparenz deaktivieren
glDisable(GL_BLEND);
// Culling der Flächen aktivieren
glEnable(GL_CULL_FACE);
// positiven Drehsinn der Promitivs festlegen
// gegen den Uhrzeigersinn - countercolckwise
glFrontFace(GL_CCW);
// abgewandte Flächen nicht zeichnen
glCullFace(GL_BACK);
// Informationen über Ausgabegerät
glViewport(250, 250, 100, 100);

// Setup Programmable Pipeline

// erzeuge Shader Obeject(e)
int type = GL_VERTEX_SHADER;
int vertexShader = glCreateShader(type);

// Hinzufügen des Codes zum Shader Object
int count = 1;
// IntBuffer length = 0;
char string[] = "Sourcecode von gestern ...";


/* initialize viewing values */
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrtho(0.0, 1.0, 0.0, 1.0, -1.0, 1.0);
}

/*
* Declare initial window size, position, and display mode

* (single buffer and RGBA). Open window with "hello"
* in its title bar. Call initialization routines.
* Register callback function to display graphics.
* Enter main loop and process events.
*/
int main(int argc, char** argv)
{
glutInit(&argc, argv);
GLenum err = glewInit();
if (GLEW_OK != err)
{
/* Problem: glewInit failed, something is seriously wrong. */
fprintf(stderr, "Error: %s\n", glewGetErrorString(err));

}
fprintf(stdout, "Status: Using GLEW %s\n", glewGetString(GLEW_VERSION));
glutInitDisplayMode (GLUT_SINGLE | GLUT_RGB);
glutInitWindowSize (250, 250);
glutInitWindowPosition (100, 100);
glutCreateWindow ("hello");
init ();
glutDisplayFunc(display);
glutMainLoop();
printf("Hello World\n");
return 0; /* ANSI C requires main to return int. */
}
-----------------------------

Noch irgendwelche Ideen?


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Mi Mär 16, 2011 09:18 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 29, 2005 12:28
Beiträge: 2249
Wohnort: Düsseldorf
Programmiersprache: C++, C#, Java
Zitat:
#include <GL/wglew.h>

Also zumindest ich brauche diesen Header nicht, auch unter Windows nicht. Vielleicht macht der was kaputt.

Im Tutorial wird bei Verwendung von GLUT nur glut.h eingebunden, nicht die gl.h. Ich konnte ja nicht ahnen, dass du GLUT benutzt.

Was passiert wenn du
fprintf(stdout, "GL_VERSION %s\n", glGetString(GL_VERSION) );
noch vor dem glewInit aufrufst?

_________________
Yeah! :mrgreen:


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Mi Mär 16, 2011 12:31 
Offline
DGL Member

Registriert: Di Mär 15, 2011 16:49
Beiträge: 7
Hallo,

>#include <GL/wglew.h>
>Also zumindest ich brauche diesen Header nicht, auch unter Windows nicht. Vielleicht macht der was kaputt.

Den Header habe ich jetzt entfernt - hatte aber eh keinen Einfluss.

> Was passiert wenn du
fprintf(stdout, "GL_VERSION %s\n", glGetString(GL_VERSION) );
noch vor dem glewInit aufrufst?

Dasgleiche wie vorher, nur dass zusätzlich noch

GL_VERSION(null)

ausgegeben wird.

Grüße

Betty


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Mi Mär 16, 2011 12:39 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 29, 2005 12:28
Beiträge: 2249
Wohnort: Düsseldorf
Programmiersprache: C++, C#, Java
Hier hatte jemand das gleiche Problem:
http://www.opengl.org/discussion_boards ... ber=146168

Vermutliche Lösung:
glewInit() und auch OpenGL-Befehle erst aufrufen nachdem das Fenster erzeugt wurde, also wahrscheinlich nach glutCreateWindow. Den erst dann hast du einen gültigen OpenGL-Kontext.

_________________
Yeah! :mrgreen:


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Mi Mär 16, 2011 13:16 
Offline
DGL Member

Registriert: Di Mär 15, 2011 16:49
Beiträge: 7
Hallo,

das war schon mal ein guter Tipp!
glutCreateWindow() steht also jetzt schon vor glewInit() und damit bekomme ich dann auch die richtigen Ausgaben:

GL_VERSION 1.4.0 - Build 4.14.10.4020
Status: Using GLEW 1.5.8

Trotzdem stürzt das Programm wieder ab und das Fenster wird nicht gezeichnet.

Wenn ich die Zeile

int vertexShader = glCreateShader(type);

auf Kommentar setze, läuft das Programm anstandslos durch und das Fenster wird auch gezeichnet. Allerdings wird das "Hello World\n" unten in der vorletzten Zeile nicht ausgeführt.

Hier nochmal der aktuelle Quellcode:

--------------------
/*
* hello.c
* This is a simple, introductory OpenGL program.
*/

#define GLEW_STATIC
#include <GL/glew.h>
//#include <GL/wglew.h>
#include <GL/glut.h>
#include <stdio.h>

void display(void)
{
/* clear all pixels */
glClear (GL_COLOR_BUFFER_BIT);

/* draw white polygon (rectangle) with corners at
* (0.25, 0.25, 0.0) and (0.75, 0.75, 0.0)
*/
glColor3f (1.0, 1.0, 1.0);
glBegin(GL_POLYGON);
glVertex3f (0.25, 0.25, 0.0);
glVertex3f (0.75, 0.25, 0.0);
glVertex3f (0.75, 0.75, 0.0);
glVertex3f (0.25, 0.75, 0.0);
glEnd();

/* don't wait!
* start processing buffered OpenGL routines
*/
glFlush ();
}

void init (void)
{
// Setup Fixed Pipeline

// Hintergrundfarbe des Framebuffers
glClearColor (0.0, 0.0, 0.0, 0.0);
// Tiefentest
glEnable(GL_DEPTH);
// Transparenz deaktivieren
glDisable(GL_BLEND);
// Culling der Flächen aktivieren
glEnable(GL_CULL_FACE);
// positiven Drehsinn der Promitivs festlegen
// gegen den Uhrzeigersinn - countercolckwise
glFrontFace(GL_CCW);
// abgewandte Flächen nicht zeichnen
glCullFace(GL_BACK);
// Informationen über Ausgabegerät
glViewport(250, 250, 100, 100);

// Setup Programmable Pipeline

// erzeuge Shader Obeject(e)
int type = GL_VERTEX_SHADER;
int vertexShader = glCreateShader(type);

// Hinzufügen des Codes zum Shader Object
int count = 1;
// IntBuffer length = 0;
char string[] = "Sourcecode von gestern ...";


/* initialize viewing values */
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrtho(0.0, 1.0, 0.0, 1.0, -1.0, 1.0);
}

/*
* Declare initial window size, position, and display mode

* (single buffer and RGBA). Open window with "hello"
* in its title bar. Call initialization routines.
* Register callback function to display graphics.
* Enter main loop and process events.
*/
int main(int argc, char** argv)
{
glutInit(&argc, argv);
glutInitDisplayMode (GLUT_SINGLE | GLUT_RGB);
glutInitWindowSize (250, 250);
glutInitWindowPosition (100, 100);
glutCreateWindow ("hello");

fprintf(stdout, "GL_VERSION %s\n", glGetString(GL_VERSION) );
GLenum err = glewInit();
if (GLEW_OK != err)
{
/* Problem: glewInit failed, something is seriously wrong. */
fprintf(stderr, "Error: %s\n", glewGetErrorString(err));

}
fprintf(stdout, "Status: Using GLEW %s\n", glewGetString(GLEW_VERSION));


init ();
glutDisplayFunc(display);
glutMainLoop();
printf("Hello World\n");
return 0; /* ANSI C requires main to return int. */
}
--------------------

Grüße

Betty


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Mi Mär 16, 2011 13:24 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 29, 2005 12:28
Beiträge: 2249
Wohnort: Düsseldorf
Programmiersprache: C++, C#, Java
Zitat:
GL_VERSION 1.4.0

Diese OpenGL Version unterstützt noch keine Shader. Kann deine Grafikhardware überhaupt Shader? Ist der Treiber aktuell? Ist der gl.h-Header aktuell? (nein, ich weiß nicht wo man einen aktuellen Header bekommt....ich nutze Qt und da ist ein halbwegs aktueller Header dabei)

Edit: Als Alternative kannst du natürlich auch Shader mit Hilfe einer Extension benutzen, etwa GL_ARB_vertex_shader und GL_ARB_fragment_shader. Die funktionieren eigentlich genauso, der Unterschied ist aber das sämtliche Shader-spezifischen Funktionen und Parameter auf ARB enden.

_________________
Yeah! :mrgreen:


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Mi Mär 16, 2011 21:36 
Offline
DGL Member

Registriert: Di Mär 15, 2011 16:49
Beiträge: 7
Hallo nochmal,

inzwischen habe ich mir den neuesten Grafiktreiber installiert und auch die ARB-Ersatz-Befehle ausprobiert. Leider keine Verbesserung, die kann er auch nicht.
Mein GLUT ist das aktuellste und GLEW auch, da bin ich mir sicher - vermutlich ist es tatsächlich der Rechner.

Jetzt bleibt nur noch, das Ganze auf einem anderen Rechner zu testen und hoffen, dass dann alles läuft.

Mich würde mal interessieren, was die anderen Codeblocks-Nutzer hier für Erfahrungen gemacht haben - hat jemand GLEW zu laufen bekommen?

Grüße

Betty


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Do Mär 17, 2011 13:40 
Offline
DGL Member

Registriert: Di Mär 15, 2011 16:49
Beiträge: 7
Hallo nochmal,

es hat endlich geklappt - es lag tatsächlich an meinem Rechner (vermutlich die Grafikkarte).
Jetzt habe ich alles auf einem anderen Rechner nochmal eingerichtet und jetzt läuft's.

Grüße

Betty


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 12 Beiträge ] 
Foren-Übersicht » Programmierung » Allgemein


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 8 Gäste


Du darfst keine neuen Themen in diesem Forum erstellen.
Du darfst keine Antworten zu Themen in diesem Forum erstellen.
Du darfst deine Beiträge in diesem Forum nicht ändern.
Du darfst deine Beiträge in diesem Forum nicht löschen.
Du darfst keine Dateianhänge in diesem Forum erstellen.

Suche nach:
Gehe zu:  
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.008s | 14 Queries | GZIP : On ]