在发布模式下编译时出现奇怪的结果

时间:2011-11-26 21:37:32

标签: class opengl vector release mode

我已经编写了一个Vector类,用于我的3D"引擎"。在调试模式下编译时,它的工作方式与预期相同,但在发布模式下编译时颜色完全错误。而不是我指定的颜色,它变成了随着相机改变的纯色:s。

我拍了照片来展示它的样子:debug moderelease mode。请注意,我还使用此类来转换顶点,并且在调试和释放模式下都能正常工作。

这就是我将颜色向量传递给着色器(伪代码)的方法。

Vector3 Diffuse = Vector3(0.3f, 0.5f, 1.0f);
Vector3 Ambient = Vector3(0.3f, 0.3f, 0.3f);

Shaders.SetUniformData("AmbientColor", sizeof(float) * 3, 1, &Ambient);
Shaders.SetUniformData("DiffuseColor", sizeof(float) * 3, 1, &Diffuse);

请告诉您是否需要查看更多代码。

这是我的Vector类源代码:http://pastebin.com/spy7FWFg(必须删除http://因为我只允许发布2个超链接)。 这一直困扰我一段时间,所以任何帮助都非常感激。

编辑:好吧,我解决了!嘿,Vector类没有错,我把它发送到着色器......

事情是我有2个功能我已经将数据传递给着色器,第一个是我在第一个帖子中显示的那个,另一个(我用于实际)使用UNIFORM数组结构(自定义结构),显然在发布模式下没有工作......

抱歉浪费你的时间并感谢你的帮助=)

1 个答案:

答案 0 :(得分:0)

我同意cli_hlt,首先要寻找的是代码中任何地方未初始化的变量。另一个,虽然有些不太可能,你可能会尝试在传递它们之前将环境和漫反射颜色存储在直线float[]中:

float diffuseArray[] = { Diffuse.X,Diffuse.Y,Diffuse.Z };
float ambientArray[] = { Ambient.X,Ambient.Y,Diffuse.Z };
Shaders.SetUniformData("AmbientColor", sizeof(float) * 3, 1, ambientArray);
Shaders.SetUniformData("DiffuseColor", sizeof(float) * 3, 1, diffuseArray);

按原样,你正在(非常合理,我认为)假设所有Vector的成员变量按顺序出现在Vector对象的前12个字节中,所以传入一个指向vector应该相当于传入三个float的数组。我相信这通常是有效的,但是如果您确定在给定的代码行中发生了问题,则可能值得尝试。