我寫了一個類TestingView是NSOpenGLView的子類,並將其添加到通過Interface Builder中NSOpenGLView沒有Interface Builder中
@implementation TestingView
- (void)prepareOpenGL
{
[super prepareOpenGL];
glGenRenderbuffers(NumRenderbuffers, renderbuffer);
glBindRenderbuffer(GL_RENDERBUFFER, renderbuffer[Color]);
glRenderbufferStorage(GL_RENDERBUFFER, GL_RGBA, 1024, 768);
glBindRenderbuffer(GL_RENDERBUFFER, renderbuffer[Depth]);
glRenderbufferStorage(GL_RENDERBUFFER, GL_DEPTH_COMPONENT24, 1024, 768);
glGenFramebuffers(1, &framebuffer);
glBindFramebuffer(GL_DRAW_FRAMEBUFFER, framebuffer);
glFramebufferRenderbuffer(GL_DRAW_FRAMEBUFFER,
GL_COLOR_ATTACHMENT0, GL_RENDERBUFFER,
renderbuffer[Color]);
glFramebufferRenderbuffer(GL_DRAW_FRAMEBUFFER,
GL_DEPTH_ATTACHMENT, GL_RENDERBUFFER, renderbuffer[Depth]);
glEnable(GL_DEPTH_TEST);
}
- (void)show
{
glBindFramebuffer(GL_READ_FRAMEBUFFER, framebuffer);
glBindFramebuffer(GL_DRAW_FRAMEBUFFER, 0);
glViewport(0, 0, self.window.frame.size.width, self.window.frame.size.height);
glClearColor(0.0, 0.0, 0.0, 0.0);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glBlitFramebuffer(0, 0, 1024, 768, 0, 0, 1024, 768, GL_COLOR_BUFFER_BIT, GL_NEAREST);
glSwapAPPLE();
}
- (void)draw
{
/* Prepare to render into the renderbuffer */
glBindFramebuffer(GL_DRAW_FRAMEBUFFER, framebuffer);
glViewport(0, 0, 1024, 768);
/* Render into renderbuffer */
glClearColor(1.0, 1.0, 0.0, 1.0);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
}
@end
NSWindow和正常工作。但在我的第二個項目中,我不能使用Interface Builder,所以我這樣做,
TestingView *testingView = [[TestingView alloc] initWithFrame:CGRectMake(0, 0, 1024, 768)];
[self.view addSubview:testingView];
並且它不起作用。 OpengGLContext不能正確初始化。我也試過
GLuint pixAttribs[] =
{
NSOpenGLPFAWindow, // choose among pixelformats capable of rendering to windows
NSOpenGLPFAAccelerated, // require hardware-accelerated pixelformat
NSOpenGLPFADoubleBuffer, // require double-buffered pixelformat
NSOpenGLPFAColorSize, 24, // require 24 bits for color-channels
NSOpenGLPFAAlphaSize, 8, // require an 8-bit alpha channel
NSOpenGLPFADepthSize, 24, // require a 24-bit depth buffer
NSOpenGLPFAMinimumPolicy, // select a pixelformat which meets or exceeds these requirements
0
};
NSOpenGLPixelFormat *pixFormat = [[NSOpenGLPixelFormat alloc] initWithAttributes:pixAttribs];
NSOpenGLContext *context = [[NSOpenGLContext alloc] initWithFormat:pixFormat shareContext:nil];
TestingView *testingView = [[TestingView alloc] initWithFrame:CGRectMake(0, 0, 1024, 768) pixelFormat:pixFormat];
testingView.openGLContext = context;
和OpenGL仍然不起作用。如何在不使用Interface Builder的情況下將NSOpenGLView作爲子視圖添加?
我想你應該完成您的問題或刪除。 – Mark 2012-03-14 14:43:03