联系
我们
投稿
反馈
评论 返回
顶部

内容字号: 默认 大号超大号

段落设置: 段首缩进取消段首缩进

字体设置:切换到微软雅黑切换到宋体

iOS GPGPU 编程:GPU进行浮点计算并读取结果

2016-11-13 08:54 出处:互联网 人气: 评论(
夜郎社区 cooilove费洛蒙 csold小调协奏曲 dailysurveys4u dccoreprocess dehdtn djppp dolphinlighter dustondrum elin 郭晓雯 flvcd户网站

  return NO;

  free(log);

  glBindBufferBase完成Transform Feedback输出与数据缓冲区的实际绑定。

  9、进入transform feedback模式glBeginTransformFeedback(GL_POINTS);,虽然指定为点方式,实际并不看到这些点。另外,虽然只是一个GLfloat类型,而空间的点坐标需要三个分量,我们还是把它当成点看。另外,应根据业务需求使用正确的绘制模式,并与glDrawArrays保持一致。

  glUnmapBuffer(GL_ARRAY_BUFFER);

  因为不绘图,光栅化、片段着色器、深度测试等渲染管线后续操作是多余的,故禁用,节省资源。如此一次,所有统一计算单元在本应用的OpenGL ES命令列队中,都异步执行顶点着色器中的代码。值得一提的是,现代GPU已不再区分顶点处理单元和片段处理单元,它们统称统一处理单元(Uniform Process Unit),即,同一个处理单元,会先处理顶点着色器的代码,再执行片段着色器的代码。

  简单起见,这里使用glFinish()。

  2、示例实现

  NSLog(@"This application requires OpenGL ES 3.0");

  GLfloat feedback[5];

  glGetProgramInfoLog(_program, logLength, &logLength, log);

  // Create and compile vertex shader.

  ES没glGetBufferSubData,操作要曲折些。在ES,可使用glMapBufferRange映射GPU内存。

  如果只作计算,一般认为不需要被注释的内容,毕竟不做显示。然而,经测试发现也导致读不到Transform Feedback回来的结果,program、shader等都正常工作。

  glBindVertexArray(vao);

  }

  glEnable(GL_RASTERIZER_DISCARD);

  上传数据方式B、用缓冲区(Vertex Buffer Object)。

  

  现在需要映射GPU Transform Feedback缓冲区空间到CPU地址空间。桌面版GL操作起来非常方便:

  fragShaderPathname = [[NSBundle mainBundle] pathForResource:@"Shader" ofType:@"fsh"];

  free(logBuffer);

  glEnableVertexAttribArray(0);

  if (![self compileShader:&vertShader type:GL_VERTEX_SHADER file:vertShaderPathname]) {

分享给小伙伴们:
本文标签:

更多文章

相关文章

Copyright © 2002-2014 版权所有