我想知道,有没有很好的方法在MinGW中使用内置的__argc和__argv(就像在Visual C++中一样)(我已经包含了windows.h),或者我还需要做一些更复杂的工作来访问这些参数.我非常希望在MinGW中使用此代码(但我们并不总是得到我们想要的):
#include <windows.h>
extern int main(int argc, char* argv[]);
int WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, INT)
{
return main(__argc, __argv);
}
Run Code Online (Sandbox Code Playgroud) 简而言之,是否有简单/定义的方式以简化的方式处理函数对象/ lambdas和成员函数?
如果我理解正确,如果我使用std :: mem_fn,我需要将一个正确类型的对象传递给函数调用,即
Object o;
ftncall std::mem_fun(&Object::function);
ftncall(o);
Run Code Online (Sandbox Code Playgroud)
理想情况下,有一些方法可以"附加" o到该功能对象,也许作为一个std::weak_ptr,所以我们知道是否被删除了.例如,如果有办法模糊地做这样的事情:
Object o;
ftncall std::mem_fn(&Object::function, o); // Or maybe std::mem_fn<Object>
ftncall();
Run Code Online (Sandbox Code Playgroud)
现在,显然,这不存在(据我所知).有没有办法以这样的方式包装std :: mem_fn我不会失去std :: mem_fn的普遍性(和好看),但是可以'附加' o,并且仍然可以很好地与其他函数类型一起使用,比如std ::功能?理想情况下,我仍然可以使用operator()std :: function的方式.
目前我能想到的最好的解决方案是这样一个类:
template<class T>
class MemFunWrapper {
public:
MemFunWrapper(T* t, std::mem_fun funct) : m_t(t), m_function(funct) {}
std::mem_fun operator*() { return m_function; }
T* get() { return m_t; }
private:
T* m_t;
std::mem_fun m_function;
}
Run Code Online (Sandbox Code Playgroud)
然后你可以这样使用它:
(*MemFunWrapper)(MemFunWrapper->get(), args...);
Run Code Online (Sandbox Code Playgroud)
但这对我来说似乎相当笨拙.另外,我必须为std :: function创建一个等效的类,以便以类似的方式使用它,这似乎很愚蠢,因为我已经可以使用std :: function了.理想情况下,我也可以在不知道我是否正在调用成员函数或常规函数的情况下使用最终产品.我知道我问了很多 - 任何方向都会有所帮助.非常感谢!
我可以在单个FBO上附加不同大小的纹理,然后将其用于多个渲染目标吗?我是否需要对glViewport做一些特殊的事情才能做到这一点?假设我有一个1024x1024的纹理COLOR_ATTACHMENT0和一个512x512的纹理COLOR_ATTACHMENT1,并且我调用了glDrawBuffers(2, {COLOR_ATTACHMENT0, COLOR_ATTACHMENT1})(我意识到语法是错误的,但是你明白了...),它将在两个附件中渲染整个场景吗?我主要考虑的是,此功能的用途是能够以最高质量渲染场景,并可以一次性使用降采样版本的场景,也许使用某些蒙版或其他方式可以将其用于效果合成器/后处理。非常感谢!