Jump to content
  • Advertisement
Sign in to follow this  
piotrek863

OpenGL VBO c# tao framework

This topic is 3035 days old which is more than the 365 day threshold we allow for new replies. Please post a new topic.

If you intended to correct an error in the post then please contact us.

Recommended Posts

At first sorry for my english :) I tried to write program, where I use the VBO. I've got: public void SetData() { state_ = true; vertex_ = new float[12]; texture_ = new float[8]; vertex_[0] = -5f; vertex_[1] = 0f; vertex_[2] = 0f; vertex_[3] = 5f; vertex_[4] = 0f; vertex_[5] = 0f; vertex_[6] = 5f; vertex_[7] = 5f; vertex_[8] = 0f; vertex_[9] = -5f; vertex_[10] = 5f; vertex_[11] = 0f; texture_[0] = 0f; texture_[1] = 0f; texture_[2] = 1f; texture_[3] = 0f; texture_[4] = 1f; texture_[5] = 1f; texture_[6] = 0f; texture_[7] = 1f; Gl.ReloadFunctions(); id = new int[1]; Gl.glGenBuffersARB(1, id); Gl.glBindBufferARB(Gl.GL_ARRAY_BUFFER_ARB, id[0]); Gl.glBufferDataARB(Gl.GL_ARRAY_BUFFER_ARB, (IntPtr)(12 * sizeof(float)), vertex_, Gl.GL_STATIC_DRAW_ARB); id1 = new int[1]; Gl.glGenBuffersARB(1, id1); Gl.glBindBufferARB(Gl.GL_ARRAY_BUFFER_ARB, id1[0]); Gl.glBufferDataARB(Gl.GL_ARRAY_BUFFER_ARB, (IntPtr)(8 * sizeof(float)), texture_, Gl.GL_STATIC_DRAW_ARB); vertex_ = null; texture_ = null; } and function: internal void Redraw() { Gl.glMatrixMode(Gl.GL_PROJECTION); Gl.glLoadIdentity(); Gl.glOrtho(-10.0f, 10.0f, -10.0f, 10.0f, -1.0f, 1.0f); Gl.glMatrixMode(Gl.GL_MODELVIEW); Gl.glLoadIdentity(); Gl.glClearColor(0.0f, 0.0f, 0.0f, 1.0f); Gl.glClear(Gl.GL_COLOR_BUFFER_BIT | Gl.GL_DEPTH_BUFFER_BIT); if (state_) { Gl.glBindTexture(Gl.GL_TEXTURE_2D, t_); Gl.glTexEnvi(Gl.GL_TEXTURE_ENV, Gl.GL_TEXTURE_ENV_MODE, Gl.GL_MODULATE); Gl.glEnable(Gl.GL_TEXTURE_2D); Gl.glBindBufferARB(Gl.GL_ARRAY_BUFFER_ARB, id[0]); Gl.glBindBufferARB(Gl.GL_ARRAY_BUFFER_ARB, id1[0]); Gl.glEnableClientState(Gl.GL_VERTEX_ARRAY); Gl.glEnableClientState(Gl.GL_TEXTURE_COORD_ARRAY); Gl.glVertexPointer(3, Gl.GL_FLOAT, 0, 0); Gl.glTexCoordPointer(2, Gl.GL_FLOAT, 0, 0); Gl.glDrawArrays(Gl.GL_QUADS, 0, 4); Gl.glBindBufferARB(Gl.GL_ARRAY_BUFFER_ARB, 0); Gl.glDisableClientState(Gl.GL_VERTEX_ARRAY); Gl.glDisableClientState(Gl.GL_TEXTURE_COORD_ARRAY); Gl.glDisable(Gl.GL_TEXTURE_2D); } Gl.glFlush(); } and after function Redraw I call this.simpleOpenGlControl1.SwapBuffers(); And I've got black screen. Why? Any idea what I'm doing wrong? That is my first program where I use VBO. I use c# and tao framework to write this program.

Share this post


Link to post
Share on other sites
Advertisement
Your operations are out of order.

Instead of this:

Gl.glBindBufferARB(Gl.GL_ARRAY_BUFFER_ARB, id[0]);
Gl.glBindBufferARB(Gl.GL_ARRAY_BUFFER_ARB, id1[0]);
Gl.glVertexPointer(3, Gl.GL_FLOAT, 0, 0);
Gl.glTexCoordPointer(2, Gl.GL_FLOAT, 0, 0);




You need this:

Gl.glBindBufferARB(Gl.GL_ARRAY_BUFFER_ARB, id[0]);
Gl.glVertexPointer(3, Gl.GL_FLOAT, 0, 0);
Gl.glBindBufferARB(Gl.GL_ARRAY_BUFFER_ARB, id1[0]);
Gl.glTexCoordPointer(2, Gl.GL_FLOAT, 0, 0);




glPointer generates a pointer into the currently bound ARRAY_BUFFER, so when you call glVertexPointer, your vertex buffer must be bound.

In your code opengl is reading its vertices from your texture coordinates buffer, which obviously won't work.

[Edited by - karwosts on April 1, 2010 5:50:16 PM]

Share this post


Link to post
Share on other sites

Gl.glVertexPointer(3, Gl.GL_FLOAT, 0, 0);
Gl.glTexCoordPointer(2, Gl.GL_FLOAT, 0, 0);





Additionally, you need to change the last paramatere from 0 to IntPtr.Zero, otherwise Tao will crash hard.

Share this post


Link to post
Share on other sites
Sign in to follow this  

  • Advertisement
×

Important Information

By using GameDev.net, you agree to our community Guidelines, Terms of Use, and Privacy Policy.

We are the game development community.

Whether you are an indie, hobbyist, AAA developer, or just trying to learn, GameDev.net is the place for you to learn, share, and connect with the games industry. Learn more About Us or sign up!

Sign me up!