我正在编写托管代码,我正在使用托管绑定(qt4dotnet)作为非托管库(Qt).偶尔,我得到一个来自Qt的AccessViolationException,但我不知道如何调试它.我甚至没有比托管/非托管边界更多地获得堆栈跟踪(这意味着我不知道Qt的哪个部分崩溃了).
顺便说一句,我在VS调试器中运行我的应用程序.
如何调试异常?
我将我的repo还原为旧提交,看看是否有错误发生.
我以为我做到了:
git checkout the_rev_number .
但根据发生的事情判断,我可能已经忘记了最后的时期.
现在git log显示相同的rev(作为我回复的那个)作为日志的开头(最上面的项).
我试图git checkout .恢复到最近的提交,但没有任何改变.我也尝试了git reset --hard HEAD,但是再一次,没有改变.
另一个线索:我可能在子目录中完成了初始恢复,然后尝试在repo根目录中返回最近的提交.
我该怎么办?
在Visual C#中,我可以根据其定义重命名实体,只需两次单击,就可以更新对该实体的所有引用.我如何在Visual C++中执行此操作?如果它不受支持,是否有另一个支持它的IDE?
请注意,在C++的情况下,我还想要自动标头/实现同步,所以我几乎不需要做重复的工作.
我开始在Qt Creator中编写一个NumberAnimation声明,并在自动完成框中得到了一些东西.其中一个是"NumberAnimation with target".这是否意味着有这样的语法:
NumberAnimation with foo {
// ...
}
Run Code Online (Sandbox Code Playgroud)
目前,每次我想切换着色器时,我都会调用此函数(简化):
void switchToShader(ShaderProgram* newProg, Mesh& mesh) {
if(m_currentProg != nullptr) {
m_currentProg->disableAttributeArray("aPos");
}
newProg->enableAttributeArray("aPos");
mesh.vertexPosBuffer()->bind();
glVertexAttribPointer(newProg->attributeLocation("aPos"), 2, GL_FLOAT, false, 0, 0);
newProg->bind();
mesh.indexBuffer()->bind();
m_currentProg = newProg;
}
Run Code Online (Sandbox Code Playgroud)
尽管如此,这似乎是不必要的低效率.
请注意,此功能仅用于支持在具有相同属性数组集的程序之间切换.
理想情况下,我的代码看起来更像这样:
ShaderProgram::ShaderProgram() {
// ...
enableAttributeArray("aPos");
glVertexAttribPointer(newProg->attributeLocation("aPos"), 2, GL_FLOAT, false, 0, 0);
}
void switchToShader(ShaderProgram* newProg, Mesh& mesh) {
mesh.vertexPosBuffer()->bind();
newProg->bind();
mesh.indexBuffer()->bind();
}
Run Code Online (Sandbox Code Playgroud)
但由于显而易见的原因,这不起作用.
请注意,我的类ShaderProgram派生自Qt的QOpenGLShaderProgram.
任何提示如何使我的代码更有效?
我知道我可以使用glBindAttribLocation强制atder数组aPos,在着色器程序初始化时,使用例如位置1,对于我的所有着色器程序,这意味着我enableAttributeArray每帧只能做一次并且可以跳过disableAttributeArray.但这有点不优雅,因为它意味着编写一些额外的代码并通过我任意选择的attrib位置.
我目前正在调查VAO.
编辑:使用glBindAttribLocation和VAO后,我的问题解决了.我的代码现在看起来像这样:
void switchToShader(ShaderProgram* newProg, Mesh& mesh) {
newProg->bind(); …Run Code Online (Sandbox Code Playgroud) .net ×1
c# ×1
c++ ×1
git ×1
git-checkout ×1
git-reset ×1
ide ×1
keyword ×1
opengl ×1
performance ×1
qml ×1
qt ×1
qtquick2 ×1
refactoring ×1
syntax ×1