在多功能C ++中访问对象

时间:2018-08-27 10:15:08

标签: c++ function object

我通过创建新函数mainloop函数从循环中分离出来。现在,我遇到了一个问题,我在main中创建的某些对象无法在loop中访问。在loop中创建多个函数参数不是一种选择,因为对于每个Shader和其他对象,它将以类似30个参数的形式结束,并包含更多的参数。因此,我将对象设置为全局对象:

main.cpp

Shader light("Shaders/light.shader");
Shader depth("Shaders/depth.shader");

Shader.cpp

Shader::Shader(const std::string& filePath)
{
  source = parseShader(filePath);
  if (shaderGeometry) 
     ID = createShader(source.vertexSource, source.fragmentSource, source.geometrySource);
  else 
     ID = createShader(source.vertexSource, source.fragmentSource);

  use();
}

这里的问题是解析函数外部的文件路径会导致在以下位置出现异常

int Shader::createShader(const std::string& vertexShader, const std::string& fragmentShader)
{
program = glCreateProgram(); //<-- HERE
//some further code...
}

vertexShaderfragmentShader可以正确解析,因此没有问题。 我猜想抛出了exception,因为需要在之前加载GL函数指针的函数内部创建着色器。

我尝试玩extern。但是像这样的东西只会留下一个编译错误:

全局变量

extern Shader light;
extern Shader depth;

在功能上

int main()
{
Window wnd(width, height);
Shader light("Shaders/light.shader");
Shader depth("Shaders/depth.shader");
wnd.loop();
//some further code
return 0;
}

extern Shader light切换到Metod并反转会导致与以前相同的错误。 我也许可以使用getter方法和某种可以保护每个顶点,片段和几何体Shader的Array访问着色器,但是也许有一种更简单的方法,我只是错过了一些东西。

0 个答案:

没有答案