Skocz do zawartości

[OpenGL][Delphi]Vertex Buffer Object


5corpio

Polecane posty

Mam dziwny problem z VBO. Bo wydaje mi się, że robie tak jak w wielu przykładach jednak program w momencie w którym jest wypełnianie bufora danymi coś się zacina i zostaje tylko wyłączenie go.

Otóż wszystko przeprowadzam w taki sposób:

1. [b]Standartowo:

[code=Delphi]
const
GL_ARRAY_BUFFER_ARB = $8892;
GL_STATIC_DRAW_ARH MBBCBBÓSQTTHYJ&vWCtĆVVÓ'VffW#tVB7FF6ĆdtDTUDT%TddU%I AI=Ą1A1Ńall;
PFNGLGENBUFFERSARBPROC = procedure(n :GLsizei; buffeÓZ[
N[BÓQTUPTHYJF&vWCtĆVVÓ6ŚSFVvW#67BFFFW#W6vStŃą4(4)4(ą IA919 UIMIPROC = nil;
glBindBufferARB: PFNGLBINDBUFFERARBPROC = nilBY]PTÓQTUPTH[B[FT'VffW'4$#dtDTUDT%TddU%4$%$2ćFĆV14(4(ą IąŃAą ffersARB');
glBindBufferARB := wglGetProcAddress('glBindBYTĘNBY]PTH]YĘ YFF$\"rvFVĆWFT'VffW'4$\"ŁvvvWE&4FG&W72vvFVĆŃ I4(cZgĘY(ui'
vertexNum := Length(fVertices);

glGenBuffersARB(1, XĘNB[YTÓTVWQTTF6W2f&fW'F6W2tVCv'VffW$FF$\"t%$UI}IąM=ĄYŃYŃ1}MQQ%
}I]}I//fVertices : Array of TMESH_VERTEX;(TMESH_VERTEX ma 3 GLFLo]^JCBB[YTKÓX[ĘNB[YT\"t%$%TddU%$\"f&ć&2f&ć&2tVCą ŃIĄ1}IIe} UI}IąM=Ą9ą9ls, GL_STATIC_DRAW_ARB); //Podając rozmiar bufforu próbowałeHo[
X[ĘH

^SÓŃU
H[HXHŚVFćw6GŚćRvvV'VffW'4$\"f&6&G2ą IĄ1}IIe} UI}I
ź
s : GLuint;
glBufferDataARB(GL_ARRAY_BUFFER_ARB,SizeOf(fCĘKÓUPŃUTNB
śĘGzZaB[^JÓVTW^K^NBB[fĆT6ĆVE7FFRtdU%DU%$vVć&ĆT6ĆVE7FFRt51}IId4(ąą
ąŃMŃŃĄ1}QaQUI}
==I}IId

glBindBufferARB(GL_ARRAY_BUFFER_ARB,vboVertices);
glY^[ÓŃU
NB[YTÓTVt%TddU%$\"f&ć&2vć&FW\"tdBą IĄ1}IIe} UI}Ią
4(ąQ
ŻrdPointer(2, GL_FLOAT, 0, 0);

glDrawArrays(GL_TRIANGLEK^[JNBBXPY[]JÓTVTVJNvF6&ĆT6ĆVE7FFRt$%$vF6&ĆT6ĆVMŃŃĄ1}QaQUI}
==I}IId4 [/code]

(te włączanie stanu i wyłączania można wsadzić tylko raz oczywiście ale póki co zostawiłem ;p)

Kompletnie nie rozumiem czemu z tego wynika jakiś problem. Wszędzie gdzie opisują VBO głównie tylko tak to jest zaprezentowane.

Nie mam nigdzie sprawdzania czy to rozszerzenie jest dostępne bo jestem pewien na 100%, że jest.

Ot taka mini-strona moja po godzinach :)http://www.wnetrzekuchni.pl

Link do komentarza
Udostępnij na innych stronach

[quote=delphi]{------------------------------------------------------------------------------}
{ Generowanie vbo 2D }

procedure GenDataVBO(var ABuffer: GLuint; const ATarget, Usage: Cardinal; var AData: array of TVector2D); overload;
begin
glGenBuffersARB(1, @ABuffer);
glBindBufferARB(ATarget, ABuffer);
glBufferDataARB(ATarget, length(AData) * 8, @AData, Usage);
end;

{------------------------------------------------------------------------------}
{ Generowanie vbo 3D }

procedure GenDataVBO(var ABuffer: GLuint; const ATarget, Usage: Cardinal; var AData: array of TVector3D); overload;
begin
glGenBuffersARB(1, @ABuffer);
glBindBufferARB(ATarget, ABuffer);
glBufferDataARB(ATarget, length(AData) * 12, @AData, Usage);
end;
[/syntax:6b857efc2c]

Nie jest to najlepsze wyjście ale ułatwia pracę z buforami smile.gif.
Po za tym trudno mi jest znaleźć jakiś inny błąd najlepiej spróbuj na początek wyświetlić sam bufor wierzchołków bez normalnych i tekstur wtedy będzie Ci łatwiej kombinować z błędami.

[Edit]
Jeszcze jakieś niezgodności widzę w
GlBufferDataARB bo u mnie jest @AData ale nie jestem pewien czy to ma jakieś znaczenie w tym przypadku bo dawno nie ruszałem buforów ani nie wiem co za dane tam masz smile.gif

www.spider.dathox.com :)

Link do komentarza
Udostępnij na innych stronach

Zarchiwizowany

Ten temat jest archiwizowany i nie można dodawać nowych odpowiedzi.

×
×
  • Utwórz nowe...