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.








Stratos es un servicio gratuito, cuyos costes se cubren en parte con la publicidad.
Por favor, desactiva el bloqueador de anuncios en esta web para ayudar a que siga adelante.
Muchísimas gracias.