2015-02-17 46 views
0

我被我的麻烦指的:OpenGL红皮书示例中的代码无效。我该如何解决?

OpenGL的编程指南:官方指南学习的OpenGL 4.3版

在第8版

例2.4在一个名为统一块初始化变量制服:

我tryed编译此代码示例,但得到的编译错误(与那本书的每一个例子,直到如今)

我没能后发现其他人有这个问题(在我发现错误来源后,我眼里有什么奇怪的东西),我试图找出可能存在的问题。

 memcpy(buffer + offset[Scale], &scale, size[Scale] * TypeSize(type[Scale])); 
     memcpy(buffer + offset[Translation], &translation, size[Translation] * TypeSize(type[Translation])); 
     memcpy(buffer + offset[Rotation], &rotation, size[Rotation] * TypeSize(type[Rotation])); 
     memcpy(buffer + offset[Enabled], &enabled, size[Enabled] * TypeSize(type[Enabled])); 

这对于行导致错误,其中缓冲区声明为:GLvoid *

所以我的问题是: 为什么他们试图做一个空指针的指针算法(正如我猜测,那是什么GLvoid *是)?

而我可能必须将它转换成它正确的长度memcpyed?

因为我是openGL的新手,并且无法真正获得那个(300行)示例的上下文,以便通过我自己获得GLvoid *正在处理的内容。

任何知道这本书的人,或者至少是这个例子都能告诉我我必须将memcpy的Dst部分转换成什么吗?或者告诉我还有什么我可能做错了以及如何解决它?

+0

你正在得到什么确切的错误?试着用例如铿锵声,它的错误信息将是类似的,但可能只是提供那个单词或短语,让你更好地暗示如何解决这个问题。 – rubenvb 2015-02-17 20:20:06

+0

它简单地说:“1> c:\ users \ dhein \ documents \ visual studio 2010 \ projects \ shadergettingstarted \ shadergettingstarted \ shadergettingstarted.cpp(199):error C2036:'GLvoid *':unknown size ” – dhein 2015-02-17 20:20:44

+0

注意这可能不是与您当前的问题有任何关系......如果您使用的是Visual Studio OpenGL标头,则可以使用版本1.1。这很糟糕,但是,现实是...... euhm ......不好。您需要一些帮助程序库,以在运行时为您提供最新功能。见例如[本教程](http://www.swiftless.com/tutorials/opengl4/1-opengl-window.html),它使用GLEW来实现此目的(向下滚动并获取pdf,网站上的代码缺少所有' '在'#include'语句之后... – rubenvb 2015-02-17 20:25:15

回答

1

由于未定义大小,因此无法添加到void指针。
将其投射到char *应解决您的问题。

+0

我知道我不能。那就是我在原来的帖子中所说的。但是我的问题是关于,任何人都知道,这个例子的语言,以及他们的期望。你能否提出你的建议,“他们不想在该样本中使用Byte智能”? – dhein 2015-02-17 20:29:08

+0

你确定'buffer'不是'char *'类型吗?如果是的话,这本书是错误的,因为你[不能添加到'void *'](http://stackoverflow.com/questions/3523145/pointer-arithmetic-for-void-pointer-in-c)。 – Axalo 2015-02-17 20:33:37

+0

是的,我确定,这本书是错的。只是顺便说一句。到目前为止,我没有一个示例代码,它们在那里没有显着的错误。所以这不是一个惊喜:D这也是为什么我特别要求能够帮助我使用示例代码的人,而不是给出错误。我知道为什么会出现错误,我只是不知道作者在哪里打算做什么。 – dhein 2015-02-17 20:38:36

相关问题