Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

1

01.08.2012, 11:11

OpenGL und WinApi

Hallo,

seit kurzer Zeit bereitet mir das Laden einer Funktion Probleme. Ich will diese Funktion laden: "wglCreateContextAttribsARB". Beim debuggen kriege ich dann diese Fehlermeldung:

(Link)

Ich weiß nicht, wie ich es beheben soll. Meinen Grafikkartentreiber habe ich auch upgedatet.

Hier mal der Code:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
#define LOAD_ENTRYPOINT(name, var, type) \
if(!var) { \
    var = reinterpret_cast<type>(wglGetProcAddress(name)); \
    assert(var != 0); \
}
typedef HGLRC (APIENTRY * PFNWGLCREATECONTEXTATTRIBSARBPROC)(HDC hDC, HGLRC hShareContext, const int *attribList);
static PFNWGLCREATECONTEXTATTRIBSARBPROC pfnCreateContextAttribsARB = 0; 
LOAD_ENTRYPOINT("wglCreateContextAttribsARB", pfnCreateContextAttribsARB, PFNWGLCREATECONTEXTATTRIBSARBPROC); // Zeile 76


MfG
Delop

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »Delop« (01.08.2012, 15:06)


BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

2

01.08.2012, 11:14

Hast Du Dir mal alle Extensions ausgeben lassen? Ist diese denn überhaupt vorhanden? Hast Du überhaupt schon einen gültigen Context vorher erzeugt oder ist das Dein erster Call (der MUSS failen!)?
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »BlueCobold« (01.08.2012, 11:19)


3

01.08.2012, 13:59

Hast Du Dir mal alle Extensions ausgeben lassen? Ist diese denn überhaupt vorhanden? Hast Du überhaupt schon einen gültigen Context vorher erzeugt oder ist das Dein erster Call (der MUSS failen!)?
Die Antwort auf deine Fragen: Ja.

Ich weiß jetzt, dass der Fehler irgendwo anders liegt. Ich habe zuerst den Debugger benutzt und er hat mir das Problem an der falschen Stelle angezeigt. Sry...

MfG
Delop

4

01.08.2012, 15:11

Ok, ich hab jetzt den Fehler gefunden, aber weiß nicht, wie ich es beseitigen soll. Nach dem Rendern bekomme ich den OpenGL Fehler 1282 (GL_INVALID_OPERATION).

Hier mal die Renderfunktion:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
// Vertices
glEnableVertexAttribArray(0);
glBindBuffer(GL_ARRAY_BUFFER, vertexbuffer);
glVertexAttribPointer(
        0,
        3,
        GL_FLOAT,
        GL_FALSE,
        0,
        (void*)0
);

// UVs
glEnableVertexAttribArray(1);
glBindBuffer(GL_ARRAY_BUFFER, uvbuffer);
glVertexAttribPointer(
        1,
        2,
        GL_FLOAT,
        GL_FALSE,
        0,
        (void*)0
);

glDrawArrays(GL_TRIANGLE_STRIP, 0, 4);

glDisableVertexAttribArray(0);
glDisableVertexAttribArray(1);
std::cout << glGetError() << std::endl;

glGetError gab davor 0 aus und nach der Rendermethode den Fehler Code 1282 (GL_INVALID_OPERATION). Ich verstehe es einfach nicht.
So fülle ich die VBOs:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
// Vertex
static const GLfloat vertex[] = {
    A.x, A.y, 0.f,
    B.x, B.y, 0.f,
    C.x, C.y, 0.f,
    D.x, D.y, 0.f,
};

// UVs
static const GLfloat uvs[] = {
    0.0, 0.0,
    0.0, 1.0,
    1.0, 0.0,
    1.0, 1.0,
};

glGenBuffers(1, &vertexbuffer);
glBindBuffer(GL_ARRAY_BUFFER, vertexbuffer);
glBufferData(GL_ARRAY_BUFFER, sizeof(vertex), vertex, GL_STATIC_DRAW);

glGenBuffers(1, &uvbuffer);
glBindBuffer(GL_ARRAY_BUFFER, uvbuffer);
glBufferData(GL_ARRAY_BUFFER, sizeof(uvs), uvs, GL_STATIC_DRAW);


Es tut mir Leid, wenn ich in letzter Zeit so viele Fragen stelle und ich euch evtl. auf die Nerven gehe.

MfG
Delop

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

5

01.08.2012, 15:56

Na find eben mal raus, nach welchem Aufruf genau glGetError nichtmehr 0 ist!? Dann weißt du, welcher Aufruf den Fehler verursacht und kannst nachschauen, was der Fehlercode bei der entsprechenden Funktion genau anzeigt...

6

01.08.2012, 16:04

Hab's jetzt hin bekommen. Danke an alle.

C-/C++-Quelltext

1
2
3
GLuint vao=0;
    glGenVertexArrays(1, &vao);
    glBindVertexArray(vao);

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

7

01.08.2012, 16:14

Jop, wenn du OpenGL 3.3+ verwendest, brauchst du ein VAO...

Werbeanzeige