Android ios opengl es在干净C上渲染纹理

Android ios opengl es在干净C上渲染纹理,android,ios,c,opengl-es,textures,Android,Ios,C,Opengl Es,Textures,对不起,我的英语不好 我想在干净的C上画纹理,没有目标C! 有必要为ios/android编写一个库 我画 - (BOOL)createFramebuffer{ glGenFramebuffersOES(1, &viewFramebuffer); glGenRenderbuffersOES(1, &viewRenderbuffer); glBindFramebufferOES(GL_FRAMEBUFFER_OES, viewFramebuffer); glBindRenderb

对不起,我的英语不好 我想在干净的C上画纹理,没有目标C! 有必要为ios/android编写一个库

我画

- (BOOL)createFramebuffer{
glGenFramebuffersOES(1, &viewFramebuffer);
glGenRenderbuffersOES(1, &viewRenderbuffer);

glBindFramebufferOES(GL_FRAMEBUFFER_OES, viewFramebuffer);
glBindRenderbufferOES(GL_RENDERBUFFER_OES, viewRenderbuffer);

[context renderbufferStorage:GL_RENDERBUFFER_OES fromDrawable:(id<EAGLDrawable>)self.layer];//a string
glFramebufferRenderbufferOES(GL_FRAMEBUFFER_OES, GL_COLOR_ATTACHMENT0_OES, GL_RENDERBUFFER_OES, viewRenderbuffer);

glGetRenderbufferParameterivOES(GL_RENDERBUFFER_OES, GL_RENDERBUFFER_WIDTH_OES, &backingWidth);
glGetRenderbufferParameterivOES(GL_RENDERBUFFER_OES, GL_RENDERBUFFER_HEIGHT_OES, &backingHeight);

if(glCheckFramebufferStatusOES(GL_FRAMEBUFFER_OES) != GL_FRAMEBUFFER_COMPLETE_OES) {
    NSLog(@"failed to make complete framebuffer object %x", glCheckFramebufferStatusOES(GL_FRAMEBUFFER_OES));
    return NO;
}

return YES;
}

- (void)drawView {


[EAGLContext setCurrentContext:context];//a string

glClearColor(0.0f, 0.0f, 0.0f, 1.0f);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glEnable(GL_TEXTURE_2D);
glBindTexture(GL_TEXTURE_2D, spriteTexture);

Byte *byteData = (Byte*)malloc(3686400);
memcpy(byteData, [texData bytes]+kon, 3686400);
glTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, 1280, 720, GL_RGBA, GL_UNSIGNED_BYTE, byteData);
free(byteData);

glDrawArrays(GL_TRIANGLE_STRIP, 0, 4);

glBindRenderbufferOES(GL_RENDERBUFFER_OES, viewRenderbuffer);
[context presentRenderbuffer:GL_RENDERBUFFER_OES];//a string
}
-(BOOL)createFramebuffer{
glGenFramebuffersOES(1,&viewFramebuffer);
glGenRenderbuffersOES(1,&viewRenderbuffer);
glBindFramebufferOES(GL_FRAMEBUFFER_OES,viewFramebuffer);
glBindRenderbufferOES(GL_RENDERBUFFER_OES,viewRenderbuffer);
[context renderbufferStorage:GL_RENDERBUFFER_OES fromDrawable:(id)self.layer];//一个字符串
glFramebufferRenderbufferOES(GL_FRAMEBUFFER_OES、GL_COLOR_ATTACHMENT0_OES、GL_RENDERBUFFER_OES、viewRenderbuffer);
GLGetRenderBuffer参数(GL_RENDERBUFFER_OES、GL_RENDERBUFFER_WIDTH_OES和backingWidth);
GLGetRenderBuffer参数(GL_RENDERBUFFER_OES、GL_RENDERBUFFER_HEIGHT_OES和衬垫高度);
如果(glCheckFramebufferStatusOES(GL\u FRAMEBUFFER\u OES)!=GL\u FRAMEBUFFER\u COMPLETE\u OES){
NSLog(@“无法生成完整的帧缓冲区对象%x”,glCheckFramebufferStatusOES(GL_framebuffer_OES));
返回否;
}
返回YES;
}
-(无效)drawView{
[EagleContext setCurrentContext:context];//字符串
glClearColor(0.0f、0.0f、0.0f、1.0f);
glClear(GL_颜色_缓冲_位| GL_深度_缓冲_位);
glEnable(GL_纹理_2D);
glBindTexture(GL_TEXTURE_2D,spriteTexture);
字节*字节数据=(字节*)malloc(3686400);
memcpy(字节数据,[texData字节]+kon,3686400);
glTexSubImage2D(GL_纹理_2D、0、0、1280、720、GL_RGBA、GL_无符号_字节、字节数据);
免费(byteData);
gldrawArray(GL_三角带,0,4);
glBindRenderbufferOES(GL_RENDERBUFFER_OES,viewRenderbuffer);
[context presentRenderbuffer:GL_RENDERBUFFER_OES];//字符串
}
如何摆脱这些与目标c相关的线条

1 [context renderbufferStorage:GL_RENDERBUFFER_OES fromDrawable:(id<EAGLDrawable>)self.layer];
2 [EAGLContext setCurrentContext:context];
3 [context presentRenderbuffer:GL_RENDERBUFFER_OES];</code>
1[context renderbufferStorage:GL_RENDERBUFFER_OES fromDrawable:(id)self.layer];
2[EAGLContext setCurrentContext:context];
3[上下文提示缓冲:GL_RENDERBUFFER_OES]

您不能,但仍然可以在iOS中将此渲染到屏幕。EAGLContext是一个Objective-C对象,用于管理OpenGL ES上下文,您需要与它交互以渲染和显示场景


但是,您可以将对此的访问包装到一个函数中,该函数根据您的目标平台更改其内容。编译器条件可以帮助您做到这一点。

既然您已经标记了android,那么您之所以尝试这样做,是因为您想让代码同时在android和ios中工作?@user1881371-我不知道您在说什么。同样,您只需要将对它的引用封装在函数中,这些函数在编译时根据您的目标平台进行更改。创建EAGLContext对象到objective-c,但在c中使用它,作为参数传递到库中,库将绘制