草庐IT

c++ - 在具有专有 Nvidia 驱动程序的 Linux 上,多个 OpenGLX 渲染上下文失败

当我尝试在单个线程上运行超过128个当前OpenGLX渲染上下文时,对glXMakeCurrent的调用开始失败。Display*display=XOpenDisplay(":0")Windowroot_win=RootWindow(display,screen);Windowwin=XCreateWindow(display,root_win,...)GLXContextcontext=glXCreateContext(display,visinfo,0,True);glXMakeCurrent(display,win,context);此问题仅发生在专有Nvidia驱动程序和Nvi

ruby - 如何在 Ruby 中创建 OpenGL 3.x 或 4.x 上下文?

我到处都看过了,但似乎没有允许创建OpenGL3/4上下文的ruby​​绑定(bind)。它不必是完整的OpenGL绑定(bind)库,只是创建OpenGL上下文的部分。更新:如果我足够绝望,我将使用ruby​​ffi进行部分glfwruby​​绑定(bind)。所以请把我从那个中救出来;) 最佳答案 我编写了一个库,可以在大多数平台(前提是支持)上创建OpenGL3或4上下文。它叫做Ray.您不必使用它的可绘制系统或DSL,您可以只使用它来创建一个窗口和一个OpenGL上下文。Ray::GL.major_version=3Ray:

c++ - 生成带三角条的平面

生成顶点列表以使用三角形带绘制平面的最佳算法是什么?我正在寻找一个函数,它接收平面的宽度和高度并返回一个包含正确索引顶点的float组。宽度表示每行的顶点数。height表示每列的顶点数。float*getVertices(intwidth,intheight){...}voidrender(){glEnableClientState(GL_VERTEX_ARRAY);glVertexPointer(3,GL_FLOAT,0,getVertices(width,heigth));glDrawArrays(GL_TRIANGLE_STRIP,0,width*height);glDisab

c++ - 生成带三角条的平面

生成顶点列表以使用三角形带绘制平面的最佳算法是什么?我正在寻找一个函数,它接收平面的宽度和高度并返回一个包含正确索引顶点的float组。宽度表示每行的顶点数。height表示每列的顶点数。float*getVertices(intwidth,intheight){...}voidrender(){glEnableClientState(GL_VERTEX_ARRAY);glVertexPointer(3,GL_FLOAT,0,getVertices(width,heigth));glDrawArrays(GL_TRIANGLE_STRIP,0,width*height);glDisab

c++ - 对于跨平台游戏,我是否必须使用 OpenGL 数据类型(GLint、CLchar、...)?

我有一个简短的问题。为什么OpenGL为标准类型(如int、unsignedint、char等)提供自己的数据类型?我是否必须使用它们而不是在C++数据类型中构建?例如OpenGL等价于unsignedint是GLuint并且对于c字符串有GLchar*而不是char*。 最佳答案 ForexampletheOpenGLequivalenttounsignedintisGLuint不,不是,这正是为什么在与OpenGL交互时应该使用OpenGL的数据类型。GLuint不“等同于”unsignedint。GLuint要求为32位大小。

c++ - 对于跨平台游戏,我是否必须使用 OpenGL 数据类型(GLint、CLchar、...)?

我有一个简短的问题。为什么OpenGL为标准类型(如int、unsignedint、char等)提供自己的数据类型?我是否必须使用它们而不是在C++数据类型中构建?例如OpenGL等价于unsignedint是GLuint并且对于c字符串有GLchar*而不是char*。 最佳答案 ForexampletheOpenGLequivalenttounsignedintisGLuint不,不是,这正是为什么在与OpenGL交互时应该使用OpenGL的数据类型。GLuint不“等同于”unsignedint。GLuint要求为32位大小。

c++ - 如何将 std::string 传递给 glShaderSource?

我有以下代码:glShaderSource(shader,1,(constchar**)data.c_str(),NULL);但这会使我的程序崩溃。如何将std::string转换为constchar**?我也试过(constchar**)&但它说“需要左值”,我不明白。当我使用此代码时它工作正常:constchar*data="somecode";glShaderSource(shader,1,&data,NULL);但我不能直接从std::string让它工作。我可以为它分配一个新的char数组,但这不是很好的代码。我也试过constGLchar但显然没有区别。

c++ - 如何将 std::string 传递给 glShaderSource?

我有以下代码:glShaderSource(shader,1,(constchar**)data.c_str(),NULL);但这会使我的程序崩溃。如何将std::string转换为constchar**?我也试过(constchar**)&但它说“需要左值”,我不明白。当我使用此代码时它工作正常:constchar*data="somecode";glShaderSource(shader,1,&data,NULL);但我不能直接从std::string让它工作。我可以为它分配一个新的char数组,但这不是很好的代码。我也试过constGLchar但显然没有区别。

c++ - 粒子系统的点 Sprite

点精灵是构建粒子系统的最佳选择吗?新版OpenGL和最新图形卡的驱动程序中是否存在点精灵?还是应该使用vbo和glsl来做? 最佳答案 点精灵确实非常适合粒子系统。但是它们与VBO和GLSL没有任何关系,这意味着它们是完全正交的功能。无论是否使用点精灵,都必须始终使用VBO上载几何图形,无论它们只是点,预制精灵还是其他任何东西,并且始终必须通过一组着色器将此几何图形放置(在现代OpenGL中)当然)。话虽如此,点子精灵在现代OpenGL中得到了很好的支持,只是不像旧的固定功能方法那样自动获得。不支持点衰减功能,这些功能可让您根据点到

c++ - 粒子系统的点 Sprite

点精灵是构建粒子系统的最佳选择吗?新版OpenGL和最新图形卡的驱动程序中是否存在点精灵?还是应该使用vbo和glsl来做? 最佳答案 点精灵确实非常适合粒子系统。但是它们与VBO和GLSL没有任何关系,这意味着它们是完全正交的功能。无论是否使用点精灵,都必须始终使用VBO上载几何图形,无论它们只是点,预制精灵还是其他任何东西,并且始终必须通过一组着色器将此几何图形放置(在现代OpenGL中)当然)。话虽如此,点子精灵在现代OpenGL中得到了很好的支持,只是不像旧的固定功能方法那样自动获得。不支持点衰减功能,这些功能可让您根据点到