hey guys, writing custom view doing opengles rendering. got working when had view in interface builder , set class rendering view, switched creating view initwithframe. (note can set background color of view , see can't render in opengl not clear color) seems getting called , layer class seems ok reason not work outside of directly creating interfacebuilder. ideas?
i have setup code:
+ (class) layerclass { return [caeagllayer class]; } - (id)initwithcoder:(nscoder*)coder { if (self = [super initwithcoder:coder]) { [self setupview]; } return self; } - (id)initwithframe:(cgrect)frame { if (self = [super initwithframe:frame]) { [self setupview]; } return self; } - (void)setupview { caeagllayer *eagllayer = (caeagllayer *)self.layer; eagllayer.opaque = yes; eagllayer.drawableproperties = [nsdictionary dictionarywithobjectsandkeys: [nsnumber numberwithbool:no], keagldrawablepropertyretainedbacking, keaglcolorformatrgba8, keagldrawablepropertycolorformat, nil]; _context = [[eaglcontext alloc] initwithapi:keaglrenderingapiopengles2]; if (!_context || ![eaglcontext setcurrentcontext:_context]) { nslog(@"error not set context"); [self release]; } _displaylink = [cadisplaylink displaylinkwithtarget:self selector:@selector(renderview:)]; _displaylink.paused = yes; _displaylink.frameinterval = fps; [_displaylink addtorunloop:[nsrunloop mainrunloop] formode:nsdefaultrunloopmode]; [eaglcontext setcurrentcontext:_context]; [self setup]; }
and layout code.
- (void)layoutsubviews { [eaglcontext setcurrentcontext:_context]; [self destroybuffers]; if (![self createbuffers]){ nslog(@"failed create framebuffer!"); } [self resumerendering]; }
and rendering code:
- (void)renderview:(cadisplaylink*)sender { [eaglcontext setcurrentcontext:_context]; glbindframebuffer(gl_framebuffer, _viewframebuffer); glclearcolor(0.5, 0.5, 0.5, 1.0); glclear(gl_color_buffer_bit | gl_depth_buffer_bit); glenum attachments[] = {gl_depth_attachment, gl_color_attachment0}; gldiscardframebufferext(gl_read_framebuffer_apple, 2, attachments); glbindrenderbuffer(gl_renderbuffer, _viewrenderbuffer); [_context presentrenderbuffer:gl_renderbuffer]; }
i can't figure out why nothing rendering same things getting called. if can me out awesome!
i maybe speculating here switching ib initwithframe has step omitted, loadview in viewcontroller, instantiate custom view class instead of standard view class.
Comments
Post a Comment