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

09.01.2013, 18:11

OpenGL - "Schwarzes" Fenster unter Linux

Hallo,
ich habe eine minimalistische OpenGL-Anwendung unter Linux geschrieben.

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
30
31
int main()
{
    Window win("Title", 800, 600, false, true, 8);
    win.setColor(Types::Color(100,200,255));

    GLuint vbo_triangle;
    GLfloat triangle_vertices[] = {
        -1.0f, -1.0f, 0.0f,
        1.0f, -1.0f, 0.0f,
        0.0f,  1.0f, 0.0f,
    };
    glGenBuffers(1, &vbo_triangle);
    glBindBuffer(GL_ARRAY_BUFFER, vbo_triangle);
    glBufferData(GL_ARRAY_BUFFER, sizeof(triangle_vertices), triangle_vertices, GL_STATIC_DRAW);

    while(win.isOpen()) {
        win.draw();
        glEnableVertexAttribArray(0);
        glBindBuffer(GL_ARRAY_BUFFER, vbo_triangle);
        glVertexAttribPointer(
            0,
            3,
            GL_FLOAT,
            GL_FALSE,
            0,
            0
        );
        glDrawArrays(GL_TRIANGLES,0,3);
    }
    glDeleteBuffers(1, &vbo_triangle);
}

C-/C++-Quelltext

1
2
3
4
void Window::draw() const {
            glfwSwapBuffers();
            glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
        }

Das Problem: Es ist nur die gesetzte Clear-Color zu sehen, sonst nichts.
Kann mir irgendjemand helfen?
Gruß,
Soundi

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »Sound~Wave« (09.01.2013, 18:19)


dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

2

09.01.2013, 18:35

Welche OpenGL Version verwendest du? Wie sehen deine Shader aus und wo erzeugst und setzt du die? Was sagt glGetError()?

3

09.01.2013, 18:59

Das Programm verwendet OpenGL 3.2 core. Ich habe es sowohl mit minimalistischen Shadern probiert, welche zweifelsfrei korrekt sind, als auch ohne. Ohne Shader müsste das Dreieck einfach weiß gemalt werden. glGetError() sagt GL_NO_ERROR. Werde das aber nochmal prüfen.
[EDIT]:
Bei glVertexAttribPointer(...) liefert er tatsächlich 1282, also GL_INVALID_OPERATION.

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »Sound~Wave« (09.01.2013, 19:06)


dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

4

09.01.2013, 19:06

Ohne Shader müsste das Dreieck einfach weiß gemalt werden.

Wie kommst du drauf? Wenn du einen OpenGL 3.2 Core Context hast, dann brauchst du mindestens noch ein VAO und ein Program mit passendem Vertex und Fragment Shader, sonst läuft da gar nix...

Edit: Die INVALID_OPERATION bei glVertexAttribPointer kommt daher, dass du kein VAO gebunden hast.

5

09.01.2013, 19:27

:dash: Kein VAO gebunden. Manchmal gibt's Momente....
Dankeschön für deine Hilfe, was die Shader betrifft muss ich dich allerdings korrigeren: Du brauchst absolut keinen Shader, um ein weißes Dreieck darzustellen. ;)
Vielen Dank nochmal, manchmal macht man aber auch doofe Fehler.
Gruß,
Soundi

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

6

09.01.2013, 20:11

Dankeschön für deine Hilfe, was die Shader betrifft muss ich dich allerdings korrigeren: Du brauchst absolut keinen Shader, um ein weißes Dreieck darzustellen. ;)

Nope, die fixed Function Pipeline wurde in OpenGL 3.1 removed. Ab OpenGL 3.1 ist Rendern ohne Shader im Prinzip undefiniertes Verhalten. Dass du ein weißes Dreieck siehst kann zwei Gründe haben:
  • Glück
  • Du hast keinen OpenGL 3.2 Core Profile Context sondern irgendwas anderes.
;)

7

09.01.2013, 20:27

Wilde Spakulation: Aber vielleicht hat OpenGL irgendeinen MEchanismus, der eine Art "Standard-Shader" verwendet, wenn keiner verwendet wurde.... Aber jetzt verwende ich ja eh einen. ;)

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

8

09.01.2013, 20:27

Ja den hatte es...bis OpenGL 3.0... ;)

9

09.01.2013, 20:47

Ich meinte nicht die FFP. Jedenfalls verwende ich sicher 3.2 core und bei jedem Start hatte es funktioniert. Ist aber unerheblich, wer schreibt denn ein OpenGL-Programm mit modernem OGL ohne Shader? Weiße Programme sind nämlich nicht wirklich hübsch :P

Werbeanzeige