博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[OpenGL] glVertexAttribPointer函数与glVertexAttribIPointer函数使用中遇到的小坑(int类型被自动转换为float类型)...
阅读量:6714 次
发布时间:2019-06-25

本文共 1391 字,大约阅读时间需要 4 分钟。

起因:用OpenGL ES的特性,在GPU上实现图象处理中常用的查表映射功能(LookUp Table Map)。

 

这是一个工作量在五天以内的小项目(简单分为三个部分:一、分配顶点数组,二、写着色器,三、利用变换反馈把结果取回内存。)

本应该自己来做。但是凑巧有个算法移植到CUDA平台的工作在手,于是就拜托公司一位比较熟悉OpenGL ES的实习生来做,先第一部分和第三部分,第二部分可以暂时以一个简单的着色器来替代,先把整个框架搭起来。

 

过了三天,自己手头的事情做好了。就问他做的怎么样,有没有遇到什么问题。小伙子说,框架搭好了,但是遇到了一个百思不得其解的问题,传进去着色器的-1,没做任何改变,纯粹地返回,但是在读出来的时候总是-1082130432。(其中int类型的数字-1是表中较常出现的数字。)

 

简单review了一下,代码大致没什么问题。

 

排查-1变成-1082130432的问题。

 

用以下代码测试

float f = -1.0f;

printf("%d\n", *(int*)&f);

得到的输出结果就是-1082130432。

所以很明显,在传入着色器的过程当中,int类型的-1被转化成了float类型的-1,所以我们在读取以int类型再去读取它的时候,就读出了-1082130432这个数字。

bug定位好了之后,就开始排查数据进入着色器的过程中是否出现了问题。

 

最后发现,小伙子用了glVertexAttribPointer函数来指定每个顶点的属性,但是这个函数在normalized属性被设置为GL_FALSE时,非float类型的数值将被转换成float类型。于是int类型的-1就被转换成了float类型。

改用glVertexAttribIPointer函数,bug解决。

 

OpenGL ES 3中的glVertexAttribPointer与glVertexAttribIPointer的文档摘录如下:

For glVertexAttribPointer, if normalized is set to GL_TRUE, it indicates that values stored in an integer format are to be mapped to the range [-1,1] (for signed values) or [0,1] (for unsigned values) when they are accessed and converted to floating point. Otherwise, values will be converted to floats directly without normalization.

For glVertexAttribIPointer, only the integer types GL_BYTEGL_UNSIGNED_BYTEGL_SHORTGL_UNSIGNED_SHORTGL_INTGL_UNSIGNED_INT are accepted. Values are always left as integer values.

 

转载于:https://www.cnblogs.com/nipan/p/5244859.html

你可能感兴趣的文章
文献管理与信息分析》第二讲作业
查看>>
java 遍历arrayList的四种方法
查看>>
根据不同的产品id获得不同的下拉选项 (option传多值)
查看>>
css3新增属性:多列(column)
查看>>
redis 主从配置和集群配置
查看>>
手机3D游戏开发:自定义Joystick的相关设置和脚本源码
查看>>
java 数组偶数排在奇数前面
查看>>
window.frames["detailFrm"].isSubmitting = true;//?起什么作用
查看>>
ASCII表
查看>>
idea之debug
查看>>
什么是真正的流程管理?流程管理的是与不是。
查看>>
SEO实践:SEO友好的URL结构
查看>>
洛谷P1613 跑路
查看>>
无论所有题,一定要先分析清楚,所有eade case和逻辑都满足后,再动笔
查看>>
softlayer
查看>>
python各种模块,迭代器,生成器
查看>>
CSS颜色
查看>>
Lunar Lander 月球冒险
查看>>
复习日记-xml/tomcat/response/request
查看>>
Java 关键字final的一小结
查看>>