尝试匹配函数参数void *&

时间:2013-12-11 22:02:21

标签: c++ opengl openscenegraph

我正在尝试使用函数

获取EnvironmentMap
bool SILVERLINING_API GetEnvironmentMap(void *&texture, int facesToRender = 6);

我正在使用OpenSceneGraph,这是一个基于OpenGL的API。功能描述说:

\ param texture指向包含多维数据集映射的特定于平台的纹理句柄的指针。在OpenGL上,这是一个GLuint;在DirectX9上它是一个LPDIRECT3DCUBETEXTURE9;在DirectX10上它是一个ID3D10ShaderResourceView *;在DirectX11上,它是一个ID3D11ShaderResourceView *。

所以我正在尝试这样的代码:

GLuint id;
silverLining->atmosphere()->GetEnvironmentMap(id);

我收到错误:“无法将参数1从'GLuint'转换为'void *&'”

也是如此
GLuint *id;
silverLining->atmosphere()->GetEnvironmentMap(id);

所以我想我正在和描述一起做这个并不起作用,也许有一些特殊的方法来处理像“void *&”这样的参数?

关于我应该向哪个方向寻求的任何建议?

1 个答案:

答案 0 :(得分:0)

C ++是强类型语言,因此您必须匹配类型。在第一次尝试你的GLuint类型的供应对象采取void *的功能。在第二个示例中,您将指向GLuint的指针提供给相同的函数。

使这项工作的唯一方法是为GetEnvironmentMap函数提供类型为void *(或可能隐式转换为它的东西)。

编辑: 如果您正在使用OpenGL,GetEnvironmentMap函数将很乐意接受指向GLuint的指针作为第一个参数,但它必须被转换(为void *)并且它必须是有效的。 可能对您有帮助的代码是

GLuint myEnvironmentMapTex;
silverLining->atmosphere()->GetEnvironmentMap((void*)&myEnvironmentMapTex);

Void *是一个指向某个内存的指针,没有人知道它是什么(它丢失了任何类型信息 - 'void == no type')。在此处阅读更多内容:pointer to void