Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





Xcode3, Interface Builder y OpenGL

Iniciado por swapd0, 22 de Febrero de 2011, 12:24:24 AM

« anterior - próximo »

swapd0

Hola, llevo un par de dias que me esto tirando de los pelos  :grrr:

Quiero abrir una simple ventana para dibujar en opengl y lo quiero hacer usando el interface builder (IB), tengo eso mismo pero copiando uno de los ejemplos y quitando lo que no necesito, pero lo quiero hacer yo desde cero para enterarme.

Yo sigo los siguentes pasos, por cierto uso el xcode 3.1.

- Creo un proyecto cocoa
- Si lo ejecuto sale una ventana vacia, todo ok
- Le añado un NSOpenGLView a la ventada desde el IB, lo raro es que sale en negro y en los ejemplos esta sale en azul y con un nombre en el centro. Ademas con el inspector puedo poner los parametros de inicializacion (Formato de pixel, zbuffer...) pero en los ejemplos no puedo acceder a ellos  :grrr:.
- Compilo y ejecuto y sale la ventana con un cuadrado en blanco (la ventana de opengl)
- Creo un objeto en IB llamado openGLView y le pongo el siguiente codigo, ademas selecciono el NSOpenGLView y le digo que es de la clase openGLView, pero sale igual, ademas no parece que de error

-(id)initWithFrame: (NSRect)frame
{
GLuint attribs[] =
{
NSOpenGLPFANoRecovery,
NSOpenGLPFAWindow,
NSOpenGLPFAAccelerated,
NSOpenGLPFADoubleBuffer,
NSOpenGLPFAColorSize, 24,
NSOpenGLPFAAlphaSize, 8,
NSOpenGLPFADepthSize, 24,
NSOpenGLPFAStencilSize, 8,
NSOpenGLPFAAccumSize, 0,
0
} ;

NSOpenGLPixelFormat* fmt = [[NSOpenGLPixelFormat alloc] initWithAttributes: (NSOpenGLPixelFormatAttribute*) attribs];

if (!fmt)
NSLog(@"No OpenGL pixel format");

self = [super initWithFrame:frame pixelFormat: [fmt autorelease]];
return self;
}

-(void) drawRect:(NSRect)rect
{
[[self openGLContext] makeCurrentContext];

glViewport(0, 0, (GLsizei) rect.size.width, (GLsizei) rect.size.height);

glClearColor(0, 0, 0, 0);
glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);

glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrtho(-1.0, 1.0, -1.0, 1.0, -1.0, 1.0);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();

glColor3f(1.0, 1.0, 1.0);
glBegin(GL_TRIANGLES);
glVertex2f(-0.5, -0.5);
glVertex2f( 0.5,  0.5);
glVertex2f( 0.5, -0.5);
glEnd();

[[self openGLContext] flushBuffer ];
}


¿Alguna idea?

sés

Así, a bote pronto, te puedo decir que no se ejecutará initWithFrame si lo creas desde el IB.

Para cualquier clase creada desde el IB necesitas añadir:

- (void)awakeFromNib
{
    [super awakeFromNib];

    // código de incialización
}
Soy indeciso... ¿o no?

swapd0

El initWithFrame se ejecuta porque pongo un breakpoint y se para, si pongo el awakeFromNib da un error de ejecucion.