OpenGL Przykład i problem

Odpowiedz Nowy wątek
2011-03-22 12:35
0

Mój przykładowy program z wykorzystaniem OpenGL i Shader-ów w załączniku

W programie jest checkBox do zmieniania tego co jest rysowane i albo sie wykonuje funkcja Test0 albo funkcja Test1.

Zastanawia mnie jednak dlaczego jak uruchomie taką kombinację

Test0; a potem Test1 to obraz sie rysuje OK

A jak zrobię tak:
Test0; potem Test1; potem Test0 potem Test1 to obraz nie jest OK

Brakuje mi koncepcji co to może być ?
Wygląda to tak jakby nie ta tekstura byłą brana do rysowania.
Choć w kodzie wyglada wszystko OK (tak mi sie zdaje )

procedure TForm001.glDraw();

  procedure test0;
  begin
    glClear(GL_COLOR_BUFFER_BIT {or GL_DEPTH_BUFFER_BIT});    // Clear The Screen And The Depth Buffer
    glActiveTexture(GL_TEXTURE0);
    glBindTexture(GL_TEXTURE_2D, PlasmaTex );

    glBegin(GL_QUADS);
      glTexCoord2f(1.0, 0.0);  glVertex2f(-1.0, -1.0);
      glTexCoord2f(0.0, 0.0);  glVertex2f( 1.0, -1.0);
      glTexCoord2f(0.0, 1.0);  glVertex2f( {1.}0.5,  1.0);
      glTexCoord2f(1.0, 1.0);  glVertex2f({-1.}-0.5,  1.0);
    glEnd();
  end;

  procedure test1;
  begin
    glClear(GL_COLOR_BUFFER_BIT {or GL_DEPTH_BUFFER_BIT});    // Clear The Screen And The Depth Buffer
    //glBindTexture(GL_TEXTURE_2D, PlasmaTex );
    //test_scan_converter(78,0,1.7,0.3,3.2,128);

    glActiveTexture(GL_TEXTURE0);
    glBindTexture(GL_TEXTURE_2D, texture_image1);
    glActiveTexture(GL_TEXTURE1);
    glBindTexture(GL_TEXTURE_2D, texture_image2);

    glUseProgram(g_program);
      glBegin(GL_QUAD_STRIP);

        glMultiTexCoord2f(GL_TEXTURE0,0.0, 0.0);
        glMultiTexCoord2f(GL_TEXTURE1,0.0, 0.0);
               glVertex2f(0.0, 0.0);

                                     glMultiTexCoord2f(GL_TEXTURE0,1.0, 0.0);
                                     glMultiTexCoord2f(GL_TEXTURE1,1.0, 0.0);
                                          glVertex2f( 1.0, 0.0);

        glMultiTexCoord2f(GL_TEXTURE0,0.0, 0.5);
        glMultiTexCoord2f(GL_TEXTURE1,0.0, 0.5);
               glVertex2f(0.0, 0.8);
                                     glMultiTexCoord2f(GL_TEXTURE0,1.0, 0.5);
                                     glMultiTexCoord2f(GL_TEXTURE1,1.0, 0.5);
                                          glVertex2f( 1.0, 0.8);

        glMultiTexCoord2f(GL_TEXTURE0,0.0, 1.0);
        glMultiTexCoord2f(GL_TEXTURE1,0.0, 1.0);
               glVertex2f( 0.0, 1.0);

                                     glMultiTexCoord2f(GL_TEXTURE0,1.0, 1.0);
                                     glMultiTexCoord2f(GL_TEXTURE1,1.0, 1.0);
                                           glVertex2f(1.0, 1.0);
      glEnd(); // GL_QUAD_STRIP
    glUseProgram(0);

  end;

  var i:integer;
begin
  Inc(FPSCount);

  case test of
    0: test0;
    1: test1;
  end;
end;

Nie przyjmuję reklamacji za moje rady, używasz na własną odpowiedzialność

Pozostało 580 znaków

2011-03-23 10:24
0

Trochę powalczyłem i znalazłem.
Uroki maszyny stanów OpenGL, w połączeniu z rożnym sposobem interpretowania błędów programisty na różnych kartach graficznych ;)

Gdzieś w kodzie miałem aktualizację tekstury za pomocą glTexImage2D
Ale nie zdefiniowałem wcześniej jaka teksturę mam na myśli np. tak

  glActiveTexture(GL_TEXTURE0);
  glBindTexture(GL_TEXTURE_2D, PlasmaTex );

Po dodaniu tego kawałka kodu już działa OK


Nie przyjmuję reklamacji za moje rady, używasz na własną odpowiedzialność

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0