小编Ste*_*nov的帖子

如何调试来自本机代码的AccessViolationException

我正在编写托管代码,我正在使用托管绑定(qt4dotnet)作为非托管库(Qt).偶尔,我得到一个来自Qt的AccessViolationException,但我不知道如何调试它.我甚至没有比托管/非托管边界更多地获得堆栈跟踪(这意味着我不知道Qt的哪个部分崩溃了).

顺便说一句,我在VS调试器中运行我的应用程序.

如何调试异常?

.net c# access-violation visual-studio-2008 visual-studio

2
推荐指数
1
解决办法
2642
查看次数

恢复到旧提交后,我无法回到最近的提交

我将我的repo还原为旧提交,看看是否有错误发生.

我以为我做到了:

git checkout the_rev_number .

但根据发生的事情判断,我可能已经忘记了最后的时期.

现在git log显示相同的rev(作为我回复的那个)作为日志的开头(最上面的项).

我试图git checkout .恢复到最近的提交,但没有任何改变.我也尝试了git reset --hard HEAD,但是再一次,没有改变.

另一个线索:我可能在子目录中完成了初始恢复,然后尝试在repo根目录中返回最近的提交.

我该怎么办?

git git-checkout git-reset

2
推荐指数
1
解决办法
302
查看次数

支持VS中的C++重构(自动更新引用和头文件/ cpp)

在Visual C#中,我可以根据其定义重命名实体,只需两次单击,就可以更新对该实体的所有引用.我如何在Visual C++中执行此操作?如果它不受支持,是否有另一个支持它的IDE?

请注意,在C++的情况下,我还想要自动标头/实现同步,所以我几乎不需要做重复的工作.

c++ ide refactoring synchronization visual-studio-2008

0
推荐指数
1
解决办法
211
查看次数

QML:"带有foo的NumberAnimation"语法 - 这是什么意思?

我开始在Qt Creator中编写一个NumberAnimation声明,并在自动完成框中得到了一些东西.其中一个是"NumberAnimation with target".这是否意味着有这样的语法:

NumberAnimation with foo {
    // ...
}
Run Code Online (Sandbox Code Playgroud)

我想我之前也看过这种语法,但是我不记得它做了什么,这两个Qt doc页面都没有:[1] [2]似乎提到它.

syntax qt keyword qml qtquick2

0
推荐指数
1
解决办法
87
查看次数

使用较少的调用切换着色器程序

目前,每次我想切换着色器时,我都会调用此函数(简化):

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)

opengl performance

0
推荐指数
1
解决办法
50
查看次数