PDA

View Full Version : glGenBuffers returns 0



Blakeasd
07-23-2013, 04:50 PM
Hello,

I am working on OS X Mountain Lion and Xcode 4.6. I am using the Cocoa APIs to create my windows and handle events. I can't seem to get a vertex buffer generated for some reason. I use NSLog() to print the value of my buffer, but it comes out as 0. Could someone please assist me? Here is my code, it is inside of a custom NSOpenGLView:





@implementation MyOpenGLView


static const GLfloat g_vertex_buffer_data[] = {
-1.0f, -1.0f, 0.0f,
1.0f, -1.0f, 0.0f,
0.0f, 1.0f, 0.0f,
};


-(void)awakeFromNib{


NSOpenGLPixelFormatAttribute attrs[] =
{
NSOpenGLPFADoubleBuffer,
NSOpenGLPFADepthSize, 24,
// Must specify the 3.2 Core Profile to use OpenGL 3.2
NSOpenGLPFAOpenGLProfile,
NSOpenGLProfileVersion3_2Core,
0
};

NSOpenGLPixelFormat *pf = [[[NSOpenGLPixelFormat alloc] initWithAttributes:attrs] autorelease];

if (!pf)
{
NSLog(@"No OpenGL pixel format");
}

NSOpenGLContext *context = [[[NSOpenGLContext alloc]initWithFormat:pf shareContext:nil]autorelease];

[self setPixelFormat:pf];
[self setOpenGLContext:context];

GLuint vertexBuffer;

glGenBuffers(1, &vertexBuffer);
glBindBuffer(GL_ARRAY_BUFFER, vertexBuffer);
glBufferData(GL_ARRAY_BUFFER, sizeof(g_vertex_buffer_data), g_vertex_buffer_data, GL_STATIC_DRAW);
NSLog(@"%i",vertexBuffer);

}


- (id)initWithFrame:(NSRect)frame
{
self = [super initWithFrame:frame];
if (self) {
// Initialization code here.
}

return self;
}


- (void)drawRect:(NSRect)dirtyRect
{


glClearColor(0.0, 0.0, 0.0, 1.0);
glClear(GL_COLOR_BUFFER_BIT);


glSwapAPPLE();
NSLog(@"drawRect: is called");

}


@end


I get a black window like expected with no errors or warning. My vertex buffer object is 0 for some reason.

hlewin
07-23-2013, 10:32 PM
Not knowing anything about MACs I may tap in the dark, but: Your gl-specific code seems ok, so it has got to be something else. What I notice is that you don't check for "context" to be non-NULL respectively to be initialized successfully. I'd check that, although I do not know if the black Screen rules this out.

Blakeasd
07-24-2013, 10:49 AM
Thanks! Though my context was set up correctly, you led me to think something context-wise was wrong; you were right. Apparently on OS X any OpenGL calls pertaining to setting up OpenGL must go in prepareOpenGL: in the NSOpenGLView subclass. Thanks Again!