2012-03-12 25 views
0

我的着色器隐式地将一个int转换为float,这会导致C7011警告。任何方式来抑制GLSL中的警告?

int i = 1; 
float f = i; 

我不在乎,从来不会在乎这个警告。但是,当试图调试我的着色器时,我必须通过一堆警告来发现错误。有什么办法可以抑制这些警告吗?

我试着查找#pragma的选项,但找不到任何东西。

在此先感谢。

+0

你试过了吗?float f =(float)i;'? – 2012-03-12 16:56:20

+1

@dark_charlie:这是GLSL,而不是C.这不适用于GLSL。 – 2012-03-12 17:39:44

+0

@NicolBolas它在HLSL中工作正常,我认为它可以在GLSL中工作:) – 2012-03-12 21:26:46

回答

2

不知道这是否对您有所帮助,但可以查看您正在使用的glsl版本的快速参考。根据4.20 GLSL快速参考表的第7页,在http://www.khronos.org/files/opengl42-quick-reference-card.pdf发现,你可以使用float f = float(i),我认为我不在目前可以测试的计算机上。

如果这不起作用,您可能想要查看在同一参考表的第9页上找到的intBitsToFloat函数。虽然它只存在于3.3及更高版本的glsl版本上,但如果您使用的是该版本或更高版本,它可能会为您提供所需的转换。

+0

'float(f)'工作。谢谢。我曾希望有一个不太符合语法的丑陋方法。 对于float为INT,还有精度的损失,但对于int浮动,动态范围小的损失看起来像是编译器不应该抱怨。 我想这就是事情。 – sharoz 2012-03-12 18:00:19