OpenGL et Quarz dans la même vue
fouf
Membre
Bijour à tous.
Alors, voila : je voudrais pouvoir faire du dessin OpenGL dans une vue où je dessine aussi avec Quartz. J'ai donc fait que ma vue soit une sous-classe de NSOpenGLView et j'ai aussi changé une partie de ma routine de dessin. Mais, comme vous vous en doutez, ca ... ne marche pas. . Le dessin via Quartz == :(renaud): dans un violon. ::). Le dessin OpenGL me donne un binz un peu zarbi : j'ai une sorte de capture de ce qui est autour de la fenêtre dans la fenêtre (ca fait un peu comme l'économiseur de Chacha).
Auriez-vous une idée de comment faire ? Ah, oui, au fait, je débute en OpenGL
Merci d'avance.
Alors, voila : je voudrais pouvoir faire du dessin OpenGL dans une vue où je dessine aussi avec Quartz. J'ai donc fait que ma vue soit une sous-classe de NSOpenGLView et j'ai aussi changé une partie de ma routine de dessin. Mais, comme vous vous en doutez, ca ... ne marche pas. . Le dessin via Quartz == :(renaud): dans un violon. ::). Le dessin OpenGL me donne un binz un peu zarbi : j'ai une sorte de capture de ce qui est autour de la fenêtre dans la fenêtre (ca fait un peu comme l'économiseur de Chacha).
Auriez-vous une idée de comment faire ? Ah, oui, au fait, je débute en OpenGL
Merci d'avance.
Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
- (void)awakeFromNib
{
int rowBytes;
rowBytes = r.size.width * 4;
//Initialise un NSBitmapImageRep
mapData = [[NSBitmapImageRep alloc] initWithBitmapDataPlanes:NULL
pixelsWide:r.size.width pixelsHigh:r.size.height
bitsPerSample:8 samplesPerPixel:4 hasAlpha:YES isPlanar:NO
colorSpaceName:NSDeviceRGBColorSpace
bytesPerRow:rowBytes bitsPerPixel:(8 * 4)];
[mapData retain];
//NSLog(@mapData size: %d, sizeof *mapData);
}
- (void)drawRect:(NSRect)aRect
{
NSRect bds = [self bounds];
int i, j, n, imageWidth = bds.size.width;
int imageHeight = bds.size.height;
/........instructions openGL..../
glFlush();
glReadPixels(0, 0, bds.size.width, bds.size.height, GL_RGBA,
GL_UNSIGNED_BYTE, [mapData bitmapData] );
base = (unsigned int *)[mapData bitmapData];
//NSBitmapImageRep a la mauvaise idée de placer l'origine des axes en haut à gauche
//ce qui met l'image résultante tête en bas
//Les boucles for la remettre à l'endroit
for(i = 0; i<imageHeight/2; i++)
for (j = 0; j<imageWidth ; j++)
{
temp = base[j+i*imageWidth];
base[j + i*imageWidth] = base[j + imageWidth * (imageHeight-i-1)];
base[j + imageWidth * (imageHeight-i-1)] = temp;
}
}
J'avais eu un problême de renversement haut-bas, mais sous 10.3 ça s'est peut-être arrangé...
Oh, non, on n'est pas obligé de faire ça, si on se crée un contexte OpenGL; Cf. le code de SickSaver http://www.objective-cocoa.org/forum/index.php?topic=1146.msg12486#msg12486
+
Chacha
C'est juste. Je remplace "il faut" par "on peut" ::)