c++ - OpenGL ES 2.0 在 C++ 中共享 esContext

标签 c++ c opengl-es embedded

我正在阅读一本看似很受欢迎的书,名为“ES 2.0 编程指南”。本书中提供了一个用于绘制三角形的简单 ES 2.0 程序的示例代码。这是给我带来编译问题的程序片段:

int Init ( ESContext *esContext )
{
   UserData *userData = esContext->userData;
    //etc... rest of the function
}

当我尝试编译时,第 3 行出现错误 C2440: 无法将 void * 转换为 UserData *

程序后面有几个错误,我怀疑可能与之相关:

   // Load the vertex/fragment shaders
   vertexShader = LoadShader ( GL_VERTEX_SHADER, vShaderStr );
   fragmentShader = LoadShader ( GL_FRAGMENT_SHADER, fShaderStr );

此处,编译器对 vShaderStr 和 fShaderStr 存在问题:GLbyte * 与 const char * 类型的参数不兼容

转换出了什么问题?为什么 esContext->userData 会出现问题?

示例代码是用 C 语言提供的。我正在尝试用 C++ 进行编译,但我不知道这到底是如何影响它的(如果是的话)。

谁能给我一些指导吗?这里是否有一个C++不支持的C组件?是否有某种 C++ 组件导致了错误?

感谢您的帮助!完整示例代码可见here

最佳答案

C 和 C++ 之间的主要不兼容性之一是类型转换。

特别是,在 C 中,您可以自由地将 void* 转换为任何其他指针类型,而无需进行强制转换。这种自由在 C++ 中不存在:您需要进行强制转换才能将 void* 转换为其他任何内容。

关于c++ - OpenGL ES 2.0 在 C++ 中共享 esContext,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16930261/

相关文章:

ios - 哪些 iOS 设备支持哪个版本的 Open GL ES

android - 防止 onPause 破坏 OpenGL 上下文

java - ActiveMQ实时配置

c++ - 在 linux 终端中运行 std::vector<double> 代码时的垃圾输出 - C++

c - Valgrind 发现内存泄漏,但我无法理解

c++ - C编译器是否有义务在内存中放置一个静态常量?

c++ - 在 std::locale 析构函数中退出时崩溃

c++ - 在 C 或 C++ 中的 3D 空间实现中从 3 个点构建圆

c++ - 具有右值引用参数的模板赋值运算符在 vs2013 和 gcc 中的行为有所不同

iphone - 如何在iphone中制作烟雾效果?