- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
glGenFramebuffers 不分配帧缓冲区对象!我无法让这个小程序运行。
代码:
/* ----- AppDelegate.h ----- */
#import <UIKit/UIKit.h>
#import "GLView.h"
@interface AppDelegate : NSObject <UIApplicationDelegate>{
@private
UIWindow *window;
GLView *view;
}
@end
/* ----- AppDelegate.h ----- */
#import "AppDelegate.h"
@implementation AppDelegate
- (void)dealloc
{
[view release];
[window release];
[super dealloc];
}
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
CGRect frame = [[UIScreen mainScreen] bounds];
window = [[UIWindow alloc] initWithFrame:frame];
view = [[GLView alloc] initWithFrame:frame];
[window addSubview:view];
[window makeKeyAndVisible];
return YES;
}
@end
/* ----- GLView.h ----- */
#import <UIKit/UIKit.h>
#import <QuartzCore/QuartzCore.h>
#import <OpenGLES/EAGL.h>
#import <OpenGLES/ES2/gl.h>
#import <OpenGLES/ES2/glext.h>
@interface GLView : UIView{
@private
EAGLContext* context;
GLuint color_render_buffer;
GLuint depth_render_buffer;
GLuint frame_buffer;
}
-(void)render:(CADisplayLink*)displayLink;
@end
/* ----- GLView.mm ----- */
#import "GLView.h"
@implementation GLView
- (id)initWithFrame:(CGRect)frame
{
self = [super initWithFrame:frame];
if (self) {
CAEAGLLayer* eaglLayer = (CAEAGLLayer*)self.layer;
eaglLayer.opaque = YES;
context = [[EAGLContext alloc] initWithAPI:kEAGLRenderingAPIOpenGLES2];
if(!context && ![EAGLContext setCurrentContext:context]){
[self release];
return nil;
}
int width = (int)frame.size.width;
int height = (int)frame.size.height;
glGenFramebuffers(1, &frame_buffer);
glBindFramebuffer(GL_FRAMEBUFFER, frame_buffer);
if(glIsFramebuffer(frame_buffer) == GL_FALSE){
//NSLog(@"%i", frame_buffer);
NSLog(@"frame_buffer is GL_FALSE!");
}
glGenRenderbuffers(1, &color_render_buffer);
glBindRenderbuffer(GL_RENDERBUFFER, color_render_buffer);
[context renderbufferStorage:GL_RENDERBUFFER fromDrawable:eaglLayer];
if(glIsRenderbuffer(color_render_buffer) == GL_FALSE){
NSLog(@"%i", color_render_buffer);
NSLog(@"color_render_buffer is GL_FALSE");
}
glGenRenderbuffers(1, &depth_render_buffer);
glBindRenderbuffer(GL_RENDERBUFFER, depth_render_buffer);
glRenderbufferStorage(GL_RENDERBUFFER, GL_DEPTH_COMPONENT16, width, height);
if(glIsRenderbuffer(depth_render_buffer) == GL_FALSE){
NSLog(@"depth_render_buffer is GL_FALSE");
}
glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_RENDERBUFFER, color_render_buffer);
glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_RENDERBUFFER, depth_render_buffer);
if(glCheckFramebufferStatus(GL_FRAMEBUFFER) != GL_FRAMEBUFFER_COMPLETE){
#ifdef DEBUG_LOG
NSLog(@"Framebuffer is not complete!");
exit(1);
#endif
}
[[CADisplayLink displayLinkWithTarget:self selector:@selector(render:)] addToRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];
}
return self;
}
+(Class)layerClass{
return [CAEAGLLayer class];
}
-(void)dealloc{
if([EAGLContext currentContext] == context){
[EAGLContext setCurrentContext:nil];
}
[context release];
[super dealloc];
}
-(void)render:(CADisplayLink*)displayLink{
/* Rendering */
[context presentRenderbuffer:GL_RENDERBUFFER];
}
@end
我总是收到“frame_buffer is GL_FALSE!”打印到控制台... frame_buffer 始终为 0(窗口系统默认帧缓冲区)是否有任何设置需要添加到 plist?还是我遗漏了什么?
请帮忙。
最佳答案
你永远不会调用 setCurrentContext: when context != nil.
变化:
if(!context && ![EAGLContext setCurrentContext:context]){
收件人:
if(!context || ![EAGLContext setCurrentContext:context]){
关于ios - 无法使用 glGenFramebuffers 生成帧缓冲区,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13189700/
我遇到了段错误,但无法弄清楚原因。与我一起工作的人在 OSX 机器上编译和运行正确。 gdb backtrace 告诉我它来自这部分代码,特别是来自 glGenFramebuffers: //
我开始使用 OpenGL ES。我正在阅读的示例代码有很多名称以 OES 结尾的函数。 OES 后缀是什么意思?非 OES 对应项有 man pages但我找不到任何有关 *OES 函数的文档。使用非
glGenFramebuffers 不分配帧缓冲区对象!我无法让这个小程序运行。 代码: /* ----- AppDelegate.h ----- */ #import #import "GLVie
刚刚开始使用 Xcode 和 Open GL,我正在了解我的 GL View 类中的“函数 glGenFramebuffers 的隐式声明”。我正在导入 #import #import #impo
关闭。这个问题需要debugging details .它目前不接受答案。 编辑问题以包含 desired behavior, a specific problem or error, and th
我很困惑。要在 Windows 上的 OpenGL 1.x 中使用帧缓冲区对象扩展 (FBO),我应该使用哪些?: wglGetProcAddress("glGenFramebuffers"); //
我正在做一个涉及使用 glGenFramebuffers() 的 OpenGL 学习练习。但是,当我调用该函数时,似乎什么也没有发生。我创建了以下简单程序来重现该问题: #define GL_GLEX
http://www.khronos.org/opengles/sdk/docs/man/中对它们的描述几乎相同。唯一的区别是名称 最佳答案 glGenBuffers为顶点数据等创建常规缓冲区 glG
我收到此错误: "Access violation executing location 0x00000000." 当我在 Windows 上使用 GLFW + GLEW 时。 我正在使用 Windo
目前我正在处理 3D 对象渲染。在处理帧缓冲区部分时,我遇到了一些错误。 self.fbo = glGenFramebuffers(1) 每当解释器点击这一行时,它会显示以下错误 **File "C:
我是一名优秀的程序员,十分优秀!