我正在尝试使用函数
获取EnvironmentMapbool 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 *&”这样的参数?
关于我应该向哪个方向寻求的任何建议?
答案 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