The*_*Way 7 iphone 64-bit shader opengl-es ios
我刚开始在OpenGL ES应用程序上使用iPhone 5S和64位架构进行测试.我看到的问题是(CGFloat)值到达着色器时出错了.我传入0.8并在调试着色器时更改为-1.58819e-23.我正在使用glUniform4fv()来传递值.我需要使用不同的数据类型吗?或者传递价值的另一种方法?当我在32位上测试时,该值很好
CGFloat brushColor[4];
brushColor[0] = 0.8;
brushColor[1] = 0.1;
brushColor[2] = 0.1;
brushColor[3] = 0.3;
glUniform4fv(program[PROGRAM_POINT].uniform[UNIFORM_VERTEX_COLOR], 1, brushColor);
Run Code Online (Sandbox Code Playgroud)
(有些人可能会注意到这是来自GLPaint演示......)
谢谢,
奥斯汀
And*_*man 12
CGFloat是一个变量typedef.在32位构建环境中,它是单精度的,在64位上它是双精度的.通常这不是一个大问题,但你正在使用glUniform4fv,这需要一个GLfloat *.

OpenGL规定,GLfloat总是一个单精度浮点值,当你使用这个函数的非指针版本时,编译器可以处理从双精度到单精度的类型降级.当您使用指针时,不会发生此行为 - OpenGL期望传递一个单精度浮点数组,但是您传递一个双精度浮点数组而没有类型转换.
你需要做的是停止使用CGFloat.相反,使用GLfloat.提供OpenGL typedef以确保从未发生过这种事情.